firetender-admin 0.13.0 → 0.13.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/dist/cjs/FiretenderCollection.js.map +1 -0
  2. package/dist/cjs/{src/FiretenderDoc.js → FiretenderDoc.js} +3 -6
  3. package/dist/cjs/FiretenderDoc.js.map +1 -0
  4. package/dist/cjs/errors.js.map +1 -0
  5. package/dist/{esm/src → cjs}/firestore-deps-admin.d.ts +1 -3
  6. package/dist/cjs/{src/firestore-deps-admin.js → firestore-deps-admin.js} +1 -5
  7. package/dist/cjs/firestore-deps-admin.js.map +1 -0
  8. package/dist/cjs/{src/firestore-deps-web.d.ts → firestore-deps-web.d.ts} +1 -2
  9. package/dist/cjs/{src/firestore-deps-web.js → firestore-deps-web.js} +1 -4
  10. package/dist/cjs/firestore-deps-web.js.map +1 -0
  11. package/dist/cjs/{src/firestore-deps.d.ts → firestore-deps.d.ts} +1 -3
  12. package/dist/cjs/{src/firestore-deps.js → firestore-deps.js} +1 -5
  13. package/dist/cjs/firestore-deps.js.map +1 -0
  14. package/dist/cjs/index.js.map +1 -0
  15. package/dist/cjs/package.json +3 -0
  16. package/dist/cjs/proxy.js.map +1 -0
  17. package/dist/cjs/timestamps.js.map +1 -0
  18. package/dist/{esm/src → cjs}/ts-helpers.d.ts +0 -3
  19. package/dist/{esm/src → cjs}/ts-helpers.js.map +1 -1
  20. package/dist/esm/FiretenderCollection.js.map +1 -0
  21. package/dist/esm/{src/FiretenderDoc.js → FiretenderDoc.js} +4 -7
  22. package/dist/esm/FiretenderDoc.js.map +1 -0
  23. package/dist/esm/errors.js.map +1 -0
  24. package/dist/{cjs/src → esm}/firestore-deps-admin.d.ts +1 -3
  25. package/dist/esm/{src/firestore-deps-admin.js → firestore-deps-admin.js} +1 -3
  26. package/dist/esm/firestore-deps-admin.js.map +1 -0
  27. package/dist/esm/{src/firestore-deps-web.d.ts → firestore-deps-web.d.ts} +1 -2
  28. package/dist/esm/{src/firestore-deps-web.js → firestore-deps-web.js} +1 -2
  29. package/dist/esm/firestore-deps-web.js.map +1 -0
  30. package/dist/esm/{src/firestore-deps.d.ts → firestore-deps.d.ts} +1 -3
  31. package/dist/esm/{src/firestore-deps.js → firestore-deps.js} +1 -3
  32. package/dist/esm/firestore-deps.js.map +1 -0
  33. package/dist/esm/index.js.map +1 -0
  34. package/dist/esm/package.json +3 -0
  35. package/dist/esm/proxy.js.map +1 -0
  36. package/dist/esm/timestamps.js.map +1 -0
  37. package/dist/{cjs/src → esm}/ts-helpers.d.ts +0 -3
  38. package/dist/esm/ts-helpers.js.map +1 -0
  39. package/package.json +13 -14
  40. package/src/FiretenderDoc.ts +4 -10
  41. package/src/firestore-deps-admin.ts +0 -4
  42. package/src/firestore-deps-web.ts +0 -2
  43. package/src/firestore-deps.ts +0 -4
  44. package/src/ts-helpers.ts +0 -10
  45. package/dist/cjs/jest.config.d.ts +0 -3
  46. package/dist/cjs/jest.config.js +0 -23
  47. package/dist/cjs/jest.config.js.map +0 -1
  48. package/dist/cjs/src/FiretenderCollection.js.map +0 -1
  49. package/dist/cjs/src/FiretenderDoc.js.map +0 -1
  50. package/dist/cjs/src/__tests__/FiretenderCollection.spec.d.ts +0 -1
  51. package/dist/cjs/src/__tests__/FiretenderCollection.spec.js +0 -332
  52. package/dist/cjs/src/__tests__/FiretenderCollection.spec.js.map +0 -1
  53. package/dist/cjs/src/__tests__/FiretenderDoc.spec.d.ts +0 -6
  54. package/dist/cjs/src/__tests__/FiretenderDoc.spec.js +0 -1400
  55. package/dist/cjs/src/__tests__/FiretenderDoc.spec.js.map +0 -1
  56. package/dist/cjs/src/__tests__/firestore-emulator.d.ts +0 -15
  57. package/dist/cjs/src/__tests__/firestore-emulator.js +0 -81
  58. package/dist/cjs/src/__tests__/firestore-emulator.js.map +0 -1
  59. package/dist/cjs/src/errors.js.map +0 -1
  60. package/dist/cjs/src/firestore-deps-admin.js.map +0 -1
  61. package/dist/cjs/src/firestore-deps-web.js.map +0 -1
  62. package/dist/cjs/src/firestore-deps.js.map +0 -1
  63. package/dist/cjs/src/index.js.map +0 -1
  64. package/dist/cjs/src/proxy.js.map +0 -1
  65. package/dist/cjs/src/timestamps.js.map +0 -1
  66. package/dist/cjs/src/ts-helpers.js.map +0 -1
  67. package/dist/esm/jest.config.d.ts +0 -3
  68. package/dist/esm/jest.config.js +0 -21
  69. package/dist/esm/jest.config.js.map +0 -1
  70. package/dist/esm/src/FiretenderCollection.js.map +0 -1
  71. package/dist/esm/src/FiretenderDoc.js.map +0 -1
  72. package/dist/esm/src/__tests__/FiretenderCollection.spec.d.ts +0 -1
  73. package/dist/esm/src/__tests__/FiretenderCollection.spec.js +0 -330
  74. package/dist/esm/src/__tests__/FiretenderCollection.spec.js.map +0 -1
  75. package/dist/esm/src/__tests__/FiretenderDoc.spec.d.ts +0 -6
  76. package/dist/esm/src/__tests__/FiretenderDoc.spec.js +0 -1398
  77. package/dist/esm/src/__tests__/FiretenderDoc.spec.js.map +0 -1
  78. package/dist/esm/src/__tests__/firestore-emulator.d.ts +0 -15
  79. package/dist/esm/src/__tests__/firestore-emulator.js +0 -75
  80. package/dist/esm/src/__tests__/firestore-emulator.js.map +0 -1
  81. package/dist/esm/src/errors.js.map +0 -1
  82. package/dist/esm/src/firestore-deps-admin.js.map +0 -1
  83. package/dist/esm/src/firestore-deps-web.js.map +0 -1
  84. package/dist/esm/src/firestore-deps.js.map +0 -1
  85. package/dist/esm/src/index.js.map +0 -1
  86. package/dist/esm/src/proxy.js.map +0 -1
  87. package/dist/esm/src/timestamps.js.map +0 -1
  88. /package/dist/cjs/{src/FiretenderCollection.d.ts → FiretenderCollection.d.ts} +0 -0
  89. /package/dist/cjs/{src/FiretenderCollection.js → FiretenderCollection.js} +0 -0
  90. /package/dist/cjs/{src/FiretenderDoc.d.ts → FiretenderDoc.d.ts} +0 -0
  91. /package/dist/cjs/{src/errors.d.ts → errors.d.ts} +0 -0
  92. /package/dist/cjs/{src/errors.js → errors.js} +0 -0
  93. /package/dist/cjs/{src/index.d.ts → index.d.ts} +0 -0
  94. /package/dist/cjs/{src/index.js → index.js} +0 -0
  95. /package/dist/cjs/{src/proxy.d.ts → proxy.d.ts} +0 -0
  96. /package/dist/cjs/{src/proxy.js → proxy.js} +0 -0
  97. /package/dist/cjs/{src/timestamps.d.ts → timestamps.d.ts} +0 -0
  98. /package/dist/cjs/{src/timestamps.js → timestamps.js} +0 -0
  99. /package/dist/cjs/{src/ts-helpers.js → ts-helpers.js} +0 -0
  100. /package/dist/esm/{src/FiretenderCollection.d.ts → FiretenderCollection.d.ts} +0 -0
  101. /package/dist/esm/{src/FiretenderCollection.js → FiretenderCollection.js} +0 -0
  102. /package/dist/esm/{src/FiretenderDoc.d.ts → FiretenderDoc.d.ts} +0 -0
  103. /package/dist/esm/{src/errors.d.ts → errors.d.ts} +0 -0
  104. /package/dist/esm/{src/errors.js → errors.js} +0 -0
  105. /package/dist/esm/{src/index.d.ts → index.d.ts} +0 -0
  106. /package/dist/esm/{src/index.js → index.js} +0 -0
  107. /package/dist/esm/{src/proxy.d.ts → proxy.d.ts} +0 -0
  108. /package/dist/esm/{src/proxy.js → proxy.js} +0 -0
  109. /package/dist/esm/{src/timestamps.d.ts → timestamps.d.ts} +0 -0
  110. /package/dist/esm/{src/timestamps.js → timestamps.js} +0 -0
  111. /package/dist/esm/{src/ts-helpers.js → ts-helpers.js} +0 -0
@@ -1,330 +0,0 @@
1
- import { z } from "zod";
2
- import { addDoc, collection, doc, FIRESTORE_DEPS_TYPE, setDoc, where, } from "../firestore-deps";
3
- import { FiretenderCollection } from "../FiretenderCollection";
4
- import { cleanupFirestoreEmulator, getFirestoreEmulator, } from "./firestore-emulator";
5
- const testSchema = z.object({
6
- foo: z.string(),
7
- bar: z.number().optional(),
8
- });
9
- const collectionName = "coltests";
10
- let firestore;
11
- beforeAll(async () => {
12
- firestore = await getFirestoreEmulator();
13
- });
14
- afterAll(cleanupFirestoreEmulator);
15
- describe("newDoc", () => {
16
- it("creates a doc with the given ID.", () => {
17
- const testCollection = new FiretenderCollection(testSchema, firestore, collectionName, { foo: "hello" });
18
- const testDoc = testCollection.newDoc("111");
19
- expect(testDoc.id).toBe("111");
20
- expect(testDoc.r).toEqual({ foo: "hello" });
21
- });
22
- it("creates a doc without an ID.", () => {
23
- const testCollection = new FiretenderCollection(testSchema, firestore, collectionName, { foo: "hello" });
24
- const testDoc = testCollection.newDoc();
25
- expect(() => testDoc.id).toThrowError();
26
- expect(testDoc.r).toEqual({ foo: "hello" });
27
- });
28
- it("creates a doc in a subcollection.", () => {
29
- const testCollection = new FiretenderCollection(testSchema, firestore, [collectionName, "subcollection"], { foo: "hello" });
30
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
31
- const testDoc = testCollection.newDoc(["abc", "xyz"]);
32
- expect(testDoc.id).toBe("xyz");
33
- expect(testDoc.docRef.path).toBe(`${collectionName}/abc/subcollection/xyz`);
34
- });
35
- it("fails if an ID for a parent collection is missing.", () => {
36
- const testCollection = new FiretenderCollection(testSchema, firestore, [collectionName, "subcollection"], { foo: "hello" });
37
- expect(() => testCollection.newDoc()).toThrowError("requires an ID");
38
- });
39
- it("merges given initial field values into the defaults.", () => {
40
- const testCollection = new FiretenderCollection(testSchema, firestore, collectionName, { foo: "hello" });
41
- const testDoc = testCollection.newDoc(undefined, { bar: 123 });
42
- expect(testDoc.r).toEqual({ foo: "hello", bar: 123 });
43
- });
44
- it("takes a factory method for the initial data.", () => {
45
- const testCollection = new FiretenderCollection(testSchema, firestore, collectionName, () => ({ foo: "hello" }));
46
- const testDoc = testCollection.newDoc(undefined, { bar: 123 });
47
- expect(testDoc.r).toEqual({ foo: "hello", bar: 123 });
48
- });
49
- it("fails in readonly mode.", () => {
50
- const testCollection = new FiretenderCollection(testSchema, firestore, collectionName, { foo: "hello" }, { readonly: true });
51
- expect(() => testCollection.newDoc()).toThrowError("Cannot create new docs in readonly mode.");
52
- });
53
- });
54
- describe("existingDoc", () => {
55
- it("wraps a doc in a collection.", () => {
56
- const testCollection = new FiretenderCollection(testSchema, firestore, collectionName, { foo: "hello" });
57
- const testDoc = testCollection.existingDoc("xyz");
58
- expect(testDoc.id).toBe("xyz");
59
- });
60
- it("wraps a doc in a subcollection.", () => {
61
- const testCollection = new FiretenderCollection(testSchema, firestore, [collectionName, "subcollection"], { foo: "hello" });
62
- const testDoc = testCollection.existingDoc(["abc", "xyz"]);
63
- expect(testDoc.id).toBe("xyz");
64
- expect(testDoc.docRef.path).toBe(`${collectionName}/abc/subcollection/xyz`);
65
- });
66
- it("fails if an ID for a parent collection is missing.", () => {
67
- const testCollection = new FiretenderCollection(testSchema, firestore, [collectionName, "subcollection"], { foo: "hello" });
68
- expect(() => testCollection.existingDoc("abc")).toThrowError("requires a full ID path");
69
- });
70
- });
71
- describe("query functions", () => {
72
- // Borrowing an example from the Firestore how-to guide ...
73
- // https://cloud.google.com/firestore/docs/how-to
74
- const citySchema = z.object({
75
- name: z.string(),
76
- state: z.string().nullable(),
77
- country: z.string(),
78
- capital: z.boolean(),
79
- population: z.number(),
80
- regions: z.array(z.string()),
81
- });
82
- const cityLandmarkSchema = z.object({
83
- name: z.string(),
84
- type: z.string(),
85
- });
86
- let cityCollection;
87
- let cityLandmarkCollection;
88
- beforeAll(async () => {
89
- const citiesRef = collection(firestore, "cities");
90
- await Promise.all([
91
- setDoc(doc(citiesRef, "SF"), {
92
- name: "San Francisco",
93
- state: "CA",
94
- country: "USA",
95
- capital: false,
96
- population: 860000,
97
- regions: ["west_coast", "norcal"],
98
- }),
99
- setDoc(doc(citiesRef, "LA"), {
100
- name: "Los Angeles",
101
- state: "CA",
102
- country: "USA",
103
- capital: false,
104
- population: 3900000,
105
- regions: ["west_coast", "socal"],
106
- }),
107
- setDoc(doc(citiesRef, "DC"), {
108
- name: "Washington, D.C.",
109
- state: null,
110
- country: "USA",
111
- capital: true,
112
- population: 680000,
113
- regions: ["east_coast"],
114
- }),
115
- setDoc(doc(citiesRef, "TOK"), {
116
- name: "Tokyo",
117
- state: null,
118
- country: "Japan",
119
- capital: true,
120
- population: 9000000,
121
- regions: ["kanto", "honshu"],
122
- }),
123
- setDoc(doc(citiesRef, "BJ"), {
124
- name: "Beijing",
125
- state: null,
126
- country: "China",
127
- capital: true,
128
- population: 21500000,
129
- regions: ["jingjinji", "hebei"],
130
- }),
131
- ]);
132
- await Promise.all([
133
- addDoc(collection(citiesRef, "SF", "landmarks"), {
134
- name: "Golden Gate Bridge",
135
- type: "bridge",
136
- }),
137
- addDoc(collection(citiesRef, "SF", "landmarks"), {
138
- name: "Legion of Honor",
139
- type: "museum",
140
- }),
141
- addDoc(collection(citiesRef, "LA", "landmarks"), {
142
- name: "Griffith Park",
143
- type: "park",
144
- }),
145
- addDoc(collection(citiesRef, "LA", "landmarks"), {
146
- name: "The Getty",
147
- type: "museum",
148
- }),
149
- addDoc(collection(citiesRef, "DC", "landmarks"), {
150
- name: "Lincoln Memorial",
151
- type: "memorial",
152
- }),
153
- addDoc(collection(citiesRef, "DC", "landmarks"), {
154
- name: "National Air and Space Museum",
155
- type: "museum",
156
- }),
157
- addDoc(collection(citiesRef, "TOK", "landmarks"), {
158
- name: "Ueno Park",
159
- type: "park",
160
- }),
161
- addDoc(collection(citiesRef, "TOK", "landmarks"), {
162
- name: "National Museum of Nature and Science",
163
- type: "museum",
164
- }),
165
- addDoc(collection(citiesRef, "BJ", "landmarks"), {
166
- name: "Jingshan Park",
167
- type: "park",
168
- }),
169
- addDoc(collection(citiesRef, "BJ", "landmarks"), {
170
- name: "Beijing Ancient Observatory",
171
- type: "museum",
172
- }),
173
- ]);
174
- cityCollection = new FiretenderCollection(citySchema, firestore, "cities", {});
175
- cityLandmarkCollection = new FiretenderCollection(cityLandmarkSchema, firestore, ["cities", "landmarks"], {});
176
- });
177
- describe("getAllDocs", () => {
178
- it("returns all docs in a collection.", async () => {
179
- const docs = await cityCollection.getAllDocs();
180
- expect(docs.length).toBe(5);
181
- expect(docs[0].r).toEqual({
182
- name: "Beijing",
183
- state: null,
184
- country: "China",
185
- capital: true,
186
- population: 21500000,
187
- regions: ["jingjinji", "hebei"],
188
- });
189
- expect(docs[4].r).toEqual({
190
- name: "Tokyo",
191
- state: null,
192
- country: "Japan",
193
- capital: true,
194
- population: 9000000,
195
- regions: ["kanto", "honshu"],
196
- });
197
- });
198
- it("fails when called on a subcollection without parent ID.", async () => {
199
- await expect(cityLandmarkCollection.getAllDocs()).rejects.toThrowError("requires the IDs of all parent collections");
200
- });
201
- it("provides context on errors.", async () => {
202
- const nonexistentCollection = new FiretenderCollection(testSchema, firestore, "no-collection-here");
203
- // Admin can read anywhere, so this test does not throw an error.
204
- if (FIRESTORE_DEPS_TYPE === "admin")
205
- return;
206
- await expect(nonexistentCollection.getAllDocs()).rejects.toThrowError();
207
- try {
208
- await nonexistentCollection.getAllDocs();
209
- }
210
- catch (error) {
211
- expect(error.firetenderContext).toEqual({
212
- call: "getDocs",
213
- ref: "no-collection-here",
214
- });
215
- }
216
- });
217
- });
218
- describe("query", () => {
219
- it("performs a simple query on a collection.", async () => {
220
- const docs = await cityCollection.query(where("population", ">=", 1e6));
221
- expect(docs.map((d) => d.r.name).sort()).toEqual([
222
- "Beijing",
223
- "Los Angeles",
224
- "Tokyo",
225
- ]);
226
- });
227
- it("performs a compound query on a collection.", async () => {
228
- const docs = await cityCollection.query(where("population", ">=", 1e6), where("regions", "array-contains", "west_coast"));
229
- expect(docs.map((d) => d.r.name).sort()).toEqual(["Los Angeles"]);
230
- });
231
- it("performs a simple query on a subcollection.", async () => {
232
- const docs = await cityLandmarkCollection.query("LA", where("type", "==", "park"));
233
- expect(docs.map((d) => d.r.name).sort()).toEqual(["Griffith Park"]);
234
- });
235
- it("takes an array for the ID path.", async () => {
236
- const docs = await cityLandmarkCollection.query(["BJ"], where("type", "==", "museum"));
237
- expect(docs.map((d) => d.r.name).sort()).toEqual([
238
- "Beijing Ancient Observatory",
239
- ]);
240
- });
241
- it("performs a simple query across a subcollection group.", async () => {
242
- const docs = await cityLandmarkCollection.query(where("type", "==", "museum"));
243
- expect(docs.map((d) => d.r.name).sort()).toEqual([
244
- "Beijing Ancient Observatory",
245
- "Legion of Honor",
246
- "National Air and Space Museum",
247
- "National Museum of Nature and Science",
248
- "The Getty",
249
- ]);
250
- });
251
- it("provides context on errors.", async () => {
252
- // Admin can read anywhere, so this test does not throw an error.
253
- if (FIRESTORE_DEPS_TYPE === "admin")
254
- return;
255
- const nonexistentCollection = new FiretenderCollection(testSchema, firestore, "no-collection-here");
256
- const whereClause = where("not-an-actual-field", "==", "foo");
257
- await expect(nonexistentCollection.query(whereClause)).rejects.toThrowError();
258
- try {
259
- await nonexistentCollection.query(whereClause);
260
- }
261
- catch (error) {
262
- expect(error.firetenderContext).toEqual({
263
- call: "getDocs",
264
- });
265
- }
266
- });
267
- });
268
- });
269
- describe("delete", () => {
270
- it("deletes a document in a collection.", async () => {
271
- const testCollection = new FiretenderCollection(testSchema, firestore, collectionName, { foo: "delete-doc-in-collection" });
272
- const testDoc = await testCollection.newDoc().write();
273
- const docsBeforeDelete = await testCollection.query(where("foo", "==", "delete-doc-in-collection"));
274
- expect(docsBeforeDelete.map((d) => d.r.foo).sort()).toEqual([
275
- "delete-doc-in-collection",
276
- ]);
277
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
278
- await testCollection.delete(testDoc.id);
279
- const docsAfterDelete = await testCollection.query(where("foo", "==", "delete-doc-in-collection"));
280
- expect(docsAfterDelete.map((d) => d.r.foo).sort()).toEqual([]);
281
- });
282
- });
283
- describe("makeCollectionRef", () => {
284
- it("throws for the wrong number of IDs", async () => {
285
- const testCollection = new FiretenderCollection(testSchema, firestore, [
286
- collectionName,
287
- "subcol-A",
288
- "subcol-B",
289
- ]);
290
- expect(() => testCollection.makeCollectionRef(["123"])).toThrowError();
291
- expect(() => testCollection.makeCollectionRef(["123", "456", "789"])).toThrowError();
292
- });
293
- it("returns a correct subcollection ref", async () => {
294
- const testCollection = new FiretenderCollection(testSchema, firestore, [
295
- collectionName,
296
- "subcol-A",
297
- "subcol-B",
298
- ]);
299
- const ref = testCollection.makeCollectionRef(["123", "456"]);
300
- expect(ref.path).toBe("coltests/123/subcol-A/456/subcol-B");
301
- });
302
- it("returns a correct top-level collection ref", async () => {
303
- const testCollection = new FiretenderCollection(testSchema, firestore, [
304
- collectionName,
305
- ]);
306
- const ref = testCollection.makeCollectionRef();
307
- expect(ref.path).toBe("coltests");
308
- });
309
- });
310
- describe("makeDocRef", () => {
311
- it("throws for the wrong number of IDs", async () => {
312
- const testCollection = new FiretenderCollection(testSchema, firestore, [
313
- collectionName,
314
- "subcol-A",
315
- "subcol-B",
316
- ]);
317
- expect(() => testCollection.makeDocRef(["123", "456"])).toThrowError();
318
- expect(() => testCollection.makeDocRef(["123", "456", "789", "abc"])).toThrowError();
319
- });
320
- it("returns an appropriate doc ref", async () => {
321
- const testCollection = new FiretenderCollection(testSchema, firestore, [
322
- collectionName,
323
- "subcol-A",
324
- "subcol-B",
325
- ]);
326
- const ref = testCollection.makeDocRef(["123", "456", "789"]);
327
- expect(ref.path).toBe("coltests/123/subcol-A/456/subcol-B/789");
328
- });
329
- });
330
- //# sourceMappingURL=FiretenderCollection.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FiretenderCollection.spec.js","sourceRoot":"","sources":["../../../../src/__tests__/FiretenderCollection.spec.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- /**
2
- * Start before testing: firebase emulators:start --project=firetender
3
- *
4
- * TODO: #5 zod effects and preprocessing, but disallowing transforms
5
- */
6
- export {};