UNPKG

parse-server-schema-manager

Version:
128 lines 10.6 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()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createDBMLFile = void 0; const node_1 = __importDefault(require("parse/node")); const fs_1 = __importDefault(require("fs")); const colors = { red: '#d32f2f', pink: '#c2185b', purple: '#7b1fa2', deepPurple: '#512da8', indigo: '#303f9f', blue: '#1976d2', lightBlue: '#0277bd', cyan: '#00838f', teal: '#00796b', green: '#2e7d32', lightGreen: '#387002', lime: '#6c6f00', yellow: '#bc5100', amber: '#c43e00', orange: '#bb4d00', deepOrange: '#ac0800', brown: '#5d4037', grey: '#616161', blueGrey: '#455a64', }; const colorByIndex = (id) => { const colorsArray = Object.values(colors); const index = id % colorsArray.length; return colorsArray[index]; }; const createDBMLFile = (...args_1) => __awaiter(void 0, [...args_1], void 0, function* (additional = {}, schemaDBML = '_SCHEMA.dbml') { var _a; let DBML = []; DBML.push(`// Generated by Server Components Tools`); const _SCHEMA = yield node_1.default.Schema.all(); for (let classIndex in _SCHEMA) { const parseClass = _SCHEMA[classIndex]; const className = parseClass.className; const keys = Object.keys(parseClass.fields); const fields = keys.filter((key) => !['_id', 'objectId', 'updatedAt', 'createdAt'].includes(key)); const color = colorByIndex(Number(classIndex)); let TABLE = `Table ${className} [headercolor: ${color}] { objectId String createdAt Date [default: \`now()\`, note: "created time"] updatedAt Date [default: \`now()\`, note: "updated time"] `; const scalarFields = []; const pointerFields = []; const relationFields = []; const indexes = []; indexes.push(` objectId [pk]`); for (let ind in parseClass.indexes) { if (ind === '_id_') continue; let indKeys = Object.keys(parseClass.indexes[ind]); let first = indKeys.length > 1 ? `(${indKeys.join(', ')})` : indKeys[0]; let second = `[name: '${ind}']`; indexes.push(` ${first} ${second}`); } const dbmlOptions = {}; for (let fieldName of fields) { let field = parseClass.fields[fieldName]; const fieldType = field.type; const messages = []; if ((_a = additional === null || additional === void 0 ? void 0 : additional[className]) === null || _a === void 0 ? void 0 : _a[fieldName]) messages.push(additional[className][fieldName]); if (field.defaultValue !== undefined) messages.push(`default: \`${JSON.stringify(field.defaultValue)}\``); const notes = []; if (field.required) notes.push('required'); if (fieldType === 'Pointer') { pointerFields.push(fieldName); messages.push(`ref: > ${field.targetClass}.objectId`); notes.push('MANY-to-ONE'); } else if (fieldType === 'Relation') { relationFields.push(fieldName); messages.push(`ref: - ${field.targetClass}.objectId`); notes.push('MANY-to-MANY'); } else scalarFields.push(fieldName); messages.push(`note: '${notes.join(', ')}'`); const dbmlOptionsAsString = dbmlOptions[fieldName].length ? `[${messages.join(', ')}]` : ''; dbmlOptions[fieldName] = dbmlOptionsAsString; } scalarFields.forEach((fieldName) => { const fieldType = parseClass.fields[fieldName].type; TABLE += ` ${fieldName} ${fieldType} ${dbmlOptions[fieldName]} `; }); pointerFields.forEach((fieldName) => { TABLE += ` ${fieldName} "Pointer" ${dbmlOptions[fieldName]} `; }); relationFields.forEach((fieldName) => { TABLE += ` ${fieldName} "Relation" ${dbmlOptions[fieldName]} `; }); TABLE += ` indexes { ${indexes.join('\n')} } `; TABLE += `}`; DBML.push(TABLE); } const dbml = DBML.join('\n\n'); fs_1.default.writeFileSync(schemaDBML, dbml); }); exports.createDBMLFile = createDBMLFile; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiREJNTC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mdW5jdGlvbnMvREJNTC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSxzREFBK0I7QUFDL0IsNENBQW9CO0FBRXBCLE1BQU0sTUFBTSxHQUFHO0lBQ2IsR0FBRyxFQUFFLFNBQVM7SUFDZCxJQUFJLEVBQUUsU0FBUztJQUNmLE1BQU0sRUFBRSxTQUFTO0lBQ2pCLFVBQVUsRUFBRSxTQUFTO0lBQ3JCLE1BQU0sRUFBRSxTQUFTO0lBQ2pCLElBQUksRUFBRSxTQUFTO0lBQ2YsU0FBUyxFQUFFLFNBQVM7SUFDcEIsSUFBSSxFQUFFLFNBQVM7SUFDZixJQUFJLEVBQUUsU0FBUztJQUNmLEtBQUssRUFBRSxTQUFTO0lBQ2hCLFVBQVUsRUFBRSxTQUFTO0lBQ3JCLElBQUksRUFBRSxTQUFTO0lBQ2YsTUFBTSxFQUFFLFNBQVM7SUFDakIsS0FBSyxFQUFFLFNBQVM7SUFDaEIsTUFBTSxFQUFFLFNBQVM7SUFDakIsVUFBVSxFQUFFLFNBQVM7SUFDckIsS0FBSyxFQUFFLFNBQVM7SUFDaEIsSUFBSSxFQUFFLFNBQVM7SUFDZixRQUFRLEVBQUUsU0FBUztDQUNwQixDQUFDO0FBRUYsTUFBTSxZQUFZLEdBQUcsQ0FBQyxFQUFVLEVBQUUsRUFBRTtJQUNsQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO0lBQ3RDLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVCLENBQUMsQ0FBQztBQVNLLE1BQU0sY0FBYyxHQUFHLFlBRzVCLEVBQUUsbURBRkYsYUFBcUQsRUFBRSxFQUN2RCxVQUFVLEdBQUcsY0FBYzs7SUFFM0IsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyx5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