typeorm 0.2.42-dev.ce69228 → 0.2.42-dev.ece0da0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/README.md +38 -0
  2. package/browser/common/RelationType.d.ts +14 -0
  3. package/browser/common/RelationType.js +3 -0
  4. package/browser/common/RelationType.js.map +1 -0
  5. package/browser/connection/Connection.d.ts +1 -1
  6. package/browser/connection/Connection.js +45 -30
  7. package/browser/connection/Connection.js.map +1 -1
  8. package/browser/connection/ConnectionMetadataBuilder.d.ts +3 -3
  9. package/browser/connection/ConnectionMetadataBuilder.js +54 -22
  10. package/browser/connection/ConnectionMetadataBuilder.js.map +1 -1
  11. package/browser/connection/ConnectionOptionsReader.js +33 -28
  12. package/browser/connection/ConnectionOptionsReader.js.map +1 -1
  13. package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js +1 -1
  14. package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
  15. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js +7 -5
  16. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  17. package/browser/driver/cockroachdb/CockroachQueryRunner.js +1 -1
  18. package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  19. package/browser/driver/mysql/MysqlQueryRunner.js +1 -1
  20. package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
  21. package/browser/driver/oracle/OracleQueryRunner.js +1 -1
  22. package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
  23. package/browser/driver/postgres/PostgresQueryRunner.js +1 -1
  24. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  25. package/browser/driver/sap/SapQueryRunner.js +1 -1
  26. package/browser/driver/sap/SapQueryRunner.js.map +1 -1
  27. package/browser/driver/sqlite/SqliteDriver.js +11 -10
  28. package/browser/driver/sqlite/SqliteDriver.js.map +1 -1
  29. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +1 -1
  30. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  31. package/browser/find-options/FindOneOptions.d.ts +6 -0
  32. package/browser/find-options/FindOneOptions.js.map +1 -1
  33. package/browser/find-options/FindOptionsUtils.js +4 -0
  34. package/browser/find-options/FindOptionsUtils.js.map +1 -1
  35. package/browser/find-options/operator/Like.d.ts +1 -1
  36. package/browser/find-options/operator/Like.js +1 -1
  37. package/browser/find-options/operator/Like.js.map +1 -1
  38. package/browser/globals.js +34 -7
  39. package/browser/globals.js.map +1 -1
  40. package/browser/index.d.ts +2 -0
  41. package/browser/index.js +2 -0
  42. package/browser/index.js.map +1 -1
  43. package/browser/migration/MigrationExecutor.js +1 -1
  44. package/browser/migration/MigrationExecutor.js.map +1 -1
  45. package/browser/query-builder/DeleteQueryBuilder.d.ts +3 -1
  46. package/browser/query-builder/DeleteQueryBuilder.js +3 -1
  47. package/browser/query-builder/DeleteQueryBuilder.js.map +1 -1
  48. package/browser/query-builder/NotBrackets.d.ts +7 -0
  49. package/browser/query-builder/NotBrackets.js +16 -0
  50. package/browser/query-builder/NotBrackets.js.map +1 -0
  51. package/browser/query-builder/QueryBuilder.d.ts +2 -1
  52. package/browser/query-builder/QueryBuilder.js +2 -1
  53. package/browser/query-builder/QueryBuilder.js.map +1 -1
  54. package/browser/query-builder/RelationLoader.js +11 -6
  55. package/browser/query-builder/RelationLoader.js.map +1 -1
  56. package/browser/query-builder/UpdateQueryBuilder.d.ts +3 -1
  57. package/browser/query-builder/UpdateQueryBuilder.js +3 -1
  58. package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
  59. package/browser/query-builder/WhereExpressionBuilder.d.ts +3 -1
  60. package/browser/query-builder/WhereExpressionBuilder.js.map +1 -1
  61. package/browser/repository/TreeRepository.js +1 -1
  62. package/browser/repository/TreeRepository.js.map +1 -1
  63. package/browser/util/DirectoryExportedClassesLoader.d.ts +1 -1
  64. package/browser/util/DirectoryExportedClassesLoader.js +55 -31
  65. package/browser/util/DirectoryExportedClassesLoader.js.map +1 -1
  66. package/browser/util/ImportUtils.d.ts +1 -0
  67. package/browser/util/ImportUtils.js +90 -0
  68. package/browser/util/ImportUtils.js.map +1 -0
  69. package/commands/InitCommand.d.ts +9 -7
  70. package/commands/InitCommand.js +72 -43
  71. package/commands/InitCommand.js.map +1 -1
  72. package/common/RelationType.d.ts +14 -0
  73. package/common/RelationType.js +4 -0
  74. package/common/RelationType.js.map +1 -0
  75. package/connection/Connection.d.ts +1 -1
  76. package/connection/Connection.js +45 -30
  77. package/connection/Connection.js.map +1 -1
  78. package/connection/ConnectionMetadataBuilder.d.ts +3 -3
  79. package/connection/ConnectionMetadataBuilder.js +53 -21
  80. package/connection/ConnectionMetadataBuilder.js.map +1 -1
  81. package/connection/ConnectionOptionsReader.js +32 -27
  82. package/connection/ConnectionOptionsReader.js.map +1 -1
  83. package/driver/aurora-data-api/AuroraDataApiQueryRunner.js +1 -1
  84. package/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
  85. package/driver/better-sqlite3/BetterSqlite3Driver.js +7 -5
  86. package/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  87. package/driver/cockroachdb/CockroachQueryRunner.js +1 -1
  88. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  89. package/driver/mysql/MysqlQueryRunner.js +1 -1
  90. package/driver/mysql/MysqlQueryRunner.js.map +1 -1
  91. package/driver/oracle/OracleQueryRunner.js +1 -1
  92. package/driver/oracle/OracleQueryRunner.js.map +1 -1
  93. package/driver/postgres/PostgresQueryRunner.js +1 -1
  94. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  95. package/driver/sap/SapQueryRunner.js +1 -1
  96. package/driver/sap/SapQueryRunner.js.map +1 -1
  97. package/driver/sqlite/SqliteDriver.js +11 -10
  98. package/driver/sqlite/SqliteDriver.js.map +1 -1
  99. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +1 -1
  100. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  101. package/find-options/FindOneOptions.d.ts +6 -0
  102. package/find-options/FindOneOptions.js.map +1 -1
  103. package/find-options/FindOptionsUtils.js +4 -0
  104. package/find-options/FindOptionsUtils.js.map +1 -1
  105. package/find-options/operator/Like.d.ts +1 -1
  106. package/find-options/operator/Like.js +1 -1
  107. package/find-options/operator/Like.js.map +1 -1
  108. package/globals.js +33 -6
  109. package/globals.js.map +1 -1
  110. package/index.d.ts +2 -0
  111. package/index.js +4 -1
  112. package/index.js.map +1 -1
  113. package/index.mjs +352 -0
  114. package/migration/MigrationExecutor.js +1 -1
  115. package/migration/MigrationExecutor.js.map +1 -1
  116. package/package.json +1 -1
  117. package/query-builder/DeleteQueryBuilder.d.ts +3 -1
  118. package/query-builder/DeleteQueryBuilder.js +3 -1
  119. package/query-builder/DeleteQueryBuilder.js.map +1 -1
  120. package/query-builder/NotBrackets.d.ts +7 -0
  121. package/query-builder/NotBrackets.js +19 -0
  122. package/query-builder/NotBrackets.js.map +1 -0
  123. package/query-builder/QueryBuilder.d.ts +2 -1
  124. package/query-builder/QueryBuilder.js +2 -1
  125. package/query-builder/QueryBuilder.js.map +1 -1
  126. package/query-builder/RelationLoader.js +11 -6
  127. package/query-builder/RelationLoader.js.map +1 -1
  128. package/query-builder/UpdateQueryBuilder.d.ts +3 -1
  129. package/query-builder/UpdateQueryBuilder.js +3 -1
  130. package/query-builder/UpdateQueryBuilder.js.map +1 -1
  131. package/query-builder/WhereExpressionBuilder.d.ts +3 -1
  132. package/query-builder/WhereExpressionBuilder.js.map +1 -1
  133. package/repository/TreeRepository.js +1 -1
  134. package/repository/TreeRepository.js.map +1 -1
  135. package/util/DirectoryExportedClassesLoader.d.ts +1 -1
  136. package/util/DirectoryExportedClassesLoader.js +54 -31
  137. package/util/DirectoryExportedClassesLoader.js.map +1 -1
  138. package/util/ImportUtils.d.ts +1 -0
  139. package/util/ImportUtils.js +94 -0
  140. package/util/ImportUtils.js.map +1 -0
package/README.md CHANGED
@@ -71,6 +71,7 @@ TypeORM is highly influenced by other ORMs, such as [Hibernate](http://hibernate
71
71
  * Supports MongoDB NoSQL database.
72
72
  * Works in NodeJS / Browser / Ionic / Cordova / React Native / NativeScript / Expo / Electron platforms.
73
73
  * TypeScript and JavaScript support.
74
+ * ESM and CommonJS support.
74
75
  * Produced code is performant, flexible, clean and maintainable.
75
76
  * Follows all possible best practices.
76
77
  * CLI.
@@ -321,6 +322,9 @@ That's it, your application should successfully run and insert a new user into t
321
322
  You can continue to work with this project and integrate other modules you need and start
322
323
  creating more entities.
323
324
 
325
+ > You can generate an ESM project by running
326
+ `typeorm init --name MyProject --database postgres --module esm` command.
327
+
324
328
  > You can generate an even more advanced project with express installed by running
325
329
  `typeorm init --name MyProject --database mysql --express` command.
326
330
 
@@ -950,6 +954,40 @@ Note that we should use the `@JoinColumn` decorator only on one side of a relati
950
954
  Whichever side you put this decorator on will be the owning side of the relationship.
951
955
  The owning side of a relationship contains a column with a foreign key in the database.
952
956
 
957
+ ### Relations in ESM projects
958
+
959
+ If you use ESM in your TypeScript project, you should use the `Relation` wrapper type in relation properties to avoid circular dependency issues.
960
+ Let's modify our entities:
961
+
962
+ ```javascript
963
+ import { Entity, Column, PrimaryGeneratedColumn, OneToOne, JoinColumn, Relation } from "typeorm";
964
+ import { Photo } from "./Photo";
965
+
966
+ @Entity()
967
+ export class PhotoMetadata {
968
+
969
+ /* ... other columns */
970
+
971
+ @OneToOne(type => Photo, photo => photo.metadata)
972
+ @JoinColumn()
973
+ photo: Relation<Photo>;
974
+ }
975
+ ```
976
+
977
+ ```javascript
978
+ import { Entity, Column, PrimaryGeneratedColumn, OneToOne, Relation } from "typeorm";
979
+ import { PhotoMetadata } from "./PhotoMetadata";
980
+
981
+ @Entity()
982
+ export class Photo {
983
+
984
+ /* ... other columns */
985
+
986
+ @OneToOne(type => PhotoMetadata, photoMetadata => photoMetadata.photo)
987
+ metadata: Relation<PhotoMetadata>;
988
+ }
989
+ ```
990
+
953
991
  ### Loading objects with their relations
954
992
 
955
993
  Now let's load our photo and its photo metadata in a single query.
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Wrapper type for relation type definitions in entities.
3
+ * Used to circumvent ESM modules circular dependency issue caused by reflection metadata saving the type of the property.
4
+ *
5
+ * Usage example:
6
+ * @Entity()
7
+ * export default class User {
8
+ *
9
+ * @OneToOne(() => Profile, profile => profile.user)
10
+ * profile: Relation<Profile>;
11
+ *
12
+ * }
13
+ */
14
+ export declare type Relation<T> = T;
@@ -0,0 +1,3 @@
1
+ export {};
2
+
3
+ //# sourceMappingURL=RelationType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../browser/src/common/RelationType.ts"],"names":[],"mappings":"","file":"RelationType.js","sourcesContent":["/**\n * Wrapper type for relation type definitions in entities.\n * Used to circumvent ESM modules circular dependency issue caused by reflection metadata saving the type of the property.\n *\n * Usage example:\n * @Entity()\n * export default class User {\n *\n * @OneToOne(() => Profile, profile => profile.user)\n * profile: Relation<Profile>;\n *\n * }\n */\nexport type Relation<T> = T;\n"],"sourceRoot":".."}
@@ -202,5 +202,5 @@ export declare class Connection {
202
202
  /**
203
203
  * Builds metadatas for all registered classes inside this connection.
204
204
  */
205
- protected buildMetadatas(): void;
205
+ protected buildMetadatas(): Promise<void>;
206
206
  }
@@ -118,41 +118,44 @@ var Connection = /** @class */ (function () {
118
118
  ObjectUtils.assign(this, { isConnected: true });
119
119
  _a.label = 4;
120
120
  case 4:
121
- _a.trys.push([4, 12, , 14]);
121
+ _a.trys.push([4, 13, , 15]);
122
122
  // build all metadatas registered in the current connection
123
- this.buildMetadatas();
124
- return [4 /*yield*/, this.driver.afterConnect()];
123
+ return [4 /*yield*/, this.buildMetadatas()];
125
124
  case 5:
125
+ // build all metadatas registered in the current connection
126
126
  _a.sent();
127
- if (!this.options.dropSchema) return [3 /*break*/, 7];
128
- return [4 /*yield*/, this.dropDatabase()];
127
+ return [4 /*yield*/, this.driver.afterConnect()];
129
128
  case 6:
130
129
  _a.sent();
131
- _a.label = 7;
130
+ if (!this.options.dropSchema) return [3 /*break*/, 8];
131
+ return [4 /*yield*/, this.dropDatabase()];
132
132
  case 7:
133
- if (!this.options.synchronize) return [3 /*break*/, 9];
134
- return [4 /*yield*/, this.synchronize()];
135
- case 8:
136
133
  _a.sent();
137
- _a.label = 9;
134
+ _a.label = 8;
135
+ case 8:
136
+ if (!this.options.synchronize) return [3 /*break*/, 10];
137
+ return [4 /*yield*/, this.synchronize()];
138
138
  case 9:
139
- if (!this.options.migrationsRun) return [3 /*break*/, 11];
140
- return [4 /*yield*/, this.runMigrations({ transaction: this.options.migrationsTransactionMode })];
139
+ _a.sent();
140
+ _a.label = 10;
141
141
  case 10:
142
+ if (!this.options.migrationsRun) return [3 /*break*/, 12];
143
+ return [4 /*yield*/, this.runMigrations({ transaction: this.options.migrationsTransactionMode })];
144
+ case 11:
142
145
  _a.sent();
143
- _a.label = 11;
144
- case 11: return [3 /*break*/, 14];
145
- case 12:
146
+ _a.label = 12;
147
+ case 12: return [3 /*break*/, 15];
148
+ case 13:
146
149
  error_1 = _a.sent();
147
150
  // if for some reason build metadata fail (for example validation error during entity metadata check)
148
151
  // connection needs to be closed
149
152
  return [4 /*yield*/, this.close()];
150
- case 13:
153
+ case 14:
151
154
  // if for some reason build metadata fail (for example validation error during entity metadata check)
152
155
  // connection needs to be closed
153
156
  _a.sent();
154
157
  throw error_1;
155
- case 14: return [2 /*return*/, this];
158
+ case 15: return [2 /*return*/, this];
156
159
  }
157
160
  });
158
161
  });
@@ -501,19 +504,31 @@ var Connection = /** @class */ (function () {
501
504
  * Builds metadatas for all registered classes inside this connection.
502
505
  */
503
506
  Connection.prototype.buildMetadatas = function () {
504
- var connectionMetadataBuilder = new ConnectionMetadataBuilder(this);
505
- var entityMetadataValidator = new EntityMetadataValidator();
506
- // create subscribers instances if they are not disallowed from high-level (for example they can disallowed from migrations run process)
507
- var subscribers = connectionMetadataBuilder.buildSubscribers(this.options.subscribers || []);
508
- ObjectUtils.assign(this, { subscribers: subscribers });
509
- // build entity metadatas
510
- var entityMetadatas = connectionMetadataBuilder.buildEntityMetadatas(this.options.entities || []);
511
- ObjectUtils.assign(this, { entityMetadatas: entityMetadatas });
512
- // create migration instances
513
- var migrations = connectionMetadataBuilder.buildMigrations(this.options.migrations || []);
514
- ObjectUtils.assign(this, { migrations: migrations });
515
- // validate all created entity metadatas to make sure user created entities are valid and correct
516
- entityMetadataValidator.validateMany(this.entityMetadatas.filter(function (metadata) { return metadata.tableType !== "view"; }), this.driver);
507
+ return __awaiter(this, void 0, void 0, function () {
508
+ var connectionMetadataBuilder, entityMetadataValidator, subscribers, entityMetadatas, migrations;
509
+ return __generator(this, function (_a) {
510
+ switch (_a.label) {
511
+ case 0:
512
+ connectionMetadataBuilder = new ConnectionMetadataBuilder(this);
513
+ entityMetadataValidator = new EntityMetadataValidator();
514
+ return [4 /*yield*/, connectionMetadataBuilder.buildSubscribers(this.options.subscribers || [])];
515
+ case 1:
516
+ subscribers = _a.sent();
517
+ ObjectUtils.assign(this, { subscribers: subscribers });
518
+ return [4 /*yield*/, connectionMetadataBuilder.buildEntityMetadatas(this.options.entities || [])];
519
+ case 2:
520
+ entityMetadatas = _a.sent();
521
+ ObjectUtils.assign(this, { entityMetadatas: entityMetadatas });
522
+ return [4 /*yield*/, connectionMetadataBuilder.buildMigrations(this.options.migrations || [])];
523
+ case 3:
524
+ migrations = _a.sent();
525
+ ObjectUtils.assign(this, { migrations: migrations });
526
+ // validate all created entity metadatas to make sure user created entities are valid and correct
527
+ entityMetadataValidator.validateMany(this.entityMetadatas.filter(function (metadata) { return metadata.tableType !== "view"; }), this.driver);
528
+ return [2 /*return*/];
529
+ }
530
+ });
531
+ });
517
532
  };
518
533
  return Connection;
519
534
  }());
@@ -1 +1 @@
1
- {"version":3,"sources":["../browser/src/connection/Connection.ts"],"names":[],"mappings":"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","file":"Connection.js","sourcesContent":["import {Driver} from \"../driver/Driver\";\nimport {Repository} from \"../repository/Repository\";\nimport {EntitySubscriberInterface} from \"../subscriber/EntitySubscriberInterface\";\nimport {EntityTarget} from \"../common/EntityTarget\";\nimport {ObjectType} from \"../common/ObjectType\";\nimport {EntityManager} from \"../entity-manager/EntityManager\";\nimport {DefaultNamingStrategy} from \"../naming-strategy/DefaultNamingStrategy\";\nimport {CannotExecuteNotConnectedError} from \"../error/CannotExecuteNotConnectedError\";\nimport {CannotConnectAlreadyConnectedError} from \"../error/CannotConnectAlreadyConnectedError\";\nimport {TreeRepository} from \"../repository/TreeRepository\";\nimport {NamingStrategyInterface} from \"../naming-strategy/NamingStrategyInterface\";\nimport {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {Logger} from \"../logger/Logger\";\nimport {EntityMetadataNotFoundError} from \"../error/EntityMetadataNotFoundError\";\nimport {MigrationInterface} from \"../migration/MigrationInterface\";\nimport {MigrationExecutor} from \"../migration/MigrationExecutor\";\nimport {Migration} from \"../migration/Migration\";\nimport {MongoRepository} from \"../repository/MongoRepository\";\nimport {MongoDriver} from \"../driver/mongodb/MongoDriver\";\nimport {MongoEntityManager} from \"../entity-manager/MongoEntityManager\";\nimport {EntityMetadataValidator} from \"../metadata-builder/EntityMetadataValidator\";\nimport {ConnectionOptions} from \"./ConnectionOptions\";\nimport {QueryRunnerProviderAlreadyReleasedError} from \"../error/QueryRunnerProviderAlreadyReleasedError\";\nimport {EntityManagerFactory} from \"../entity-manager/EntityManagerFactory\";\nimport {DriverFactory} from \"../driver/DriverFactory\";\nimport {ConnectionMetadataBuilder} from \"./ConnectionMetadataBuilder\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {SelectQueryBuilder} from \"../query-builder/SelectQueryBuilder\";\nimport {LoggerFactory} from \"../logger/LoggerFactory\";\nimport {QueryResultCacheFactory} from \"../cache/QueryResultCacheFactory\";\nimport {QueryResultCache} from \"../cache/QueryResultCache\";\nimport {SqljsEntityManager} from \"../entity-manager/SqljsEntityManager\";\nimport {RelationLoader} from \"../query-builder/RelationLoader\";\nimport {EntitySchema} from \"../entity-schema/EntitySchema\";\nimport {SqlServerDriver} from \"../driver/sqlserver/SqlServerDriver\";\nimport {MysqlDriver} from \"../driver/mysql/MysqlDriver\";\nimport {ObjectUtils} from \"../util/ObjectUtils\";\nimport {IsolationLevel} from \"../driver/types/IsolationLevel\";\nimport {AuroraDataApiDriver} from \"../driver/aurora-data-api/AuroraDataApiDriver\";\nimport {ReplicationMode} from \"../driver/types/ReplicationMode\";\nimport { TypeORMError } from \"../error/TypeORMError\";\n\n/**\n * Connection is a single database ORM connection to a specific database.\n * Its not required to be a database connection, depend on database type it can create connection pool.\n * You can have multiple connections to multiple databases in your application.\n */\nexport class Connection {\n\n // -------------------------------------------------------------------------\n // Public Readonly Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection name.\n */\n readonly name: string;\n\n /**\n * Connection options.\n */\n readonly options: ConnectionOptions;\n\n /**\n * Indicates if connection is initialized or not.\n */\n readonly isConnected: boolean;\n\n /**\n * Database driver used by this connection.\n */\n readonly driver: Driver;\n\n /**\n * EntityManager of this connection.\n */\n readonly manager: EntityManager;\n\n /**\n * Naming strategy used in the connection.\n */\n readonly namingStrategy: NamingStrategyInterface;\n\n /**\n * Logger used to log orm events.\n */\n readonly logger: Logger;\n\n /**\n * Migration instances that are registered for this connection.\n */\n readonly migrations: MigrationInterface[] = [];\n\n /**\n * Entity subscriber instances that are registered for this connection.\n */\n readonly subscribers: EntitySubscriberInterface<any>[] = [];\n\n /**\n * All entity metadatas that are registered for this connection.\n */\n readonly entityMetadatas: EntityMetadata[] = [];\n\n /**\n * Used to work with query result cache.\n */\n readonly queryResultCache?: QueryResultCache;\n\n /**\n * Used to load relations and work with lazy relations.\n */\n readonly relationLoader: RelationLoader;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(options: ConnectionOptions) {\n this.name = options.name || \"default\";\n this.options = options;\n this.logger = new LoggerFactory().create(this.options.logger, this.options.logging);\n this.driver = new DriverFactory().create(this);\n this.manager = this.createEntityManager();\n this.namingStrategy = options.namingStrategy || new DefaultNamingStrategy();\n this.queryResultCache = options.cache ? new QueryResultCacheFactory(this).create() : undefined;\n this.relationLoader = new RelationLoader(this);\n this.isConnected = false;\n }\n\n // -------------------------------------------------------------------------\n // Public Accessors\n // -------------------------------------------------------------------------\n\n /**\n * Gets the mongodb entity manager that allows to perform mongodb-specific repository operations\n * with any entity in this connection.\n *\n * Available only in mongodb connections.\n */\n get mongoManager(): MongoEntityManager {\n if (!(this.manager instanceof MongoEntityManager))\n throw new TypeORMError(`MongoEntityManager is only available for MongoDB databases.`);\n\n return this.manager as MongoEntityManager;\n }\n\n /**\n * Gets a sql.js specific Entity Manager that allows to perform special load and save operations\n *\n * Available only in connection with the sqljs driver.\n */\n get sqljsManager(): SqljsEntityManager {\n if (!(this.manager instanceof SqljsEntityManager))\n throw new TypeORMError(`SqljsEntityManager is only available for Sqljs databases.`);\n\n return this.manager as SqljsEntityManager;\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Performs connection to the database.\n * This method should be called once on application bootstrap.\n * This method not necessarily creates database connection (depend on database type),\n * but it also can setup a connection pool with database to use.\n */\n async connect(): Promise<this> {\n if (this.isConnected)\n throw new CannotConnectAlreadyConnectedError(this.name);\n\n // connect to the database via its driver\n await this.driver.connect();\n\n // connect to the cache-specific database if cache is enabled\n if (this.queryResultCache)\n await this.queryResultCache.connect();\n\n // set connected status for the current connection\n ObjectUtils.assign(this, { isConnected: true });\n\n try {\n\n // build all metadatas registered in the current connection\n this.buildMetadatas();\n\n await this.driver.afterConnect();\n\n // if option is set - drop schema once connection is done\n if (this.options.dropSchema)\n await this.dropDatabase();\n\n // if option is set - automatically synchronize a schema\n if (this.options.synchronize)\n await this.synchronize();\n\n // if option is set - automatically synchronize a schema\n if (this.options.migrationsRun)\n await this.runMigrations({ transaction: this.options.migrationsTransactionMode });\n\n } catch (error) {\n\n // if for some reason build metadata fail (for example validation error during entity metadata check)\n // connection needs to be closed\n await this.close();\n throw error;\n }\n\n return this;\n }\n\n /**\n * Closes connection with the database.\n * Once connection is closed, you cannot use repositories or perform any operations except opening connection again.\n */\n async close(): Promise<void> {\n if (!this.isConnected)\n throw new CannotExecuteNotConnectedError(this.name);\n\n await this.driver.disconnect();\n\n // disconnect from the cache-specific database if cache was enabled\n if (this.queryResultCache)\n await this.queryResultCache.disconnect();\n\n ObjectUtils.assign(this, { isConnected: false });\n }\n\n /**\n * Creates database schema for all entities registered in this connection.\n * Can be used only after connection to the database is established.\n *\n * @param dropBeforeSync If set to true then it drops the database with all its tables and data\n */\n async synchronize(dropBeforeSync: boolean = false): Promise<void> {\n\n if (!this.isConnected)\n throw new CannotExecuteNotConnectedError(this.name);\n\n if (dropBeforeSync)\n await this.dropDatabase();\n\n const schemaBuilder = this.driver.createSchemaBuilder();\n await schemaBuilder.build();\n }\n\n /**\n * Drops the database and all its data.\n * Be careful with this method on production since this method will erase all your database tables and their data.\n * Can be used only after connection to the database is established.\n */\n // TODO rename\n async dropDatabase(): Promise<void> {\n const queryRunner = this.createQueryRunner();\n try {\n if (this.driver instanceof SqlServerDriver || this.driver instanceof MysqlDriver || this.driver instanceof AuroraDataApiDriver) {\n const databases: string[] = this.driver.database ? [this.driver.database] : [];\n this.entityMetadatas.forEach(metadata => {\n if (metadata.database && databases.indexOf(metadata.database) === -1)\n databases.push(metadata.database);\n });\n\n for (const database of databases) {\n await queryRunner.clearDatabase(database);\n }\n } else {\n await queryRunner.clearDatabase();\n }\n } finally {\n await queryRunner.release();\n }\n }\n\n /**\n * Runs all pending migrations.\n * Can be used only after connection to the database is established.\n */\n async runMigrations(options?: { transaction?: \"all\" | \"none\" | \"each\" }): Promise<Migration[]> {\n if (!this.isConnected)\n throw new CannotExecuteNotConnectedError(this.name);\n\n const migrationExecutor = new MigrationExecutor(this);\n migrationExecutor.transaction = (options && options.transaction) || \"all\";\n\n const successMigrations = await migrationExecutor.executePendingMigrations();\n return successMigrations;\n }\n\n /**\n * Reverts last executed migration.\n * Can be used only after connection to the database is established.\n */\n async undoLastMigration(options?: { transaction?: \"all\" | \"none\" | \"each\" }): Promise<void> {\n\n if (!this.isConnected)\n throw new CannotExecuteNotConnectedError(this.name);\n\n const migrationExecutor = new MigrationExecutor(this);\n migrationExecutor.transaction = (options && options.transaction) || \"all\";\n\n await migrationExecutor.undoLastMigration();\n }\n\n /**\n * Lists all migrations and whether they have been run.\n * Returns true if there are pending migrations\n */\n async showMigrations(): Promise<boolean> {\n if (!this.isConnected) {\n throw new CannotExecuteNotConnectedError(this.name);\n }\n const migrationExecutor = new MigrationExecutor(this);\n return await migrationExecutor.showMigrations();\n }\n\n /**\n * Checks if entity metadata exist for the given entity class, target name or table name.\n */\n hasMetadata(target: EntityTarget<any>): boolean {\n return !!this.findMetadata(target);\n }\n\n /**\n * Gets entity metadata for the given entity class or schema name.\n */\n getMetadata(target: EntityTarget<any>): EntityMetadata {\n const metadata = this.findMetadata(target);\n if (!metadata)\n throw new EntityMetadataNotFoundError(target);\n\n return metadata;\n }\n\n /**\n * Gets repository for the given entity.\n */\n getRepository<Entity>(target: EntityTarget<Entity>): Repository<Entity> {\n return this.manager.getRepository(target);\n }\n\n /**\n * Gets tree repository for the given entity class or name.\n * Only tree-type entities can have a TreeRepository, like ones decorated with @Tree decorator.\n */\n getTreeRepository<Entity>(target: EntityTarget<Entity>): TreeRepository<Entity> {\n return this.manager.getTreeRepository(target);\n }\n\n /**\n * Gets mongodb-specific repository for the given entity class or name.\n * Works only if connection is mongodb-specific.\n */\n getMongoRepository<Entity>(target: EntityTarget<Entity>): MongoRepository<Entity> {\n if (!(this.driver instanceof MongoDriver))\n throw new TypeORMError(`You can use getMongoRepository only for MongoDB connections.`);\n\n return this.manager.getRepository(target) as any;\n }\n\n /**\n * Gets custom entity repository marked with @EntityRepository decorator.\n */\n getCustomRepository<T>(customRepository: ObjectType<T>): T {\n return this.manager.getCustomRepository(customRepository);\n }\n\n /**\n * Wraps given function execution (and all operations made there) into a transaction.\n * All database operations must be executed using provided entity manager.\n */\n async transaction<T>(runInTransaction: (entityManager: EntityManager) => Promise<T>): Promise<T>;\n async transaction<T>(isolationLevel: IsolationLevel, runInTransaction: (entityManager: EntityManager) => Promise<T>): Promise<T>;\n async transaction<T>(\n isolationOrRunInTransaction: IsolationLevel | ((entityManager: EntityManager) => Promise<T>),\n runInTransactionParam?: (entityManager: EntityManager) => Promise<T>\n ): Promise<any> {\n return this.manager.transaction(\n isolationOrRunInTransaction as any,\n runInTransactionParam as any\n );\n }\n\n /**\n * Executes raw SQL query and returns raw database results.\n */\n async query(query: string, parameters?: any[], queryRunner?: QueryRunner): Promise<any> {\n if (this instanceof MongoEntityManager)\n throw new TypeORMError(`Queries aren't supported by MongoDB.`);\n\n if (queryRunner && queryRunner.isReleased)\n throw new QueryRunnerProviderAlreadyReleasedError();\n\n const usedQueryRunner = queryRunner || this.createQueryRunner();\n\n try {\n return await usedQueryRunner.query(query, parameters); // await is needed here because we are using finally\n\n } finally {\n if (!queryRunner)\n await usedQueryRunner.release();\n }\n }\n\n /**\n * Creates a new query builder that can be used to build a SQL query.\n */\n createQueryBuilder<Entity>(entityClass: EntityTarget<Entity>, alias: string, queryRunner?: QueryRunner): SelectQueryBuilder<Entity>;\n\n /**\n * Creates a new query builder that can be used to build a SQL query.\n */\n createQueryBuilder(queryRunner?: QueryRunner): SelectQueryBuilder<any>;\n\n /**\n * Creates a new query builder that can be used to build a SQL query.\n */\n createQueryBuilder<Entity>(entityOrRunner?: EntityTarget<Entity>|QueryRunner, alias?: string, queryRunner?: QueryRunner): SelectQueryBuilder<Entity> {\n if (this instanceof MongoEntityManager)\n throw new TypeORMError(`Query Builder is not supported by MongoDB.`);\n\n if (alias) {\n const metadata = this.getMetadata(entityOrRunner as EntityTarget<Entity>);\n return new SelectQueryBuilder(this, queryRunner)\n .select(alias)\n .from(metadata.target, alias);\n\n } else {\n return new SelectQueryBuilder(this, entityOrRunner as QueryRunner|undefined);\n }\n }\n\n /**\n * Creates a query runner used for perform queries on a single database connection.\n * Using query runners you can control your queries to execute using single database connection and\n * manually control your database transaction.\n *\n * Mode is used in replication mode and indicates whatever you want to connect\n * to master database or any of slave databases.\n * If you perform writes you must use master database,\n * if you perform reads you can use slave databases.\n */\n createQueryRunner(mode: ReplicationMode = \"master\"): QueryRunner {\n const queryRunner = this.driver.createQueryRunner(mode);\n const manager = this.createEntityManager(queryRunner);\n Object.assign(queryRunner, { manager: manager });\n return queryRunner;\n }\n\n /**\n * Gets entity metadata of the junction table (many-to-many table).\n */\n getManyToManyMetadata(entityTarget: EntityTarget<any>, relationPropertyPath: string) {\n const relationMetadata = this.getMetadata(entityTarget).findRelationWithPropertyPath(relationPropertyPath);\n if (!relationMetadata)\n throw new TypeORMError(`Relation \"${relationPropertyPath}\" was not found in ${entityTarget} entity.`);\n if (!relationMetadata.isManyToMany)\n throw new TypeORMError(`Relation \"${entityTarget}#${relationPropertyPath}\" does not have a many-to-many relationship.` +\n `You can use this method only on many-to-many relations.`);\n\n return relationMetadata.junctionEntityMetadata;\n }\n\n /**\n * Creates an Entity Manager for the current connection with the help of the EntityManagerFactory.\n */\n createEntityManager(queryRunner?: QueryRunner): EntityManager {\n return new EntityManagerFactory().create(this, queryRunner);\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Finds exist entity metadata by the given entity class, target name or table name.\n */\n protected findMetadata(target: EntityTarget<any>): EntityMetadata|undefined {\n return this.entityMetadatas.find(metadata => {\n if (metadata.target === target)\n return true;\n if (target instanceof EntitySchema) {\n return metadata.name === target.options.name;\n }\n if (typeof target === \"string\") {\n if (target.indexOf(\".\") !== -1) {\n return metadata.tablePath === target;\n } else {\n return metadata.name === target || metadata.tableName === target;\n }\n }\n\n return false;\n });\n }\n\n /**\n * Builds metadatas for all registered classes inside this connection.\n */\n protected buildMetadatas(): void {\n\n const connectionMetadataBuilder = new ConnectionMetadataBuilder(this);\n const entityMetadataValidator = new EntityMetadataValidator();\n\n // create subscribers instances if they are not disallowed from high-level (for example they can disallowed from migrations run process)\n const subscribers = connectionMetadataBuilder.buildSubscribers(this.options.subscribers || []);\n ObjectUtils.assign(this, { subscribers: subscribers });\n\n // build entity metadatas\n const entityMetadatas = connectionMetadataBuilder.buildEntityMetadatas(this.options.entities || []);\n ObjectUtils.assign(this, { entityMetadatas: entityMetadatas });\n\n // create migration instances\n const migrations = connectionMetadataBuilder.buildMigrations(this.options.migrations || []);\n ObjectUtils.assign(this, { migrations: migrations });\n\n // validate all created entity metadatas to make sure user created entities are valid and correct\n entityMetadataValidator.validateMany(this.entityMetadatas.filter(metadata => metadata.tableType !== \"view\"), this.driver);\n }\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../browser/src/connection/Connection.ts"],"names":[],"mappings":"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","file":"Connection.js","sourcesContent":["import {Driver} from \"../driver/Driver\";\nimport {Repository} from \"../repository/Repository\";\nimport {EntitySubscriberInterface} from \"../subscriber/EntitySubscriberInterface\";\nimport {EntityTarget} from \"../common/EntityTarget\";\nimport {ObjectType} from \"../common/ObjectType\";\nimport {EntityManager} from \"../entity-manager/EntityManager\";\nimport {DefaultNamingStrategy} from \"../naming-strategy/DefaultNamingStrategy\";\nimport {CannotExecuteNotConnectedError} from \"../error/CannotExecuteNotConnectedError\";\nimport {CannotConnectAlreadyConnectedError} from \"../error/CannotConnectAlreadyConnectedError\";\nimport {TreeRepository} from \"../repository/TreeRepository\";\nimport {NamingStrategyInterface} from \"../naming-strategy/NamingStrategyInterface\";\nimport {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {Logger} from \"../logger/Logger\";\nimport {EntityMetadataNotFoundError} from \"../error/EntityMetadataNotFoundError\";\nimport {MigrationInterface} from \"../migration/MigrationInterface\";\nimport {MigrationExecutor} from \"../migration/MigrationExecutor\";\nimport {Migration} from \"../migration/Migration\";\nimport {MongoRepository} from \"../repository/MongoRepository\";\nimport {MongoDriver} from \"../driver/mongodb/MongoDriver\";\nimport {MongoEntityManager} from \"../entity-manager/MongoEntityManager\";\nimport {EntityMetadataValidator} from \"../metadata-builder/EntityMetadataValidator\";\nimport {ConnectionOptions} from \"./ConnectionOptions\";\nimport {QueryRunnerProviderAlreadyReleasedError} from \"../error/QueryRunnerProviderAlreadyReleasedError\";\nimport {EntityManagerFactory} from \"../entity-manager/EntityManagerFactory\";\nimport {DriverFactory} from \"../driver/DriverFactory\";\nimport {ConnectionMetadataBuilder} from \"./ConnectionMetadataBuilder\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {SelectQueryBuilder} from \"../query-builder/SelectQueryBuilder\";\nimport {LoggerFactory} from \"../logger/LoggerFactory\";\nimport {QueryResultCacheFactory} from \"../cache/QueryResultCacheFactory\";\nimport {QueryResultCache} from \"../cache/QueryResultCache\";\nimport {SqljsEntityManager} from \"../entity-manager/SqljsEntityManager\";\nimport {RelationLoader} from \"../query-builder/RelationLoader\";\nimport {EntitySchema} from \"../entity-schema/EntitySchema\";\nimport {SqlServerDriver} from \"../driver/sqlserver/SqlServerDriver\";\nimport {MysqlDriver} from \"../driver/mysql/MysqlDriver\";\nimport {ObjectUtils} from \"../util/ObjectUtils\";\nimport {IsolationLevel} from \"../driver/types/IsolationLevel\";\nimport {AuroraDataApiDriver} from \"../driver/aurora-data-api/AuroraDataApiDriver\";\nimport {ReplicationMode} from \"../driver/types/ReplicationMode\";\nimport { TypeORMError } from \"../error/TypeORMError\";\n\n/**\n * Connection is a single database ORM connection to a specific database.\n * Its not required to be a database connection, depend on database type it can create connection pool.\n * You can have multiple connections to multiple databases in your application.\n */\nexport class Connection {\n\n // -------------------------------------------------------------------------\n // Public Readonly Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection name.\n */\n readonly name: string;\n\n /**\n * Connection options.\n */\n readonly options: ConnectionOptions;\n\n /**\n * Indicates if connection is initialized or not.\n */\n readonly isConnected: boolean;\n\n /**\n * Database driver used by this connection.\n */\n readonly driver: Driver;\n\n /**\n * EntityManager of this connection.\n */\n readonly manager: EntityManager;\n\n /**\n * Naming strategy used in the connection.\n */\n readonly namingStrategy: NamingStrategyInterface;\n\n /**\n * Logger used to log orm events.\n */\n readonly logger: Logger;\n\n /**\n * Migration instances that are registered for this connection.\n */\n readonly migrations: MigrationInterface[] = [];\n\n /**\n * Entity subscriber instances that are registered for this connection.\n */\n readonly subscribers: EntitySubscriberInterface<any>[] = [];\n\n /**\n * All entity metadatas that are registered for this connection.\n */\n readonly entityMetadatas: EntityMetadata[] = [];\n\n /**\n * Used to work with query result cache.\n */\n readonly queryResultCache?: QueryResultCache;\n\n /**\n * Used to load relations and work with lazy relations.\n */\n readonly relationLoader: RelationLoader;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(options: ConnectionOptions) {\n this.name = options.name || \"default\";\n this.options = options;\n this.logger = new LoggerFactory().create(this.options.logger, this.options.logging);\n this.driver = new DriverFactory().create(this);\n this.manager = this.createEntityManager();\n this.namingStrategy = options.namingStrategy || new DefaultNamingStrategy();\n this.queryResultCache = options.cache ? new QueryResultCacheFactory(this).create() : undefined;\n this.relationLoader = new RelationLoader(this);\n this.isConnected = false;\n }\n\n // -------------------------------------------------------------------------\n // Public Accessors\n // -------------------------------------------------------------------------\n\n /**\n * Gets the mongodb entity manager that allows to perform mongodb-specific repository operations\n * with any entity in this connection.\n *\n * Available only in mongodb connections.\n */\n get mongoManager(): MongoEntityManager {\n if (!(this.manager instanceof MongoEntityManager))\n throw new TypeORMError(`MongoEntityManager is only available for MongoDB databases.`);\n\n return this.manager as MongoEntityManager;\n }\n\n /**\n * Gets a sql.js specific Entity Manager that allows to perform special load and save operations\n *\n * Available only in connection with the sqljs driver.\n */\n get sqljsManager(): SqljsEntityManager {\n if (!(this.manager instanceof SqljsEntityManager))\n throw new TypeORMError(`SqljsEntityManager is only available for Sqljs databases.`);\n\n return this.manager as SqljsEntityManager;\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Performs connection to the database.\n * This method should be called once on application bootstrap.\n * This method not necessarily creates database connection (depend on database type),\n * but it also can setup a connection pool with database to use.\n */\n async connect(): Promise<this> {\n if (this.isConnected)\n throw new CannotConnectAlreadyConnectedError(this.name);\n\n // connect to the database via its driver\n await this.driver.connect();\n\n // connect to the cache-specific database if cache is enabled\n if (this.queryResultCache)\n await this.queryResultCache.connect();\n\n // set connected status for the current connection\n ObjectUtils.assign(this, { isConnected: true });\n\n try {\n\n // build all metadatas registered in the current connection\n await this.buildMetadatas();\n\n await this.driver.afterConnect();\n\n // if option is set - drop schema once connection is done\n if (this.options.dropSchema)\n await this.dropDatabase();\n\n // if option is set - automatically synchronize a schema\n if (this.options.synchronize)\n await this.synchronize();\n\n // if option is set - automatically synchronize a schema\n if (this.options.migrationsRun)\n await this.runMigrations({ transaction: this.options.migrationsTransactionMode });\n\n } catch (error) {\n\n // if for some reason build metadata fail (for example validation error during entity metadata check)\n // connection needs to be closed\n await this.close();\n throw error;\n }\n\n return this;\n }\n\n /**\n * Closes connection with the database.\n * Once connection is closed, you cannot use repositories or perform any operations except opening connection again.\n */\n async close(): Promise<void> {\n if (!this.isConnected)\n throw new CannotExecuteNotConnectedError(this.name);\n\n await this.driver.disconnect();\n\n // disconnect from the cache-specific database if cache was enabled\n if (this.queryResultCache)\n await this.queryResultCache.disconnect();\n\n ObjectUtils.assign(this, { isConnected: false });\n }\n\n /**\n * Creates database schema for all entities registered in this connection.\n * Can be used only after connection to the database is established.\n *\n * @param dropBeforeSync If set to true then it drops the database with all its tables and data\n */\n async synchronize(dropBeforeSync: boolean = false): Promise<void> {\n\n if (!this.isConnected)\n throw new CannotExecuteNotConnectedError(this.name);\n\n if (dropBeforeSync)\n await this.dropDatabase();\n\n const schemaBuilder = this.driver.createSchemaBuilder();\n await schemaBuilder.build();\n }\n\n /**\n * Drops the database and all its data.\n * Be careful with this method on production since this method will erase all your database tables and their data.\n * Can be used only after connection to the database is established.\n */\n // TODO rename\n async dropDatabase(): Promise<void> {\n const queryRunner = this.createQueryRunner();\n try {\n if (this.driver instanceof SqlServerDriver || this.driver instanceof MysqlDriver || this.driver instanceof AuroraDataApiDriver) {\n const databases: string[] = this.driver.database ? [this.driver.database] : [];\n this.entityMetadatas.forEach(metadata => {\n if (metadata.database && databases.indexOf(metadata.database) === -1)\n databases.push(metadata.database);\n });\n\n for (const database of databases) {\n await queryRunner.clearDatabase(database);\n }\n } else {\n await queryRunner.clearDatabase();\n }\n } finally {\n await queryRunner.release();\n }\n }\n\n /**\n * Runs all pending migrations.\n * Can be used only after connection to the database is established.\n */\n async runMigrations(options?: { transaction?: \"all\" | \"none\" | \"each\" }): Promise<Migration[]> {\n if (!this.isConnected)\n throw new CannotExecuteNotConnectedError(this.name);\n\n const migrationExecutor = new MigrationExecutor(this);\n migrationExecutor.transaction = (options && options.transaction) || \"all\";\n\n const successMigrations = await migrationExecutor.executePendingMigrations();\n return successMigrations;\n }\n\n /**\n * Reverts last executed migration.\n * Can be used only after connection to the database is established.\n */\n async undoLastMigration(options?: { transaction?: \"all\" | \"none\" | \"each\" }): Promise<void> {\n\n if (!this.isConnected)\n throw new CannotExecuteNotConnectedError(this.name);\n\n const migrationExecutor = new MigrationExecutor(this);\n migrationExecutor.transaction = (options && options.transaction) || \"all\";\n\n await migrationExecutor.undoLastMigration();\n }\n\n /**\n * Lists all migrations and whether they have been run.\n * Returns true if there are pending migrations\n */\n async showMigrations(): Promise<boolean> {\n if (!this.isConnected) {\n throw new CannotExecuteNotConnectedError(this.name);\n }\n const migrationExecutor = new MigrationExecutor(this);\n return await migrationExecutor.showMigrations();\n }\n\n /**\n * Checks if entity metadata exist for the given entity class, target name or table name.\n */\n hasMetadata(target: EntityTarget<any>): boolean {\n return !!this.findMetadata(target);\n }\n\n /**\n * Gets entity metadata for the given entity class or schema name.\n */\n getMetadata(target: EntityTarget<any>): EntityMetadata {\n const metadata = this.findMetadata(target);\n if (!metadata)\n throw new EntityMetadataNotFoundError(target);\n\n return metadata;\n }\n\n /**\n * Gets repository for the given entity.\n */\n getRepository<Entity>(target: EntityTarget<Entity>): Repository<Entity> {\n return this.manager.getRepository(target);\n }\n\n /**\n * Gets tree repository for the given entity class or name.\n * Only tree-type entities can have a TreeRepository, like ones decorated with @Tree decorator.\n */\n getTreeRepository<Entity>(target: EntityTarget<Entity>): TreeRepository<Entity> {\n return this.manager.getTreeRepository(target);\n }\n\n /**\n * Gets mongodb-specific repository for the given entity class or name.\n * Works only if connection is mongodb-specific.\n */\n getMongoRepository<Entity>(target: EntityTarget<Entity>): MongoRepository<Entity> {\n if (!(this.driver instanceof MongoDriver))\n throw new TypeORMError(`You can use getMongoRepository only for MongoDB connections.`);\n\n return this.manager.getRepository(target) as any;\n }\n\n /**\n * Gets custom entity repository marked with @EntityRepository decorator.\n */\n getCustomRepository<T>(customRepository: ObjectType<T>): T {\n return this.manager.getCustomRepository(customRepository);\n }\n\n /**\n * Wraps given function execution (and all operations made there) into a transaction.\n * All database operations must be executed using provided entity manager.\n */\n async transaction<T>(runInTransaction: (entityManager: EntityManager) => Promise<T>): Promise<T>;\n async transaction<T>(isolationLevel: IsolationLevel, runInTransaction: (entityManager: EntityManager) => Promise<T>): Promise<T>;\n async transaction<T>(\n isolationOrRunInTransaction: IsolationLevel | ((entityManager: EntityManager) => Promise<T>),\n runInTransactionParam?: (entityManager: EntityManager) => Promise<T>\n ): Promise<any> {\n return this.manager.transaction(\n isolationOrRunInTransaction as any,\n runInTransactionParam as any\n );\n }\n\n /**\n * Executes raw SQL query and returns raw database results.\n */\n async query(query: string, parameters?: any[], queryRunner?: QueryRunner): Promise<any> {\n if (this instanceof MongoEntityManager)\n throw new TypeORMError(`Queries aren't supported by MongoDB.`);\n\n if (queryRunner && queryRunner.isReleased)\n throw new QueryRunnerProviderAlreadyReleasedError();\n\n const usedQueryRunner = queryRunner || this.createQueryRunner();\n\n try {\n return await usedQueryRunner.query(query, parameters); // await is needed here because we are using finally\n\n } finally {\n if (!queryRunner)\n await usedQueryRunner.release();\n }\n }\n\n /**\n * Creates a new query builder that can be used to build a SQL query.\n */\n createQueryBuilder<Entity>(entityClass: EntityTarget<Entity>, alias: string, queryRunner?: QueryRunner): SelectQueryBuilder<Entity>;\n\n /**\n * Creates a new query builder that can be used to build a SQL query.\n */\n createQueryBuilder(queryRunner?: QueryRunner): SelectQueryBuilder<any>;\n\n /**\n * Creates a new query builder that can be used to build a SQL query.\n */\n createQueryBuilder<Entity>(entityOrRunner?: EntityTarget<Entity>|QueryRunner, alias?: string, queryRunner?: QueryRunner): SelectQueryBuilder<Entity> {\n if (this instanceof MongoEntityManager)\n throw new TypeORMError(`Query Builder is not supported by MongoDB.`);\n\n if (alias) {\n const metadata = this.getMetadata(entityOrRunner as EntityTarget<Entity>);\n return new SelectQueryBuilder(this, queryRunner)\n .select(alias)\n .from(metadata.target, alias);\n\n } else {\n return new SelectQueryBuilder(this, entityOrRunner as QueryRunner|undefined);\n }\n }\n\n /**\n * Creates a query runner used for perform queries on a single database connection.\n * Using query runners you can control your queries to execute using single database connection and\n * manually control your database transaction.\n *\n * Mode is used in replication mode and indicates whatever you want to connect\n * to master database or any of slave databases.\n * If you perform writes you must use master database,\n * if you perform reads you can use slave databases.\n */\n createQueryRunner(mode: ReplicationMode = \"master\"): QueryRunner {\n const queryRunner = this.driver.createQueryRunner(mode);\n const manager = this.createEntityManager(queryRunner);\n Object.assign(queryRunner, { manager: manager });\n return queryRunner;\n }\n\n /**\n * Gets entity metadata of the junction table (many-to-many table).\n */\n getManyToManyMetadata(entityTarget: EntityTarget<any>, relationPropertyPath: string) {\n const relationMetadata = this.getMetadata(entityTarget).findRelationWithPropertyPath(relationPropertyPath);\n if (!relationMetadata)\n throw new TypeORMError(`Relation \"${relationPropertyPath}\" was not found in ${entityTarget} entity.`);\n if (!relationMetadata.isManyToMany)\n throw new TypeORMError(`Relation \"${entityTarget}#${relationPropertyPath}\" does not have a many-to-many relationship.` +\n `You can use this method only on many-to-many relations.`);\n\n return relationMetadata.junctionEntityMetadata;\n }\n\n /**\n * Creates an Entity Manager for the current connection with the help of the EntityManagerFactory.\n */\n createEntityManager(queryRunner?: QueryRunner): EntityManager {\n return new EntityManagerFactory().create(this, queryRunner);\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Finds exist entity metadata by the given entity class, target name or table name.\n */\n protected findMetadata(target: EntityTarget<any>): EntityMetadata|undefined {\n return this.entityMetadatas.find(metadata => {\n if (metadata.target === target)\n return true;\n if (target instanceof EntitySchema) {\n return metadata.name === target.options.name;\n }\n if (typeof target === \"string\") {\n if (target.indexOf(\".\") !== -1) {\n return metadata.tablePath === target;\n } else {\n return metadata.name === target || metadata.tableName === target;\n }\n }\n\n return false;\n });\n }\n\n /**\n * Builds metadatas for all registered classes inside this connection.\n */\n protected async buildMetadatas(): Promise<void> {\n\n const connectionMetadataBuilder = new ConnectionMetadataBuilder(this);\n const entityMetadataValidator = new EntityMetadataValidator();\n\n // create subscribers instances if they are not disallowed from high-level (for example they can disallowed from migrations run process)\n const subscribers = await connectionMetadataBuilder.buildSubscribers(this.options.subscribers || []);\n ObjectUtils.assign(this, { subscribers: subscribers });\n\n // build entity metadatas\n const entityMetadatas = await connectionMetadataBuilder.buildEntityMetadatas(this.options.entities || []);\n ObjectUtils.assign(this, { entityMetadatas: entityMetadatas });\n\n // create migration instances\n const migrations = await connectionMetadataBuilder.buildMigrations(this.options.migrations || []);\n ObjectUtils.assign(this, { migrations: migrations });\n\n // validate all created entity metadatas to make sure user created entities are valid and correct\n entityMetadataValidator.validateMany(this.entityMetadatas.filter(metadata => metadata.tableType !== \"view\"), this.driver);\n }\n}\n"],"sourceRoot":".."}
@@ -12,13 +12,13 @@ export declare class ConnectionMetadataBuilder {
12
12
  /**
13
13
  * Builds migration instances for the given classes or directories.
14
14
  */
15
- buildMigrations(migrations: (Function | string)[]): MigrationInterface[];
15
+ buildMigrations(migrations: (Function | string)[]): Promise<MigrationInterface[]>;
16
16
  /**
17
17
  * Builds subscriber instances for the given classes or directories.
18
18
  */
19
- buildSubscribers(subscribers: (Function | string)[]): EntitySubscriberInterface<any>[];
19
+ buildSubscribers(subscribers: (Function | string)[]): Promise<EntitySubscriberInterface<any>[]>;
20
20
  /**
21
21
  * Builds entity metadatas for the given classes or directories.
22
22
  */
23
- buildEntityMetadatas(entities: (Function | EntitySchema<any> | string)[]): EntityMetadata[];
23
+ buildEntityMetadatas(entities: (Function | EntitySchema<any> | string)[]): Promise<EntityMetadata[]>;
24
24
  }
@@ -1,4 +1,4 @@
1
- import { __read, __spreadArray } from "tslib";
1
+ import { __awaiter, __generator, __read, __spreadArray } from "tslib";
2
2
  import { importClassesFromDirectories } from "../util/DirectoryExportedClassesLoader";
3
3
  import { OrmUtils } from "../util/OrmUtils";
4
4
  import { getFromContainer } from "../container";
@@ -23,38 +23,70 @@ var ConnectionMetadataBuilder = /** @class */ (function () {
23
23
  * Builds migration instances for the given classes or directories.
24
24
  */
25
25
  ConnectionMetadataBuilder.prototype.buildMigrations = function (migrations) {
26
- var _a = __read(OrmUtils.splitClassesAndStrings(migrations), 2), migrationClasses = _a[0], migrationDirectories = _a[1];
27
- var allMigrationClasses = __spreadArray(__spreadArray([], __read(migrationClasses), false), __read(importClassesFromDirectories(this.connection.logger, migrationDirectories)), false);
28
- return allMigrationClasses.map(function (migrationClass) { return getFromContainer(migrationClass); });
26
+ return __awaiter(this, void 0, void 0, function () {
27
+ var _a, migrationClasses, migrationDirectories, allMigrationClasses, _b;
28
+ return __generator(this, function (_c) {
29
+ switch (_c.label) {
30
+ case 0:
31
+ _a = __read(OrmUtils.splitClassesAndStrings(migrations), 2), migrationClasses = _a[0], migrationDirectories = _a[1];
32
+ _b = [__spreadArray([], __read(migrationClasses), false)];
33
+ return [4 /*yield*/, importClassesFromDirectories(this.connection.logger, migrationDirectories)];
34
+ case 1:
35
+ allMigrationClasses = __spreadArray.apply(void 0, _b.concat([__read.apply(void 0, [(_c.sent())]), false]));
36
+ return [2 /*return*/, allMigrationClasses.map(function (migrationClass) { return getFromContainer(migrationClass); })];
37
+ }
38
+ });
39
+ });
29
40
  };
30
41
  /**
31
42
  * Builds subscriber instances for the given classes or directories.
32
43
  */
33
44
  ConnectionMetadataBuilder.prototype.buildSubscribers = function (subscribers) {
34
- var _a = __read(OrmUtils.splitClassesAndStrings(subscribers || []), 2), subscriberClasses = _a[0], subscriberDirectories = _a[1];
35
- var allSubscriberClasses = __spreadArray(__spreadArray([], __read(subscriberClasses), false), __read(importClassesFromDirectories(this.connection.logger, subscriberDirectories)), false);
36
- return getMetadataArgsStorage()
37
- .filterSubscribers(allSubscriberClasses)
38
- .map(function (metadata) { return getFromContainer(metadata.target); });
45
+ return __awaiter(this, void 0, void 0, function () {
46
+ var _a, subscriberClasses, subscriberDirectories, allSubscriberClasses, _b;
47
+ return __generator(this, function (_c) {
48
+ switch (_c.label) {
49
+ case 0:
50
+ _a = __read(OrmUtils.splitClassesAndStrings(subscribers || []), 2), subscriberClasses = _a[0], subscriberDirectories = _a[1];
51
+ _b = [__spreadArray([], __read(subscriberClasses), false)];
52
+ return [4 /*yield*/, importClassesFromDirectories(this.connection.logger, subscriberDirectories)];
53
+ case 1:
54
+ allSubscriberClasses = __spreadArray.apply(void 0, _b.concat([__read.apply(void 0, [(_c.sent())]), false]));
55
+ return [2 /*return*/, getMetadataArgsStorage()
56
+ .filterSubscribers(allSubscriberClasses)
57
+ .map(function (metadata) { return getFromContainer(metadata.target); })];
58
+ }
59
+ });
60
+ });
39
61
  };
40
62
  /**
41
63
  * Builds entity metadatas for the given classes or directories.
42
64
  */
43
65
  ConnectionMetadataBuilder.prototype.buildEntityMetadatas = function (entities) {
44
- // todo: instead we need to merge multiple metadata args storages
45
- var _a = __read(OrmUtils.splitClassesAndStrings(entities || []), 2), entityClassesOrSchemas = _a[0], entityDirectories = _a[1];
46
- var entityClasses = entityClassesOrSchemas.filter(function (entityClass) { return (entityClass instanceof EntitySchema) === false; });
47
- var entitySchemas = entityClassesOrSchemas.filter(function (entityClass) { return entityClass instanceof EntitySchema; });
48
- var allEntityClasses = __spreadArray(__spreadArray([], __read(entityClasses), false), __read(importClassesFromDirectories(this.connection.logger, entityDirectories)), false);
49
- allEntityClasses.forEach(function (entityClass) {
50
- if (entityClass instanceof EntitySchema) {
51
- entitySchemas.push(entityClass);
52
- }
66
+ return __awaiter(this, void 0, void 0, function () {
67
+ var _a, entityClassesOrSchemas, entityDirectories, entityClasses, entitySchemas, allEntityClasses, _b, decoratorEntityMetadatas, metadataArgsStorageFromSchema, schemaEntityMetadatas;
68
+ return __generator(this, function (_c) {
69
+ switch (_c.label) {
70
+ case 0:
71
+ _a = __read(OrmUtils.splitClassesAndStrings(entities || []), 2), entityClassesOrSchemas = _a[0], entityDirectories = _a[1];
72
+ entityClasses = entityClassesOrSchemas.filter(function (entityClass) { return (entityClass instanceof EntitySchema) === false; });
73
+ entitySchemas = entityClassesOrSchemas.filter(function (entityClass) { return entityClass instanceof EntitySchema; });
74
+ _b = [__spreadArray([], __read(entityClasses), false)];
75
+ return [4 /*yield*/, importClassesFromDirectories(this.connection.logger, entityDirectories)];
76
+ case 1:
77
+ allEntityClasses = __spreadArray.apply(void 0, _b.concat([__read.apply(void 0, [(_c.sent())]), false]));
78
+ allEntityClasses.forEach(function (entityClass) {
79
+ if (entityClass instanceof EntitySchema) {
80
+ entitySchemas.push(entityClass);
81
+ }
82
+ });
83
+ decoratorEntityMetadatas = new EntityMetadataBuilder(this.connection, getMetadataArgsStorage()).build(allEntityClasses);
84
+ metadataArgsStorageFromSchema = new EntitySchemaTransformer().transform(entitySchemas);
85
+ schemaEntityMetadatas = new EntityMetadataBuilder(this.connection, metadataArgsStorageFromSchema).build();
86
+ return [2 /*return*/, __spreadArray(__spreadArray([], __read(decoratorEntityMetadatas), false), __read(schemaEntityMetadatas), false)];
87
+ }
88
+ });
53
89
  });
54
- var decoratorEntityMetadatas = new EntityMetadataBuilder(this.connection, getMetadataArgsStorage()).build(allEntityClasses);
55
- var metadataArgsStorageFromSchema = new EntitySchemaTransformer().transform(entitySchemas);
56
- var schemaEntityMetadatas = new EntityMetadataBuilder(this.connection, metadataArgsStorageFromSchema).build();
57
- return __spreadArray(__spreadArray([], __read(decoratorEntityMetadatas), false), __read(schemaEntityMetadatas), false);
58
90
  };
59
91
  return ConnectionMetadataBuilder;
60
92
  }());
@@ -1 +1 @@
1
- {"version":3,"sources":["../browser/src/connection/ConnectionMetadataBuilder.ts"],"names":[],"mappings":"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","file":"ConnectionMetadataBuilder.js","sourcesContent":["import {importClassesFromDirectories} from \"../util/DirectoryExportedClassesLoader\";\nimport {OrmUtils} from \"../util/OrmUtils\";\nimport {getFromContainer} from \"../container\";\nimport {MigrationInterface} from \"../migration/MigrationInterface\";\nimport {getMetadataArgsStorage} from \"../globals\";\nimport {EntityMetadataBuilder} from \"../metadata-builder/EntityMetadataBuilder\";\nimport {EntitySchemaTransformer} from \"../entity-schema/EntitySchemaTransformer\";\nimport {Connection} from \"./Connection\";\nimport {EntitySchema} from \"../entity-schema/EntitySchema\";\nimport {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {EntitySubscriberInterface} from \"../subscriber/EntitySubscriberInterface\";\n\n/**\n * Builds migration instances, subscriber instances and entity metadatas for the given classes.\n */\nexport class ConnectionMetadataBuilder {\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected connection: Connection) {\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Builds migration instances for the given classes or directories.\n */\n buildMigrations(migrations: (Function|string)[]): MigrationInterface[] {\n const [migrationClasses, migrationDirectories] = OrmUtils.splitClassesAndStrings(migrations);\n const allMigrationClasses = [...migrationClasses, ...importClassesFromDirectories(this.connection.logger, migrationDirectories)];\n return allMigrationClasses.map(migrationClass => getFromContainer<MigrationInterface>(migrationClass));\n }\n\n /**\n * Builds subscriber instances for the given classes or directories.\n */\n buildSubscribers(subscribers: (Function|string)[]): EntitySubscriberInterface<any>[] {\n const [subscriberClasses, subscriberDirectories] = OrmUtils.splitClassesAndStrings(subscribers || []);\n const allSubscriberClasses = [...subscriberClasses, ...importClassesFromDirectories(this.connection.logger, subscriberDirectories)];\n return getMetadataArgsStorage()\n .filterSubscribers(allSubscriberClasses)\n .map(metadata => getFromContainer<EntitySubscriberInterface<any>>(metadata.target));\n }\n\n /**\n * Builds entity metadatas for the given classes or directories.\n */\n buildEntityMetadatas(entities: (Function|EntitySchema<any>|string)[]): EntityMetadata[] {\n // todo: instead we need to merge multiple metadata args storages\n\n const [entityClassesOrSchemas, entityDirectories] = OrmUtils.splitClassesAndStrings(entities || []);\n const entityClasses: Function[] = entityClassesOrSchemas.filter(entityClass => (entityClass instanceof EntitySchema) === false) as any;\n const entitySchemas: EntitySchema<any>[] = entityClassesOrSchemas.filter(entityClass => entityClass instanceof EntitySchema) as any;\n\n const allEntityClasses = [...entityClasses, ...importClassesFromDirectories(this.connection.logger, entityDirectories)];\n allEntityClasses.forEach(entityClass => { // if we have entity schemas loaded from directories\n if (entityClass instanceof EntitySchema) {\n entitySchemas.push(entityClass);\n }\n });\n const decoratorEntityMetadatas = new EntityMetadataBuilder(this.connection, getMetadataArgsStorage()).build(allEntityClasses);\n\n const metadataArgsStorageFromSchema = new EntitySchemaTransformer().transform(entitySchemas);\n const schemaEntityMetadatas = new EntityMetadataBuilder(this.connection, metadataArgsStorageFromSchema).build();\n\n return [...decoratorEntityMetadatas, ...schemaEntityMetadatas];\n }\n\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../browser/src/connection/ConnectionMetadataBuilder.ts"],"names":[],"mappings":"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","file":"ConnectionMetadataBuilder.js","sourcesContent":["import {importClassesFromDirectories} from \"../util/DirectoryExportedClassesLoader\";\nimport {OrmUtils} from \"../util/OrmUtils\";\nimport {getFromContainer} from \"../container\";\nimport {MigrationInterface} from \"../migration/MigrationInterface\";\nimport {getMetadataArgsStorage} from \"../globals\";\nimport {EntityMetadataBuilder} from \"../metadata-builder/EntityMetadataBuilder\";\nimport {EntitySchemaTransformer} from \"../entity-schema/EntitySchemaTransformer\";\nimport {Connection} from \"./Connection\";\nimport {EntitySchema} from \"../entity-schema/EntitySchema\";\nimport {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {EntitySubscriberInterface} from \"../subscriber/EntitySubscriberInterface\";\n\n/**\n * Builds migration instances, subscriber instances and entity metadatas for the given classes.\n */\nexport class ConnectionMetadataBuilder {\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected connection: Connection) {\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Builds migration instances for the given classes or directories.\n */\n async buildMigrations(migrations: (Function|string)[]): Promise<MigrationInterface[]> {\n const [migrationClasses, migrationDirectories] = OrmUtils.splitClassesAndStrings(migrations);\n const allMigrationClasses = [...migrationClasses, ...(await importClassesFromDirectories(this.connection.logger, migrationDirectories))];\n return allMigrationClasses.map(migrationClass => getFromContainer<MigrationInterface>(migrationClass));\n }\n\n /**\n * Builds subscriber instances for the given classes or directories.\n */\n async buildSubscribers(subscribers: (Function|string)[]): Promise<EntitySubscriberInterface<any>[]> {\n const [subscriberClasses, subscriberDirectories] = OrmUtils.splitClassesAndStrings(subscribers || []);\n const allSubscriberClasses = [...subscriberClasses, ...(await importClassesFromDirectories(this.connection.logger, subscriberDirectories))];\n return getMetadataArgsStorage()\n .filterSubscribers(allSubscriberClasses)\n .map(metadata => getFromContainer<EntitySubscriberInterface<any>>(metadata.target));\n }\n\n /**\n * Builds entity metadatas for the given classes or directories.\n */\n async buildEntityMetadatas(entities: (Function|EntitySchema<any>|string)[]): Promise<EntityMetadata[]> {\n // todo: instead we need to merge multiple metadata args storages\n\n const [entityClassesOrSchemas, entityDirectories] = OrmUtils.splitClassesAndStrings(entities || []);\n const entityClasses: Function[] = entityClassesOrSchemas.filter(entityClass => (entityClass instanceof EntitySchema) === false) as any;\n const entitySchemas: EntitySchema<any>[] = entityClassesOrSchemas.filter(entityClass => entityClass instanceof EntitySchema) as any;\n\n const allEntityClasses = [...entityClasses, ...(await importClassesFromDirectories(this.connection.logger, entityDirectories))];\n allEntityClasses.forEach(entityClass => { // if we have entity schemas loaded from directories\n if (entityClass instanceof EntitySchema) {\n entitySchemas.push(entityClass);\n }\n });\n const decoratorEntityMetadatas = new EntityMetadataBuilder(this.connection, getMetadataArgsStorage()).build(allEntityClasses);\n\n const metadataArgsStorageFromSchema = new EntitySchemaTransformer().transform(entitySchemas);\n const schemaEntityMetadatas = new EntityMetadataBuilder(this.connection, metadataArgsStorageFromSchema).build();\n\n return [...decoratorEntityMetadatas, ...schemaEntityMetadatas];\n }\n\n}\n"],"sourceRoot":".."}