@mxpicture/gcp-functions-backend 1.1.11 → 1.1.12
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 +5 -5
- package/dist/api/BackendApi.js.map +1 -1
- package/dist/api/index.d.ts +0 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +0 -1
- package/dist/api/index.js.map +1 -1
- package/package.json +2 -2
- package/dist/api/tmp.date.d.ts +0 -26
- package/dist/api/tmp.date.d.ts.map +0 -1
- package/dist/api/tmp.date.js +0 -74
- package/dist/api/tmp.date.js.map +0 -1
|
@@ -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;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;
|
|
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;CAI3E"}
|
package/dist/api/BackendApi.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { IBackendApi } from "./IBackendApi.js";
|
|
2
|
-
import {
|
|
2
|
+
import { toDatesDeep } from "@mxpicture/gcp-functions-common/helper";
|
|
3
3
|
/**
|
|
4
4
|
* Backend API providing standard CRUD operations for a document type.
|
|
5
5
|
*
|
|
@@ -29,7 +29,7 @@ export class BackendApi extends IBackendApi {
|
|
|
29
29
|
* @returns The document including its key metadata.
|
|
30
30
|
*/
|
|
31
31
|
async get(request) {
|
|
32
|
-
return
|
|
32
|
+
return toDatesDeep(this.store().get(request.id), this.datePaths);
|
|
33
33
|
}
|
|
34
34
|
/**
|
|
35
35
|
* Query documents with optional filters.
|
|
@@ -39,7 +39,7 @@ export class BackendApi extends IBackendApi {
|
|
|
39
39
|
*/
|
|
40
40
|
async query(request) {
|
|
41
41
|
const items = await this.store().query(request?.filters);
|
|
42
|
-
return
|
|
42
|
+
return toDatesDeep(items, this.datePaths);
|
|
43
43
|
}
|
|
44
44
|
/**
|
|
45
45
|
* Count documents matching optional filter criteria.
|
|
@@ -68,7 +68,7 @@ export class BackendApi extends IBackendApi {
|
|
|
68
68
|
*/
|
|
69
69
|
async create(request) {
|
|
70
70
|
const result = this.validation().validate(request);
|
|
71
|
-
return
|
|
71
|
+
return toDatesDeep(this.store().create(result), this.datePaths);
|
|
72
72
|
}
|
|
73
73
|
/**
|
|
74
74
|
* Update an existing document after validating the partial input.
|
|
@@ -79,7 +79,7 @@ export class BackendApi extends IBackendApi {
|
|
|
79
79
|
*/
|
|
80
80
|
async update(request) {
|
|
81
81
|
const result = this.validation().validatePartial(request);
|
|
82
|
-
return
|
|
82
|
+
return toDatesDeep(this.store().update(request.id, result), this.datePaths);
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
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;AAC/C,OAAO,EAAE,
|
|
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,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAErE;;;;;;;;;;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,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACnE,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,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5C,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,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAClE,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,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9E,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"}
|
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"}
|
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.12",
|
|
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.12",
|
|
37
37
|
"firebase-admin": "^13.7.0",
|
|
38
38
|
"firebase-functions": "^7.0.6",
|
|
39
39
|
"short-uuid": "^6.0.3",
|
package/dist/api/tmp.date.d.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/dist/api/tmp.date.js
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
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
|
package/dist/api/tmp.date.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tmp.date.js","sourceRoot":"","sources":["../../src/api/tmp.date.ts"],"names":[],"mappings":"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"}
|