parse-server-schema-manager
Version:
Parse server schema manager
115 lines • 9.95 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.syncSchemaWithObject = void 0;
const object_1 = require("../object");
const ignoreIndexesKeys = ['_id_'];
const globalKeys = ['objectId', 'updatedAt', 'createdAt', 'ACL'];
const saveSchema = (schema) => __awaiter(void 0, void 0, void 0, function* () {
try {
yield schema.update();
}
catch (e) {
try {
yield schema.save();
}
catch (_a) {
throw e;
}
}
});
const getFieldOptions = (field) => {
let options = { type: field.type };
if ('targetClass' in field) {
if (field.targetClass !== undefined)
options.targetClass = field.targetClass;
}
if (field.defaultValue !== undefined)
options.defaultValue = field.defaultValue;
if (field.required !== undefined)
options.required = field.required;
return options;
};
const syncSchemaWithObject = (className, schemaObject, ignoreAttributes) => __awaiter(void 0, void 0, void 0, function* () {
if (!schemaObject)
return;
let schema = new Parse.Schema(className);
let available = {
className: className,
fields: {},
indexes: {},
classLevelPermissions: {},
};
try {
available = yield schema.get();
}
catch (e) {
yield schema.save();
available = yield schema.get();
}
const fields = structuredClone(schemaObject.fields);
const indexes = structuredClone(schemaObject.indexes) || {};
const CLP = schemaObject.classLevelPermissions || {};
for (let ignore of ignoreIndexesKeys)
delete indexes[ignore];
for (let ignore of ignoreAttributes) {
delete fields[ignore];
delete available.fields[ignore];
}
for (let key in fields)
if (!available.fields || !available.fields[key])
schema.addField(key, fields[key].type, getFieldOptions(fields[key]));
let objectFields = Object.keys(fields);
for (let cKey in available.fields)
if (!objectFields.includes(cKey) && !globalKeys.includes(cKey))
schema.deleteField(cKey);
for (let cKey in available.fields) {
if (!fields[cKey])
continue;
let cache = JSON.parse(JSON.stringify(fields[cKey]));
let availableCache = JSON.parse(JSON.stringify(available.fields[cKey]));
if (availableCache.required === false && !cache.required) {
delete cache['required'];
delete availableCache['required'];
}
if (!(0, object_1.checkSame)(availableCache, cache)) {
if (availableCache.type !== cache.type)
throw `Can't change type of a column you got to remove it then add it.`;
schema.addField(cKey, fields[cKey].type, getFieldOptions(fields[cKey]));
}
}
schema.setCLP(CLP);
yield saveSchema(schema);
for (let key in indexes)
if (!available.indexes || !available.indexes[key])
schema.addIndex(key, indexes[key]);
let indexesKeys = Object.keys(indexes);
for (let cKey in available.indexes) {
if (ignoreIndexesKeys.includes(cKey))
continue;
if (!indexesKeys.includes(cKey))
schema.deleteIndex(cKey);
else if (!(0, object_1.checkSame)(indexes[cKey], available.indexes[cKey]))
schema.deleteIndex(cKey);
}
yield schema.update();
for (let cKey in available.indexes) {
if (ignoreIndexesKeys.includes(cKey))
continue;
if (!indexesKeys.includes(cKey))
continue;
if (!(0, object_1.checkSame)(indexes[cKey], available.indexes[cKey]))
schema.addIndex(cKey, indexes[cKey]);
}
yield schema.update();
});
exports.syncSchemaWithObject = syncSchemaWithObject;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mdW5jdGlvbnMvc2NoZW1hL3N5bmMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQ0Esc0NBQW9DO0FBRXBDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUVuQyxNQUFNLFVBQVUsR0FBRyxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBRWpFLE1BQU0sVUFBVSxHQUFHLENBQU8sTUFBb0IsRUFBRSxFQUFFO0lBQ2hELElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsQ0FBQztRQUFDLFdBQU0sQ0FBQztZQUNQLE1BQU0sQ0FBQyxDQUFDO1FBQ1YsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDLENBQUEsQ0FBQztBQUVGLE1BQU0sZUFBZSxHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQzVDLElBQUksT0FBTyxHQUE0QixFQUFDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFDLENBQUM7SUFDMUQsSUFBSSxhQUFhLElBQUksS0FBSyxFQUFFLENBQUM7UUFDM0IsSUFBSSxLQUFLLENBQUMsV0FBVyxLQUFLLFNBQVM7WUFDakMsT0FBTyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO0lBQzVDLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxZQUFZLEtBQUssU0FBUztRQUNsQyxPQUFPLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUM7SUFDNUMsSUFBSSxLQUFLLENBQUMsUUFBUSxLQUFLLFNBQVM7UUFBRSxPQUFPLENBQUMsUUFBUSxHQUFHLEtB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
;