UNPKG

epic-sql

Version:
61 lines (60 loc) 4.53 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Metadata = exports.ManyRelation = exports.OneRelation = exports.Column = exports.PrimaryKey = void 0; const enums_1 = require("./enums"); const PrimaryKey = () => exports.Column({ primaryKey: true }); exports.PrimaryKey = PrimaryKey; const Column = (options) => (target, key) => { const SchemaData = Reflect.getMetadata(enums_1.MetaDataKeys.SCHEMA_DATA, target); const DataType = Reflect.getMetadata("design:type", target, key); Reflect.defineMetadata(enums_1.MetaDataKeys.SCHEMA_DATA, Object.assign(Object.assign({}, SchemaData), { [key]: Object.assign({ dataType: DataType, name: key, resolve: (value) => { var _a, _b, _c, _d, _e, _f, _g, _h, _j; if (DataType === String) return (_b = (_a = value === null || value === void 0 ? void 0 : value.toString) === null || _a === void 0 ? void 0 : _a.call(value)) !== null && _b !== void 0 ? _b : value; else if (DataType === Number) return (_e = parseFloat((_d = (_c = value === null || value === void 0 ? void 0 : value.toString) === null || _c === void 0 ? void 0 : _c.call(value)) !== null && _d !== void 0 ? _d : value)) !== null && _e !== void 0 ? _e : value; else if (DataType === Boolean) return ["1", "true"].includes((_g = (_f = value === null || value === void 0 ? void 0 : value.toString) === null || _f === void 0 ? void 0 : _f.call(value)) !== null && _g !== void 0 ? _g : value); else if ([Array, Object].includes(DataType)) try { return JSON.parse((_j = (_h = value === null || value === void 0 ? void 0 : value.toString) === null || _h === void 0 ? void 0 : _h.call(value)) !== null && _j !== void 0 ? _j : value); } catch (e) { return value; } else return value; } }, options) }), target); // If Primary Key if (options === null || options === void 0 ? void 0 : options.primaryKey) { const Indexes = Reflect.getMetadata(enums_1.MetaDataKeys.SCHEMA_INDEXS, target) || {}; if (Object.values(Indexes).reduce((exists, index) => exists ? exists : index.type === enums_1.MetaDataKeys.PRIMARY_KEY_INDEX, false)) throw new Error(`A Schema can have only one Primary Key!`); Reflect.defineMetadata(enums_1.MetaDataKeys.SCHEMA_INDEXS, Object.assign(Object.assign({}, Indexes), { [key]: { name: key, type: enums_1.MetaDataKeys.PRIMARY_KEY_INDEX, } }), target); } }; exports.Column = Column; const OneRelation = (options) => (target, key) => { const SchemaIndexes = Reflect.getMetadata(enums_1.MetaDataKeys.SCHEMA_INDEXS, target); Reflect.defineMetadata(enums_1.MetaDataKeys.SCHEMA_INDEXS, Object.assign(Object.assign({}, SchemaIndexes), { [key]: Object.assign({ name: key, type: enums_1.MetaDataKeys.RELATION_INDEX, value: enums_1.MetaDataKeys.ONE_RELATION }, options) }), target); }; exports.OneRelation = OneRelation; const ManyRelation = (options) => (target, key) => { const SchemaIndexes = Reflect.getMetadata(enums_1.MetaDataKeys.SCHEMA_INDEXS, target); Reflect.defineMetadata(enums_1.MetaDataKeys.SCHEMA_INDEXS, Object.assign(Object.assign({}, SchemaIndexes), { [key]: Object.assign({ name: key, type: enums_1.MetaDataKeys.RELATION_INDEX, value: enums_1.MetaDataKeys.MANY_RELATION }, options) }), target); }; exports.ManyRelation = ManyRelation; const Metadata = (options) => (target, key) => { const SchemaIndexes = Reflect.getMetadata(enums_1.MetaDataKeys.SCHEMA_INDEXS, target); Reflect.defineMetadata(enums_1.MetaDataKeys.SCHEMA_INDEXS, Object.assign(Object.assign({}, SchemaIndexes), { [key]: Object.assign(Object.assign({ name: key, type: enums_1.MetaDataKeys.METADATA_INDEX }, options), { resolver: typeof (options === null || options === void 0 ? void 0 : options.resolver) === "function" ? (Schema) => { if (options.dependencies instanceof Array && options.dependencies.reduce((allowed, dependency) => allowed ? Schema[dependency] !== undefined : allowed, true)) return options.resolver(Schema); } : undefined }) }), target); }; exports.Metadata = Metadata;