epic-sql
Version:
A Simple But Powerful SQL ORM!!!
61 lines (60 loc) • 4.53 kB
JavaScript
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;
;