UNPKG

@mvx/typeorm-adapter

Version:

@mvx/typeorm-adapter is typeorm adapter orm for mvc, type-mvc is base on koa. Decorator, Ioc, AOP mvc frameworker on server.

330 lines (293 loc) 12.3 kB
'use strict'; function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } var tslib = _interopDefault(require('tslib')); require('reflect-metadata'); var typeorm = _interopDefault(require('typeorm')); var ioc = _interopDefault(require('@tsdi/ioc')); var mvc = _interopDefault(require('@mvx/mvc')); var mongodb = _interopDefault(require('mongodb')); var boot = _interopDefault(require('@tsdi/boot')); function unwrapExports (x) { return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; } function createCommonjsModule(fn, module) { return module = { exports: {} }, fn(module, module.exports), module.exports; } var TypeOrmHelper_1 = createCommonjsModule(function (module, exports) { Object.defineProperty(exports, "__esModule", { value: true }); var OrmInitService = /** @class */ (function () { function OrmInitService() { } OrmInitService.getClassAnnations = function () { return { "name": "OrmInitService", "params": { "init": ["connect"] } }; }; OrmInitService = tslib.__decorate([ ioc.Abstract() ], OrmInitService); return OrmInitService; }()); exports.OrmInitService = OrmInitService; var TypeOrmHelper = /** @class */ (function () { function TypeOrmHelper(ctx) { this.ctx = ctx; this.hasInit = false; } TypeOrmHelper.prototype.getRepository = function (type) { return tslib.__awaiter(this, void 0, void 0, function () { var conn; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, this.getConnection()]; case 1: conn = _a.sent(); return [2 /*return*/, conn.getRepository(type)]; } }); }); }; TypeOrmHelper.prototype.getMongoRepository = function (type) { return tslib.__awaiter(this, void 0, void 0, function () { var conn; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, this.getConnection()]; case 1: conn = _a.sent(); return [2 /*return*/, conn.getMongoRepository(type)]; } }); }); }; TypeOrmHelper.prototype.getConnection = function () { return tslib.__awaiter(this, void 0, void 0, function () { var options, connect, initService, err_1; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, this.getOptions()]; case 1: options = _a.sent(); if (!!this.hasInit) return [3 /*break*/, 9]; this.hasInit = true; _a.label = 2; case 2: _a.trys.push([2, 8, , 9]); return [4 /*yield*/, typeorm.createConnection(options)]; case 3: connect = _a.sent(); if (!options.initDb) return [3 /*break*/, 5]; return [4 /*yield*/, options.initDb(connect)]; case 4: _a.sent(); _a.label = 5; case 5: initService = this.ctx.getService(OrmInitService); if (!(initService instanceof OrmInitService)) return [3 /*break*/, 7]; return [4 /*yield*/, initService.init(connect)]; case 6: _a.sent(); _a.label = 7; case 7: return [2 /*return*/, connect]; case 8: err_1 = _a.sent(); console.error(err_1); return [3 /*break*/, 9]; case 9: return [4 /*yield*/, typeorm.getConnection(options.name)]; case 10: return [2 /*return*/, _a.sent()]; } }); }); }; TypeOrmHelper.prototype.getOptions = function () { return tslib.__awaiter(this, void 0, void 0, function () { var config, options, entities_1, loader, models; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: if (!!this.options) return [3 /*break*/, 5]; config = this.ctx.getConfiguration(); options = config.connections || {}; if (!!options.entities) return [3 /*break*/, 4]; entities_1 = []; loader = this.ctx.getContainer().getLoader(); if (!config.models.some(function (m) { return ioc.isString(m); })) return [3 /*break*/, 2]; return [4 /*yield*/, loader.loadTypes({ files: config.models, basePath: this.ctx.getRootPath() })]; case 1: models = _a.sent(); models.forEach(function (ms) { ms.forEach(function (mdl) { if (mdl && entities_1.indexOf(mdl) < 0) { entities_1.push(mdl); } }); }); return [3 /*break*/, 3]; case 2: entities_1 = config.models; _a.label = 3; case 3: options.entities = entities_1; _a.label = 4; case 4: this.options = options; _a.label = 5; case 5: return [2 /*return*/, this.options]; } }); }); }; TypeOrmHelper.getClassAnnations = function () { return { "name": "TypeOrmHelper", "params": { "constructor": ["ctx"], "getRepository": ["type"], "getMongoRepository": ["type"], "getConnection": [], "getOptions": [] } }; }; TypeOrmHelper = tslib.__decorate([ ioc.Singleton, tslib.__param(0, ioc.Inject(mvc.MvcContextToken)), tslib.__metadata("design:paramtypes", [mvc.MvcContext]) ], TypeOrmHelper); return TypeOrmHelper; }()); exports.TypeOrmHelper = TypeOrmHelper; }); unwrapExports(TypeOrmHelper_1); var TypeOrmHelper_2 = TypeOrmHelper_1.OrmInitService; var TypeOrmHelper_3 = TypeOrmHelper_1.TypeOrmHelper; var TypeOrmModelParser_1 = createCommonjsModule(function (module, exports) { Object.defineProperty(exports, "__esModule", { value: true }); var TypeOrmModelParser = /** @class */ (function (_super) { tslib.__extends(TypeOrmModelParser, _super); function TypeOrmModelParser() { return _super.call(this) || this; } TypeOrmModelParser.prototype.setup = function () { this.getTypeMap() .register(mongodb.ObjectID, function (id) { return new mongodb.ObjectID(id); }); }; TypeOrmModelParser.prototype.getPropertyMeta = function (type) { var _this = this; var metas = {}; typeorm.getMetadataArgsStorage().columns.filter(function (col) { return col.target === type; }) .forEach(function (col) { metas[col.propertyName] = metas[col.propertyName] || []; metas[col.propertyName].push({ propertyKey: col.propertyName, dbtype: ioc.isString(col.options.type) ? col.options.type : '', type: _this.getModeType(col) }); }); typeorm.getMetadataArgsStorage().relations.filter(function (col) { return col.target === type; }) .forEach(function (col) { metas[col.propertyName] = metas[col.propertyName] || []; var relaModel = ioc.isFunction(col.type) ? col.type() : undefined; metas[col.propertyName].push({ propertyKey: col.propertyName, provider: relaModel, type: (col.relationType === 'one-to-many' || col.relationType === 'many-to-many') ? Array : relaModel }); }); return metas; }; TypeOrmModelParser.prototype.isExtendBaseType = function (type, propmeta) { if (propmeta.dbtype) { if (/int/.test(propmeta.dbtype)) { return true; } } if (type === mongodb.ObjectID) { return true; } return _super.prototype.isExtendBaseType.call(this, type, propmeta); }; TypeOrmModelParser.prototype.resolveExtendType = function (type, value, propmeta) { if (propmeta.dbtype) { if (/int/.test(propmeta.dbtype)) { return parseInt(value); } } if (type === mongodb.ObjectID) { return new mongodb.ObjectID(value); } return _super.prototype.resolveExtendType.call(this, type, propmeta); }; TypeOrmModelParser.prototype.getModeType = function (col) { var type = col.options.type; if (type) { if (ioc.isString(type)) { if (type === 'uuid') { return String; } else if (/(int|float|double|dec|numeric|number)/.test(type)) { return Number; } else if (/(bool|bit)/.test(type)) { return Boolean; } else if (/(char|var|string|text)/.test(type)) { return String; } else if (/(time|date)/.test(type)) { return Date; } else if (/array/.test(type)) { return Array; } else if (/(bytes|bytea)/.test(type)) { return Buffer; } else { return Object; } } return type; } switch (col.mode) { case 'objectId': type = mongodb.ObjectID; break; } return type; }; TypeOrmModelParser.getClassAnnations = function () { return { "name": "TypeOrmModelParser", "params": { "constructor": [], "setup": [], "getPropertyMeta": ["type"], "isExtendBaseType": ["type", "propmeta"], "resolveExtendType": ["type", "value", "propmeta"], "getModeType": ["col"] } }; }; TypeOrmModelParser = tslib.__decorate([ ioc.Singleton(mvc.DefaultModelParserToken), ioc.Autorun('setup'), tslib.__metadata("design:paramtypes", []) ], TypeOrmModelParser); return TypeOrmModelParser; }(mvc.ModelParser)); exports.TypeOrmModelParser = TypeOrmModelParser; }); unwrapExports(TypeOrmModelParser_1); var TypeOrmModelParser_2 = TypeOrmModelParser_1.TypeOrmModelParser; var TypeOrmModule_1 = createCommonjsModule(function (module, exports) { Object.defineProperty(exports, "__esModule", { value: true }); var TypeOrmModule = /** @class */ (function () { function TypeOrmModule() { } TypeOrmModule.getClassAnnations = function () { return { "name": "TypeOrmModule", "params": {} }; }; TypeOrmModule = tslib.__decorate([ boot.DIModule({ regIn: 'root', providers: [ TypeOrmHelper_1.TypeOrmHelper, TypeOrmModelParser_1.TypeOrmModelParser ] }) ], TypeOrmModule); return TypeOrmModule; }()); exports.TypeOrmModule = TypeOrmModule; }); unwrapExports(TypeOrmModule_1); var TypeOrmModule_2 = TypeOrmModule_1.TypeOrmModule; var src = createCommonjsModule(function (module, exports) { Object.defineProperty(exports, "__esModule", { value: true }); tslib.__exportStar(TypeOrmHelper_1, exports); tslib.__exportStar(TypeOrmModelParser_1, exports); tslib.__exportStar(TypeOrmModule_1, exports); }); var index = unwrapExports(src); module.exports = index; //# sourceMappingURL=typeorm-adapter.js.map