UNPKG

parse-server-schema-manager

Version:
114 lines 9.97 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.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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