parse-server-schema-manager
Version:
Parse server schema manager
128 lines • 10.6 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());
});
};
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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
;