@x12i/catalox 3.1.1 → 3.3.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 +6 -1
- package/dist/src/catalox/backup-data.d.ts +1 -6
- package/dist/src/catalox/backup-data.d.ts.map +1 -1
- package/dist/src/catalox/backup-data.js +71 -418
- package/dist/src/catalox/backup-data.js.map +1 -1
- package/dist/src/catalox/catalox-bound.d.ts +1 -2
- package/dist/src/catalox/catalox-bound.d.ts.map +1 -1
- package/dist/src/catalox/catalox-bound.js +0 -3
- package/dist/src/catalox/catalox-bound.js.map +1 -1
- package/dist/src/catalox/catalox.d.ts +2 -7
- package/dist/src/catalox/catalox.d.ts.map +1 -1
- package/dist/src/catalox/catalox.js +2 -16
- package/dist/src/catalox/catalox.js.map +1 -1
- package/dist/src/catalox/create-catalox.d.ts.map +1 -1
- package/dist/src/catalox/create-catalox.js +4 -1
- package/dist/src/catalox/create-catalox.js.map +1 -1
- package/dist/src/catalox/index.d.ts +2 -2
- package/dist/src/catalox/index.d.ts.map +1 -1
- package/dist/src/catalox/index.js +2 -2
- package/dist/src/catalox/index.js.map +1 -1
- package/dist/src/catalox/record-history.d.ts.map +1 -1
- package/dist/src/catalox/record-history.js +34 -0
- package/dist/src/catalox/record-history.js.map +1 -1
- package/dist/src/catalox/restore-firestore-backup.d.ts +6 -3
- package/dist/src/catalox/restore-firestore-backup.d.ts.map +1 -1
- package/dist/src/catalox/restore-firestore-backup.js +3 -224
- package/dist/src/catalox/restore-firestore-backup.js.map +1 -1
- package/dist/src/cli/index.js +27 -66
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/contracts/backup.d.ts +2 -2
- package/dist/src/contracts/backup.d.ts.map +1 -1
- package/dist/src/contracts/index.d.ts +1 -1
- 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 +0 -39
- package/dist/src/contracts/restore.d.ts.map +1 -1
- package/dist/src/firebase/catalog-item-history-store.d.ts.map +1 -1
- package/dist/src/firebase/catalog-item-history-store.js +35 -6
- package/dist/src/firebase/catalog-item-history-store.js.map +1 -1
- package/package.json +6 -3
- package/dist/adapters/api/api-adapter.d.ts +0 -22
- package/dist/adapters/api/api-adapter.d.ts.map +0 -1
- package/dist/adapters/api/api-adapter.js +0 -60
- package/dist/adapters/api/api-adapter.js.map +0 -1
- package/dist/adapters/api/index.d.ts +0 -2
- package/dist/adapters/api/index.d.ts.map +0 -1
- package/dist/adapters/api/index.js +0 -2
- package/dist/adapters/api/index.js.map +0 -1
- package/dist/adapters/mongo/index.d.ts +0 -3
- package/dist/adapters/mongo/index.d.ts.map +0 -1
- package/dist/adapters/mongo/index.js +0 -3
- package/dist/adapters/mongo/index.js.map +0 -1
- package/dist/adapters/mongo/mongo-adapter.d.ts +0 -21
- package/dist/adapters/mongo/mongo-adapter.d.ts.map +0 -1
- package/dist/adapters/mongo/mongo-adapter.js +0 -57
- package/dist/adapters/mongo/mongo-adapter.js.map +0 -1
- package/dist/adapters/mongo/resolve-db.d.ts +0 -4
- package/dist/adapters/mongo/resolve-db.d.ts.map +0 -1
- package/dist/adapters/mongo/resolve-db.js +0 -10
- package/dist/adapters/mongo/resolve-db.js.map +0 -1
- package/dist/bindings/index.d.ts +0 -2
- package/dist/bindings/index.d.ts.map +0 -1
- package/dist/bindings/index.js +0 -3
- package/dist/bindings/index.js.map +0 -1
- package/dist/catalox/authorization.d.ts +0 -11
- package/dist/catalox/authorization.d.ts.map +0 -1
- package/dist/catalox/authorization.js +0 -37
- package/dist/catalox/authorization.js.map +0 -1
- package/dist/catalox/catalox.d.ts +0 -80
- package/dist/catalox/catalox.d.ts.map +0 -1
- package/dist/catalox/catalox.js +0 -492
- package/dist/catalox/catalox.js.map +0 -1
- package/dist/catalox/context.d.ts +0 -17
- package/dist/catalox/context.d.ts.map +0 -1
- package/dist/catalox/context.js +0 -21
- package/dist/catalox/context.js.map +0 -1
- package/dist/catalox/identity.d.ts +0 -7
- package/dist/catalox/identity.d.ts.map +0 -1
- package/dist/catalox/identity.js +0 -26
- package/dist/catalox/identity.js.map +0 -1
- package/dist/catalox/index.d.ts +0 -6
- package/dist/catalox/index.d.ts.map +0 -1
- package/dist/catalox/index.js +0 -6
- package/dist/catalox/index.js.map +0 -1
- package/dist/catalox/json-io.d.ts +0 -3
- package/dist/catalox/json-io.d.ts.map +0 -1
- package/dist/catalox/json-io.js +0 -7
- package/dist/catalox/json-io.js.map +0 -1
- package/dist/contracts/adapters.d.ts +0 -40
- package/dist/contracts/adapters.d.ts.map +0 -1
- package/dist/contracts/adapters.js +0 -2
- package/dist/contracts/adapters.js.map +0 -1
- package/dist/contracts/apps.d.ts +0 -11
- package/dist/contracts/apps.d.ts.map +0 -1
- package/dist/contracts/apps.js +0 -2
- package/dist/contracts/apps.js.map +0 -1
- package/dist/contracts/bindings.d.ts +0 -26
- package/dist/contracts/bindings.d.ts.map +0 -1
- package/dist/contracts/bindings.js +0 -2
- package/dist/contracts/bindings.js.map +0 -1
- package/dist/contracts/bootstrap.d.ts +0 -7
- package/dist/contracts/bootstrap.d.ts.map +0 -1
- package/dist/contracts/bootstrap.js +0 -2
- package/dist/contracts/bootstrap.js.map +0 -1
- package/dist/contracts/catalogs.d.ts +0 -51
- package/dist/contracts/catalogs.d.ts.map +0 -1
- package/dist/contracts/catalogs.js +0 -2
- package/dist/contracts/catalogs.js.map +0 -1
- package/dist/contracts/config.d.ts +0 -14
- package/dist/contracts/config.d.ts.map +0 -1
- package/dist/contracts/config.js +0 -2
- package/dist/contracts/config.js.map +0 -1
- package/dist/contracts/context.d.ts +0 -11
- package/dist/contracts/context.d.ts.map +0 -1
- package/dist/contracts/context.js +0 -2
- package/dist/contracts/context.js.map +0 -1
- package/dist/contracts/descriptors.d.ts +0 -73
- package/dist/contracts/descriptors.d.ts.map +0 -1
- package/dist/contracts/descriptors.js +0 -2
- package/dist/contracts/descriptors.js.map +0 -1
- package/dist/contracts/discovery.d.ts +0 -25
- package/dist/contracts/discovery.d.ts.map +0 -1
- package/dist/contracts/discovery.js +0 -2
- package/dist/contracts/discovery.js.map +0 -1
- package/dist/contracts/errors.d.ts +0 -32
- package/dist/contracts/errors.d.ts.map +0 -1
- package/dist/contracts/errors.js +0 -53
- package/dist/contracts/errors.js.map +0 -1
- package/dist/contracts/ids.d.ts +0 -7
- package/dist/contracts/ids.d.ts.map +0 -1
- package/dist/contracts/ids.js +0 -2
- package/dist/contracts/ids.js.map +0 -1
- package/dist/contracts/index.d.ts +0 -21
- package/dist/contracts/index.d.ts.map +0 -1
- package/dist/contracts/index.js +0 -2
- package/dist/contracts/index.js.map +0 -1
- package/dist/contracts/inputs.d.ts +0 -19
- package/dist/contracts/inputs.d.ts.map +0 -1
- package/dist/contracts/inputs.js +0 -2
- package/dist/contracts/inputs.js.map +0 -1
- package/dist/contracts/item-validation.d.ts +0 -11
- package/dist/contracts/item-validation.d.ts.map +0 -1
- package/dist/contracts/item-validation.js +0 -2
- package/dist/contracts/item-validation.js.map +0 -1
- package/dist/contracts/items.d.ts +0 -49
- package/dist/contracts/items.d.ts.map +0 -1
- package/dist/contracts/items.js +0 -2
- package/dist/contracts/items.js.map +0 -1
- package/dist/contracts/mappings.d.ts +0 -35
- package/dist/contracts/mappings.d.ts.map +0 -1
- package/dist/contracts/mappings.js +0 -2
- package/dist/contracts/mappings.js.map +0 -1
- package/dist/contracts/query.d.ts +0 -10
- package/dist/contracts/query.d.ts.map +0 -1
- package/dist/contracts/query.js +0 -2
- package/dist/contracts/query.js.map +0 -1
- package/dist/contracts/references.d.ts +0 -11
- package/dist/contracts/references.d.ts.map +0 -1
- package/dist/contracts/references.js +0 -2
- package/dist/contracts/references.js.map +0 -1
- package/dist/contracts/sync.d.ts +0 -7
- package/dist/contracts/sync.d.ts.map +0 -1
- package/dist/contracts/sync.js +0 -2
- package/dist/contracts/sync.js.map +0 -1
- package/dist/contracts/validation.d.ts +0 -12
- package/dist/contracts/validation.d.ts.map +0 -1
- package/dist/contracts/validation.js +0 -2
- package/dist/contracts/validation.js.map +0 -1
- package/dist/errors/index.d.ts +0 -2
- package/dist/errors/index.d.ts.map +0 -1
- package/dist/errors/index.js +0 -3
- package/dist/errors/index.js.map +0 -1
- package/dist/firebase/adapter-store.d.ts +0 -15
- package/dist/firebase/adapter-store.d.ts.map +0 -1
- package/dist/firebase/adapter-store.js +0 -18
- package/dist/firebase/adapter-store.js.map +0 -1
- package/dist/firebase/app-store.d.ts +0 -11
- package/dist/firebase/app-store.d.ts.map +0 -1
- package/dist/firebase/app-store.js +0 -18
- package/dist/firebase/app-store.js.map +0 -1
- package/dist/firebase/binding-store.d.ts +0 -13
- package/dist/firebase/binding-store.d.ts.map +0 -1
- package/dist/firebase/binding-store.js +0 -35
- package/dist/firebase/binding-store.js.map +0 -1
- package/dist/firebase/catalog-store.d.ts +0 -12
- package/dist/firebase/catalog-store.d.ts.map +0 -1
- package/dist/firebase/catalog-store.js +0 -22
- package/dist/firebase/catalog-store.js.map +0 -1
- package/dist/firebase/definition-store.d.ts +0 -39
- package/dist/firebase/definition-store.d.ts.map +0 -1
- package/dist/firebase/definition-store.js +0 -18
- package/dist/firebase/definition-store.js.map +0 -1
- package/dist/firebase/descriptor-store.d.ts +0 -11
- package/dist/firebase/descriptor-store.d.ts.map +0 -1
- package/dist/firebase/descriptor-store.js +0 -18
- package/dist/firebase/descriptor-store.js.map +0 -1
- package/dist/firebase/firestore-store.d.ts +0 -14
- package/dist/firebase/firestore-store.d.ts.map +0 -1
- package/dist/firebase/firestore-store.js +0 -15
- package/dist/firebase/firestore-store.js.map +0 -1
- package/dist/firebase/index.d.ts +0 -12
- package/dist/firebase/index.d.ts.map +0 -1
- package/dist/firebase/index.js +0 -12
- package/dist/firebase/index.js.map +0 -1
- package/dist/firebase/mapping-store.d.ts +0 -11
- package/dist/firebase/mapping-store.d.ts.map +0 -1
- package/dist/firebase/mapping-store.js +0 -18
- package/dist/firebase/mapping-store.js.map +0 -1
- package/dist/firebase/native-item-store.d.ts +0 -20
- package/dist/firebase/native-item-store.d.ts.map +0 -1
- package/dist/firebase/native-item-store.js +0 -55
- package/dist/firebase/native-item-store.js.map +0 -1
- package/dist/firebase/reference-store.d.ts +0 -17
- package/dist/firebase/reference-store.d.ts.map +0 -1
- package/dist/firebase/reference-store.js +0 -27
- package/dist/firebase/reference-store.js.map +0 -1
- package/dist/firebase/snapshot-store.d.ts +0 -11
- package/dist/firebase/snapshot-store.d.ts.map +0 -1
- package/dist/firebase/snapshot-store.js +0 -22
- package/dist/firebase/snapshot-store.js.map +0 -1
- package/dist/index.d.ts +0 -10
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -10
- package/dist/index.js.map +0 -1
- package/dist/mapping/execute-mapping.d.ts +0 -8
- package/dist/mapping/execute-mapping.d.ts.map +0 -1
- package/dist/mapping/execute-mapping.js +0 -78
- package/dist/mapping/execute-mapping.js.map +0 -1
- package/dist/mapping/helper-gap-report.d.ts +0 -7
- package/dist/mapping/helper-gap-report.d.ts.map +0 -1
- package/dist/mapping/helper-gap-report.js +0 -2
- package/dist/mapping/helper-gap-report.js.map +0 -1
- package/dist/mapping/index.d.ts +0 -4
- package/dist/mapping/index.d.ts.map +0 -1
- package/dist/mapping/index.js +0 -4
- package/dist/mapping/index.js.map +0 -1
- package/dist/mapping/validate-mapping.d.ts +0 -3
- package/dist/mapping/validate-mapping.d.ts.map +0 -1
- package/dist/mapping/validate-mapping.js +0 -32
- package/dist/mapping/validate-mapping.js.map +0 -1
- package/dist/test/integration/firestore.emulator.test.d.ts +0 -2
- package/dist/test/integration/firestore.emulator.test.d.ts.map +0 -1
- package/dist/test/integration/firestore.emulator.test.js +0 -117
- package/dist/test/integration/firestore.emulator.test.js.map +0 -1
- package/dist/test/integration/record-history.live.test.d.ts +0 -2
- package/dist/test/integration/record-history.live.test.d.ts.map +0 -1
- package/dist/test/integration/record-history.live.test.js +0 -126
- package/dist/test/integration/record-history.live.test.js.map +0 -1
- package/dist/test/unit/backup-timestamp.test.d.ts +0 -2
- package/dist/test/unit/backup-timestamp.test.d.ts.map +0 -1
- package/dist/test/unit/backup-timestamp.test.js +0 -11
- package/dist/test/unit/backup-timestamp.test.js.map +0 -1
- package/dist/test/unit/catalox-gcs-backup-export-manifest.test.d.ts +0 -2
- package/dist/test/unit/catalox-gcs-backup-export-manifest.test.d.ts.map +0 -1
- package/dist/test/unit/catalox-gcs-backup-export-manifest.test.js +0 -20
- package/dist/test/unit/catalox-gcs-backup-export-manifest.test.js.map +0 -1
- package/dist/test/unit/compact-catalog-filter.test.d.ts +0 -2
- package/dist/test/unit/compact-catalog-filter.test.d.ts.map +0 -1
- package/dist/test/unit/compact-catalog-filter.test.js +0 -18
- package/dist/test/unit/compact-catalog-filter.test.js.map +0 -1
- package/dist/test/unit/field-source-resolution.test.d.ts +0 -2
- package/dist/test/unit/field-source-resolution.test.d.ts.map +0 -1
- package/dist/test/unit/field-source-resolution.test.js +0 -45
- package/dist/test/unit/field-source-resolution.test.js.map +0 -1
- package/dist/test/unit/gcs-backup-run-folder.test.d.ts +0 -2
- package/dist/test/unit/gcs-backup-run-folder.test.d.ts.map +0 -1
- package/dist/test/unit/gcs-backup-run-folder.test.js +0 -10
- package/dist/test/unit/gcs-backup-run-folder.test.js.map +0 -1
- package/dist/test/unit/gcs-firestore-compare.test.d.ts +0 -2
- package/dist/test/unit/gcs-firestore-compare.test.d.ts.map +0 -1
- package/dist/test/unit/gcs-firestore-compare.test.js +0 -14
- package/dist/test/unit/gcs-firestore-compare.test.js.map +0 -1
- package/dist/test/unit/gcs-firestore-paths.test.d.ts +0 -2
- package/dist/test/unit/gcs-firestore-paths.test.d.ts.map +0 -1
- package/dist/test/unit/gcs-firestore-paths.test.js +0 -16
- package/dist/test/unit/gcs-firestore-paths.test.js.map +0 -1
- package/dist/test/unit/identity.test.d.ts +0 -2
- package/dist/test/unit/identity.test.d.ts.map +0 -1
- package/dist/test/unit/identity.test.js +0 -18
- package/dist/test/unit/identity.test.js.map +0 -1
- package/dist/test/unit/jsx-snippets.test.d.ts +0 -2
- package/dist/test/unit/jsx-snippets.test.d.ts.map +0 -1
- package/dist/test/unit/jsx-snippets.test.js +0 -35
- package/dist/test/unit/jsx-snippets.test.js.map +0 -1
- package/dist/test/unit/mapping.test.d.ts +0 -2
- package/dist/test/unit/mapping.test.d.ts.map +0 -1
- package/dist/test/unit/mapping.test.js +0 -19
- package/dist/test/unit/mapping.test.js.map +0 -1
- package/dist/test/unit/markdown-and-diagrams.test.d.ts +0 -2
- package/dist/test/unit/markdown-and-diagrams.test.d.ts.map +0 -1
- package/dist/test/unit/markdown-and-diagrams.test.js +0 -62
- package/dist/test/unit/markdown-and-diagrams.test.js.map +0 -1
- package/dist/test/unit/native-catalog-merge.test.d.ts +0 -2
- package/dist/test/unit/native-catalog-merge.test.d.ts.map +0 -1
- package/dist/test/unit/native-catalog-merge.test.js +0 -33
- package/dist/test/unit/native-catalog-merge.test.js.map +0 -1
- package/dist/test/unit/native-scope.test.d.ts +0 -2
- package/dist/test/unit/native-scope.test.d.ts.map +0 -1
- package/dist/test/unit/native-scope.test.js +0 -29
- package/dist/test/unit/native-scope.test.js.map +0 -1
- package/dist/test/unit/record-history-path.test.d.ts +0 -2
- package/dist/test/unit/record-history-path.test.d.ts.map +0 -1
- package/dist/test/unit/record-history-path.test.js +0 -24
- package/dist/test/unit/record-history-path.test.js.map +0 -1
- package/dist/test/unit/renderer-metadata-migration.test.d.ts +0 -2
- package/dist/test/unit/renderer-metadata-migration.test.d.ts.map +0 -1
- package/dist/test/unit/renderer-metadata-migration.test.js +0 -33
- package/dist/test/unit/renderer-metadata-migration.test.js.map +0 -1
- package/dist/test/unit/renderer-metadata.test.d.ts +0 -2
- package/dist/test/unit/renderer-metadata.test.d.ts.map +0 -1
- package/dist/test/unit/renderer-metadata.test.js +0 -10
- package/dist/test/unit/renderer-metadata.test.js.map +0 -1
- package/dist/test/unit/resolve-native-items-layout.test.d.ts +0 -2
- package/dist/test/unit/resolve-native-items-layout.test.d.ts.map +0 -1
- package/dist/test/unit/resolve-native-items-layout.test.js +0 -50
- package/dist/test/unit/resolve-native-items-layout.test.js.map +0 -1
- package/dist/test/unit/ui-spec-validation.test.d.ts +0 -2
- package/dist/test/unit/ui-spec-validation.test.d.ts.map +0 -1
- package/dist/test/unit/ui-spec-validation.test.js +0 -90
- package/dist/test/unit/ui-spec-validation.test.js.map +0 -1
- package/dist/validation/index.d.ts +0 -2
- package/dist/validation/index.d.ts.map +0 -1
- package/dist/validation/index.js +0 -3
- package/dist/validation/index.js.map +0 -1
|
@@ -1,66 +1,13 @@
|
|
|
1
|
-
import { BACKUP_METADATA_SOURCE_NAMES, deleteAllDocsInFirestoreCollection,
|
|
1
|
+
import { BACKUP_METADATA_SOURCE_NAMES, deleteAllDocsInFirestoreCollection, firebaseNativeLogical, firebaseSnapshotLogical, firebaseSnapshotRunLogical, paginatedCopyFirestoreToFirestore, } from "./backup-data.js";
|
|
2
2
|
import { NativeItemStore } from "../firebase/native-item-store.js";
|
|
3
3
|
import { DefinitionStore } from "../firebase/definition-store.js";
|
|
4
4
|
import { CatalogDataIndexStore } from "../firebase/catalog-data-index-store.js";
|
|
5
|
-
import { legacyNativeItemsCollectionRef,
|
|
6
|
-
import { fixNativeCatalogDataMetadata } from "../migrations/migrate-native-catalog-layout.js";
|
|
5
|
+
import { legacyNativeItemsCollectionRef, nativeItemsCollectionId, } from "../firebase/catalog-data-paths.js";
|
|
7
6
|
export const RESTORE_FIRESTORE_BACKUP_SESSION_COLLECTION = "backup-restoreSessions";
|
|
8
7
|
const RESTORE_MANIFEST_COLLECTION = RESTORE_FIRESTORE_BACKUP_SESSION_COLLECTION;
|
|
9
|
-
function sourceBackupCollectionId(source, logical) {
|
|
10
|
-
if (source.kind === "latest")
|
|
11
|
-
return firebaseLatestName(logical);
|
|
12
|
-
return firebaseVersionedName(source.versionTimestamp, logical);
|
|
13
|
-
}
|
|
14
8
|
function preRestoreCollectionId(restoreSessionId, logical) {
|
|
15
9
|
return `${restoreSessionId}__preRestore-${logical}`;
|
|
16
10
|
}
|
|
17
|
-
/**
|
|
18
|
-
* Discover snapshot backup mirrors by scanning top-level collection ids.
|
|
19
|
-
* Parses `catalogSnapshotsRun--{catalogId}--{runId}` with the last `--` as delimiter (catalogId / runId must not contain `--`).
|
|
20
|
-
*/
|
|
21
|
-
async function listSnapshotRestoreWork(fs, source, includeSnapshots) {
|
|
22
|
-
if (!includeSnapshots)
|
|
23
|
-
return { snapshotCatalogIds: [], snapshotRuns: [] };
|
|
24
|
-
const cols = await fs.listCollections();
|
|
25
|
-
const itemPrefix = source.kind === "latest" ? "backup-catalogSnapshots--" : `${source.versionTimestamp}__backup-catalogSnapshots--`;
|
|
26
|
-
const runPrefix = source.kind === "latest"
|
|
27
|
-
? "backup-catalogSnapshotsRun--"
|
|
28
|
-
: `${source.versionTimestamp}__backup-catalogSnapshotsRun--`;
|
|
29
|
-
const snapshotCatalogIds = new Set();
|
|
30
|
-
const snapshotRuns = [];
|
|
31
|
-
for (const c of cols) {
|
|
32
|
-
const id = c.id;
|
|
33
|
-
if (!id.startsWith(itemPrefix) || id.includes("catalogSnapshotsRun"))
|
|
34
|
-
continue;
|
|
35
|
-
const catalogId = id.slice(itemPrefix.length);
|
|
36
|
-
if (!catalogId)
|
|
37
|
-
continue;
|
|
38
|
-
const probe = await fs.collection(id).limit(1).get();
|
|
39
|
-
if (!probe.empty)
|
|
40
|
-
snapshotCatalogIds.add(catalogId);
|
|
41
|
-
}
|
|
42
|
-
const runSeen = new Set();
|
|
43
|
-
for (const c of cols) {
|
|
44
|
-
const id = c.id;
|
|
45
|
-
if (!id.startsWith(runPrefix))
|
|
46
|
-
continue;
|
|
47
|
-
const rest = id.slice(runPrefix.length);
|
|
48
|
-
const delim = rest.lastIndexOf("--");
|
|
49
|
-
if (delim === -1)
|
|
50
|
-
continue;
|
|
51
|
-
const catalogId = rest.slice(0, delim);
|
|
52
|
-
const runId = rest.slice(delim + 2);
|
|
53
|
-
const probe = await fs.collection(id).limit(1).get();
|
|
54
|
-
if (probe.empty)
|
|
55
|
-
continue;
|
|
56
|
-
const rk = `${catalogId}\0${runId}`;
|
|
57
|
-
if (runSeen.has(rk))
|
|
58
|
-
continue;
|
|
59
|
-
runSeen.add(rk);
|
|
60
|
-
snapshotRuns.push({ catalogId, runId });
|
|
61
|
-
}
|
|
62
|
-
return { snapshotCatalogIds: [...snapshotCatalogIds], snapshotRuns };
|
|
63
|
-
}
|
|
64
11
|
async function writeManifest(fs, manifest) {
|
|
65
12
|
await fs.collection(RESTORE_MANIFEST_COLLECTION).doc(manifest.restoreSessionId).set(manifest, { merge: true });
|
|
66
13
|
}
|
|
@@ -70,175 +17,7 @@ async function readManifest(fs, restoreSessionId) {
|
|
|
70
17
|
return null;
|
|
71
18
|
return snap.data();
|
|
72
19
|
}
|
|
73
|
-
|
|
74
|
-
const issues = [];
|
|
75
|
-
const counts = {};
|
|
76
|
-
const nativeItemSourceLayoutByCatalogId = {};
|
|
77
|
-
if (input.source.kind === "versioned" && !input.source.versionTimestamp?.trim()) {
|
|
78
|
-
return {
|
|
79
|
-
ok: false,
|
|
80
|
-
restoreSessionId: "",
|
|
81
|
-
counts: {},
|
|
82
|
-
issues: [{ code: "missing_version_timestamp", message: "versioned restore requires versionTimestamp" }],
|
|
83
|
-
nativeItemSourceLayoutByCatalogId: {},
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
const fs = deps.firestoreStore.firestore;
|
|
87
|
-
const restoreSessionId = (input.restoreSessionId?.trim() && input.restoreSessionId) || formatBackupTimestamp();
|
|
88
|
-
const includeSnapshots = Boolean(input.includeSnapshots);
|
|
89
|
-
const allCatalogs = await deps.catalogs.listAll();
|
|
90
|
-
const nativeCatalogIds = await discoverNativeCatalogIds(fs, allCatalogs, {
|
|
91
|
-
bindings: deps.bindings,
|
|
92
|
-
...(input.catalogIds != null && input.catalogIds.length ? { catalogIds: input.catalogIds } : {}),
|
|
93
|
-
...(input.appId != null && input.appId !== "" ? { appId: input.appId } : {}),
|
|
94
|
-
});
|
|
95
|
-
const probeLogical = BACKUP_METADATA_SOURCE_NAMES[0];
|
|
96
|
-
const probeId = sourceBackupCollectionId(input.source, probeLogical);
|
|
97
|
-
const probeSnap = await fs.collection(probeId).limit(1).get();
|
|
98
|
-
if (probeSnap.empty) {
|
|
99
|
-
return {
|
|
100
|
-
ok: false,
|
|
101
|
-
restoreSessionId,
|
|
102
|
-
counts,
|
|
103
|
-
issues: [
|
|
104
|
-
{
|
|
105
|
-
code: "backup_source_empty",
|
|
106
|
-
message: `No documents in backup collection ${probeId}; nothing to restore from this source`,
|
|
107
|
-
detail: { probeId },
|
|
108
|
-
},
|
|
109
|
-
],
|
|
110
|
-
nativeItemSourceLayoutByCatalogId: {},
|
|
111
|
-
};
|
|
112
|
-
}
|
|
113
|
-
const { snapshotCatalogIds, snapshotRuns } = await listSnapshotRestoreWork(fs, input.source, includeSnapshots);
|
|
114
|
-
try {
|
|
115
|
-
for (const name of BACKUP_METADATA_SOURCE_NAMES) {
|
|
116
|
-
const destPre = preRestoreCollectionId(restoreSessionId, name);
|
|
117
|
-
await deleteAllDocsInFirestoreCollection(fs, destPre);
|
|
118
|
-
await paginatedCopyFirestoreToFirestore(fs, name, destPre, counts, `pre:${destPre}`);
|
|
119
|
-
}
|
|
120
|
-
for (const catalogId of nativeCatalogIds) {
|
|
121
|
-
const layout = await resolveNativeItemsLayout(fs, catalogId);
|
|
122
|
-
nativeItemSourceLayoutByCatalogId[String(catalogId)] = layout;
|
|
123
|
-
const logical = firebaseNativeLogical(String(catalogId));
|
|
124
|
-
const destPre = preRestoreCollectionId(restoreSessionId, logical);
|
|
125
|
-
await deleteAllDocsInFirestoreCollection(fs, destPre);
|
|
126
|
-
const livePath = layout === "legacy"
|
|
127
|
-
? legacyNativeItemsCollectionRef(fs, catalogId).path
|
|
128
|
-
: fs.collection(nativeItemsCollectionId(String(catalogId))).path;
|
|
129
|
-
await paginatedCopyFirestoreToFirestore(fs, livePath, destPre, counts, `pre:${destPre}`);
|
|
130
|
-
}
|
|
131
|
-
if (includeSnapshots) {
|
|
132
|
-
for (const catalogId of snapshotCatalogIds) {
|
|
133
|
-
const logical = firebaseSnapshotLogical(catalogId);
|
|
134
|
-
const destPre = preRestoreCollectionId(restoreSessionId, logical);
|
|
135
|
-
await deleteAllDocsInFirestoreCollection(fs, destPre);
|
|
136
|
-
const liveItems = fs.collection("catalogSnapshots").doc(catalogId).collection("items").path;
|
|
137
|
-
await paginatedCopyFirestoreToFirestore(fs, liveItems, destPre, counts, `pre:${destPre}`);
|
|
138
|
-
}
|
|
139
|
-
for (const { catalogId, runId } of snapshotRuns) {
|
|
140
|
-
const logical = firebaseSnapshotRunLogical(catalogId, runId);
|
|
141
|
-
const destPre = preRestoreCollectionId(restoreSessionId, logical);
|
|
142
|
-
await deleteAllDocsInFirestoreCollection(fs, destPre);
|
|
143
|
-
const livePath = fs.collection("catalogSnapshots").doc(catalogId).collection("runs").doc(runId).collection("items")
|
|
144
|
-
.path;
|
|
145
|
-
await paginatedCopyFirestoreToFirestore(fs, livePath, destPre, counts, `pre:${destPre}`);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
const manifest = {
|
|
149
|
-
restoreSessionId,
|
|
150
|
-
createdAt: new Date().toISOString(),
|
|
151
|
-
source: input.source,
|
|
152
|
-
includeSnapshots,
|
|
153
|
-
phase: "preRestoreCaptured",
|
|
154
|
-
nativeCatalogIds: nativeCatalogIds.map(String),
|
|
155
|
-
nativeItemSourceLayoutByCatalogId: { ...nativeItemSourceLayoutByCatalogId },
|
|
156
|
-
metadataSourceNames: BACKUP_METADATA_SOURCE_NAMES,
|
|
157
|
-
snapshotCatalogIds,
|
|
158
|
-
snapshotRuns,
|
|
159
|
-
};
|
|
160
|
-
await writeManifest(fs, manifest);
|
|
161
|
-
for (const name of BACKUP_METADATA_SOURCE_NAMES) {
|
|
162
|
-
const src = sourceBackupCollectionId(input.source, name);
|
|
163
|
-
await deleteAllDocsInFirestoreCollection(fs, name);
|
|
164
|
-
await paginatedCopyFirestoreToFirestore(fs, src, name, counts, `restore:${name}`);
|
|
165
|
-
}
|
|
166
|
-
for (const catalogId of nativeCatalogIds) {
|
|
167
|
-
const cid = String(catalogId);
|
|
168
|
-
const flatPath = nativeItemsCollectionId(cid);
|
|
169
|
-
await deleteAllDocsInFirestoreCollection(fs, flatPath);
|
|
170
|
-
const src = sourceBackupCollectionId(input.source, firebaseNativeLogical(cid));
|
|
171
|
-
await paginatedCopyFirestoreToFirestore(fs, src, flatPath, counts, `restore:nativeFlat:${cid}`);
|
|
172
|
-
const legacyPath = legacyNativeItemsCollectionRef(fs, catalogId).path;
|
|
173
|
-
await deleteAllDocsInFirestoreCollection(fs, legacyPath);
|
|
174
|
-
}
|
|
175
|
-
const nowIso = new Date().toISOString();
|
|
176
|
-
if (nativeCatalogIds.length > 0) {
|
|
177
|
-
await fixNativeCatalogDataMetadata({
|
|
178
|
-
definitions: deps.definitions,
|
|
179
|
-
catalogDataIndex: deps.catalogDataIndex,
|
|
180
|
-
nativeItems: deps.nativeItems,
|
|
181
|
-
}, nativeCatalogIds, nowIso);
|
|
182
|
-
}
|
|
183
|
-
if (includeSnapshots) {
|
|
184
|
-
for (const catalogId of snapshotCatalogIds) {
|
|
185
|
-
const dest = fs.collection("catalogSnapshots").doc(catalogId).collection("items").path;
|
|
186
|
-
const src = sourceBackupCollectionId(input.source, firebaseSnapshotLogical(catalogId));
|
|
187
|
-
await deleteAllDocsInFirestoreCollection(fs, dest);
|
|
188
|
-
await paginatedCopyFirestoreToFirestore(fs, src, dest, counts, `restore:snap:${catalogId}`);
|
|
189
|
-
}
|
|
190
|
-
for (const { catalogId, runId } of snapshotRuns) {
|
|
191
|
-
const dest = fs
|
|
192
|
-
.collection("catalogSnapshots")
|
|
193
|
-
.doc(catalogId)
|
|
194
|
-
.collection("runs")
|
|
195
|
-
.doc(runId)
|
|
196
|
-
.collection("items").path;
|
|
197
|
-
const src = sourceBackupCollectionId(input.source, firebaseSnapshotRunLogical(catalogId, runId));
|
|
198
|
-
await deleteAllDocsInFirestoreCollection(fs, dest);
|
|
199
|
-
await paginatedCopyFirestoreToFirestore(fs, src, dest, counts, `restore:snaprun:${catalogId}:${runId}`);
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
await writeManifest(fs, { ...manifest, phase: "restored" });
|
|
203
|
-
deps.nativeItems.invalidateLayoutCache();
|
|
204
|
-
return {
|
|
205
|
-
ok: true,
|
|
206
|
-
restoreSessionId,
|
|
207
|
-
counts,
|
|
208
|
-
issues,
|
|
209
|
-
nativeItemSourceLayoutByCatalogId,
|
|
210
|
-
};
|
|
211
|
-
}
|
|
212
|
-
catch (e) {
|
|
213
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
214
|
-
issues.push({ code: "restore_failed", message: msg });
|
|
215
|
-
try {
|
|
216
|
-
await writeManifest(fs, {
|
|
217
|
-
restoreSessionId,
|
|
218
|
-
createdAt: new Date().toISOString(),
|
|
219
|
-
source: input.source,
|
|
220
|
-
includeSnapshots,
|
|
221
|
-
phase: "failed",
|
|
222
|
-
nativeCatalogIds: nativeCatalogIds.map(String),
|
|
223
|
-
nativeItemSourceLayoutByCatalogId: { ...nativeItemSourceLayoutByCatalogId },
|
|
224
|
-
metadataSourceNames: BACKUP_METADATA_SOURCE_NAMES,
|
|
225
|
-
snapshotCatalogIds,
|
|
226
|
-
snapshotRuns,
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
catch {
|
|
230
|
-
// ignore manifest write errors during failure handling
|
|
231
|
-
}
|
|
232
|
-
deps.nativeItems.invalidateLayoutCache();
|
|
233
|
-
return {
|
|
234
|
-
ok: false,
|
|
235
|
-
restoreSessionId,
|
|
236
|
-
counts,
|
|
237
|
-
issues,
|
|
238
|
-
nativeItemSourceLayoutByCatalogId,
|
|
239
|
-
};
|
|
240
|
-
}
|
|
241
|
-
}
|
|
20
|
+
// Firestore mirror restore (backup-* / {ts}__backup-*) removed; backups are storage-only (GCS).
|
|
242
21
|
export async function runUndoFirestoreRestore(deps, input) {
|
|
243
22
|
const issues = [];
|
|
244
23
|
const counts = {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restore-firestore-backup.js","sourceRoot":"","sources":["../../../src/catalox/restore-firestore-backup.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"restore-firestore-backup.js","sourceRoot":"","sources":["../../../src/catalox/restore-firestore-backup.ts"],"names":[],"mappings":"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"}
|
package/dist/src/cli/index.js
CHANGED
|
@@ -267,40 +267,26 @@ storeCmd
|
|
|
267
267
|
});
|
|
268
268
|
const firestoreCmd = program
|
|
269
269
|
.command("firestore")
|
|
270
|
-
.description("Firestore backup
|
|
270
|
+
.description("Firestore backup (GCS), restore-from-GCS, and native layout migration");
|
|
271
271
|
firestoreCmd
|
|
272
272
|
.command("backup")
|
|
273
|
-
.description("
|
|
273
|
+
.description("Catalox backup to GCS only (NDJSON + catalox-backup-manifest.json)")
|
|
274
274
|
.requiredOption("--app <appId>", "AppId for Catalox context")
|
|
275
|
-
.
|
|
276
|
-
.option("--mongo-uri <uri>", "Mongo connection string (required when mode=mongo)")
|
|
277
|
-
.option("--bucket <name>", "GCS bucket name (required when mode=gcs)")
|
|
275
|
+
.option("--bucket <name>", "GCS bucket name (default: catalox)", "catalox")
|
|
278
276
|
.option("--gcs-prefix <path>", "Optional prefix before timestamp folder (default: catalox-firestore-backups/)", "")
|
|
279
277
|
.option("--label <text>", "Backup label stored on manifest")
|
|
280
278
|
.option("--snapshots", "Include catalogSnapshots data", false)
|
|
281
279
|
.option("--catalog <catalogId...>", "Restrict which native catalogs are copied")
|
|
282
280
|
.option("--god", "God mode", false)
|
|
283
281
|
.action(async (opts) => {
|
|
284
|
-
|
|
285
|
-
const mode = m === "mongo" ? "mongo" : m === "gcs" ? "gcs" : "firebase";
|
|
286
|
-
if (mode === "gcs" && !(opts.bucket != null && String(opts.bucket).trim())) {
|
|
287
|
-
// eslint-disable-next-line no-console
|
|
288
|
-
console.error("--bucket is required when --mode gcs");
|
|
289
|
-
process.exitCode = 1;
|
|
290
|
-
return;
|
|
291
|
-
}
|
|
282
|
+
// Bucket defaults to "catalox" when omitted.
|
|
292
283
|
const catalox = createCatalox();
|
|
293
284
|
const ctx = baseContext({ app: opts.app, god: opts.god });
|
|
294
285
|
const gcsPrefixOpt = opts.gcsPrefix != null && String(opts.gcsPrefix).trim() ? String(opts.gcsPrefix).trim() : undefined;
|
|
295
286
|
const res = await catalox.backupData(ctx, {
|
|
296
|
-
mode,
|
|
297
|
-
|
|
298
|
-
...(
|
|
299
|
-
? {
|
|
300
|
-
gcsBucket: String(opts.bucket).trim(),
|
|
301
|
-
...(gcsPrefixOpt !== undefined ? { gcsPrefix: gcsPrefixOpt } : {}),
|
|
302
|
-
}
|
|
303
|
-
: {}),
|
|
287
|
+
mode: "gcs",
|
|
288
|
+
gcsBucket: String(opts.bucket ?? "catalox").trim(),
|
|
289
|
+
...(gcsPrefixOpt !== undefined ? { gcsPrefix: gcsPrefixOpt } : {}),
|
|
304
290
|
includeSnapshots: Boolean(opts.snapshots),
|
|
305
291
|
...(opts.catalog?.length ? { catalogIds: opts.catalog } : {}),
|
|
306
292
|
...(opts.label != null && String(opts.label) !== "" ? { backupLabel: String(opts.label) } : {}),
|
|
@@ -309,42 +295,11 @@ firestoreCmd
|
|
|
309
295
|
if (!res.ok)
|
|
310
296
|
process.exitCode = 1;
|
|
311
297
|
});
|
|
312
|
-
firestoreCmd
|
|
313
|
-
.command("restore-backup")
|
|
314
|
-
.description("Restore live Firestore from backup-* (same DB). Captures pre-restore copies to {session}__preRestore-* for undo.")
|
|
315
|
-
.requiredOption("--app <appId>", "AppId for Catalox context")
|
|
316
|
-
.option("--from <latest|versioned>", "Backup source", "latest")
|
|
317
|
-
.option("--version-ts <token>", "When --from versioned: timestamp token matching backup collection prefix")
|
|
318
|
-
.option("--snapshots", "Also restore catalogSnapshots from backup mirrors", false)
|
|
319
|
-
.option("--catalog <catalogId...>", "Restrict which native catalogs are restored")
|
|
320
|
-
.option("--god", "God mode", false)
|
|
321
|
-
.action(async (opts) => {
|
|
322
|
-
const catalox = createCatalox();
|
|
323
|
-
const ctx = baseContext({ app: opts.app, god: opts.god });
|
|
324
|
-
const from = String(opts.from).toLowerCase();
|
|
325
|
-
const source = from === "versioned"
|
|
326
|
-
? { kind: "versioned", versionTimestamp: String(opts.versionTs ?? "") }
|
|
327
|
-
: { kind: "latest" };
|
|
328
|
-
if (from === "versioned" && !String(opts.versionTs ?? "").trim()) {
|
|
329
|
-
// eslint-disable-next-line no-console
|
|
330
|
-
console.error("--version-ts is required when --from versioned");
|
|
331
|
-
process.exitCode = 1;
|
|
332
|
-
return;
|
|
333
|
-
}
|
|
334
|
-
const res = await catalox.restoreFirestoreBackup(ctx, {
|
|
335
|
-
source,
|
|
336
|
-
includeSnapshots: Boolean(opts.snapshots),
|
|
337
|
-
...(opts.catalog?.length ? { catalogIds: opts.catalog } : {}),
|
|
338
|
-
});
|
|
339
|
-
await writeOrStdout(JSON.stringify(res, null, 2));
|
|
340
|
-
if (!res.ok)
|
|
341
|
-
process.exitCode = 1;
|
|
342
|
-
});
|
|
343
298
|
firestoreCmd
|
|
344
299
|
.command("undo-restore-backup")
|
|
345
|
-
.description("Revert a prior restore-backup
|
|
300
|
+
.description("Revert a prior restore-backup-from-gcs using backup-restoreSessions/{sessionId} and preRestore collections")
|
|
346
301
|
.requiredOption("--app <appId>", "AppId for Catalox context")
|
|
347
|
-
.requiredOption("--session <restoreSessionId>", "restoreSessionId returned by restore-backup")
|
|
302
|
+
.requiredOption("--session <restoreSessionId>", "restoreSessionId returned by restore-backup-from-gcs")
|
|
348
303
|
.option("--god", "God mode", false)
|
|
349
304
|
.action(async (opts) => {
|
|
350
305
|
const catalox = createCatalox();
|
|
@@ -358,9 +313,9 @@ firestoreCmd
|
|
|
358
313
|
});
|
|
359
314
|
firestoreCmd
|
|
360
315
|
.command("restore-backup-from-gcs")
|
|
361
|
-
.description("Restore live Firestore from one backupData GCS run (NDJSON under --run-folder).
|
|
316
|
+
.description("Restore live Firestore from one backupData GCS run (NDJSON under --run-folder). Uses pre-restore sidecars so undo works.")
|
|
362
317
|
.requiredOption("--app <appId>", "AppId for Catalox context")
|
|
363
|
-
.
|
|
318
|
+
.option("--bucket <name>", "GCS bucket name (default: catalox)", "catalox")
|
|
364
319
|
.requiredOption("--run-folder <path>", "Run folder within bucket (e.g. catalox-firestore-backups/2026_04_18T12_00_00Z)")
|
|
365
320
|
.option("--snapshots", "Also restore catalogSnapshots NDJSON from the run", false)
|
|
366
321
|
.option("--catalog <catalogId...>", "Restrict which native catalogs are restored")
|
|
@@ -369,7 +324,7 @@ firestoreCmd
|
|
|
369
324
|
const catalox = createCatalox();
|
|
370
325
|
const ctx = baseContext({ app: opts.app, god: opts.god });
|
|
371
326
|
const res = await catalox.restoreFirestoreBackupFromGcs(ctx, {
|
|
372
|
-
gcsBucket: String(opts.bucket).trim(),
|
|
327
|
+
gcsBucket: String(opts.bucket ?? "catalox").trim(),
|
|
373
328
|
gcsRunFolder: String(opts.runFolder).trim(),
|
|
374
329
|
includeSnapshots: Boolean(opts.snapshots),
|
|
375
330
|
...(opts.catalog?.length ? { catalogIds: opts.catalog } : {}),
|
|
@@ -381,7 +336,7 @@ firestoreCmd
|
|
|
381
336
|
firestoreCmd
|
|
382
337
|
.command("prune-gcs-backups")
|
|
383
338
|
.description("Delete oldest GCS Catalox backup run folders (children of --gcs-prefix) until --keep-last remain (lexicographic sort on folder names)")
|
|
384
|
-
.
|
|
339
|
+
.option("--bucket <name>", "GCS bucket name (default: catalox)", "catalox")
|
|
385
340
|
.option("--gcs-prefix <path>", "Base prefix containing timestamp folders (default: catalox-firestore-backups/)", "")
|
|
386
341
|
.requiredOption("--keep-last <n>", "Number of newest run folders to keep", (v) => parseInt(String(v), 10))
|
|
387
342
|
.action(async (opts) => {
|
|
@@ -390,7 +345,7 @@ firestoreCmd
|
|
|
390
345
|
const keepRaw = opts.keepLast;
|
|
391
346
|
const keepLast = typeof keepRaw === "number" && Number.isFinite(keepRaw) ? keepRaw : parseInt(String(keepRaw), 10);
|
|
392
347
|
const res = await catalox.pruneGcsBackupRuns(ctx, {
|
|
393
|
-
bucket: String(opts.bucket).trim(),
|
|
348
|
+
bucket: String(opts.bucket ?? "catalox").trim(),
|
|
394
349
|
...(opts.gcsPrefix != null && String(opts.gcsPrefix).trim() !== ""
|
|
395
350
|
? { gcsBasePrefix: String(opts.gcsPrefix).trim() }
|
|
396
351
|
: {}),
|
|
@@ -403,13 +358,13 @@ firestoreCmd
|
|
|
403
358
|
firestoreCmd
|
|
404
359
|
.command("delete-gcs-backup-run")
|
|
405
360
|
.description("Delete all objects under one GCS backup run folder (e.g. after a failed partial backup)")
|
|
406
|
-
.
|
|
361
|
+
.option("--bucket <name>", "GCS bucket name (default: catalox)", "catalox")
|
|
407
362
|
.requiredOption("--run-folder <path>", "Run folder prefix within the bucket")
|
|
408
363
|
.action(async (opts) => {
|
|
409
364
|
const catalox = createCatalox();
|
|
410
365
|
const ctx = baseContext({ app: "cli", god: true });
|
|
411
366
|
const res = await catalox.deleteCataloxGcsBackupRun(ctx, {
|
|
412
|
-
gcsBucket: String(opts.bucket).trim(),
|
|
367
|
+
gcsBucket: String(opts.bucket ?? "catalox").trim(),
|
|
413
368
|
gcsRunFolder: String(opts.runFolder).trim(),
|
|
414
369
|
});
|
|
415
370
|
await writeOrStdout(JSON.stringify(res, null, 2));
|
|
@@ -419,11 +374,11 @@ firestoreCmd
|
|
|
419
374
|
firestoreCmd
|
|
420
375
|
.command("gcs-backup-to-export-manifest")
|
|
421
376
|
.description("Read catalox-backup-manifest.json from a GCS run and print catalox-firestore-export-manifest.json JSON (for import-gcs --restore-all)")
|
|
422
|
-
.
|
|
377
|
+
.option("--bucket <name>", "GCS bucket name (default: catalox)", "catalox")
|
|
423
378
|
.requiredOption("--run-folder <path>", "Run folder within bucket")
|
|
424
379
|
.action(async (opts) => {
|
|
425
380
|
try {
|
|
426
|
-
const bucket = String(opts.bucket).trim();
|
|
381
|
+
const bucket = String(opts.bucket ?? "catalox").trim();
|
|
427
382
|
const runFolder = String(opts.runFolder).trim().replace(/^\/+/, "").replace(/\/+$/, "");
|
|
428
383
|
const gcs = createCataloxHelpersGcsClient(bucket, runFolder);
|
|
429
384
|
const buf = await gcs.readObjectBuffer(CATALOX_GCS_BACKUP_MANIFEST_FILENAME);
|
|
@@ -457,9 +412,11 @@ firestoreCmd
|
|
|
457
412
|
});
|
|
458
413
|
firestoreCmd
|
|
459
414
|
.command("migrate-native-catalog-data")
|
|
460
|
-
.description("
|
|
415
|
+
.description("Optional pre-migrate backup to GCS, then copy legacy catalogData/{catalogId}/items → flat catalogData-{catalogId}-items")
|
|
461
416
|
.requiredOption("--app <appId>", "AppId for Catalox context")
|
|
462
|
-
.option("--skip-backup", "Skip
|
|
417
|
+
.option("--skip-backup", "Skip pre-migrate GCS backup", false)
|
|
418
|
+
.option("--backup-bucket <name>", "GCS bucket for pre-migrate backup (default: catalox)", "catalox")
|
|
419
|
+
.option("--backup-prefix <path>", "Optional gcsPrefix for pre-migrate backupData")
|
|
463
420
|
.option("--backup-label <text>", "Label for pre-migrate backup", "pre-native-layout-migration")
|
|
464
421
|
.option("--snapshots", "Include snapshots in pre-migrate backup", false)
|
|
465
422
|
.option("--dry-run", "Count/copy simulation only for migrate", false)
|
|
@@ -475,7 +432,11 @@ firestoreCmd
|
|
|
475
432
|
const ctx = baseContext({ app: opts.app, god: opts.god });
|
|
476
433
|
if (!opts.skipBackup) {
|
|
477
434
|
const b = await catalox.backupData(ctx, {
|
|
478
|
-
mode: "
|
|
435
|
+
mode: "gcs",
|
|
436
|
+
gcsBucket: String(opts.backupBucket ?? "catalox").trim(),
|
|
437
|
+
...(opts.backupPrefix != null && String(opts.backupPrefix).trim() !== ""
|
|
438
|
+
? { gcsPrefix: String(opts.backupPrefix).trim() }
|
|
439
|
+
: {}),
|
|
479
440
|
backupLabel: String(opts.backupLabel != null ? opts.backupLabel : "pre-native-layout-migration"),
|
|
480
441
|
includeSnapshots: Boolean(opts.snapshots),
|
|
481
442
|
});
|