firewalk
Version:
A collection traversal library for Firestore
74 lines • 3.53 kB
JavaScript
;
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