@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
JavaScript
;
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