firetender 0.8.4 → 0.9.0
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.
- package/dist/FiretenderCollection.js +14 -2
- package/dist/FiretenderCollection.js.map +1 -1
- package/dist/FiretenderDoc.js +29 -4
- package/dist/FiretenderDoc.js.map +1 -1
- package/dist/errors.d.ts +11 -0
- package/dist/errors.js +23 -1
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +4 -18
- package/dist/index.js.map +1 -1
- package/dist/timestamps.d.ts +30 -0
- package/dist/timestamps.js +33 -0
- package/dist/timestamps.js.map +1 -0
- package/package.json +1 -1
- package/src/FiretenderCollection.ts +18 -3
- package/src/FiretenderDoc.ts +32 -9
- package/src/errors.ts +29 -0
- package/src/index.ts +3 -4
- package/src/timestamps.ts +32 -0
- package/dist/Timestamps.d.ts +0 -27
- package/dist/Timestamps.js +0 -38
- package/dist/Timestamps.js.map +0 -1
- package/src/Timestamps.ts +0 -38
|
@@ -140,7 +140,12 @@ class FiretenderCollection {
|
|
|
140
140
|
if (!ref) {
|
|
141
141
|
throw new errors_1.FiretenderUsageError("delete() requires the full ID path of the target document.");
|
|
142
142
|
}
|
|
143
|
-
|
|
143
|
+
try {
|
|
144
|
+
await (0, firestore_1.deleteDoc)(ref);
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
(0, errors_1.addContextToError)(error, "deleteDoc", ref);
|
|
148
|
+
}
|
|
144
149
|
}
|
|
145
150
|
/**
|
|
146
151
|
* Returns a document reference for the specified ID.
|
|
@@ -197,7 +202,14 @@ class FiretenderCollection {
|
|
|
197
202
|
* FiretenderDoc objects.
|
|
198
203
|
*/
|
|
199
204
|
async getAndWrapDocs(query) {
|
|
200
|
-
|
|
205
|
+
let querySnapshot;
|
|
206
|
+
try {
|
|
207
|
+
querySnapshot = await (0, firestore_1.getDocs)(query);
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
(0, errors_1.addContextToError)(error, "getDocs", query instanceof firestore_1.CollectionReference ? query : undefined);
|
|
211
|
+
throw error;
|
|
212
|
+
}
|
|
201
213
|
return querySnapshot.docs.map((queryDoc) => new FiretenderDoc_1.FiretenderDoc(this.schema, queryDoc.ref, {
|
|
202
214
|
initialData: queryDoc.data(),
|
|
203
215
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FiretenderCollection.js","sourceRoot":"","sources":["../src/FiretenderCollection.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"FiretenderCollection.js","sourceRoot":"","sources":["../src/FiretenderCollection.ts"],"names":[],"mappings":"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"}
|
package/dist/FiretenderDoc.js
CHANGED
|
@@ -196,7 +196,14 @@ class FiretenderDoc {
|
|
|
196
196
|
}
|
|
197
197
|
else {
|
|
198
198
|
this.resolvesWaitingForLoad = [];
|
|
199
|
-
|
|
199
|
+
let snapshot;
|
|
200
|
+
try {
|
|
201
|
+
snapshot = await (0, firestore_1.getDoc)(this.ref);
|
|
202
|
+
}
|
|
203
|
+
catch (error) {
|
|
204
|
+
(0, errors_1.addContextToError)(error, "getDoc", this.ref);
|
|
205
|
+
throw error;
|
|
206
|
+
}
|
|
200
207
|
if (!snapshot.exists()) {
|
|
201
208
|
const error = new errors_1.FiretenderIOError(`Document does not exist: "${this.ref.path}"`);
|
|
202
209
|
this.resolvesWaitingForLoad.forEach((wait) => wait.reject(error));
|
|
@@ -256,10 +263,22 @@ class FiretenderDoc {
|
|
|
256
263
|
if (this.isSettingNewContents) {
|
|
257
264
|
(0, ts_helpers_1.assertIsDefined)(this.data);
|
|
258
265
|
if (this.ref.type === "document") {
|
|
259
|
-
|
|
266
|
+
try {
|
|
267
|
+
await (0, firestore_1.setDoc)(this.ref, this.data);
|
|
268
|
+
}
|
|
269
|
+
catch (error) {
|
|
270
|
+
(0, errors_1.addContextToError)(error, "setDoc", this.ref, this.data);
|
|
271
|
+
throw error;
|
|
272
|
+
}
|
|
260
273
|
}
|
|
261
274
|
else {
|
|
262
|
-
|
|
275
|
+
try {
|
|
276
|
+
this.ref = await (0, firestore_1.addDoc)(this.ref, this.data);
|
|
277
|
+
}
|
|
278
|
+
catch (error) {
|
|
279
|
+
(0, errors_1.addContextToError)(error, "addDoc", this.ref, this.data);
|
|
280
|
+
throw error;
|
|
281
|
+
}
|
|
263
282
|
this.docID = this.ref.path.split("/").pop(); // ID is last part of path.
|
|
264
283
|
}
|
|
265
284
|
this.isSettingNewContents = false;
|
|
@@ -274,7 +293,13 @@ class FiretenderDoc {
|
|
|
274
293
|
if (this.updates.size > 0) {
|
|
275
294
|
// updateDoc() takes alternating field path and field value parameters.
|
|
276
295
|
const flatUpdateList = Array.from(this.updates.entries()).flat();
|
|
277
|
-
|
|
296
|
+
try {
|
|
297
|
+
await (0, firestore_1.updateDoc)(this.ref, flatUpdateList[0], flatUpdateList[1], ...flatUpdateList.slice(2));
|
|
298
|
+
}
|
|
299
|
+
catch (error) {
|
|
300
|
+
(0, errors_1.addContextToError)(error, "updateDoc", this.ref, flatUpdateList);
|
|
301
|
+
throw error;
|
|
302
|
+
}
|
|
278
303
|
this.updates.clear();
|
|
279
304
|
}
|
|
280
305
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FiretenderDoc.js","sourceRoot":"","sources":["../src/FiretenderDoc.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"FiretenderDoc.js","sourceRoot":"","sources":["../src/FiretenderDoc.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CollectionReference, DocumentReference } from "firebase/firestore";
|
|
1
2
|
export declare class FiretenderError extends Error {
|
|
2
3
|
}
|
|
3
4
|
/**
|
|
@@ -17,3 +18,13 @@ export declare class FiretenderUsageError extends FiretenderError {
|
|
|
17
18
|
*/
|
|
18
19
|
export declare class FiretenderInternalError extends FiretenderError {
|
|
19
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Adds a "firetenderContext" property to the given error.
|
|
23
|
+
*
|
|
24
|
+
* @param error the error to which the context is added. If `error` is not an
|
|
25
|
+
* object, this call does not modify it.
|
|
26
|
+
* @param call the name of the Firestore function in which the error occurred.
|
|
27
|
+
* @param ref the path of the target document or collection, if any.
|
|
28
|
+
* @param data arbitrary data associated with this call.
|
|
29
|
+
*/
|
|
30
|
+
export declare function addContextToError(error: any, call: string, ref?: DocumentReference | CollectionReference, data?: any): void;
|
package/dist/errors.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FiretenderInternalError = exports.FiretenderUsageError = exports.FiretenderIOError = exports.FiretenderError = void 0;
|
|
3
|
+
exports.addContextToError = exports.FiretenderInternalError = exports.FiretenderUsageError = exports.FiretenderIOError = exports.FiretenderError = void 0;
|
|
4
4
|
class FiretenderError extends Error {
|
|
5
5
|
}
|
|
6
6
|
exports.FiretenderError = FiretenderError;
|
|
@@ -24,4 +24,26 @@ exports.FiretenderUsageError = FiretenderUsageError;
|
|
|
24
24
|
class FiretenderInternalError extends FiretenderError {
|
|
25
25
|
}
|
|
26
26
|
exports.FiretenderInternalError = FiretenderInternalError;
|
|
27
|
+
/**
|
|
28
|
+
* Adds a "firetenderContext" property to the given error.
|
|
29
|
+
*
|
|
30
|
+
* @param error the error to which the context is added. If `error` is not an
|
|
31
|
+
* object, this call does not modify it.
|
|
32
|
+
* @param call the name of the Firestore function in which the error occurred.
|
|
33
|
+
* @param ref the path of the target document or collection, if any.
|
|
34
|
+
* @param data arbitrary data associated with this call.
|
|
35
|
+
*/
|
|
36
|
+
function addContextToError(error, call, ref, data) {
|
|
37
|
+
if (typeof error !== "object") {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
error.firetenderContext = { call };
|
|
41
|
+
if (ref) {
|
|
42
|
+
error.firetenderContext.ref = ref.path;
|
|
43
|
+
}
|
|
44
|
+
if (data !== undefined) {
|
|
45
|
+
error.firetenderContext.data = data;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.addContextToError = addContextToError;
|
|
27
49
|
//# sourceMappingURL=errors.js.map
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAEA,MAAa,eAAgB,SAAQ,KAAK;CAAG;AAA7C,0CAA6C;AAE7C;;;GAGG;AACH,MAAa,iBAAkB,SAAQ,eAAe;CAAG;AAAzD,8CAAyD;AAEzD;;;GAGG;AACH,MAAa,oBAAqB,SAAQ,eAAe;CAAG;AAA5D,oDAA4D;AAE5D;;GAEG;AACH,MAAa,uBAAwB,SAAQ,eAAe;CAAG;AAA/D,0DAA+D;AAE/D;;;;;;;;GAQG;AACH,SAAgB,iBAAiB,CAC/B,KAAU,EACV,IAAY,EACZ,GAA6C,EAC7C,IAAU;IAEV,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,OAAO;KACR;IACD,KAAK,CAAC,iBAAiB,GAAG,EAAE,IAAI,EAAE,CAAC;IACnC,IAAI,GAAG,EAAE;QACP,KAAK,CAAC,iBAAiB,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC;KACxC;IACD,IAAI,IAAI,KAAK,SAAS,EAAE;QACtB,KAAK,CAAC,iBAAiB,CAAC,IAAI,GAAG,IAAI,CAAC;KACrC;AACH,CAAC;AAhBD,8CAgBC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,5 +2,5 @@ import { FiretenderError, FiretenderInternalError, FiretenderIOError, Firetender
|
|
|
2
2
|
import { FiretenderCollection } from "./FiretenderCollection";
|
|
3
3
|
import type { FiretenderDocOptions } from "./FiretenderDoc";
|
|
4
4
|
import { FiretenderDoc } from "./FiretenderDoc";
|
|
5
|
-
|
|
6
|
-
export
|
|
5
|
+
import { futureTimestampDays, timestampSchema } from "./timestamps";
|
|
6
|
+
export { FiretenderCollection, FiretenderDoc, FiretenderDocOptions, FiretenderError, FiretenderInternalError, FiretenderIOError, FiretenderUsageError, futureTimestampDays, timestampSchema, };
|
package/dist/index.js
CHANGED
|
@@ -1,20 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.FiretenderUsageError = exports.FiretenderIOError = exports.FiretenderInternalError = exports.FiretenderError = exports.FiretenderDoc = exports.FiretenderCollection = void 0;
|
|
3
|
+
exports.timestampSchema = exports.futureTimestampDays = exports.FiretenderUsageError = exports.FiretenderIOError = exports.FiretenderInternalError = exports.FiretenderError = exports.FiretenderDoc = exports.FiretenderCollection = void 0;
|
|
18
4
|
const errors_1 = require("./errors");
|
|
19
5
|
Object.defineProperty(exports, "FiretenderError", { enumerable: true, get: function () { return errors_1.FiretenderError; } });
|
|
20
6
|
Object.defineProperty(exports, "FiretenderInternalError", { enumerable: true, get: function () { return errors_1.FiretenderInternalError; } });
|
|
@@ -24,7 +10,7 @@ const FiretenderCollection_1 = require("./FiretenderCollection");
|
|
|
24
10
|
Object.defineProperty(exports, "FiretenderCollection", { enumerable: true, get: function () { return FiretenderCollection_1.FiretenderCollection; } });
|
|
25
11
|
const FiretenderDoc_1 = require("./FiretenderDoc");
|
|
26
12
|
Object.defineProperty(exports, "FiretenderDoc", { enumerable: true, get: function () { return FiretenderDoc_1.FiretenderDoc; } });
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
13
|
+
const timestamps_1 = require("./timestamps");
|
|
14
|
+
Object.defineProperty(exports, "futureTimestampDays", { enumerable: true, get: function () { return timestamps_1.futureTimestampDays; } });
|
|
15
|
+
Object.defineProperty(exports, "timestampSchema", { enumerable: true, get: function () { return timestamps_1.timestampSchema; } });
|
|
30
16
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,qCAKkB;AAUhB,gGAdA,wBAAe,OAcA;AACf,wGAdA,gCAAuB,OAcA;AACvB,kGAdA,0BAAiB,OAcA;AACjB,qGAdA,6BAAoB,OAcA;AAZtB,iEAA8D;AAM5D,qGANO,2CAAoB,OAMP;AAJtB,mDAAgD;AAK9C,8FALO,6BAAa,OAKP;AAJf,6CAAoE;AAUlE,oGAVO,gCAAmB,OAUP;AACnB,gGAX4B,4BAAe,OAW5B"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { FieldValue, Timestamp } from "firebase/firestore";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
/**
|
|
4
|
+
* Timestamp representation used by Firestore: seconds and nanoseconds since the
|
|
5
|
+
* epoch.
|
|
6
|
+
*/
|
|
7
|
+
export declare const timestampSchema: z.ZodUnion<[z.ZodEffects<z.ZodObject<{
|
|
8
|
+
seconds: z.ZodNumber;
|
|
9
|
+
nanoseconds: z.ZodNumber;
|
|
10
|
+
}, "strip", z.ZodTypeAny, {
|
|
11
|
+
seconds: number;
|
|
12
|
+
nanoseconds: number;
|
|
13
|
+
}, {
|
|
14
|
+
seconds: number;
|
|
15
|
+
nanoseconds: number;
|
|
16
|
+
}>, Timestamp, {
|
|
17
|
+
seconds: number;
|
|
18
|
+
nanoseconds: number;
|
|
19
|
+
}>, z.ZodType<FieldValue, z.ZodTypeDef, FieldValue>]>;
|
|
20
|
+
/**
|
|
21
|
+
* Returns a Firestore Timestamp for some future date. The result is typically
|
|
22
|
+
* used for writing TTLs.
|
|
23
|
+
*
|
|
24
|
+
* The client's clock (specifically `Date.now()`) is used to generate the
|
|
25
|
+
* timestamp. For TTLs days in the future, this is generally not a concern.
|
|
26
|
+
* However, this function should not be depended on for short offsets.
|
|
27
|
+
*
|
|
28
|
+
* @param daysFromNow days in the future to set this Timestamp.
|
|
29
|
+
*/
|
|
30
|
+
export declare function futureTimestampDays(daysFromNow: number): Timestamp;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.futureTimestampDays = exports.timestampSchema = void 0;
|
|
4
|
+
const firestore_1 = require("firebase/firestore");
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
/**
|
|
7
|
+
* Timestamp representation used by Firestore: seconds and nanoseconds since the
|
|
8
|
+
* epoch.
|
|
9
|
+
*/
|
|
10
|
+
exports.timestampSchema = zod_1.z.union([
|
|
11
|
+
zod_1.z
|
|
12
|
+
.object({
|
|
13
|
+
seconds: zod_1.z.number().positive().int(),
|
|
14
|
+
nanoseconds: zod_1.z.number().nonnegative().int(),
|
|
15
|
+
})
|
|
16
|
+
.transform(({ seconds, nanoseconds }) => new firestore_1.Timestamp(seconds, nanoseconds)),
|
|
17
|
+
zod_1.z.custom((value) => value._methodName === "serverTimestamp"),
|
|
18
|
+
]);
|
|
19
|
+
/**
|
|
20
|
+
* Returns a Firestore Timestamp for some future date. The result is typically
|
|
21
|
+
* used for writing TTLs.
|
|
22
|
+
*
|
|
23
|
+
* The client's clock (specifically `Date.now()`) is used to generate the
|
|
24
|
+
* timestamp. For TTLs days in the future, this is generally not a concern.
|
|
25
|
+
* However, this function should not be depended on for short offsets.
|
|
26
|
+
*
|
|
27
|
+
* @param daysFromNow days in the future to set this Timestamp.
|
|
28
|
+
*/
|
|
29
|
+
function futureTimestampDays(daysFromNow) {
|
|
30
|
+
return firestore_1.Timestamp.fromMillis(Date.now() + daysFromNow * 24 * 60 * 60 * 1000);
|
|
31
|
+
}
|
|
32
|
+
exports.futureTimestampDays = futureTimestampDays;
|
|
33
|
+
//# sourceMappingURL=timestamps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timestamps.js","sourceRoot":"","sources":["../src/timestamps.ts"],"names":[],"mappings":";;;AAAA,kDAA2D;AAC3D,6BAAwB;AAExB;;;GAGG;AACU,QAAA,eAAe,GAAG,OAAC,CAAC,KAAK,CAAC;IACrC,OAAC;SACE,MAAM,CAAC;QACN,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE;QACpC,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE;KAC5C,CAAC;SACD,SAAS,CACR,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,IAAI,qBAAS,CAAC,OAAO,EAAE,WAAW,CAAC,CAClE;IACH,OAAC,CAAC,MAAM,CAAa,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,KAAK,iBAAiB,CAAC;CAC9E,CAAC,CAAC;AAEH;;;;;;;;;GASG;AACH,SAAgB,mBAAmB,CAAC,WAAmB;IACrD,OAAO,qBAAS,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAC9E,CAAC;AAFD,kDAEC"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "firetender",
|
|
3
3
|
"displayName": "Firetender",
|
|
4
4
|
"description": "Typescript wrapper for Firestore documents",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.9.0",
|
|
6
6
|
"author": "Jake Hartman",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"homepage": "https://github.com/jakes-space/firetender",
|
|
@@ -10,10 +10,11 @@ import {
|
|
|
10
10
|
Query,
|
|
11
11
|
query,
|
|
12
12
|
QueryConstraint,
|
|
13
|
+
QuerySnapshot,
|
|
13
14
|
} from "firebase/firestore";
|
|
14
15
|
import { z } from "zod";
|
|
15
16
|
|
|
16
|
-
import { FiretenderUsageError } from "./errors";
|
|
17
|
+
import { addContextToError, FiretenderUsageError } from "./errors";
|
|
17
18
|
import { FiretenderDoc, FiretenderDocOptions } from "./FiretenderDoc";
|
|
18
19
|
import { DeepPartial } from "./ts-helpers";
|
|
19
20
|
|
|
@@ -198,7 +199,11 @@ export class FiretenderCollection<SchemaType extends z.SomeZodObject> {
|
|
|
198
199
|
"delete() requires the full ID path of the target document."
|
|
199
200
|
);
|
|
200
201
|
}
|
|
201
|
-
|
|
202
|
+
try {
|
|
203
|
+
await deleteDoc(ref);
|
|
204
|
+
} catch (error) {
|
|
205
|
+
addContextToError(error, "deleteDoc", ref);
|
|
206
|
+
}
|
|
202
207
|
}
|
|
203
208
|
|
|
204
209
|
/**
|
|
@@ -275,7 +280,17 @@ export class FiretenderCollection<SchemaType extends z.SomeZodObject> {
|
|
|
275
280
|
private async getAndWrapDocs(
|
|
276
281
|
query: CollectionReference | Query
|
|
277
282
|
): Promise<FiretenderDoc<SchemaType>[]> {
|
|
278
|
-
|
|
283
|
+
let querySnapshot: QuerySnapshot;
|
|
284
|
+
try {
|
|
285
|
+
querySnapshot = await getDocs(query);
|
|
286
|
+
} catch (error) {
|
|
287
|
+
addContextToError(
|
|
288
|
+
error,
|
|
289
|
+
"getDocs",
|
|
290
|
+
query instanceof CollectionReference ? query : undefined
|
|
291
|
+
);
|
|
292
|
+
throw error;
|
|
293
|
+
}
|
|
279
294
|
return querySnapshot.docs.map(
|
|
280
295
|
(queryDoc) =>
|
|
281
296
|
new FiretenderDoc(this.schema, queryDoc.ref, {
|
package/src/FiretenderDoc.ts
CHANGED
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
CollectionReference,
|
|
5
5
|
doc,
|
|
6
6
|
DocumentReference,
|
|
7
|
+
DocumentSnapshot,
|
|
7
8
|
getDoc,
|
|
8
9
|
setDoc,
|
|
9
10
|
updateDoc,
|
|
@@ -11,6 +12,7 @@ import {
|
|
|
11
12
|
import { z } from "zod";
|
|
12
13
|
|
|
13
14
|
import {
|
|
15
|
+
addContextToError,
|
|
14
16
|
FiretenderInternalError,
|
|
15
17
|
FiretenderIOError,
|
|
16
18
|
FiretenderUsageError,
|
|
@@ -297,7 +299,13 @@ export class FiretenderDoc<SchemaType extends z.SomeZodObject> {
|
|
|
297
299
|
});
|
|
298
300
|
} else {
|
|
299
301
|
this.resolvesWaitingForLoad = [];
|
|
300
|
-
|
|
302
|
+
let snapshot: DocumentSnapshot;
|
|
303
|
+
try {
|
|
304
|
+
snapshot = await getDoc(this.ref);
|
|
305
|
+
} catch (error) {
|
|
306
|
+
addContextToError(error, "getDoc", this.ref);
|
|
307
|
+
throw error;
|
|
308
|
+
}
|
|
301
309
|
if (!snapshot.exists()) {
|
|
302
310
|
const error = new FiretenderIOError(
|
|
303
311
|
`Document does not exist: "${this.ref.path}"`
|
|
@@ -372,9 +380,19 @@ export class FiretenderDoc<SchemaType extends z.SomeZodObject> {
|
|
|
372
380
|
if (this.isSettingNewContents) {
|
|
373
381
|
assertIsDefined(this.data);
|
|
374
382
|
if (this.ref.type === "document") {
|
|
375
|
-
|
|
383
|
+
try {
|
|
384
|
+
await setDoc(this.ref, this.data);
|
|
385
|
+
} catch (error) {
|
|
386
|
+
addContextToError(error, "setDoc", this.ref, this.data);
|
|
387
|
+
throw error;
|
|
388
|
+
}
|
|
376
389
|
} else {
|
|
377
|
-
|
|
390
|
+
try {
|
|
391
|
+
this.ref = await addDoc(this.ref, this.data);
|
|
392
|
+
} catch (error: any) {
|
|
393
|
+
addContextToError(error, "addDoc", this.ref, this.data);
|
|
394
|
+
throw error;
|
|
395
|
+
}
|
|
378
396
|
this.docID = this.ref.path.split("/").pop(); // ID is last part of path.
|
|
379
397
|
}
|
|
380
398
|
this.isSettingNewContents = false;
|
|
@@ -391,12 +409,17 @@ export class FiretenderDoc<SchemaType extends z.SomeZodObject> {
|
|
|
391
409
|
if (this.updates.size > 0) {
|
|
392
410
|
// updateDoc() takes alternating field path and field value parameters.
|
|
393
411
|
const flatUpdateList = Array.from(this.updates.entries()).flat();
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
412
|
+
try {
|
|
413
|
+
await updateDoc(
|
|
414
|
+
this.ref,
|
|
415
|
+
flatUpdateList[0],
|
|
416
|
+
flatUpdateList[1],
|
|
417
|
+
...flatUpdateList.slice(2)
|
|
418
|
+
);
|
|
419
|
+
} catch (error: any) {
|
|
420
|
+
addContextToError(error, "updateDoc", this.ref, flatUpdateList);
|
|
421
|
+
throw error;
|
|
422
|
+
}
|
|
400
423
|
this.updates.clear();
|
|
401
424
|
}
|
|
402
425
|
}
|
package/src/errors.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { CollectionReference, DocumentReference } from "firebase/firestore";
|
|
2
|
+
|
|
1
3
|
export class FiretenderError extends Error {}
|
|
2
4
|
|
|
3
5
|
/**
|
|
@@ -16,3 +18,30 @@ export class FiretenderUsageError extends FiretenderError {}
|
|
|
16
18
|
* Something went wrong internally. These errors indicate a bug in Firetender.
|
|
17
19
|
*/
|
|
18
20
|
export class FiretenderInternalError extends FiretenderError {}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Adds a "firetenderContext" property to the given error.
|
|
24
|
+
*
|
|
25
|
+
* @param error the error to which the context is added. If `error` is not an
|
|
26
|
+
* object, this call does not modify it.
|
|
27
|
+
* @param call the name of the Firestore function in which the error occurred.
|
|
28
|
+
* @param ref the path of the target document or collection, if any.
|
|
29
|
+
* @param data arbitrary data associated with this call.
|
|
30
|
+
*/
|
|
31
|
+
export function addContextToError(
|
|
32
|
+
error: any,
|
|
33
|
+
call: string,
|
|
34
|
+
ref?: DocumentReference | CollectionReference,
|
|
35
|
+
data?: any
|
|
36
|
+
) {
|
|
37
|
+
if (typeof error !== "object") {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
error.firetenderContext = { call };
|
|
41
|
+
if (ref) {
|
|
42
|
+
error.firetenderContext.ref = ref.path;
|
|
43
|
+
}
|
|
44
|
+
if (data !== undefined) {
|
|
45
|
+
error.firetenderContext.data = data;
|
|
46
|
+
}
|
|
47
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
import { FiretenderCollection } from "./FiretenderCollection";
|
|
8
8
|
import type { FiretenderDocOptions } from "./FiretenderDoc";
|
|
9
9
|
import { FiretenderDoc } from "./FiretenderDoc";
|
|
10
|
+
import { futureTimestampDays, timestampSchema } from "./timestamps";
|
|
10
11
|
|
|
11
12
|
export {
|
|
12
13
|
FiretenderCollection,
|
|
@@ -16,8 +17,6 @@ export {
|
|
|
16
17
|
FiretenderInternalError,
|
|
17
18
|
FiretenderIOError,
|
|
18
19
|
FiretenderUsageError,
|
|
20
|
+
futureTimestampDays,
|
|
21
|
+
timestampSchema,
|
|
19
22
|
};
|
|
20
|
-
|
|
21
|
-
// TODO #6, #9, #10: stop using a direct export after the timestamp module gets
|
|
22
|
-
// cleaned up.
|
|
23
|
-
export * from "./Timestamps";
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { FieldValue, Timestamp } from "firebase/firestore";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Timestamp representation used by Firestore: seconds and nanoseconds since the
|
|
6
|
+
* epoch.
|
|
7
|
+
*/
|
|
8
|
+
export const timestampSchema = z.union([
|
|
9
|
+
z
|
|
10
|
+
.object({
|
|
11
|
+
seconds: z.number().positive().int(),
|
|
12
|
+
nanoseconds: z.number().nonnegative().int(),
|
|
13
|
+
})
|
|
14
|
+
.transform(
|
|
15
|
+
({ seconds, nanoseconds }) => new Timestamp(seconds, nanoseconds)
|
|
16
|
+
),
|
|
17
|
+
z.custom<FieldValue>((value: any) => value._methodName === "serverTimestamp"),
|
|
18
|
+
]);
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Returns a Firestore Timestamp for some future date. The result is typically
|
|
22
|
+
* used for writing TTLs.
|
|
23
|
+
*
|
|
24
|
+
* The client's clock (specifically `Date.now()`) is used to generate the
|
|
25
|
+
* timestamp. For TTLs days in the future, this is generally not a concern.
|
|
26
|
+
* However, this function should not be depended on for short offsets.
|
|
27
|
+
*
|
|
28
|
+
* @param daysFromNow days in the future to set this Timestamp.
|
|
29
|
+
*/
|
|
30
|
+
export function futureTimestampDays(daysFromNow: number) {
|
|
31
|
+
return Timestamp.fromMillis(Date.now() + daysFromNow * 24 * 60 * 60 * 1000);
|
|
32
|
+
}
|
package/dist/Timestamps.d.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
/**
|
|
3
|
-
* Timestamp representation used by Firestore: seconds and nanoseconds since the
|
|
4
|
-
* epoch.
|
|
5
|
-
*/
|
|
6
|
-
export declare const timestampSchema: z.ZodObject<{
|
|
7
|
-
seconds: z.ZodNumber;
|
|
8
|
-
nanoseconds: z.ZodNumber;
|
|
9
|
-
}, "strip", z.ZodTypeAny, {
|
|
10
|
-
seconds: number;
|
|
11
|
-
nanoseconds: number;
|
|
12
|
-
}, {
|
|
13
|
-
seconds: number;
|
|
14
|
-
nanoseconds: number;
|
|
15
|
-
}>;
|
|
16
|
-
export type TimestampData = z.infer<typeof timestampSchema>;
|
|
17
|
-
export declare function dateFromTimestamp(timestamp: TimestampData): Date;
|
|
18
|
-
export declare function makeTTL(daysFromNow?: number): {
|
|
19
|
-
seconds: number;
|
|
20
|
-
nanoseconds: number;
|
|
21
|
-
};
|
|
22
|
-
export declare function timestampFromDate(date: Date): TimestampData;
|
|
23
|
-
export declare function timestampFromUnixMillis(msSinceEpoch: number): TimestampData;
|
|
24
|
-
export declare function nowTimestamp(): {
|
|
25
|
-
seconds: number;
|
|
26
|
-
nanoseconds: number;
|
|
27
|
-
};
|
package/dist/Timestamps.js
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.nowTimestamp = exports.timestampFromUnixMillis = exports.timestampFromDate = exports.makeTTL = exports.dateFromTimestamp = exports.timestampSchema = void 0;
|
|
4
|
-
const zod_1 = require("zod");
|
|
5
|
-
/**
|
|
6
|
-
* Timestamp representation used by Firestore: seconds and nanoseconds since the
|
|
7
|
-
* epoch.
|
|
8
|
-
*/
|
|
9
|
-
exports.timestampSchema = zod_1.z.object({
|
|
10
|
-
seconds: zod_1.z.number().positive().int(),
|
|
11
|
-
nanoseconds: zod_1.z.number().nonnegative().int(),
|
|
12
|
-
});
|
|
13
|
-
function dateFromTimestamp(timestamp) {
|
|
14
|
-
return new Date(timestamp.seconds * 1e3 + timestamp.nanoseconds / 1e6);
|
|
15
|
-
}
|
|
16
|
-
exports.dateFromTimestamp = dateFromTimestamp;
|
|
17
|
-
function makeTTL(daysFromNow = 30) {
|
|
18
|
-
// TODO: #10 is there a way to use the server time rather than Date.now()?
|
|
19
|
-
return timestampFromUnixMillis(Date.now() + daysFromNow * 24 * 60 * 60 * 1000);
|
|
20
|
-
}
|
|
21
|
-
exports.makeTTL = makeTTL;
|
|
22
|
-
function timestampFromDate(date) {
|
|
23
|
-
return timestampFromUnixMillis(date.getTime());
|
|
24
|
-
}
|
|
25
|
-
exports.timestampFromDate = timestampFromDate;
|
|
26
|
-
function timestampFromUnixMillis(msSinceEpoch) {
|
|
27
|
-
return {
|
|
28
|
-
seconds: Math.floor(msSinceEpoch / 1000),
|
|
29
|
-
nanoseconds: Math.floor((msSinceEpoch % 1000) * 1000000),
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
exports.timestampFromUnixMillis = timestampFromUnixMillis;
|
|
33
|
-
function nowTimestamp() {
|
|
34
|
-
// TODO: #9 is there a way to use the server time rather than Date.now()?
|
|
35
|
-
return timestampFromUnixMillis(Date.now());
|
|
36
|
-
}
|
|
37
|
-
exports.nowTimestamp = nowTimestamp;
|
|
38
|
-
//# sourceMappingURL=Timestamps.js.map
|
package/dist/Timestamps.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Timestamps.js","sourceRoot":"","sources":["../src/Timestamps.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAExB;;;GAGG;AACU,QAAA,eAAe,GAAG,OAAC,CAAC,MAAM,CAAC;IACtC,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE;IACpC,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE;CAC5C,CAAC,CAAC;AAGH,SAAgB,iBAAiB,CAAC,SAAwB;IACxD,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,GAAG,GAAG,SAAS,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC;AACzE,CAAC;AAFD,8CAEC;AAED,SAAgB,OAAO,CAAC,WAAW,GAAG,EAAE;IACtC,0EAA0E;IAC1E,OAAO,uBAAuB,CAC5B,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAC/C,CAAC;AACJ,CAAC;AALD,0BAKC;AAED,SAAgB,iBAAiB,CAAC,IAAU;IAC1C,OAAO,uBAAuB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AACjD,CAAC;AAFD,8CAEC;AAED,SAAgB,uBAAuB,CAAC,YAAoB;IAC1D,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;QACxC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC;KACzD,CAAC;AACJ,CAAC;AALD,0DAKC;AAED,SAAgB,YAAY;IAC1B,yEAAyE;IACzE,OAAO,uBAAuB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7C,CAAC;AAHD,oCAGC"}
|
package/src/Timestamps.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Timestamp representation used by Firestore: seconds and nanoseconds since the
|
|
5
|
-
* epoch.
|
|
6
|
-
*/
|
|
7
|
-
export const timestampSchema = z.object({
|
|
8
|
-
seconds: z.number().positive().int(),
|
|
9
|
-
nanoseconds: z.number().nonnegative().int(),
|
|
10
|
-
});
|
|
11
|
-
export type TimestampData = z.infer<typeof timestampSchema>;
|
|
12
|
-
|
|
13
|
-
export function dateFromTimestamp(timestamp: TimestampData): Date {
|
|
14
|
-
return new Date(timestamp.seconds * 1e3 + timestamp.nanoseconds / 1e6);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export function makeTTL(daysFromNow = 30) {
|
|
18
|
-
// TODO: #10 is there a way to use the server time rather than Date.now()?
|
|
19
|
-
return timestampFromUnixMillis(
|
|
20
|
-
Date.now() + daysFromNow * 24 * 60 * 60 * 1000
|
|
21
|
-
);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export function timestampFromDate(date: Date): TimestampData {
|
|
25
|
-
return timestampFromUnixMillis(date.getTime());
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export function timestampFromUnixMillis(msSinceEpoch: number): TimestampData {
|
|
29
|
-
return {
|
|
30
|
-
seconds: Math.floor(msSinceEpoch / 1000),
|
|
31
|
-
nanoseconds: Math.floor((msSinceEpoch % 1000) * 1000000),
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export function nowTimestamp() {
|
|
36
|
-
// TODO: #9 is there a way to use the server time rather than Date.now()?
|
|
37
|
-
return timestampFromUnixMillis(Date.now());
|
|
38
|
-
}
|