@mxpicture/gcp-functions-backend 1.1.9 → 1.1.11
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/api/BackendApi.d.ts.map +1 -1
- package/dist/api/BackendApi.js +6 -4
- package/dist/api/BackendApi.js.map +1 -1
- package/dist/api/IBackendApi.d.ts +3 -1
- package/dist/api/IBackendApi.d.ts.map +1 -1
- package/dist/api/IBackendApi.js +4 -1
- package/dist/api/IBackendApi.js.map +1 -1
- package/dist/api/index.d.ts +1 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +1 -0
- package/dist/api/index.js.map +1 -1
- package/dist/api/tmp.date.d.ts +26 -0
- package/dist/api/tmp.date.d.ts.map +1 -0
- package/dist/api/tmp.date.js +74 -0
- package/dist/api/tmp.date.js.map +1 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BackendApi.d.ts","sourceRoot":"","sources":["../../src/api/BackendApi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,OAAO,EACP,aAAa,EACb,UAAU,EACV,UAAU,EACV,WAAW,EACX,SAAS,EACV,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"BackendApi.d.ts","sourceRoot":"","sources":["../../src/api/BackendApi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,OAAO,EACP,aAAa,EACb,UAAU,EACV,UAAU,EACV,WAAW,EACX,SAAS,EACV,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C;;;;;;;;;;GAUG;AACH,qBAAa,UAAU,CACrB,GAAG,SAAS,YAAY,EACxB,KAAK,SAAS,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,EACrC,GAAG,SAAS,UAAU,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAE7C,SAAQ,WAAW,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CACnC,YAAW,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAEzC;;;;;OAKG;IACU,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,IAAI,CAAA;KAAE,CAAC;IAKrE;;;;;OAKG;IACU,GAAG,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAI7D;;;;;OAKG;IACU,KAAK,CAAC,OAAO,CAAC,EAAE,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;IAKvE;;;;;OAKG;IACU,KAAK,CAAC,OAAO,CAAC,EAAE,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAI1E;;;;;OAKG;IACU,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IAIvE;;;;;;OAMG;IACU,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAKpE;;;;;;OAMG;IACU,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;CAO3E"}
|
package/dist/api/BackendApi.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { IBackendApi } from "./IBackendApi.js";
|
|
2
|
+
import { tmpToDatesDeep } from "./tmp.date.js";
|
|
2
3
|
/**
|
|
3
4
|
* Backend API providing standard CRUD operations for a document type.
|
|
4
5
|
*
|
|
@@ -28,7 +29,7 @@ export class BackendApi extends IBackendApi {
|
|
|
28
29
|
* @returns The document including its key metadata.
|
|
29
30
|
*/
|
|
30
31
|
async get(request) {
|
|
31
|
-
return this.store().get(request.id);
|
|
32
|
+
return tmpToDatesDeep(this.store().get(request.id), this.datePaths);
|
|
32
33
|
}
|
|
33
34
|
/**
|
|
34
35
|
* Query documents with optional filters.
|
|
@@ -37,7 +38,8 @@ export class BackendApi extends IBackendApi {
|
|
|
37
38
|
* @returns An array of documents matching the filter criteria.
|
|
38
39
|
*/
|
|
39
40
|
async query(request) {
|
|
40
|
-
|
|
41
|
+
const items = await this.store().query(request?.filters);
|
|
42
|
+
return tmpToDatesDeep(items, this.datePaths);
|
|
41
43
|
}
|
|
42
44
|
/**
|
|
43
45
|
* Count documents matching optional filter criteria.
|
|
@@ -66,7 +68,7 @@ export class BackendApi extends IBackendApi {
|
|
|
66
68
|
*/
|
|
67
69
|
async create(request) {
|
|
68
70
|
const result = this.validation().validate(request);
|
|
69
|
-
return this.store().create(result);
|
|
71
|
+
return tmpToDatesDeep(this.store().create(result), this.datePaths);
|
|
70
72
|
}
|
|
71
73
|
/**
|
|
72
74
|
* Update an existing document after validating the partial input.
|
|
@@ -77,7 +79,7 @@ export class BackendApi extends IBackendApi {
|
|
|
77
79
|
*/
|
|
78
80
|
async update(request) {
|
|
79
81
|
const result = this.validation().validatePartial(request);
|
|
80
|
-
return this.store().update(request.id, result);
|
|
82
|
+
return tmpToDatesDeep(this.store().update(request.id, result), this.datePaths);
|
|
81
83
|
}
|
|
82
84
|
}
|
|
83
85
|
//# sourceMappingURL=BackendApi.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BackendApi.js","sourceRoot":"","sources":["../../src/api/BackendApi.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C;;;;;;;;;;GAUG;AACH,MAAM,OAAO,UAKX,SAAQ,WAA4B;IAGpC;;;;;OAKG;IACI,KAAK,CAAC,MAAM,CAAC,OAAoB;QACtC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACtC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,GAAG,CAAC,OAAoB;QACnC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"BackendApi.js","sourceRoot":"","sources":["../../src/api/BackendApi.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C;;;;;;;;;;GAUG;AACH,MAAM,OAAO,UAKX,SAAQ,WAA4B;IAGpC;;;;;OAKG;IACI,KAAK,CAAC,MAAM,CAAC,OAAoB;QACtC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACtC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,GAAG,CAAC,OAAoB;QACnC,OAAO,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACtE,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,KAAK,CAAC,OAA0B;QAC3C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACzD,OAAO,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,KAAK,CAAC,OAA0B;QAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;IAC/D,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,MAAM,CAAC,OAAoB;QACtC,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;IAC3D,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,MAAM,CAAC,OAAwB;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACnD,OAAO,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACrE,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,MAAM,CAAC,OAA8B;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC1D,OAAO,cAAc,CACnB,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,EACvC,IAAI,CAAC,SAAS,CACf,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -15,14 +15,16 @@ import type { Validation } from "../validation/Validation.js";
|
|
|
15
15
|
*/
|
|
16
16
|
export declare abstract class IBackendApi<DTO extends DocumentData, STORE extends Store<DTO> = Store<DTO>, VAL extends Validation<DTO> = Validation<DTO>> {
|
|
17
17
|
readonly name: string;
|
|
18
|
+
protected readonly datePaths: string[];
|
|
18
19
|
protected _store?: STORE;
|
|
19
20
|
protected _validation?: VAL;
|
|
20
21
|
/**
|
|
21
22
|
* Create a new backend API instance.
|
|
22
23
|
*
|
|
23
24
|
* @param name - A descriptive name for this API, used in error messages.
|
|
25
|
+
* @param datePaths - JSON paths within the response payload that contain date values to convert to Firestore Timestamps.
|
|
24
26
|
*/
|
|
25
|
-
constructor(name: string);
|
|
27
|
+
constructor(name: string, datePaths: string[]);
|
|
26
28
|
/**
|
|
27
29
|
* Inject the store instance used for data persistence.
|
|
28
30
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IBackendApi.d.ts","sourceRoot":"","sources":["../../src/api/IBackendApi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D;;;;;;;;;;;GAWG;AACH,8BAAsB,WAAW,CAC/B,GAAG,SAAS,YAAY,EACxB,KAAK,SAAS,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,EACrC,GAAG,SAAS,UAAU,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"IBackendApi.d.ts","sourceRoot":"","sources":["../../src/api/IBackendApi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D;;;;;;;;;;;GAWG;AACH,8BAAsB,WAAW,CAC/B,GAAG,SAAS,YAAY,EACxB,KAAK,SAAS,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,EACrC,GAAG,SAAS,UAAU,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC;aAY3B,IAAI,EAAE,MAAM;IAC5B,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE;IAXxC,SAAS,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC;IACzB,SAAS,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC;IAE5B;;;;;OAKG;gBAEe,IAAI,EAAE,MAAM,EACT,SAAS,EAAE,MAAM,EAAE;IAGxC;;;;OAIG;IACI,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAInC;;;;OAIG;IACI,aAAa,CAAC,UAAU,EAAE,GAAG,GAAG,IAAI;IAI3C;;;;;OAKG;IACH,SAAS,CAAC,KAAK,IAAI,KAAK;IAQxB;;;;;OAKG;IACH,SAAS,CAAC,UAAU,IAAI,GAAG;CAO5B"}
|
package/dist/api/IBackendApi.js
CHANGED
|
@@ -12,15 +12,18 @@
|
|
|
12
12
|
*/
|
|
13
13
|
export class IBackendApi {
|
|
14
14
|
name;
|
|
15
|
+
datePaths;
|
|
15
16
|
_store;
|
|
16
17
|
_validation;
|
|
17
18
|
/**
|
|
18
19
|
* Create a new backend API instance.
|
|
19
20
|
*
|
|
20
21
|
* @param name - A descriptive name for this API, used in error messages.
|
|
22
|
+
* @param datePaths - JSON paths within the response payload that contain date values to convert to Firestore Timestamps.
|
|
21
23
|
*/
|
|
22
|
-
constructor(name) {
|
|
24
|
+
constructor(name, datePaths) {
|
|
23
25
|
this.name = name;
|
|
26
|
+
this.datePaths = datePaths;
|
|
24
27
|
}
|
|
25
28
|
/**
|
|
26
29
|
* Inject the store instance used for data persistence.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IBackendApi.js","sourceRoot":"","sources":["../../src/api/IBackendApi.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AACH,MAAM,OAAgB,WAAW;
|
|
1
|
+
{"version":3,"file":"IBackendApi.js","sourceRoot":"","sources":["../../src/api/IBackendApi.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AACH,MAAM,OAAgB,WAAW;IAeb;IACG;IAXX,MAAM,CAAS;IACf,WAAW,CAAO;IAE5B;;;;;OAKG;IACH,YACkB,IAAY,EACT,SAAmB;QADtB,SAAI,GAAJ,IAAI,CAAQ;QACT,cAAS,GAAT,SAAS,CAAU;IACrC,CAAC;IAEJ;;;;OAIG;IACI,QAAQ,CAAC,KAAY;QAC1B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACI,aAAa,CAAC,UAAe;QAClC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IAED;;;;;OAKG;IACO,KAAK;QACb,IAAI,CAAC,IAAI,CAAC,MAAM;YACd,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,CAAC,IAAI,6CAA6C,CAC1D,CAAC;QACJ,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;;;;OAKG;IACO,UAAU;QAClB,IAAI,CAAC,IAAI,CAAC,WAAW;YACnB,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,CAAC,IAAI,uDAAuD,CACpE,CAAC;QACJ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;CACF"}
|
package/dist/api/index.d.ts
CHANGED
package/dist/api/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AACA,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AACA,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC"}
|
package/dist/api/index.js
CHANGED
package/dist/api/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deeply converts Firestore timestamp fields to JavaScript `Date` objects.
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* Path segments are separated by "/" and a wildcard may be used
|
|
6
|
+
* to iterate over array elements (e.g. "items/{wildcard}/createdAt").
|
|
7
|
+
*
|
|
8
|
+
* @param data - The data structure to transform (cloned before mutation).
|
|
9
|
+
* @param paths - Slash-delimited paths to fields that should be converted.
|
|
10
|
+
* @returns A deep clone of `data` with the targeted fields converted to `Date`.
|
|
11
|
+
*/
|
|
12
|
+
export declare const tmpToDatesDeep: <T>(data: T, paths: string[]) => T;
|
|
13
|
+
/**
|
|
14
|
+
* Deeply converts date-like fields to raw {@link FirebaseTimestampRaw} objects.
|
|
15
|
+
*
|
|
16
|
+
* @remarks
|
|
17
|
+
* Accepts JavaScript `Date` objects, numeric millisecond values, and Firestore
|
|
18
|
+
* document objects with `_seconds`/`_nanoseconds` fields. Path segments follow
|
|
19
|
+
* the same convention as {@link toDatesDeep}.
|
|
20
|
+
*
|
|
21
|
+
* @param data - The data structure to transform (cloned before mutation).
|
|
22
|
+
* @param paths - Slash-delimited paths to fields that should be converted.
|
|
23
|
+
* @returns A deep clone of `data` with the targeted fields converted to {@link FirebaseTimestampRaw}.
|
|
24
|
+
*/
|
|
25
|
+
export declare const tmpToTimestampsDeep: <T>(data: T, paths: string[]) => T;
|
|
26
|
+
//# sourceMappingURL=tmp.date.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tmp.date.d.ts","sourceRoot":"","sources":["../../src/api/tmp.date.ts"],"names":[],"mappings":"AA8DA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,EAAE,MAAM,CAAC,EAAE,OAAO,MAAM,EAAE,KAAG,CAClB,CAAC;AAE5C;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,GAAI,CAAC,EAAE,MAAM,CAAC,EAAE,OAAO,MAAM,EAAE,KAAG,CAClB,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { FirebaseTimestamp, } from "@mxpicture/gcp-functions-common/helper";
|
|
2
|
+
const _normalizeDate = (value) => !value
|
|
3
|
+
? value
|
|
4
|
+
: typeof value?.toDate === "function"
|
|
5
|
+
? value.toDate()
|
|
6
|
+
: value?._seconds !== undefined
|
|
7
|
+
? new Date(value._seconds * 1000 + value._nanoseconds / 1e6)
|
|
8
|
+
: typeof value === "string"
|
|
9
|
+
? new Date(value)
|
|
10
|
+
: value;
|
|
11
|
+
const _normalizeTimestamp = (value) => {
|
|
12
|
+
if (value instanceof Date)
|
|
13
|
+
return FirebaseTimestamp.fromDate(value).raw;
|
|
14
|
+
if (typeof value === "number")
|
|
15
|
+
return FirebaseTimestamp.fromMillis(value).raw;
|
|
16
|
+
if (typeof value === "object")
|
|
17
|
+
return FirebaseTimestamp.fromDoc(value)?.raw ?? null;
|
|
18
|
+
if (typeof value === "string")
|
|
19
|
+
return FirebaseTimestamp.fromIso(value).raw;
|
|
20
|
+
return null;
|
|
21
|
+
};
|
|
22
|
+
const _applyPath = (
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
24
|
+
obj, pathParts, convert) => {
|
|
25
|
+
if (!obj)
|
|
26
|
+
return;
|
|
27
|
+
const [current, ...rest] = pathParts;
|
|
28
|
+
if (current === "*") {
|
|
29
|
+
if (Array.isArray(obj))
|
|
30
|
+
for (const item of obj)
|
|
31
|
+
_applyPath(item, rest, convert);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (rest.length === 0) {
|
|
35
|
+
if (obj[current] !== undefined)
|
|
36
|
+
obj[current] = convert(obj[current]);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
_applyPath(obj[current], rest, convert);
|
|
40
|
+
};
|
|
41
|
+
const _convertDeep = (data, paths, convert) => {
|
|
42
|
+
if (Array.isArray(data))
|
|
43
|
+
return data.map((item) => _convertDeep(item, paths, convert));
|
|
44
|
+
const clone = structuredClone(data);
|
|
45
|
+
for (const path of paths)
|
|
46
|
+
_applyPath(clone, path.split("/"), convert);
|
|
47
|
+
return clone;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Deeply converts Firestore timestamp fields to JavaScript `Date` objects.
|
|
51
|
+
*
|
|
52
|
+
* @remarks
|
|
53
|
+
* Path segments are separated by "/" and a wildcard may be used
|
|
54
|
+
* to iterate over array elements (e.g. "items/{wildcard}/createdAt").
|
|
55
|
+
*
|
|
56
|
+
* @param data - The data structure to transform (cloned before mutation).
|
|
57
|
+
* @param paths - Slash-delimited paths to fields that should be converted.
|
|
58
|
+
* @returns A deep clone of `data` with the targeted fields converted to `Date`.
|
|
59
|
+
*/
|
|
60
|
+
export const tmpToDatesDeep = (data, paths) => _convertDeep(data, paths, _normalizeDate);
|
|
61
|
+
/**
|
|
62
|
+
* Deeply converts date-like fields to raw {@link FirebaseTimestampRaw} objects.
|
|
63
|
+
*
|
|
64
|
+
* @remarks
|
|
65
|
+
* Accepts JavaScript `Date` objects, numeric millisecond values, and Firestore
|
|
66
|
+
* document objects with `_seconds`/`_nanoseconds` fields. Path segments follow
|
|
67
|
+
* the same convention as {@link toDatesDeep}.
|
|
68
|
+
*
|
|
69
|
+
* @param data - The data structure to transform (cloned before mutation).
|
|
70
|
+
* @param paths - Slash-delimited paths to fields that should be converted.
|
|
71
|
+
* @returns A deep clone of `data` with the targeted fields converted to {@link FirebaseTimestampRaw}.
|
|
72
|
+
*/
|
|
73
|
+
export const tmpToTimestampsDeep = (data, paths) => _convertDeep(data, paths, _normalizeTimestamp);
|
|
74
|
+
//# sourceMappingURL=tmp.date.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tmp.date.js","sourceRoot":"","sources":["../../src/api/tmp.date.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mxpicture/gcp-functions-backend",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.11",
|
|
4
4
|
"description": "Utils for google cloud functions, publishing both CommonJS and ESM builds",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "MXPicture",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"access": "public"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@mxpicture/gcp-functions-common": "^1.1.
|
|
36
|
+
"@mxpicture/gcp-functions-common": "^1.1.11",
|
|
37
37
|
"firebase-admin": "^13.7.0",
|
|
38
38
|
"firebase-functions": "^7.0.6",
|
|
39
39
|
"short-uuid": "^6.0.3",
|