UNPKG

parse-server-schema-manager

Version:
115 lines 9.95 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) { 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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