@x12i/catalox 2.3.0 → 2.4.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 +27 -6
- package/dist/src/catalox/backup-data.d.ts +40 -0
- package/dist/src/catalox/backup-data.d.ts.map +1 -0
- package/dist/src/catalox/backup-data.js +522 -0
- package/dist/src/catalox/backup-data.js.map +1 -0
- package/dist/src/catalox/catalox.d.ts +25 -0
- package/dist/src/catalox/catalox.d.ts.map +1 -1
- package/dist/src/catalox/catalox.js +63 -1
- package/dist/src/catalox/catalox.js.map +1 -1
- package/dist/src/catalox/index.d.ts +3 -0
- package/dist/src/catalox/index.d.ts.map +1 -1
- package/dist/src/catalox/index.js +3 -0
- package/dist/src/catalox/index.js.map +1 -1
- package/dist/src/catalox/native-catalog-layout-diagnostics.d.ts +29 -0
- package/dist/src/catalox/native-catalog-layout-diagnostics.d.ts.map +1 -0
- package/dist/src/catalox/native-catalog-layout-diagnostics.js +55 -0
- package/dist/src/catalox/native-catalog-layout-diagnostics.js.map +1 -0
- package/dist/src/catalox/restore-firestore-backup.d.ts +13 -0
- package/dist/src/catalox/restore-firestore-backup.d.ts.map +1 -0
- package/dist/src/catalox/restore-firestore-backup.js +326 -0
- package/dist/src/catalox/restore-firestore-backup.js.map +1 -0
- package/dist/src/cli/index.js +143 -0
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/contracts/backup.d.ts +36 -0
- package/dist/src/contracts/backup.d.ts.map +1 -0
- package/dist/src/contracts/backup.js +2 -0
- package/dist/src/contracts/backup.js.map +1 -0
- package/dist/src/contracts/catalog-data-index.d.ts +13 -0
- package/dist/src/contracts/catalog-data-index.d.ts.map +1 -0
- package/dist/src/contracts/catalog-data-index.js +2 -0
- package/dist/src/contracts/catalog-data-index.js.map +1 -0
- package/dist/src/contracts/catalogs.d.ts +2 -1
- package/dist/src/contracts/catalogs.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/src/contracts/restore.d.ts +44 -0
- package/dist/src/contracts/restore.d.ts.map +1 -0
- package/dist/src/contracts/restore.js +2 -0
- package/dist/src/contracts/restore.js.map +1 -0
- package/dist/src/firebase/catalog-data-index-store.d.ts +14 -0
- package/dist/src/firebase/catalog-data-index-store.d.ts.map +1 -0
- package/dist/src/firebase/catalog-data-index-store.js +33 -0
- package/dist/src/firebase/catalog-data-index-store.js.map +1 -0
- package/dist/src/firebase/catalog-data-paths.d.ts +14 -0
- package/dist/src/firebase/catalog-data-paths.d.ts.map +1 -0
- package/dist/src/firebase/catalog-data-paths.js +31 -0
- package/dist/src/firebase/catalog-data-paths.js.map +1 -0
- package/dist/src/firebase/index.d.ts +2 -0
- package/dist/src/firebase/index.d.ts.map +1 -1
- package/dist/src/firebase/index.js +2 -0
- package/dist/src/firebase/index.js.map +1 -1
- package/dist/src/firebase/native-item-store.d.ts +5 -1
- package/dist/src/firebase/native-item-store.d.ts.map +1 -1
- package/dist/src/firebase/native-item-store.js +33 -15
- package/dist/src/firebase/native-item-store.js.map +1 -1
- package/dist/src/migrations/index.d.ts +1 -0
- package/dist/src/migrations/index.d.ts.map +1 -1
- package/dist/src/migrations/index.js +1 -0
- package/dist/src/migrations/index.js.map +1 -1
- package/dist/src/migrations/migrate-native-catalog-layout.d.ts +51 -0
- package/dist/src/migrations/migrate-native-catalog-layout.d.ts.map +1 -0
- package/dist/src/migrations/migrate-native-catalog-layout.js +224 -0
- package/dist/src/migrations/migrate-native-catalog-layout.js.map +1 -0
- package/dist/test/integration/firestore.emulator.test.js +10 -2
- package/dist/test/integration/firestore.emulator.test.js.map +1 -1
- package/dist/test/unit/backup-timestamp.test.d.ts +2 -0
- package/dist/test/unit/backup-timestamp.test.d.ts.map +1 -0
- package/dist/test/unit/backup-timestamp.test.js +11 -0
- package/dist/test/unit/backup-timestamp.test.js.map +1 -0
- package/dist/test/unit/resolve-native-items-layout.test.d.ts +2 -0
- package/dist/test/unit/resolve-native-items-layout.test.d.ts.map +1 -0
- package/dist/test/unit/resolve-native-items-layout.test.js +50 -0
- package/dist/test/unit/resolve-native-items-layout.test.js.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../../src/contracts/backup.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { CatalogId } from "./ids.js";
|
|
2
|
+
export type CatalogDataLeafIndex = {
|
|
3
|
+
kind?: string;
|
|
4
|
+
};
|
|
5
|
+
export type CatalogDataIndexRecord = {
|
|
6
|
+
catalogId: CatalogId;
|
|
7
|
+
schemaVersion?: string;
|
|
8
|
+
leaves?: Record<string, CatalogDataLeafIndex>;
|
|
9
|
+
metadata?: Record<string, unknown>;
|
|
10
|
+
createdAt: string;
|
|
11
|
+
updatedAt: string;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=catalog-data-index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-data-index.d.ts","sourceRoot":"","sources":["../../../src/contracts/catalog-data-index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,SAAS,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-data-index.js","sourceRoot":"","sources":["../../../src/contracts/catalog-data-index.ts"],"names":[],"mappings":""}
|
|
@@ -17,7 +17,8 @@ export type CatalogRecord = {
|
|
|
17
17
|
};
|
|
18
18
|
export type NativeCatalogConfig = {
|
|
19
19
|
type: "native";
|
|
20
|
-
|
|
20
|
+
/** Logical storage id for native rows; Catalox derives `catalogData-{catalogId}-items` when omitted. */
|
|
21
|
+
firestoreCollectionPath?: string;
|
|
21
22
|
itemSchema?: Record<string, unknown>;
|
|
22
23
|
};
|
|
23
24
|
export type CatalogDefinition = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalogs.d.ts","sourceRoot":"","sources":["../../../src/contracts/catalogs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEzD,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AACpD,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,KAAK,CAAC;AAEtD,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,gBAAgB,CAAC,EAAE,uBAAuB,CAAC;IAC3C,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IACxC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,QAAQ,CAAC;IACf,uBAAuB,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"catalogs.d.ts","sourceRoot":"","sources":["../../../src/contracts/catalogs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEzD,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AACpD,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,KAAK,CAAC;AAEtD,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,gBAAgB,CAAC,EAAE,uBAAuB,CAAC;IAC3C,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IACxC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,QAAQ,CAAC;IACf,wGAAwG;IACxG,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GACzB;IACE,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,QAAQ,CAAC;IACrB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,GACD;IACE,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,QAAQ,CAAC;IACrB,MAAM,EAAE;QACN,UAAU,EAAE,uBAAuB,CAAC;QACpC,SAAS,EAAE,SAAS,CAAC;QACrB,SAAS,EAAE,SAAS,CAAC;QACrB,QAAQ,CAAC,EAAE,cAAc,GAAG,UAAU,CAAC;KACxC,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,CAAC;AAEN,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,CAAC,GAAG,OAAO,YAAY,EAAE,kBAAkB,IAAI;IAC3E,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,mBAAmB,EAAE,CAAC;CAChC,CAAC"}
|
|
@@ -29,5 +29,8 @@ export type { StoreRecord, StoreAppBindingRecord } from "./stores.js";
|
|
|
29
29
|
export type { ExportInventoryInput, ExportInventoryData } from "./inventory-export.js";
|
|
30
30
|
export type { InventoryReportInput, InventoryReportData } from "./inventory-report.js";
|
|
31
31
|
export type { CatalogSnapshotRunRecord } from "./snapshots.js";
|
|
32
|
+
export type { BackupMode, BackupDataInput, BackupDataResult, BackupDataIssue, } from "./backup.js";
|
|
33
|
+
export type { RestoreFirestoreBackupSource, RestoreFirestoreBackupInput, RestoreFirestoreBackupResult, RestoreFirestoreBackupIssue, UndoFirestoreRestoreInput, UndoFirestoreRestoreResult, UndoFirestoreRestoreIssue, } from "./restore.js";
|
|
34
|
+
export type { CatalogDataIndexRecord, CatalogDataLeafIndex } from "./catalog-data-index.js";
|
|
32
35
|
export { CataloxError, CatalogManagerError, CatalogNotFoundError, CatalogAccessDeniedError, CatalogBindingError, CatalogValidationError, CatalogAdapterError, CatalogSyncError, AppNotFoundError, AppPrivilegeError, } from "./errors.js";
|
|
33
36
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/contracts/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/contracts/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/contracts/index.ts"],"names":[],"mappings":"AAwGA,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/contracts/index.ts"],"names":[],"mappings":"AAwGA,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAmE1E,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { AppId, CatalogId } from "./ids.js";
|
|
2
|
+
export type RestoreFirestoreBackupSource = {
|
|
3
|
+
kind: "latest";
|
|
4
|
+
} | {
|
|
5
|
+
kind: "versioned";
|
|
6
|
+
versionTimestamp: string;
|
|
7
|
+
};
|
|
8
|
+
export type RestoreFirestoreBackupInput = {
|
|
9
|
+
/** Which backup mirror set to read from (same database, Firebase mode only). */
|
|
10
|
+
source: RestoreFirestoreBackupSource;
|
|
11
|
+
includeSnapshots?: boolean;
|
|
12
|
+
catalogIds?: CatalogId[];
|
|
13
|
+
appId?: AppId;
|
|
14
|
+
/** Optional fixed id for pre-restore / manifest (tests); otherwise a new filesystem-safe timestamp is generated. */
|
|
15
|
+
restoreSessionId?: string;
|
|
16
|
+
};
|
|
17
|
+
export type RestoreFirestoreBackupIssue = {
|
|
18
|
+
code: string;
|
|
19
|
+
message: string;
|
|
20
|
+
detail?: Record<string, unknown>;
|
|
21
|
+
};
|
|
22
|
+
export type RestoreFirestoreBackupResult = {
|
|
23
|
+
ok: boolean;
|
|
24
|
+
/** Prefix used for `restoreSessionId__preRestore-*` collections and the manifest document id. */
|
|
25
|
+
restoreSessionId: string;
|
|
26
|
+
counts: Record<string, number>;
|
|
27
|
+
issues: RestoreFirestoreBackupIssue[];
|
|
28
|
+
/** Native layout per catalog immediately before restore (used by undo). */
|
|
29
|
+
nativeItemSourceLayoutByCatalogId: Record<string, "flat" | "legacy">;
|
|
30
|
+
};
|
|
31
|
+
export type UndoFirestoreRestoreInput = {
|
|
32
|
+
restoreSessionId: string;
|
|
33
|
+
};
|
|
34
|
+
export type UndoFirestoreRestoreIssue = {
|
|
35
|
+
code: string;
|
|
36
|
+
message: string;
|
|
37
|
+
detail?: Record<string, unknown>;
|
|
38
|
+
};
|
|
39
|
+
export type UndoFirestoreRestoreResult = {
|
|
40
|
+
ok: boolean;
|
|
41
|
+
counts: Record<string, number>;
|
|
42
|
+
issues: UndoFirestoreRestoreIssue[];
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=restore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restore.d.ts","sourceRoot":"","sources":["../../../src/contracts/restore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEjD,MAAM,MAAM,4BAA4B,GACpC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpD,MAAM,MAAM,2BAA2B,GAAG;IACxC,gFAAgF;IAChF,MAAM,EAAE,4BAA4B,CAAC;IACrC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,oHAAoH;IACpH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,EAAE,EAAE,OAAO,CAAC;IACZ,iGAAiG;IACjG,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,EAAE,2BAA2B,EAAE,CAAC;IACtC,2EAA2E;IAC3E,iCAAiC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC;CACtE,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,EAAE,yBAAyB,EAAE,CAAC;CACrC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restore.js","sourceRoot":"","sources":["../../../src/contracts/restore.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { CatalogId } from "../contracts/ids.js";
|
|
2
|
+
import type { CatalogDataIndexRecord } from "../contracts/catalog-data-index.js";
|
|
3
|
+
import { FirestoreStore } from "./firestore-store.js";
|
|
4
|
+
export declare class CatalogDataIndexStore {
|
|
5
|
+
private readonly store;
|
|
6
|
+
constructor(store: FirestoreStore);
|
|
7
|
+
private docRef;
|
|
8
|
+
get(catalogId: CatalogId): Promise<CatalogDataIndexRecord | null>;
|
|
9
|
+
upsert(record: CatalogDataIndexRecord): Promise<void>;
|
|
10
|
+
merge(catalogId: CatalogId, patch: Partial<CatalogDataIndexRecord>): Promise<void>;
|
|
11
|
+
/** Seed index doc for a native catalog (no item payloads). */
|
|
12
|
+
seedNativeCatalog(catalogId: CatalogId, nowIso: string): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=catalog-data-index-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-data-index-store.d.ts","sourceRoot":"","sources":["../../../src/firebase/catalog-data-index-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,qBAAa,qBAAqB;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,cAAc;IAElD,OAAO,CAAC,MAAM;IAIR,GAAG,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;IAKjE,MAAM,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,sBAAsB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxF,8DAA8D;IACxD,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAW7E"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { FirestoreStore } from "./firestore-store.js";
|
|
2
|
+
export class CatalogDataIndexStore {
|
|
3
|
+
store;
|
|
4
|
+
constructor(store) {
|
|
5
|
+
this.store = store;
|
|
6
|
+
}
|
|
7
|
+
docRef(catalogId) {
|
|
8
|
+
return this.store.collection("catalogData").doc(String(catalogId));
|
|
9
|
+
}
|
|
10
|
+
async get(catalogId) {
|
|
11
|
+
const snap = await this.docRef(catalogId).get();
|
|
12
|
+
return snap.exists ? snap.data() : null;
|
|
13
|
+
}
|
|
14
|
+
async upsert(record) {
|
|
15
|
+
await this.docRef(record.catalogId).set(record, { merge: true });
|
|
16
|
+
}
|
|
17
|
+
async merge(catalogId, patch) {
|
|
18
|
+
await this.docRef(catalogId).set(patch, { merge: true });
|
|
19
|
+
}
|
|
20
|
+
/** Seed index doc for a native catalog (no item payloads). */
|
|
21
|
+
async seedNativeCatalog(catalogId, nowIso) {
|
|
22
|
+
const existing = await this.get(catalogId);
|
|
23
|
+
await this.upsert({
|
|
24
|
+
catalogId,
|
|
25
|
+
schemaVersion: "1",
|
|
26
|
+
leaves: { ...(existing?.leaves ?? {}), items: { kind: "primary" } },
|
|
27
|
+
...(existing?.metadata != null ? { metadata: existing.metadata } : {}),
|
|
28
|
+
createdAt: existing?.createdAt ?? nowIso,
|
|
29
|
+
updatedAt: nowIso,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=catalog-data-index-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-data-index-store.js","sourceRoot":"","sources":["../../../src/firebase/catalog-data-index-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,OAAO,qBAAqB;IACH;IAA7B,YAA6B,KAAqB;QAArB,UAAK,GAAL,KAAK,CAAgB;IAAG,CAAC;IAE9C,MAAM,CAAC,SAAoB;QACjC,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,SAAoB;QAC5B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,IAAI,CAAC,IAAI,EAA6B,CAAC,CAAC,CAAC,IAAI,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAA8B;QACzC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,SAAoB,EAAE,KAAsC;QACtE,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,KAA+B,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACrF,CAAC;IAED,8DAA8D;IAC9D,KAAK,CAAC,iBAAiB,CAAC,SAAoB,EAAE,MAAc;QAC1D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,IAAI,CAAC,MAAM,CAAC;YAChB,SAAS;YACT,aAAa,EAAE,GAAG;YAClB,MAAM,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;YACnE,GAAG,CAAC,QAAQ,EAAE,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,SAAS,EAAE,QAAQ,EAAE,SAAS,IAAI,MAAM;YACxC,SAAS,EAAE,MAAM;SAClB,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Firestore } from "firebase-admin/firestore";
|
|
2
|
+
import type { CatalogId } from "../contracts/ids.js";
|
|
3
|
+
/** Primary native item rows: top-level collection `catalogData-{catalogId}-items`. */
|
|
4
|
+
export declare function nativeItemsCollectionId(catalogId: CatalogId): string;
|
|
5
|
+
export type NativeItemsLayout = "legacy" | "flat";
|
|
6
|
+
/**
|
|
7
|
+
* Prefer the flat layout when it already has data (post-migration).
|
|
8
|
+
* Otherwise use legacy `catalogData/{catalogId}/items` when it has data.
|
|
9
|
+
* If both are empty, default to flat for new writes.
|
|
10
|
+
*/
|
|
11
|
+
export declare function resolveNativeItemsLayout(firestore: Firestore, catalogId: CatalogId): Promise<NativeItemsLayout>;
|
|
12
|
+
export declare function legacyNativeItemsCollectionRef(firestore: Firestore, catalogId: CatalogId): FirebaseFirestore.CollectionReference<FirebaseFirestore.DocumentData, FirebaseFirestore.DocumentData>;
|
|
13
|
+
export declare function flatNativeItemsCollectionRef(firestore: Firestore, catalogId: CatalogId): FirebaseFirestore.CollectionReference<FirebaseFirestore.DocumentData, FirebaseFirestore.DocumentData>;
|
|
14
|
+
//# sourceMappingURL=catalog-data-paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-data-paths.d.ts","sourceRoot":"","sources":["../../../src/firebase/catalog-data-paths.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,sFAAsF;AACtF,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAIpE;AAED,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,MAAM,CAAC;AAElD;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,iBAAiB,CAAC,CAW5B;AAED,wBAAgB,8BAA8B,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,yGAExF;AAED,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,yGAEtF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/** Primary native item rows: top-level collection `catalogData-{catalogId}-items`. */
|
|
2
|
+
export function nativeItemsCollectionId(catalogId) {
|
|
3
|
+
const id = String(catalogId).trim();
|
|
4
|
+
if (!id)
|
|
5
|
+
throw new Error("nativeItemsCollectionId: empty catalogId");
|
|
6
|
+
return `catalogData-${id}-items`;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Prefer the flat layout when it already has data (post-migration).
|
|
10
|
+
* Otherwise use legacy `catalogData/{catalogId}/items` when it has data.
|
|
11
|
+
* If both are empty, default to flat for new writes.
|
|
12
|
+
*/
|
|
13
|
+
export async function resolveNativeItemsLayout(firestore, catalogId) {
|
|
14
|
+
const cid = String(catalogId);
|
|
15
|
+
const flat = firestore.collection(nativeItemsCollectionId(cid));
|
|
16
|
+
const flatSnap = await flat.limit(1).get();
|
|
17
|
+
if (!flatSnap.empty)
|
|
18
|
+
return "flat";
|
|
19
|
+
const legacy = firestore.collection("catalogData").doc(cid).collection("items");
|
|
20
|
+
const legSnap = await legacy.limit(1).get();
|
|
21
|
+
if (!legSnap.empty)
|
|
22
|
+
return "legacy";
|
|
23
|
+
return "flat";
|
|
24
|
+
}
|
|
25
|
+
export function legacyNativeItemsCollectionRef(firestore, catalogId) {
|
|
26
|
+
return firestore.collection("catalogData").doc(String(catalogId)).collection("items");
|
|
27
|
+
}
|
|
28
|
+
export function flatNativeItemsCollectionRef(firestore, catalogId) {
|
|
29
|
+
return firestore.collection(nativeItemsCollectionId(catalogId));
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=catalog-data-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-data-paths.js","sourceRoot":"","sources":["../../../src/firebase/catalog-data-paths.ts"],"names":[],"mappings":"AAGA,sFAAsF;AACtF,MAAM,UAAU,uBAAuB,CAAC,SAAoB;IAC1D,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;IACpC,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IACrE,OAAO,eAAe,EAAE,QAAQ,CAAC;AACnC,CAAC;AAID;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,SAAoB,EACpB,SAAoB;IAEpB,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IAC9B,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IAC3C,IAAI,CAAC,QAAQ,CAAC,KAAK;QAAE,OAAO,MAAM,CAAC;IAEnC,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAChF,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IAC5C,IAAI,CAAC,OAAO,CAAC,KAAK;QAAE,OAAO,QAAQ,CAAC;IAEpC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,SAAoB,EAAE,SAAoB;IACvF,OAAO,SAAS,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,SAAoB,EAAE,SAAoB;IACrF,OAAO,SAAS,CAAC,UAAU,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC;AAClE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/firebase/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/firebase/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/firebase/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/firebase/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC"}
|
|
@@ -4,8 +4,12 @@ import { FirestoreStore } from "./firestore-store.js";
|
|
|
4
4
|
export type NativeCatalogStoredRecord = NativeCatalogItemRecord;
|
|
5
5
|
export declare class NativeItemStore {
|
|
6
6
|
private readonly store;
|
|
7
|
+
private layoutCache;
|
|
7
8
|
constructor(store: FirestoreStore);
|
|
8
|
-
private
|
|
9
|
+
private layoutPromise;
|
|
10
|
+
/** Invalidate cached layout for a catalog (e.g. after migration). */
|
|
11
|
+
invalidateLayoutCache(catalogId?: CatalogId): void;
|
|
12
|
+
private itemsCollectionRef;
|
|
9
13
|
get(catalogId: CatalogId, itemId: ItemId): Promise<NativeCatalogStoredRecord | null>;
|
|
10
14
|
upsert(catalogId: CatalogId, record: NativeCatalogStoredRecord): Promise<void>;
|
|
11
15
|
delete(catalogId: CatalogId, itemId: ItemId): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-item-store.d.ts","sourceRoot":"","sources":["../../../src/firebase/native-item-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"native-item-store.d.ts","sourceRoot":"","sources":["../../../src/firebase/native-item-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAOtD,MAAM,MAAM,yBAAyB,GAAG,uBAAuB,CAAC;AAEhE,qBAAa,eAAe;IAGd,OAAO,CAAC,QAAQ,CAAC,KAAK;IAFlC,OAAO,CAAC,WAAW,CAAmF;gBAEzE,KAAK,EAAE,cAAc;IAElD,OAAO,CAAC,aAAa;IAUrB,qEAAqE;IACrE,qBAAqB,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI;YAKpC,kBAAkB;IAO1B,GAAG,CACP,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC;IAMtC,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9E,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3D,WAAW,CACf,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,yBAAyB,EAAE,GACnC,OAAO,CAAC,IAAI,CAAC;IAaV,IAAI,CACR,SAAS,EAAE,SAAS,EACpB,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KAC/B,GACA,OAAO,CAAC,yBAAyB,EAAE,CAAC;CAoBxC"}
|
|
@@ -1,42 +1,61 @@
|
|
|
1
1
|
import { FirestoreStore } from "./firestore-store.js";
|
|
2
|
+
import { flatNativeItemsCollectionRef, legacyNativeItemsCollectionRef, resolveNativeItemsLayout, } from "./catalog-data-paths.js";
|
|
2
3
|
export class NativeItemStore {
|
|
3
4
|
store;
|
|
5
|
+
layoutCache = new Map();
|
|
4
6
|
constructor(store) {
|
|
5
7
|
this.store = store;
|
|
6
8
|
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
.
|
|
12
|
-
.
|
|
9
|
+
layoutPromise(catalogId) {
|
|
10
|
+
const key = String(catalogId);
|
|
11
|
+
let p = this.layoutCache.get(key);
|
|
12
|
+
if (!p) {
|
|
13
|
+
p = resolveNativeItemsLayout(this.store.firestore, catalogId);
|
|
14
|
+
this.layoutCache.set(key, p);
|
|
15
|
+
}
|
|
16
|
+
return p;
|
|
17
|
+
}
|
|
18
|
+
/** Invalidate cached layout for a catalog (e.g. after migration). */
|
|
19
|
+
invalidateLayoutCache(catalogId) {
|
|
20
|
+
if (catalogId == null)
|
|
21
|
+
this.layoutCache.clear();
|
|
22
|
+
else
|
|
23
|
+
this.layoutCache.delete(String(catalogId));
|
|
24
|
+
}
|
|
25
|
+
async itemsCollectionRef(catalogId) {
|
|
26
|
+
const layout = await this.layoutPromise(catalogId);
|
|
27
|
+
return layout === "legacy"
|
|
28
|
+
? legacyNativeItemsCollectionRef(this.store.firestore, catalogId)
|
|
29
|
+
: flatNativeItemsCollectionRef(this.store.firestore, catalogId);
|
|
13
30
|
}
|
|
14
31
|
async get(catalogId, itemId) {
|
|
15
|
-
const
|
|
32
|
+
const col = await this.itemsCollectionRef(catalogId);
|
|
33
|
+
const snap = await col.doc(String(itemId)).get();
|
|
16
34
|
return snap.exists ? snap.data() : null;
|
|
17
35
|
}
|
|
18
36
|
async upsert(catalogId, record) {
|
|
19
|
-
await this.
|
|
37
|
+
const col = await this.itemsCollectionRef(catalogId);
|
|
38
|
+
await col.doc(String(record.itemId)).set(record, { merge: true });
|
|
20
39
|
}
|
|
21
40
|
async delete(catalogId, itemId) {
|
|
22
|
-
await this.
|
|
41
|
+
const col = await this.itemsCollectionRef(catalogId);
|
|
42
|
+
await col.doc(String(itemId)).delete();
|
|
23
43
|
}
|
|
24
44
|
async batchUpsert(catalogId, records) {
|
|
45
|
+
const col = await this.itemsCollectionRef(catalogId);
|
|
25
46
|
const chunkSize = 450; // keep below Firestore 500 writes
|
|
26
47
|
for (let i = 0; i < records.length; i += chunkSize) {
|
|
27
48
|
const chunk = records.slice(i, i + chunkSize);
|
|
28
49
|
const batch = this.store.firestore.batch();
|
|
29
50
|
for (const r of chunk) {
|
|
30
|
-
batch.set(
|
|
51
|
+
batch.set(col.doc(String(r.itemId)), r, { merge: true });
|
|
31
52
|
}
|
|
32
53
|
await batch.commit();
|
|
33
54
|
}
|
|
34
55
|
}
|
|
35
56
|
async list(catalogId, options) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
.doc(String(catalogId))
|
|
39
|
-
.collection("items");
|
|
57
|
+
const col = await this.itemsCollectionRef(catalogId);
|
|
58
|
+
let q = col;
|
|
40
59
|
const filterEq = options?.filterEq ?? {};
|
|
41
60
|
for (const [k, v] of Object.entries(filterEq)) {
|
|
42
61
|
q = q.where(`indexed.${k}`, "==", v);
|
|
@@ -47,7 +66,6 @@ export class NativeItemStore {
|
|
|
47
66
|
}
|
|
48
67
|
const offset = options?.offset ?? 0;
|
|
49
68
|
const limit = options?.limit ?? 100;
|
|
50
|
-
// Firestore doesn't support skip/offset directly; emulate by reading + slicing.
|
|
51
69
|
const snap = await q.limit(offset + limit).get();
|
|
52
70
|
return snap.docs.slice(offset, offset + limit).map((d) => d.data());
|
|
53
71
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-item-store.js","sourceRoot":"","sources":["../../../src/firebase/native-item-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"native-item-store.js","sourceRoot":"","sources":["../../../src/firebase/native-item-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACL,4BAA4B,EAC5B,8BAA8B,EAC9B,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AAIjC,MAAM,OAAO,eAAe;IAGG;IAFrB,WAAW,GAAG,IAAI,GAAG,EAAwE,CAAC;IAEtG,YAA6B,KAAqB;QAArB,UAAK,GAAL,KAAK,CAAgB;IAAG,CAAC;IAE9C,aAAa,CAAC,SAAoB;QACxC,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAC9B,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,CAAC,GAAG,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC9D,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,qEAAqE;IACrE,qBAAqB,CAAC,SAAqB;QACzC,IAAI,SAAS,IAAI,IAAI;YAAE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;;YAC3C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAClD,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,SAAoB;QACnD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACnD,OAAO,MAAM,KAAK,QAAQ;YACxB,CAAC,CAAC,8BAA8B,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC;YACjE,CAAC,CAAC,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,GAAG,CACP,SAAoB,EACpB,MAAc;QAEd,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,IAAI,CAAC,IAAI,EAAgC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,SAAoB,EAAE,MAAiC;QAClE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACrD,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,SAAoB,EAAE,MAAc;QAC/C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACrD,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,WAAW,CACf,SAAoB,EACpB,OAAoC;QAEpC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,kCAAkC;QACzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;YACnD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;YAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YAC3C,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,CAAC;YACD,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CACR,SAAoB,EACpB,OAKC;QAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,CAAC,GAA4B,GAAG,CAAC;QAErC,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,EAAE,CAAC;QACzC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9C,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC;QACjC,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,GAAG,CAAC;QAEpC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAA+B,CAAC,CAAC;IACnG,CAAC;CACF"}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
export { buildRendererSnippetDocId } from "./renderer-metadata.js";
|
|
2
|
+
export { migrateNativeCatalogLayout, fixNativeCatalogDataMetadata, type MigrateNativeCatalogLayoutInput, type MigrateNativeCatalogLayoutResult, type MigrateNativeCatalogLayoutIssue, } from "./migrate-native-catalog-layout.js";
|
|
2
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/migrations/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/migrations/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,KAAK,+BAA+B,EACpC,KAAK,gCAAgC,EACrC,KAAK,+BAA+B,GACrC,MAAM,oCAAoC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/migrations/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/migrations/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,GAI7B,MAAM,oCAAoC,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { CatalogId } from "../contracts/ids.js";
|
|
2
|
+
import { CatalogStore } from "../firebase/catalog-store.js";
|
|
3
|
+
import { BindingStore } from "../firebase/binding-store.js";
|
|
4
|
+
import { DefinitionStore } from "../firebase/definition-store.js";
|
|
5
|
+
import { FirestoreStore } from "../firebase/firestore-store.js";
|
|
6
|
+
import { NativeItemStore } from "../firebase/native-item-store.js";
|
|
7
|
+
import { CatalogDataIndexStore } from "../firebase/catalog-data-index-store.js";
|
|
8
|
+
export type MigrateNativeCatalogLayoutInput = {
|
|
9
|
+
dryRun?: boolean;
|
|
10
|
+
verifyOnly?: boolean;
|
|
11
|
+
overwrite?: boolean;
|
|
12
|
+
deleteLegacy?: boolean;
|
|
13
|
+
iHaveBackups?: boolean;
|
|
14
|
+
continueOnError?: boolean;
|
|
15
|
+
catalogIds?: CatalogId[];
|
|
16
|
+
appId?: string;
|
|
17
|
+
/** Write local NDJSON lines under this directory (created if missing). */
|
|
18
|
+
exportFilesDir?: string;
|
|
19
|
+
};
|
|
20
|
+
export type MigrateNativeCatalogLayoutIssue = {
|
|
21
|
+
catalogId: string;
|
|
22
|
+
code: string;
|
|
23
|
+
message: string;
|
|
24
|
+
};
|
|
25
|
+
export type MigrateNativeCatalogLayoutResult = {
|
|
26
|
+
ok: boolean;
|
|
27
|
+
migratedCatalogs: string[];
|
|
28
|
+
docsCopied: number;
|
|
29
|
+
legacyDeleted: number;
|
|
30
|
+
issues: MigrateNativeCatalogLayoutIssue[];
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* After native item rows **already** live under flat `catalogData-{catalogId}-items`, align
|
|
34
|
+
* `catalogDefinitions` storage hints and seed `catalogData/{catalogId}` index metadata.
|
|
35
|
+
* Does **not** copy legacy `catalogData/{catalogId}/items` → flat; that is `migrateNativeCatalogLayout`.
|
|
36
|
+
* Used by the tail of native layout migration and by Firebase restore (which writes items to flat first).
|
|
37
|
+
*/
|
|
38
|
+
export declare function fixNativeCatalogDataMetadata(deps: {
|
|
39
|
+
definitions: DefinitionStore;
|
|
40
|
+
catalogDataIndex: CatalogDataIndexStore;
|
|
41
|
+
nativeItems: NativeItemStore;
|
|
42
|
+
}, catalogIds: CatalogId[], nowIso: string): Promise<void>;
|
|
43
|
+
export declare function migrateNativeCatalogLayout(deps: {
|
|
44
|
+
firestoreStore: FirestoreStore;
|
|
45
|
+
catalogs: CatalogStore;
|
|
46
|
+
bindings: BindingStore;
|
|
47
|
+
nativeItems: NativeItemStore;
|
|
48
|
+
catalogDataIndex: CatalogDataIndexStore;
|
|
49
|
+
definitions: DefinitionStore;
|
|
50
|
+
}, input: MigrateNativeCatalogLayoutInput): Promise<MigrateNativeCatalogLayoutResult>;
|
|
51
|
+
//# sourceMappingURL=migrate-native-catalog-layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-native-catalog-layout.d.ts","sourceRoot":"","sources":["../../../src/migrations/migrate-native-catalog-layout.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAOhF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,EAAE,EAAE,OAAO,CAAC;IACZ,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,+BAA+B,EAAE,CAAC;CAC3C,CAAC;AAoCF;;;;;GAKG;AACH,wBAAsB,4BAA4B,CAChD,IAAI,EAAE;IACJ,WAAW,EAAE,eAAe,CAAC;IAC7B,gBAAgB,EAAE,qBAAqB,CAAC;IACxC,WAAW,EAAE,eAAe,CAAC;CAC9B,EACD,UAAU,EAAE,SAAS,EAAE,EACvB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE;IACJ,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,YAAY,CAAC;IACvB,WAAW,EAAE,eAAe,CAAC;IAC7B,gBAAgB,EAAE,qBAAqB,CAAC;IACxC,WAAW,EAAE,eAAe,CAAC;CAC9B,EACD,KAAK,EAAE,+BAA+B,GACrC,OAAO,CAAC,gCAAgC,CAAC,CA4K3C"}
|