parse-server-schema-manager
Version:
Parse server schema manager
114 lines • 9.97 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) {
yield schema.save();
}
});
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 changedIndexes = false;
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])) {
changedIndexes = true;
schema.deleteIndex(cKey);
}
}
if (!changedIndexes)
return;
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 saveSchema(schema);
});
exports.syncSchemaWithObject = syncSchemaWithObject;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mdW5jdGlvbnMvc2NoZW1hL3N5bmMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQ0Esc0NBQW9DO0FBRXBDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUVuQyxNQUFNLFVBQVUsR0FBRyxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBRWpFLE1BQU0sVUFBVSxHQUFHLENBQU8sTUFBb0IsRUFBRSxFQUFFO0lBQ2hELElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsTUFBTSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEIsQ0FBQztBQUNILENBQUMsQ0FBQSxDQUFDO0FBRUYsTUFBTSxlQUFlLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7SUFDNUMsSUFBSSxPQUFPLEdBQTRCLEVBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUMsQ0FBQztJQUMxRCxJQUFJLGFBQWEsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUMzQixJQUFJLEtBQUssQ0FBQyxXQUFXLEtBQUssU0FBUztZQUNqQyxPQUFPLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7SUFDNUMsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLFlBQVksS0FBSyxTQUFTO1FBQ2xDLE9BQU8sQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztJQUM1QyxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssU0FBUztRQUFFLE9BQU8sQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUNwRSxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDLENBQUM7QUFFSyxNQUFNLG9CQUFv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