Skip to content
This repository was archived by the owner on Jun 2, 2025. It is now read-only.

Commit f37bd29

Browse files
authored
Remove Firestore TS definitions (#52)
* ♻️ * use new firestore generic references * fixtures * write the definitions file * check in fixture
1 parent 29c3bda commit f37bd29

File tree

3 files changed

+163
-249
lines changed

3 files changed

+163
-249
lines changed

langs/ts/ts.go

Lines changed: 88 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,22 @@ func (m *Modeler) Model(schema *firemodel.Schema, sourceCoder firemodel.SourceCo
2323
}
2424
defer f.Close()
2525

26+
// d, err := os.Create("firebase.d.ts")
27+
d, err := sourceCoder.NewFile("firebase.d.ts")
28+
if err != nil {
29+
return errors.Wrapf(err, "firemodel/ts: create typescript definition file")
30+
}
31+
defer d.Close()
32+
2633
if err := tpl.Execute(f, schema); err != nil {
2734
return errors.Wrapf(err, "firemodel/ts: generating typescript")
2835
}
36+
37+
_, err = d.Write([]byte(definitions))
38+
if err != nil {
39+
return errors.Wrapf(err, "firemodel/ts: writing typescript definitions")
40+
}
41+
2942
return nil
3043
}
3144

@@ -71,7 +84,7 @@ func toTypescriptType(firetype firemodel.SchemaFieldType) string {
7184
return "firestore.Blob"
7285
case *firemodel.Reference:
7386
if firetype.T != nil {
74-
return fmt.Sprintf("DocumentReference<%s>", interfaceName(firetype.T.Name))
87+
return fmt.Sprintf("firestore.DocumentReference<%s>", interfaceName(firetype.T.Name))
7588
} else {
7689
return "firestore.DocumentReference"
7790
}
@@ -137,128 +150,6 @@ const (
137150
file = `// DO NOT EDIT - Code generated by firemodel {{firemodelVersion}}.
138151
import { firestore } from 'firebase';
139152
140-
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
141-
142-
export interface Query<DataType = firestore.DocumentData>
143-
extends firestore.Query {
144-
where(
145-
fieldPath: string | firestore.FieldPath,
146-
opStr: firestore.WhereFilterOp,
147-
value: any,
148-
): Query<DataType>;
149-
orderBy(
150-
fieldPath: string | firestore.FieldPath,
151-
directionStr?: firestore.OrderByDirection,
152-
): Query<DataType>;
153-
limit(limit: number): Query<DataType>;
154-
startAt(snapshot: DocumentSnapshot): Query<DataType>;
155-
startAt(...fieldValues: any[]): Query<DataType>;
156-
startAfter(snapshot: DocumentSnapshot): Query<DataType>;
157-
startAfter(...fieldValues: any[]): Query<DataType>;
158-
endBefore(snapshot: DocumentSnapshot): Query<DataType>;
159-
endBefore(...fieldValues: any[]): Query<DataType>;
160-
endAt(snapshot: DocumentSnapshot): Query<DataType>;
161-
endAt(...fieldValues: any[]): Query<DataType>;
162-
get(options?: firestore.GetOptions): Promise<QuerySnapshot<DataType>>;
163-
onSnapshot(observer: {
164-
next?: (snapshot: QuerySnapshot<DataType>) => void;
165-
error?: (error: Error) => void;
166-
complete?: () => void;
167-
}): () => void;
168-
onSnapshot(
169-
options: firestore.SnapshotListenOptions,
170-
observer: {
171-
next?: (snapshot: QuerySnapshot<DataType>) => void;
172-
error?: (error: Error) => void;
173-
complete?: () => void;
174-
},
175-
): () => void;
176-
onSnapshot(
177-
onNext: (snapshot: QuerySnapshot<DataType>) => void,
178-
onError?: (error: Error) => void,
179-
onCompletion?: () => void,
180-
): () => void;
181-
onSnapshot(
182-
options: firestore.SnapshotListenOptions,
183-
onNext: (snapshot: QuerySnapshot<DataType>) => void,
184-
onError?: (error: Error) => void,
185-
onCompletion?: () => void,
186-
): () => void;
187-
}
188-
189-
190-
export interface DocumentSnapshot<DataType = firestore.DocumentData>
191-
extends firestore.DocumentSnapshot {
192-
data(options?: firestore.SnapshotOptions): DataType | undefined;
193-
}
194-
export interface QueryDocumentSnapshot<DataType = firestore.DocumentData>
195-
extends firestore.QueryDocumentSnapshot {
196-
data(options?: firestore.SnapshotOptions): DataType | undefined;
197-
}
198-
export interface QuerySnapshot<DataType = firestore.DocumentData>
199-
extends firestore.QuerySnapshot {
200-
readonly docs: QueryDocumentSnapshot<DataType>[];
201-
}
202-
export interface DocumentSnapshotExpanded<DataType = firestore.DocumentData> {
203-
exists: firestore.DocumentSnapshot['exists'];
204-
ref: firestore.DocumentSnapshot['ref'];
205-
id: firestore.DocumentSnapshot['id'];
206-
metadata: firestore.DocumentSnapshot['metadata'];
207-
data: DataType;
208-
}
209-
export interface QuerySnapshotExpanded<DataType = firestore.DocumentData> {
210-
metadata: {
211-
hasPendingWrites: firestore.QuerySnapshot['metadata']['hasPendingWrites'];
212-
fromCache: firestore.QuerySnapshot['metadata']['fromCache'];
213-
};
214-
size: firestore.QuerySnapshot['size'];
215-
empty: firestore.QuerySnapshot['empty'];
216-
docs: {
217-
[docId: string]: DocumentSnapshotExpanded<DataType>;
218-
};
219-
}
220-
export interface DocumentReference<DataType = firestore.DocumentData>
221-
extends firestore.DocumentReference {
222-
set(data: DataType, options?: firestore.SetOptions): Promise<void>;
223-
get(options?: firestore.GetOptions): Promise<DocumentSnapshot<DataType>>;
224-
onSnapshot(observer: {
225-
next?: (snapshot: DocumentSnapshot<DataType>) => void;
226-
error?: (error: firestore.FirestoreError) => void;
227-
complete?: () => void;
228-
}): () => void;
229-
onSnapshot(
230-
options: firestore.SnapshotListenOptions,
231-
observer: {
232-
next?: (snapshot: DocumentSnapshot<DataType>) => void;
233-
error?: (error: Error) => void;
234-
complete?: () => void;
235-
},
236-
): () => void;
237-
onSnapshot(
238-
onNext: (snapshot: DocumentSnapshot<DataType>) => void,
239-
onError?: (error: Error) => void,
240-
onCompletion?: () => void,
241-
): () => void;
242-
onSnapshot(
243-
options: firestore.SnapshotListenOptions,
244-
onNext: (snapshot: DocumentSnapshot<DataType>) => void,
245-
onError?: (error: Error) => void,
246-
onCompletion?: () => void,
247-
): () => void;
248-
}
249-
250-
251-
252-
export interface CollectionReference<DataType = firestore.DocumentData>
253-
extends Query<DataType>,
254-
Omit<firestore.CollectionReference, keyof Query> {
255-
add(data: DataType): Promise<DocumentReference>;
256-
}
257-
export interface Collection<DataType = firestore.DocumentData> {
258-
[id: string]: DocumentSnapshotExpanded<DataType>;
259-
}
260-
261-
262153
// tslint:disable-next-line:no-namespace
263154
export namespace {{.Options | getSchemaOption "ts" "namespace" "firemodel"}} {
264155
type URL = string;
@@ -295,7 +186,7 @@ export namespace {{.Options | getSchemaOption "ts" "namespace" "firemodel"}} {
295186
{{- else }}
296187
/** TODO: Add documentation to {{.Name}} in firemodel schema. */
297188
{{- end}}
298-
{{.Name | ToLowerCamel}}: CollectionReference<{{.Type.Name | interfaceName | ToCamel}}>;
189+
{{.Name | ToLowerCamel}}: firestore.CollectionReference<{{.Type.Name | interfaceName | ToCamel}}>;
299190
{{- end}}
300191
301192
{{- range .Fields}}
@@ -352,4 +243,77 @@ export namespace {{.Options | getSchemaOption "ts" "namespace" "firemodel"}} {
352243
{{.Name}} = '{{.Name | ToScreamingSnake}}',
353244
{{- end}}
354245
}`
246+
247+
definitions = `import * as FIREBASE from 'firebase';
248+
249+
declare module 'firebase' {
250+
namespace firestore {
251+
// Snapshots
252+
export interface DocumentSnapshot<T = DocumentData> {
253+
data(options?: SnapshotOptions): D | undefined;
254+
}
255+
export interface QueryDocumentSnapshot<T = DocumentData> extends DocumentSnapshot {
256+
data(options?: SnapshotOptions): T;
257+
}
258+
export interface QuerySnapshot<T = DocumentData> {
259+
readonly docs: QueryDocumentSnapshot<T>[];
260+
forEach(callback: (result: QueryDocumentSnapshot<T>) => void, thisArg?: any): void;
261+
}
262+
263+
// References + Queries
264+
export interface DocumentReference<T = DocumentData> {
265+
onSnapshot(observer: {
266+
next?: (snapshot: DocumentSnapshot<T>) => void;
267+
error?: (error: FirestoreError) => void;
268+
complete?: () => void;
269+
}): () => void;
270+
onSnapshot(
271+
options: SnapshotListenOptions,
272+
observer: {
273+
next?: (snapshot: DocumentSnapshot<T>) => void;
274+
error?: (error: Error) => void;
275+
complete?: () => void;
276+
},
277+
): () => void;
278+
onSnapshot(
279+
onNext: (snapshot: DocumentSnapshot<T>) => void,
280+
onError?: (error: Error) => void,
281+
onCompletion?: () => void,
282+
): () => void;
283+
onSnapshot(
284+
options: SnapshotListenOptions,
285+
onNext: (snapshot: DocumentSnapshot<T>) => void,
286+
onError?: (error: Error) => void,
287+
onCompletion?: () => void,
288+
): () => void;
289+
}
290+
export interface Query<T = DocumentData> {
291+
onSnapshot(observer: {
292+
next?: (snapshot: QuerySnapshot<T>) => void;
293+
error?: (error: Error) => void;
294+
complete?: () => void;
295+
}): () => void;
296+
onSnapshot(
297+
options: SnapshotListenOptions,
298+
observer: {
299+
next?: (snapshot: QuerySnapshot<T>) => void;
300+
error?: (error: Error) => void;
301+
complete?: () => void;
302+
},
303+
): () => void;
304+
onSnapshot(
305+
onNext: (snapshot: QuerySnapshot<T>) => void,
306+
onError?: (error: Error) => void,
307+
onCompletion?: () => void,
308+
): () => void;
309+
onSnapshot(
310+
options: SnapshotListenOptions,
311+
onNext: (snapshot: QuerySnapshot<T>) => void,
312+
onError?: (error: Error) => void,
313+
onCompletion?: () => void,
314+
): () => void;
315+
}
316+
export interface CollectionReference<T = DocumentData> extends Query<T> {}
317+
}
318+
}`
355319
)
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import * as FIREBASE from 'firebase';
2+
3+
declare module 'firebase' {
4+
namespace firestore {
5+
// Snapshots
6+
export interface DocumentSnapshot<T = DocumentData> {
7+
data(options?: SnapshotOptions): D | undefined;
8+
}
9+
export interface QueryDocumentSnapshot<T = DocumentData> extends DocumentSnapshot {
10+
data(options?: SnapshotOptions): T;
11+
}
12+
export interface QuerySnapshot<T = DocumentData> {
13+
readonly docs: QueryDocumentSnapshot<T>[];
14+
forEach(callback: (result: QueryDocumentSnapshot<T>) => void, thisArg?: any): void;
15+
}
16+
17+
// References + Queries
18+
export interface DocumentReference<T = DocumentData> {
19+
onSnapshot(observer: {
20+
next?: (snapshot: DocumentSnapshot<T>) => void;
21+
error?: (error: FirestoreError) => void;
22+
complete?: () => void;
23+
}): () => void;
24+
onSnapshot(
25+
options: SnapshotListenOptions,
26+
observer: {
27+
next?: (snapshot: DocumentSnapshot<T>) => void;
28+
error?: (error: Error) => void;
29+
complete?: () => void;
30+
},
31+
): () => void;
32+
onSnapshot(
33+
onNext: (snapshot: DocumentSnapshot<T>) => void,
34+
onError?: (error: Error) => void,
35+
onCompletion?: () => void,
36+
): () => void;
37+
onSnapshot(
38+
options: SnapshotListenOptions,
39+
onNext: (snapshot: DocumentSnapshot<T>) => void,
40+
onError?: (error: Error) => void,
41+
onCompletion?: () => void,
42+
): () => void;
43+
}
44+
export interface Query<T = DocumentData> {
45+
onSnapshot(observer: {
46+
next?: (snapshot: QuerySnapshot<T>) => void;
47+
error?: (error: Error) => void;
48+
complete?: () => void;
49+
}): () => void;
50+
onSnapshot(
51+
options: SnapshotListenOptions,
52+
observer: {
53+
next?: (snapshot: QuerySnapshot<T>) => void;
54+
error?: (error: Error) => void;
55+
complete?: () => void;
56+
},
57+
): () => void;
58+
onSnapshot(
59+
onNext: (snapshot: QuerySnapshot<T>) => void,
60+
onError?: (error: Error) => void,
61+
onCompletion?: () => void,
62+
): () => void;
63+
onSnapshot(
64+
options: SnapshotListenOptions,
65+
onNext: (snapshot: QuerySnapshot<T>) => void,
66+
onError?: (error: Error) => void,
67+
onCompletion?: () => void,
68+
): () => void;
69+
}
70+
export interface CollectionReference<T = DocumentData> extends Query<T> {}
71+
}
72+
}

0 commit comments

Comments
 (0)