@x12i/catalox 2.4.0 → 2.5.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/README.md +35 -3
- package/dist/src/catalox/catalox.d.ts +17 -0
- package/dist/src/catalox/catalox.d.ts.map +1 -1
- package/dist/src/catalox/catalox.js +64 -6
- package/dist/src/catalox/catalox.js.map +1 -1
- package/dist/src/catalox/firestore-gcs-compare.d.ts +15 -0
- package/dist/src/catalox/firestore-gcs-compare.d.ts.map +1 -0
- package/dist/src/catalox/firestore-gcs-compare.js +221 -0
- package/dist/src/catalox/firestore-gcs-compare.js.map +1 -0
- package/dist/src/catalox/firestore-gcs-transfer.d.ts +24 -0
- package/dist/src/catalox/firestore-gcs-transfer.d.ts.map +1 -0
- package/dist/src/catalox/firestore-gcs-transfer.js +346 -0
- package/dist/src/catalox/firestore-gcs-transfer.js.map +1 -0
- package/dist/src/catalox/index.d.ts +2 -0
- package/dist/src/catalox/index.d.ts.map +1 -1
- package/dist/src/catalox/index.js +2 -0
- package/dist/src/catalox/index.js.map +1 -1
- package/dist/src/cli/index.js +169 -1
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/contracts/catalogs.d.ts +6 -0
- package/dist/src/contracts/catalogs.d.ts.map +1 -1
- package/dist/src/contracts/catalogs.js +18 -1
- package/dist/src/contracts/catalogs.js.map +1 -1
- package/dist/src/contracts/gcs-firestore-compare.d.ts +64 -0
- package/dist/src/contracts/gcs-firestore-compare.d.ts.map +1 -0
- package/dist/src/contracts/gcs-firestore-compare.js +2 -0
- package/dist/src/contracts/gcs-firestore-compare.js.map +1 -0
- package/dist/src/contracts/gcs-firestore-transfer.d.ts +94 -0
- package/dist/src/contracts/gcs-firestore-transfer.d.ts.map +1 -0
- package/dist/src/contracts/gcs-firestore-transfer.js +2 -0
- package/dist/src/contracts/gcs-firestore-transfer.js.map +1 -0
- package/dist/src/contracts/index.d.ts +3 -0
- package/dist/src/contracts/index.d.ts.map +1 -1
- package/dist/src/contracts/index.js +1 -0
- package/dist/src/contracts/index.js.map +1 -1
- package/dist/src/firebase/native-item-store.d.ts +6 -0
- package/dist/src/firebase/native-item-store.d.ts.map +1 -1
- package/dist/src/firebase/native-item-store.js +18 -1
- package/dist/src/firebase/native-item-store.js.map +1 -1
- package/dist/test/unit/compact-catalog-filter.test.d.ts +2 -0
- package/dist/test/unit/compact-catalog-filter.test.d.ts.map +1 -0
- package/dist/test/unit/compact-catalog-filter.test.js +18 -0
- package/dist/test/unit/compact-catalog-filter.test.js.map +1 -0
- package/dist/test/unit/gcs-firestore-compare.test.d.ts +2 -0
- package/dist/test/unit/gcs-firestore-compare.test.d.ts.map +1 -0
- package/dist/test/unit/gcs-firestore-compare.test.js +14 -0
- package/dist/test/unit/gcs-firestore-compare.test.js.map +1 -0
- package/dist/test/unit/gcs-firestore-paths.test.d.ts +2 -0
- package/dist/test/unit/gcs-firestore-paths.test.d.ts.map +1 -0
- package/dist/test/unit/gcs-firestore-paths.test.js +16 -0
- package/dist/test/unit/gcs-firestore-paths.test.js.map +1 -0
- package/package.json +4 -1
|
@@ -53,7 +53,7 @@ export class NativeItemStore {
|
|
|
53
53
|
await batch.commit();
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
|
-
async
|
|
56
|
+
async executeListQuery(catalogId, options) {
|
|
57
57
|
const col = await this.itemsCollectionRef(catalogId);
|
|
58
58
|
let q = col;
|
|
59
59
|
const filterEq = options?.filterEq ?? {};
|
|
@@ -69,5 +69,22 @@ export class NativeItemStore {
|
|
|
69
69
|
const snap = await q.limit(offset + limit).get();
|
|
70
70
|
return snap.docs.slice(offset, offset + limit).map((d) => d.data());
|
|
71
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Lists native rows. If the process cached a legacy vs flat layout choice and data moved
|
|
74
|
+
* (for example after a console migration), the first unconstrained empty page triggers a
|
|
75
|
+
* one-time re-resolve and a second query.
|
|
76
|
+
*/
|
|
77
|
+
async list(catalogId, options) {
|
|
78
|
+
const offset = options?.offset ?? 0;
|
|
79
|
+
const filterEq = options?.filterEq ?? {};
|
|
80
|
+
const sort = options?.sort ?? {};
|
|
81
|
+
const unconstrained = Object.keys(filterEq).length === 0 && Object.keys(sort).length === 0;
|
|
82
|
+
let records = await this.executeListQuery(catalogId, options);
|
|
83
|
+
if (records.length === 0 && offset === 0 && unconstrained) {
|
|
84
|
+
this.invalidateLayoutCache(catalogId);
|
|
85
|
+
records = await this.executeListQuery(catalogId, options);
|
|
86
|
+
}
|
|
87
|
+
return records;
|
|
88
|
+
}
|
|
72
89
|
}
|
|
73
90
|
//# sourceMappingURL=native-item-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-item-store.js","sourceRoot":"","sources":["../../../src/firebase/native-item-store.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"native-item-store.js","sourceRoot":"","sources":["../../../src/firebase/native-item-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compact-catalog-filter.test.d.ts","sourceRoot":"","sources":["../../../test/unit/compact-catalog-filter.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import test from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import { compactCatalogFilter } from "../../src/contracts/catalogs.js";
|
|
4
|
+
test("compactCatalogFilter drops null, undefined, and blank strings", () => {
|
|
5
|
+
assert.deepEqual(compactCatalogFilter({
|
|
6
|
+
a: "",
|
|
7
|
+
b: " ",
|
|
8
|
+
c: null,
|
|
9
|
+
d: undefined,
|
|
10
|
+
e: "x",
|
|
11
|
+
f: 0,
|
|
12
|
+
g: false,
|
|
13
|
+
}), { e: "x", f: 0, g: false });
|
|
14
|
+
});
|
|
15
|
+
test("compactCatalogFilter returns {} for undefined input", () => {
|
|
16
|
+
assert.deepEqual(compactCatalogFilter(undefined), {});
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=compact-catalog-filter.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compact-catalog-filter.test.js","sourceRoot":"","sources":["../../../test/unit/compact-catalog-filter.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAEvE,IAAI,CAAC,+DAA+D,EAAE,GAAG,EAAE;IACzE,MAAM,CAAC,SAAS,CACd,oBAAoB,CAAC;QACnB,CAAC,EAAE,EAAE;QACL,CAAC,EAAE,IAAI;QACP,CAAC,EAAE,IAAI;QACP,CAAC,EAAE,SAAS;QACZ,CAAC,EAAE,GAAG;QACN,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,KAAK;KACT,CAAC,EACF,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAC3B,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qDAAqD,EAAE,GAAG,EAAE;IAC/D,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gcs-firestore-compare.test.d.ts","sourceRoot":"","sources":["../../../test/unit/gcs-firestore-compare.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import test from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import { Timestamp } from "firebase-admin/firestore";
|
|
4
|
+
import { dataFingerprint, normalizeForCompare } from "../../src/catalox/firestore-gcs-compare.js";
|
|
5
|
+
test("normalizeForCompare maps Timestamp and JSON seconds shape consistently", () => {
|
|
6
|
+
const ts = new Timestamp(1700000000, 123000000);
|
|
7
|
+
const fromJson = { _seconds: 1700000000, _nanoseconds: 123000000 };
|
|
8
|
+
assert.equal(JSON.stringify(normalizeForCompare(ts)), JSON.stringify(normalizeForCompare(fromJson)));
|
|
9
|
+
assert.equal(dataFingerprint(ts), dataFingerprint(fromJson));
|
|
10
|
+
});
|
|
11
|
+
test("dataFingerprint differs when data differs", () => {
|
|
12
|
+
assert.notEqual(dataFingerprint({ a: 1 }), dataFingerprint({ a: 2 }));
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=gcs-firestore-compare.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gcs-firestore-compare.test.js","sourceRoot":"","sources":["../../../test/unit/gcs-firestore-compare.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAElG,IAAI,CAAC,wEAAwE,EAAE,GAAG,EAAE;IAClF,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;IACnE,MAAM,CAAC,KAAK,CACV,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,EACvC,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAC9C,CAAC;IACF,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/D,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE;IACrD,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACxE,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gcs-firestore-paths.test.d.ts","sourceRoot":"","sources":["../../../test/unit/gcs-firestore-paths.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import test from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import { firestoreCollectionPathToObjectBase, ndjsonObjectPath, normalizeGcsPrefix, } from "../../src/catalox/firestore-gcs-transfer.js";
|
|
4
|
+
test("normalizeGcsPrefix trims and adds trailing slash", () => {
|
|
5
|
+
assert.equal(normalizeGcsPrefix(""), "");
|
|
6
|
+
assert.equal(normalizeGcsPrefix(" a/b "), "a/b/");
|
|
7
|
+
});
|
|
8
|
+
test("firestoreCollectionPathToObjectBase flattens slashes", () => {
|
|
9
|
+
assert.equal(firestoreCollectionPathToObjectBase("apps"), "apps");
|
|
10
|
+
assert.equal(firestoreCollectionPathToObjectBase("catalogData/narratives/items"), "catalogData__narratives__items");
|
|
11
|
+
});
|
|
12
|
+
test("ndjsonObjectPath applies optional postfix", () => {
|
|
13
|
+
assert.equal(ndjsonObjectPath({ gcsPrefix: "p/", collectionPath: "apps" }), "p/apps.ndjson");
|
|
14
|
+
assert.equal(ndjsonObjectPath({ gcsPrefix: "", collectionPath: "apps", objectNamePostfix: "_v1" }), "apps_v1.ndjson");
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=gcs-firestore-paths.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gcs-firestore-paths.test.js","sourceRoot":"","sources":["../../../test/unit/gcs-firestore-paths.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC,OAAO,EACL,mCAAmC,EACnC,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,6CAA6C,CAAC;AAErD,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE;IAC5D,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,sDAAsD,EAAE,GAAG,EAAE;IAChE,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;IAClE,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,8BAA8B,CAAC,EAAE,gCAAgC,CAAC,CAAC;AACtH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE;IACrD,MAAM,CAAC,KAAK,CACV,gBAAgB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,EAC7D,eAAe,CAChB,CAAC;IACF,MAAM,CAAC,KAAK,CACV,gBAAgB,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,EACrF,gBAAgB,CACjB,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@x12i/catalox",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.5.0",
|
|
4
4
|
"description": "Catalox: Firebase-native catalog metadata + unification package.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"private": false,
|
|
@@ -16,6 +16,8 @@
|
|
|
16
16
|
"mapping",
|
|
17
17
|
"mongo",
|
|
18
18
|
"adapter",
|
|
19
|
+
"gcs",
|
|
20
|
+
"google-cloud-storage",
|
|
19
21
|
"x12i"
|
|
20
22
|
],
|
|
21
23
|
"exports": {
|
|
@@ -44,6 +46,7 @@
|
|
|
44
46
|
"lint": "node -e \"console.log('no lint configured')\""
|
|
45
47
|
},
|
|
46
48
|
"dependencies": {
|
|
49
|
+
"@google-cloud/storage": "^7.19.0",
|
|
47
50
|
"@x12i/helpers": "^1.2.4",
|
|
48
51
|
"ajv": "^8.18.0",
|
|
49
52
|
"ajv-formats": "^3.0.1",
|