UNPKG

firewalk

Version:

A collection traversal library for Firestore

74 lines 3.53 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.AbstractMigrator = void 0; class AbstractMigrator { constructor(registeredCallbacks = {}, migrationPredicates = []) { this.registeredCallbacks = registeredCallbacks; this.migrationPredicates = migrationPredicates; } get firestoreInstance() { return this.traverser.traversable.firestore; } get firestoreConstructor() { return this.firestoreInstance.constructor; } onBeforeBatchStart(callback) { this.registeredCallbacks.onBeforeBatchStart = callback; } onAfterBatchComplete(callback) { this.registeredCallbacks.onAfterBatchComplete = callback; } deleteField(field) { return this.deleteFields(field); } deleteFields(...fields) { const updateFieldValuePairs = fields.reduce((acc, field) => { acc.push(field, this.firestoreConstructor.FieldValue.delete()); return acc; }, []); return this.update(...updateFieldValuePairs); } renameField(oldField, newField) { return this.renameFields([oldField, newField]); } renameFields(...changes) { return this.withPredicate((snap) => changes.some(([oldField]) => snap.get(oldField) !== undefined)).updateWithDerivedData((snap) => { const updateFieldValuePairs = []; changes.forEach((change) => { const [oldField, newField] = change; const value = snap.get(oldField); if (value !== undefined) { updateFieldValuePairs.push(oldField, this.firestoreConstructor.FieldValue.delete(), newField, value); } }); return updateFieldValuePairs; }); } migrateWithTraverser(migrateBatch) { return __awaiter(this, void 0, void 0, function* () { let migratedDocCount = 0; const traversalResult = yield this.traverser.traverse((batchDocs, batchIndex) => __awaiter(this, void 0, void 0, function* () { var _a, _b, _c, _d; yield ((_b = (_a = this.registeredCallbacks).onBeforeBatchStart) === null || _b === void 0 ? void 0 : _b.call(_a, batchDocs, batchIndex)); const migratedBatchDocCount = yield migrateBatch(batchDocs); migratedDocCount += migratedBatchDocCount; yield ((_d = (_c = this.registeredCallbacks).onAfterBatchComplete) === null || _d === void 0 ? void 0 : _d.call(_c, batchDocs, batchIndex)); })); return { traversalResult, migratedDocCount }; }); } shouldMigrateDoc(doc) { return this.migrationPredicates.every((predicate) => predicate(doc)); } } exports.AbstractMigrator = AbstractMigrator; //# sourceMappingURL=AbstractMigrator.js.map