UNPKG

8.16 kBJavaScriptView Raw
1"use strict";
2var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6 return c > 3 && r && Object.defineProperty(target, key, r), r;
7};
8var __metadata = (this && this.__metadata) || function (k, v) {
9 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10};
11var __param = (this && this.__param) || function (paramIndex, decorator) {
12 return function (target, key) { decorator(target, key, paramIndex); }
13};
14var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16 return new (P || (P = Promise))(function (resolve, reject) {
17 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20 step((generator = generator.apply(thisArg, _arguments || [])).next());
21 });
22};
23var TypeOrmCoreModule_1;
24Object.defineProperty(exports, "__esModule", { value: true });
25const common_1 = require("@nestjs/common");
26const core_1 = require("@nestjs/core");
27const rxjs_1 = require("rxjs");
28const typeorm_1 = require("typeorm");
29const typeorm_utils_1 = require("./common/typeorm.utils");
30const entities_metadata_storage_1 = require("./entities-metadata.storage");
31const typeorm_constants_1 = require("./typeorm.constants");
32let TypeOrmCoreModule = TypeOrmCoreModule_1 = class TypeOrmCoreModule {
33 constructor(options, moduleRef) {
34 this.options = options;
35 this.moduleRef = moduleRef;
36 }
37 static forRoot(options = {}) {
38 const typeOrmModuleOptions = {
39 provide: typeorm_constants_1.TYPEORM_MODULE_OPTIONS,
40 useValue: options,
41 };
42 const connectionProvider = {
43 provide: typeorm_utils_1.getConnectionToken(options),
44 useFactory: () => __awaiter(this, void 0, void 0, function* () { return yield this.createConnectionFactory(options); }),
45 };
46 const entityManagerProvider = this.createEntityManagerProvider(options);
47 return {
48 module: TypeOrmCoreModule_1,
49 providers: [
50 entityManagerProvider,
51 connectionProvider,
52 typeOrmModuleOptions,
53 ],
54 exports: [entityManagerProvider, connectionProvider],
55 };
56 }
57 static forRootAsync(options) {
58 const connectionProvider = {
59 provide: typeorm_utils_1.getConnectionToken(options),
60 useFactory: (typeOrmOptions) => __awaiter(this, void 0, void 0, function* () {
61 if (options.name) {
62 return yield this.createConnectionFactory(Object.assign(Object.assign({}, typeOrmOptions), { name: options.name }));
63 }
64 return yield this.createConnectionFactory(typeOrmOptions);
65 }),
66 inject: [typeorm_constants_1.TYPEORM_MODULE_OPTIONS],
67 };
68 const entityManagerProvider = {
69 provide: typeorm_utils_1.getEntityManagerToken(options),
70 useFactory: (connection) => connection.manager,
71 inject: [typeorm_utils_1.getConnectionToken(options)],
72 };
73 const asyncProviders = this.createAsyncProviders(options);
74 return {
75 module: TypeOrmCoreModule_1,
76 imports: options.imports,
77 providers: [
78 ...asyncProviders,
79 entityManagerProvider,
80 connectionProvider,
81 {
82 provide: typeorm_constants_1.TYPEORM_MODULE_ID,
83 useValue: typeorm_utils_1.generateString(),
84 },
85 ],
86 exports: [entityManagerProvider, connectionProvider],
87 };
88 }
89 onApplicationShutdown() {
90 return __awaiter(this, void 0, void 0, function* () {
91 if (this.options.keepConnectionAlive) {
92 return;
93 }
94 const connection = this.moduleRef.get(typeorm_utils_1.getConnectionToken(this.options));
95 connection && (yield connection.close());
96 });
97 }
98 static createAsyncProviders(options) {
99 if (options.useExisting || options.useFactory) {
100 return [this.createAsyncOptionsProvider(options)];
101 }
102 const useClass = options.useClass;
103 return [
104 this.createAsyncOptionsProvider(options),
105 {
106 provide: useClass,
107 useClass,
108 },
109 ];
110 }
111 static createAsyncOptionsProvider(options) {
112 if (options.useFactory) {
113 return {
114 provide: typeorm_constants_1.TYPEORM_MODULE_OPTIONS,
115 useFactory: options.useFactory,
116 inject: options.inject || [],
117 };
118 }
119 const inject = [
120 (options.useClass || options.useExisting),
121 ];
122 return {
123 provide: typeorm_constants_1.TYPEORM_MODULE_OPTIONS,
124 useFactory: (optionsFactory) => __awaiter(this, void 0, void 0, function* () { return yield optionsFactory.createTypeOrmOptions(options.name); }),
125 inject,
126 };
127 }
128 static createEntityManagerProvider(options) {
129 return {
130 provide: typeorm_utils_1.getEntityManagerToken(options),
131 useFactory: (connection) => connection.manager,
132 inject: [typeorm_utils_1.getConnectionToken(options)],
133 };
134 }
135 static createConnectionFactory(options) {
136 return __awaiter(this, void 0, void 0, function* () {
137 try {
138 if (options.keepConnectionAlive) {
139 const connectionName = typeorm_utils_1.getConnectionName(options);
140 const manager = typeorm_1.getConnectionManager();
141 if (manager.has(connectionName)) {
142 const connection = manager.get(connectionName);
143 if (connection.isConnected) {
144 return connection;
145 }
146 }
147 }
148 }
149 catch (_a) { }
150 return yield rxjs_1.defer(() => {
151 if (!options.type) {
152 return typeorm_1.createConnection();
153 }
154 if (!options.autoLoadEntities) {
155 return typeorm_1.createConnection(options);
156 }
157 const connectionToken = options.name || typeorm_constants_1.DEFAULT_CONNECTION_NAME;
158 let entities = options.entities;
159 if (entities) {
160 entities = entities.concat(entities_metadata_storage_1.EntitiesMetadataStorage.getEntitiesByConnection(connectionToken));
161 }
162 else {
163 entities = entities_metadata_storage_1.EntitiesMetadataStorage.getEntitiesByConnection(connectionToken);
164 }
165 return typeorm_1.createConnection(Object.assign(Object.assign({}, options), { entities }));
166 })
167 .pipe(typeorm_utils_1.handleRetry(options.retryAttempts, options.retryDelay))
168 .toPromise();
169 });
170 }
171};
172TypeOrmCoreModule = TypeOrmCoreModule_1 = __decorate([
173 common_1.Global(),
174 common_1.Module({}),
175 __param(0, common_1.Inject(typeorm_constants_1.TYPEORM_MODULE_OPTIONS)),
176 __metadata("design:paramtypes", [Object, core_1.ModuleRef])
177], TypeOrmCoreModule);
178exports.TypeOrmCoreModule = TypeOrmCoreModule;