typeorm 0.3.5-dev.ec6c119 → 0.3.6-dev.0659ec3

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 (443) hide show
  1. package/README.md +37 -15
  2. package/browser/cache/DbQueryResultCache.js +9 -1
  3. package/browser/cache/DbQueryResultCache.js.map +1 -1
  4. package/browser/cache/RedisQueryResultCache.js +3 -0
  5. package/browser/cache/RedisQueryResultCache.js.map +1 -1
  6. package/browser/cli-ts-node-commonjs.d.ts +1 -1
  7. package/browser/cli-ts-node-commonjs.js +2 -1
  8. package/browser/cli-ts-node-commonjs.js.map +1 -1
  9. package/browser/cli-ts-node-esm.d.ts +2 -2
  10. package/browser/cli-ts-node-esm.js +19 -2
  11. package/browser/cli-ts-node-esm.js.map +1 -1
  12. package/browser/common/DeepPartial.d.ts +2 -2
  13. package/browser/common/DeepPartial.js.map +1 -1
  14. package/browser/data-source/BaseDataSourceOptions.d.ts +1 -2
  15. package/browser/data-source/BaseDataSourceOptions.js.map +1 -1
  16. package/browser/data-source/DataSource.js +2 -5
  17. package/browser/data-source/DataSource.js.map +1 -1
  18. package/browser/data-source/DataSourceOptions.d.ts +2 -1
  19. package/browser/data-source/DataSourceOptions.js.map +1 -1
  20. package/browser/decorator/Index.js +1 -0
  21. package/browser/decorator/Index.js.map +1 -1
  22. package/browser/decorator/columns/PrimaryColumn.js +4 -1
  23. package/browser/decorator/columns/PrimaryColumn.js.map +1 -1
  24. package/browser/decorator/options/ColumnOptions.d.ts +11 -2
  25. package/browser/decorator/options/ColumnOptions.js.map +1 -1
  26. package/browser/decorator/options/IndexOptions.d.ts +8 -0
  27. package/browser/decorator/options/IndexOptions.js.map +1 -1
  28. package/browser/decorator/options/JoinColumnOptions.d.ts +4 -0
  29. package/browser/decorator/options/JoinColumnOptions.js.map +1 -1
  30. package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.d.ts +4 -0
  31. package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.js.map +1 -1
  32. package/browser/decorator/options/PrimaryGeneratedColumnNumericOptions.d.ts +4 -0
  33. package/browser/decorator/options/PrimaryGeneratedColumnNumericOptions.js.map +1 -1
  34. package/browser/decorator/options/PrimaryGeneratedColumnUUIDOptions.d.ts +4 -0
  35. package/browser/decorator/options/PrimaryGeneratedColumnUUIDOptions.js.map +1 -1
  36. package/browser/decorator/relations/JoinColumn.js +1 -0
  37. package/browser/decorator/relations/JoinColumn.js.map +1 -1
  38. package/browser/driver/DriverFactory.js +4 -0
  39. package/browser/driver/DriverFactory.js.map +1 -1
  40. package/browser/driver/DriverUtils.d.ts +1 -0
  41. package/browser/driver/DriverUtils.js +3 -0
  42. package/browser/driver/DriverUtils.js.map +1 -1
  43. package/browser/driver/aurora-mysql/AuroraMysqlDriver.d.ts +1 -1
  44. package/browser/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
  45. package/browser/driver/cockroachdb/CockroachDriver.js +4 -1
  46. package/browser/driver/cockroachdb/CockroachDriver.js.map +1 -1
  47. package/browser/driver/cockroachdb/CockroachQueryRunner.d.ts +3 -3
  48. package/browser/driver/cockroachdb/CockroachQueryRunner.js +233 -33
  49. package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  50. package/browser/driver/cordova/CordovaDriver.js +1 -1
  51. package/browser/driver/cordova/CordovaDriver.js.map +1 -1
  52. package/browser/driver/cordova/CordovaQueryRunner.js +2 -2
  53. package/browser/driver/cordova/CordovaQueryRunner.js.map +1 -1
  54. package/browser/driver/expo/ExpoDriver.js +1 -1
  55. package/browser/driver/expo/ExpoDriver.js.map +1 -1
  56. package/browser/driver/expo/ExpoQueryRunner.js +2 -2
  57. package/browser/driver/expo/ExpoQueryRunner.js.map +1 -1
  58. package/browser/driver/mongodb/typings.d.ts +5 -5
  59. package/browser/driver/mongodb/typings.js.map +1 -1
  60. package/browser/driver/mysql/MysqlDriver.d.ts +1 -0
  61. package/browser/driver/mysql/MysqlDriver.js +94 -23
  62. package/browser/driver/mysql/MysqlDriver.js.map +1 -1
  63. package/browser/driver/mysql/MysqlQueryRunner.js +219 -24
  64. package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
  65. package/browser/driver/nativescript/NativescriptDriver.js +1 -1
  66. package/browser/driver/nativescript/NativescriptDriver.js.map +1 -1
  67. package/browser/driver/oracle/OracleDriver.js +79 -15
  68. package/browser/driver/oracle/OracleDriver.js.map +1 -1
  69. package/browser/driver/oracle/OracleQueryRunner.d.ts +3 -3
  70. package/browser/driver/oracle/OracleQueryRunner.js +216 -42
  71. package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
  72. package/browser/driver/postgres/PostgresDriver.js +96 -22
  73. package/browser/driver/postgres/PostgresDriver.js.map +1 -1
  74. package/browser/driver/postgres/PostgresQueryRunner.d.ts +3 -3
  75. package/browser/driver/postgres/PostgresQueryRunner.js +159 -59
  76. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  77. package/browser/driver/react-native/ReactNativeDriver.js +1 -1
  78. package/browser/driver/react-native/ReactNativeDriver.js.map +1 -1
  79. package/browser/driver/spanner/SpannerConnectionCredentialsOptions.d.ts +17 -0
  80. package/browser/driver/spanner/SpannerConnectionCredentialsOptions.js +3 -0
  81. package/browser/driver/spanner/SpannerConnectionCredentialsOptions.js.map +1 -0
  82. package/browser/driver/spanner/SpannerConnectionOptions.d.ts +120 -0
  83. package/browser/driver/spanner/SpannerConnectionOptions.js +3 -0
  84. package/browser/driver/spanner/SpannerConnectionOptions.js.map +1 -0
  85. package/browser/driver/spanner/SpannerDriver.d.ts +241 -0
  86. package/browser/driver/spanner/SpannerDriver.js +604 -0
  87. package/browser/driver/spanner/SpannerDriver.js.map +1 -0
  88. package/browser/driver/spanner/SpannerQueryRunner.d.ts +350 -0
  89. package/browser/driver/spanner/SpannerQueryRunner.js +1445 -0
  90. package/browser/driver/spanner/SpannerQueryRunner.js.map +1 -0
  91. package/browser/driver/sqlite/SqliteDriver.js +3 -3
  92. package/browser/driver/sqlite/SqliteDriver.js.map +1 -1
  93. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +65 -16
  94. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  95. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +220 -34
  96. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  97. package/browser/driver/sqljs/SqljsDriver.js +1 -1
  98. package/browser/driver/sqljs/SqljsDriver.js.map +1 -1
  99. package/browser/driver/sqlserver/SqlServerDriver.d.ts +3 -1
  100. package/browser/driver/sqlserver/SqlServerDriver.js +99 -26
  101. package/browser/driver/sqlserver/SqlServerDriver.js.map +1 -1
  102. package/browser/driver/sqlserver/SqlServerQueryRunner.d.ts +3 -3
  103. package/browser/driver/sqlserver/SqlServerQueryRunner.js +251 -37
  104. package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  105. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryAccessTokenAuthentication.d.ts +1 -1
  106. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryAccessTokenAuthentication.js.map +1 -1
  107. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryMsiAppServiceAuthentication.d.ts +2 -2
  108. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryMsiAppServiceAuthentication.js.map +1 -1
  109. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryMsiVmAuthentication.d.ts +2 -2
  110. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryMsiVmAuthentication.js.map +1 -1
  111. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryPasswordAuthentication.d.ts +2 -2
  112. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryPasswordAuthentication.js.map +1 -1
  113. package/browser/driver/types/ColumnTypes.d.ts +1 -1
  114. package/browser/driver/types/ColumnTypes.js.map +1 -1
  115. package/browser/driver/types/DatabaseType.d.ts +1 -1
  116. package/browser/driver/types/DatabaseType.js.map +1 -1
  117. package/browser/entity-manager/EntityManager.js +1 -1
  118. package/browser/entity-manager/EntityManager.js.map +1 -1
  119. package/browser/entity-schema/EntitySchemaColumnOptions.d.ts +6 -2
  120. package/browser/entity-schema/EntitySchemaColumnOptions.js.map +1 -1
  121. package/browser/entity-schema/EntitySchemaIndexOptions.d.ts +8 -0
  122. package/browser/entity-schema/EntitySchemaIndexOptions.js.map +1 -1
  123. package/browser/entity-schema/EntitySchemaTransformer.js +3 -0
  124. package/browser/entity-schema/EntitySchemaTransformer.js.map +1 -1
  125. package/browser/find-options/FindOneOptions.d.ts +1 -1
  126. package/browser/find-options/FindOneOptions.js.map +1 -1
  127. package/browser/find-options/FindOptionsUtils.d.ts +2 -1
  128. package/browser/find-options/FindOptionsUtils.js +2 -1
  129. package/browser/find-options/FindOptionsUtils.js.map +1 -1
  130. package/browser/index.d.ts +4 -0
  131. package/browser/index.js +3 -0
  132. package/browser/index.js.map +1 -1
  133. package/browser/logger/AdvancedConsoleLogger.d.ts +1 -1
  134. package/browser/logger/AdvancedConsoleLogger.js +1 -1
  135. package/browser/logger/AdvancedConsoleLogger.js.map +1 -1
  136. package/browser/metadata/ColumnMetadata.d.ts +10 -2
  137. package/browser/metadata/ColumnMetadata.js +8 -0
  138. package/browser/metadata/ColumnMetadata.js.map +1 -1
  139. package/browser/metadata/EntityMetadata.js +1 -1
  140. package/browser/metadata/EntityMetadata.js.map +1 -1
  141. package/browser/metadata/ForeignKeyMetadata.d.ts +7 -0
  142. package/browser/metadata/ForeignKeyMetadata.js +4 -1
  143. package/browser/metadata/ForeignKeyMetadata.js.map +1 -1
  144. package/browser/metadata/IndexMetadata.d.ts +8 -0
  145. package/browser/metadata/IndexMetadata.js +9 -0
  146. package/browser/metadata/IndexMetadata.js.map +1 -1
  147. package/browser/metadata-args/IndexMetadataArgs.d.ts +8 -0
  148. package/browser/metadata-args/IndexMetadataArgs.js.map +1 -1
  149. package/browser/metadata-args/JoinColumnMetadataArgs.d.ts +4 -0
  150. package/browser/metadata-args/JoinColumnMetadataArgs.js.map +1 -1
  151. package/browser/metadata-builder/EntityMetadataBuilder.js +13 -6
  152. package/browser/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  153. package/browser/metadata-builder/EntityMetadataValidator.js +17 -0
  154. package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
  155. package/browser/metadata-builder/JunctionEntityMetadataBuilder.js +18 -6
  156. package/browser/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
  157. package/browser/metadata-builder/RelationJoinColumnBuilder.js +2 -0
  158. package/browser/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
  159. package/browser/migration/MigrationExecutor.js +1 -1
  160. package/browser/migration/MigrationExecutor.js.map +1 -1
  161. package/browser/persistence/EntityPersistExecutor.js +12 -1
  162. package/browser/persistence/EntityPersistExecutor.js.map +1 -1
  163. package/browser/persistence/SubjectDatabaseEntityLoader.d.ts +1 -1
  164. package/browser/persistence/SubjectDatabaseEntityLoader.js +1 -1
  165. package/browser/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
  166. package/browser/persistence/SubjectExecutor.js +1 -1
  167. package/browser/persistence/SubjectExecutor.js.map +1 -1
  168. package/browser/persistence/subject-builder/CascadesSubjectBuilder.d.ts +1 -1
  169. package/browser/persistence/subject-builder/CascadesSubjectBuilder.js +1 -1
  170. package/browser/persistence/subject-builder/CascadesSubjectBuilder.js.map +1 -1
  171. package/browser/persistence/subject-builder/ManyToManySubjectBuilder.js +1 -1
  172. package/browser/persistence/subject-builder/ManyToManySubjectBuilder.js.map +1 -1
  173. package/browser/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js +1 -1
  174. package/browser/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js.map +1 -1
  175. package/browser/platform/PlatformTools.js +5 -0
  176. package/browser/platform/PlatformTools.js.map +1 -1
  177. package/browser/query-builder/InsertQueryBuilder.d.ts +9 -0
  178. package/browser/query-builder/InsertQueryBuilder.js +19 -8
  179. package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
  180. package/browser/query-builder/QueryBuilder.d.ts +1 -1
  181. package/browser/query-builder/QueryBuilder.js +3 -5
  182. package/browser/query-builder/QueryBuilder.js.map +1 -1
  183. package/browser/query-builder/QueryExpressionMap.d.ts +2 -2
  184. package/browser/query-builder/QueryExpressionMap.js +1 -1
  185. package/browser/query-builder/QueryExpressionMap.js.map +1 -1
  186. package/browser/query-builder/ReturningResultsEntityUpdator.js +2 -2
  187. package/browser/query-builder/ReturningResultsEntityUpdator.js.map +1 -1
  188. package/browser/query-builder/SelectQueryBuilder.d.ts +1 -1
  189. package/browser/query-builder/SelectQueryBuilder.js +25 -4
  190. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  191. package/browser/query-builder/UpdateQueryBuilder.js +18 -7
  192. package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
  193. package/browser/query-runner/BaseQueryRunner.d.ts +10 -0
  194. package/browser/query-runner/BaseQueryRunner.js +25 -1
  195. package/browser/query-runner/BaseQueryRunner.js.map +1 -1
  196. package/browser/query-runner/QueryRunner.d.ts +2 -2
  197. package/browser/query-runner/QueryRunner.js.map +1 -1
  198. package/browser/schema-builder/RdbmsSchemaBuilder.d.ts +6 -2
  199. package/browser/schema-builder/RdbmsSchemaBuilder.js +26 -6
  200. package/browser/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  201. package/browser/schema-builder/options/TableColumnOptions.d.ts +10 -2
  202. package/browser/schema-builder/options/TableColumnOptions.js.map +1 -1
  203. package/browser/schema-builder/options/TableIndexOptions.d.ts +8 -0
  204. package/browser/schema-builder/options/TableIndexOptions.js.map +1 -1
  205. package/browser/schema-builder/table/TableColumn.d.ts +6 -2
  206. package/browser/schema-builder/table/TableColumn.js +2 -0
  207. package/browser/schema-builder/table/TableColumn.js.map +1 -1
  208. package/browser/schema-builder/table/TableIndex.d.ts +8 -0
  209. package/browser/schema-builder/table/TableIndex.js +3 -0
  210. package/browser/schema-builder/table/TableIndex.js.map +1 -1
  211. package/browser/schema-builder/util/TableUtils.js +1 -0
  212. package/browser/schema-builder/util/TableUtils.js.map +1 -1
  213. package/browser/util/OrmUtils.d.ts +1 -1
  214. package/browser/util/OrmUtils.js +4 -4
  215. package/browser/util/OrmUtils.js.map +1 -1
  216. package/browser/util/escapeRegExp.d.ts +1 -0
  217. package/browser/util/escapeRegExp.js +6 -0
  218. package/browser/util/escapeRegExp.js.map +1 -0
  219. package/cache/DbQueryResultCache.js +9 -1
  220. package/cache/DbQueryResultCache.js.map +1 -1
  221. package/cache/RedisQueryResultCache.js +3 -0
  222. package/cache/RedisQueryResultCache.js.map +1 -1
  223. package/cli-ts-node-commonjs.d.ts +1 -1
  224. package/cli-ts-node-commonjs.js +2 -1
  225. package/cli-ts-node-commonjs.js.map +1 -1
  226. package/cli-ts-node-esm.d.ts +2 -2
  227. package/cli-ts-node-esm.js +19 -2
  228. package/cli-ts-node-esm.js.map +1 -1
  229. package/commands/CommandUtils.js +1 -1
  230. package/commands/CommandUtils.js.map +1 -1
  231. package/commands/InitCommand.js +2 -2
  232. package/commands/InitCommand.js.map +1 -1
  233. package/commands/MigrationGenerateCommand.js +3 -2
  234. package/commands/MigrationGenerateCommand.js.map +1 -1
  235. package/common/DeepPartial.d.ts +2 -2
  236. package/common/DeepPartial.js.map +1 -1
  237. package/data-source/BaseDataSourceOptions.d.ts +1 -2
  238. package/data-source/BaseDataSourceOptions.js.map +1 -1
  239. package/data-source/DataSource.js +17 -20
  240. package/data-source/DataSource.js.map +1 -1
  241. package/data-source/DataSourceOptions.d.ts +2 -1
  242. package/data-source/DataSourceOptions.js.map +1 -1
  243. package/decorator/Index.js +1 -0
  244. package/decorator/Index.js.map +1 -1
  245. package/decorator/columns/PrimaryColumn.js +4 -1
  246. package/decorator/columns/PrimaryColumn.js.map +1 -1
  247. package/decorator/options/ColumnOptions.d.ts +11 -2
  248. package/decorator/options/ColumnOptions.js.map +1 -1
  249. package/decorator/options/IndexOptions.d.ts +8 -0
  250. package/decorator/options/IndexOptions.js.map +1 -1
  251. package/decorator/options/JoinColumnOptions.d.ts +4 -0
  252. package/decorator/options/JoinColumnOptions.js.map +1 -1
  253. package/decorator/options/PrimaryGeneratedColumnIdentityOptions.d.ts +4 -0
  254. package/decorator/options/PrimaryGeneratedColumnIdentityOptions.js.map +1 -1
  255. package/decorator/options/PrimaryGeneratedColumnNumericOptions.d.ts +4 -0
  256. package/decorator/options/PrimaryGeneratedColumnNumericOptions.js.map +1 -1
  257. package/decorator/options/PrimaryGeneratedColumnUUIDOptions.d.ts +4 -0
  258. package/decorator/options/PrimaryGeneratedColumnUUIDOptions.js.map +1 -1
  259. package/decorator/relations/JoinColumn.js +1 -0
  260. package/decorator/relations/JoinColumn.js.map +1 -1
  261. package/driver/DriverFactory.js +4 -0
  262. package/driver/DriverFactory.js.map +1 -1
  263. package/driver/DriverUtils.d.ts +1 -0
  264. package/driver/DriverUtils.js +3 -0
  265. package/driver/DriverUtils.js.map +1 -1
  266. package/driver/aurora-mysql/AuroraMysqlDriver.d.ts +1 -1
  267. package/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
  268. package/driver/cockroachdb/CockroachDriver.js +4 -1
  269. package/driver/cockroachdb/CockroachDriver.js.map +1 -1
  270. package/driver/cockroachdb/CockroachQueryRunner.d.ts +3 -3
  271. package/driver/cockroachdb/CockroachQueryRunner.js +233 -33
  272. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  273. package/driver/cordova/CordovaDriver.js +1 -1
  274. package/driver/cordova/CordovaDriver.js.map +1 -1
  275. package/driver/cordova/CordovaQueryRunner.js +2 -2
  276. package/driver/cordova/CordovaQueryRunner.js.map +1 -1
  277. package/driver/expo/ExpoDriver.js +1 -1
  278. package/driver/expo/ExpoDriver.js.map +1 -1
  279. package/driver/expo/ExpoQueryRunner.js +2 -2
  280. package/driver/expo/ExpoQueryRunner.js.map +1 -1
  281. package/driver/mongodb/typings.d.ts +5 -5
  282. package/driver/mongodb/typings.js.map +1 -1
  283. package/driver/mysql/MysqlDriver.d.ts +1 -0
  284. package/driver/mysql/MysqlDriver.js +94 -23
  285. package/driver/mysql/MysqlDriver.js.map +1 -1
  286. package/driver/mysql/MysqlQueryRunner.js +219 -24
  287. package/driver/mysql/MysqlQueryRunner.js.map +1 -1
  288. package/driver/nativescript/NativescriptDriver.js +1 -1
  289. package/driver/nativescript/NativescriptDriver.js.map +1 -1
  290. package/driver/oracle/OracleDriver.js +79 -15
  291. package/driver/oracle/OracleDriver.js.map +1 -1
  292. package/driver/oracle/OracleQueryRunner.d.ts +3 -3
  293. package/driver/oracle/OracleQueryRunner.js +216 -42
  294. package/driver/oracle/OracleQueryRunner.js.map +1 -1
  295. package/driver/postgres/PostgresDriver.js +96 -22
  296. package/driver/postgres/PostgresDriver.js.map +1 -1
  297. package/driver/postgres/PostgresQueryRunner.d.ts +3 -3
  298. package/driver/postgres/PostgresQueryRunner.js +159 -59
  299. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  300. package/driver/react-native/ReactNativeDriver.js +1 -1
  301. package/driver/react-native/ReactNativeDriver.js.map +1 -1
  302. package/driver/spanner/SpannerConnectionCredentialsOptions.d.ts +17 -0
  303. package/driver/spanner/SpannerConnectionCredentialsOptions.js +4 -0
  304. package/driver/spanner/SpannerConnectionCredentialsOptions.js.map +1 -0
  305. package/driver/spanner/SpannerConnectionOptions.d.ts +120 -0
  306. package/driver/spanner/SpannerConnectionOptions.js +4 -0
  307. package/driver/spanner/SpannerConnectionOptions.js.map +1 -0
  308. package/driver/spanner/SpannerDriver.d.ts +241 -0
  309. package/driver/spanner/SpannerDriver.js +608 -0
  310. package/driver/spanner/SpannerDriver.js.map +1 -0
  311. package/driver/spanner/SpannerQueryRunner.d.ts +350 -0
  312. package/driver/spanner/SpannerQueryRunner.js +1449 -0
  313. package/driver/spanner/SpannerQueryRunner.js.map +1 -0
  314. package/driver/sqlite/SqliteDriver.js +3 -3
  315. package/driver/sqlite/SqliteDriver.js.map +1 -1
  316. package/driver/sqlite-abstract/AbstractSqliteDriver.js +65 -16
  317. package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  318. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +220 -34
  319. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  320. package/driver/sqljs/SqljsDriver.js +1 -1
  321. package/driver/sqljs/SqljsDriver.js.map +1 -1
  322. package/driver/sqlserver/SqlServerDriver.d.ts +3 -1
  323. package/driver/sqlserver/SqlServerDriver.js +99 -26
  324. package/driver/sqlserver/SqlServerDriver.js.map +1 -1
  325. package/driver/sqlserver/SqlServerQueryRunner.d.ts +3 -3
  326. package/driver/sqlserver/SqlServerQueryRunner.js +251 -37
  327. package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  328. package/driver/sqlserver/authentication/AzureActiveDirectoryAccessTokenAuthentication.d.ts +1 -1
  329. package/driver/sqlserver/authentication/AzureActiveDirectoryAccessTokenAuthentication.js.map +1 -1
  330. package/driver/sqlserver/authentication/AzureActiveDirectoryMsiAppServiceAuthentication.d.ts +2 -2
  331. package/driver/sqlserver/authentication/AzureActiveDirectoryMsiAppServiceAuthentication.js.map +1 -1
  332. package/driver/sqlserver/authentication/AzureActiveDirectoryMsiVmAuthentication.d.ts +2 -2
  333. package/driver/sqlserver/authentication/AzureActiveDirectoryMsiVmAuthentication.js.map +1 -1
  334. package/driver/sqlserver/authentication/AzureActiveDirectoryPasswordAuthentication.d.ts +2 -2
  335. package/driver/sqlserver/authentication/AzureActiveDirectoryPasswordAuthentication.js.map +1 -1
  336. package/driver/types/ColumnTypes.d.ts +1 -1
  337. package/driver/types/ColumnTypes.js.map +1 -1
  338. package/driver/types/DatabaseType.d.ts +1 -1
  339. package/driver/types/DatabaseType.js.map +1 -1
  340. package/entity-manager/EntityManager.js +1 -1
  341. package/entity-manager/EntityManager.js.map +1 -1
  342. package/entity-schema/EntitySchemaColumnOptions.d.ts +6 -2
  343. package/entity-schema/EntitySchemaColumnOptions.js.map +1 -1
  344. package/entity-schema/EntitySchemaIndexOptions.d.ts +8 -0
  345. package/entity-schema/EntitySchemaIndexOptions.js.map +1 -1
  346. package/entity-schema/EntitySchemaTransformer.js +3 -0
  347. package/entity-schema/EntitySchemaTransformer.js.map +1 -1
  348. package/find-options/FindOneOptions.d.ts +1 -1
  349. package/find-options/FindOneOptions.js.map +1 -1
  350. package/find-options/FindOptionsUtils.d.ts +2 -1
  351. package/find-options/FindOptionsUtils.js +2 -1
  352. package/find-options/FindOptionsUtils.js.map +1 -1
  353. package/index.d.ts +4 -0
  354. package/index.js +3 -0
  355. package/index.js.map +1 -1
  356. package/index.mjs +6 -0
  357. package/logger/AdvancedConsoleLogger.d.ts +1 -1
  358. package/logger/AdvancedConsoleLogger.js +1 -1
  359. package/logger/AdvancedConsoleLogger.js.map +1 -1
  360. package/metadata/ColumnMetadata.d.ts +10 -2
  361. package/metadata/ColumnMetadata.js +8 -0
  362. package/metadata/ColumnMetadata.js.map +1 -1
  363. package/metadata/EntityMetadata.js +1 -1
  364. package/metadata/EntityMetadata.js.map +1 -1
  365. package/metadata/ForeignKeyMetadata.d.ts +7 -0
  366. package/metadata/ForeignKeyMetadata.js +4 -1
  367. package/metadata/ForeignKeyMetadata.js.map +1 -1
  368. package/metadata/IndexMetadata.d.ts +8 -0
  369. package/metadata/IndexMetadata.js +9 -0
  370. package/metadata/IndexMetadata.js.map +1 -1
  371. package/metadata-args/IndexMetadataArgs.d.ts +8 -0
  372. package/metadata-args/IndexMetadataArgs.js.map +1 -1
  373. package/metadata-args/JoinColumnMetadataArgs.d.ts +4 -0
  374. package/metadata-args/JoinColumnMetadataArgs.js.map +1 -1
  375. package/metadata-builder/EntityMetadataBuilder.js +13 -6
  376. package/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  377. package/metadata-builder/EntityMetadataValidator.js +17 -0
  378. package/metadata-builder/EntityMetadataValidator.js.map +1 -1
  379. package/metadata-builder/JunctionEntityMetadataBuilder.js +18 -6
  380. package/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
  381. package/metadata-builder/RelationJoinColumnBuilder.js +2 -0
  382. package/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
  383. package/migration/MigrationExecutor.js +1 -1
  384. package/migration/MigrationExecutor.js.map +1 -1
  385. package/package.json +1 -1
  386. package/persistence/EntityPersistExecutor.js +12 -1
  387. package/persistence/EntityPersistExecutor.js.map +1 -1
  388. package/persistence/SubjectDatabaseEntityLoader.d.ts +1 -1
  389. package/persistence/SubjectDatabaseEntityLoader.js +1 -1
  390. package/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
  391. package/persistence/SubjectExecutor.js +1 -1
  392. package/persistence/SubjectExecutor.js.map +1 -1
  393. package/persistence/subject-builder/CascadesSubjectBuilder.d.ts +1 -1
  394. package/persistence/subject-builder/CascadesSubjectBuilder.js +1 -1
  395. package/persistence/subject-builder/CascadesSubjectBuilder.js.map +1 -1
  396. package/persistence/subject-builder/ManyToManySubjectBuilder.js +1 -1
  397. package/persistence/subject-builder/ManyToManySubjectBuilder.js.map +1 -1
  398. package/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js +1 -1
  399. package/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js.map +1 -1
  400. package/platform/PlatformTools.js +5 -0
  401. package/platform/PlatformTools.js.map +1 -1
  402. package/query-builder/InsertQueryBuilder.d.ts +9 -0
  403. package/query-builder/InsertQueryBuilder.js +19 -8
  404. package/query-builder/InsertQueryBuilder.js.map +1 -1
  405. package/query-builder/QueryBuilder.d.ts +1 -1
  406. package/query-builder/QueryBuilder.js +5 -7
  407. package/query-builder/QueryBuilder.js.map +1 -1
  408. package/query-builder/QueryExpressionMap.d.ts +2 -2
  409. package/query-builder/QueryExpressionMap.js +1 -1
  410. package/query-builder/QueryExpressionMap.js.map +1 -1
  411. package/query-builder/ReturningResultsEntityUpdator.js +2 -2
  412. package/query-builder/ReturningResultsEntityUpdator.js.map +1 -1
  413. package/query-builder/SelectQueryBuilder.d.ts +1 -1
  414. package/query-builder/SelectQueryBuilder.js +25 -4
  415. package/query-builder/SelectQueryBuilder.js.map +1 -1
  416. package/query-builder/UpdateQueryBuilder.js +18 -7
  417. package/query-builder/UpdateQueryBuilder.js.map +1 -1
  418. package/query-runner/BaseQueryRunner.d.ts +10 -0
  419. package/query-runner/BaseQueryRunner.js +25 -1
  420. package/query-runner/BaseQueryRunner.js.map +1 -1
  421. package/query-runner/QueryRunner.d.ts +2 -2
  422. package/query-runner/QueryRunner.js.map +1 -1
  423. package/schema-builder/RdbmsSchemaBuilder.d.ts +6 -2
  424. package/schema-builder/RdbmsSchemaBuilder.js +26 -6
  425. package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  426. package/schema-builder/options/TableColumnOptions.d.ts +10 -2
  427. package/schema-builder/options/TableColumnOptions.js.map +1 -1
  428. package/schema-builder/options/TableIndexOptions.d.ts +8 -0
  429. package/schema-builder/options/TableIndexOptions.js.map +1 -1
  430. package/schema-builder/table/TableColumn.d.ts +6 -2
  431. package/schema-builder/table/TableColumn.js +2 -0
  432. package/schema-builder/table/TableColumn.js.map +1 -1
  433. package/schema-builder/table/TableIndex.d.ts +8 -0
  434. package/schema-builder/table/TableIndex.js +3 -0
  435. package/schema-builder/table/TableIndex.js.map +1 -1
  436. package/schema-builder/util/TableUtils.js +1 -0
  437. package/schema-builder/util/TableUtils.js.map +1 -1
  438. package/util/OrmUtils.d.ts +1 -1
  439. package/util/OrmUtils.js +4 -4
  440. package/util/OrmUtils.js.map +1 -1
  441. package/util/escapeRegExp.d.ts +1 -0
  442. package/util/escapeRegExp.js +10 -0
  443. package/util/escapeRegExp.js.map +1 -0
package/README.md CHANGED
@@ -214,12 +214,41 @@ await timber.remove()
214
214
  - for **SAP Hana**
215
215
 
216
216
  ```
217
- npm i @sap/hana-client
218
- npm i hdb-pool
217
+ npm install @sap/hana-client
218
+ npm install hdb-pool
219
219
  ```
220
220
 
221
221
  _SAP Hana support made possible by the sponsorship of [Neptune Software](https://www.neptune-software.com/)._
222
222
 
223
+ - for **Google Cloud Spanner**
224
+
225
+ ```
226
+ npm install @google-cloud/spanner --save
227
+ ```
228
+
229
+ Provide authentication credentials to your application code
230
+ by setting the environment variable `GOOGLE_APPLICATION_CREDENTIALS`:
231
+
232
+ ```shell
233
+ # Linux/macOS
234
+ export GOOGLE_APPLICATION_CREDENTIALS="KEY_PATH"
235
+
236
+ # Windows
237
+ set GOOGLE_APPLICATION_CREDENTIALS=KEY_PATH
238
+
239
+ # Replace KEY_PATH with the path of the JSON file that contains your service account key.
240
+ ```
241
+
242
+ To use Spanner with the emulator you should set `SPANNER_EMULATOR_HOST` environment variable:
243
+
244
+ ```shell
245
+ # Linux/macOS
246
+ export SPANNER_EMULATOR_HOST=localhost:9010
247
+
248
+ # Windows
249
+ set SPANNER_EMULATOR_HOST=localhost:9010
250
+ ```
251
+
223
252
  - for **MongoDB** (experimental)
224
253
 
225
254
  `npm install mongodb@^3.6.0 --save`
@@ -248,14 +277,14 @@ The quickest way to get started with TypeORM is to use its CLI commands to gener
248
277
  Quick start works only if you are using TypeORM in a NodeJS application.
249
278
  If you are using other platforms, proceed to the [step-by-step guide](#step-by-step-guide).
250
279
 
251
- To create a new project using CLI, run the follwing command:
280
+ To create a new project using CLI, run the following command:
252
281
 
253
282
  ```shell
254
283
  npx typeorm init --name MyProject --database postgres
255
284
  ```
256
285
 
257
286
  Where `name` is the name of your project and `database` is the database you'll use.
258
- Database can be one of the following values: `mysql`, `mariadb`, `postgres`, `cockroachdb`, `sqlite`, `mssql`, `oracle`, `mongodb`,
287
+ Database can be one of the following values: `mysql`, `mariadb`, `postgres`, `cockroachdb`, `sqlite`, `mssql`, `sap`, `spanner`, `oracle`, `mongodb`,
259
288
  `cordova`, `react-native`, `expo`, `nativescript`.
260
289
 
261
290
  This command will generate a new project in the `MyProject` directory with the following files:
@@ -553,7 +582,7 @@ AppDataSource.initialize()
553
582
 
554
583
  We are using Postgres in this example, but you can use any other supported database.
555
584
  To use another database, simply change the `type` in the options to the database type you are using:
556
- `mysql`, `mariadb`, `postgres`, `cockroachdb`, `sqlite`, `mssql`, `oracle`, `cordova`, `nativescript`, `react-native`,
585
+ `mysql`, `mariadb`, `postgres`, `cockroachdb`, `sqlite`, `mssql`, `oracle`, `sap`, `spanner`, `cordova`, `nativescript`, `react-native`,
557
586
  `expo`, or `mongodb`.
558
587
  Also make sure to use your own host, port, username, password and database settings.
559
588
 
@@ -584,7 +613,6 @@ Now if you run your `index.ts`, a connection with the database will be initializ
584
613
  Now let's create a new photo to save it in the database:
585
614
 
586
615
  ```javascript
587
- import { DataSource } from "typeorm"
588
616
  import { Photo } from "./entity/Photo"
589
617
  import { AppDataSource } from "./index"
590
618
 
@@ -611,7 +639,6 @@ Using entity manager you can manipulate any entity in your app.
611
639
  For example, let's load our saved entity:
612
640
 
613
641
  ```javascript
614
- import { DataSource } from "typeorm"
615
642
  import { Photo } from "./entity/Photo"
616
643
  import { AppDataSource } from "./index"
617
644
 
@@ -630,7 +657,6 @@ Each entity has its own repository which handles all operations with its entity.
630
657
  When you deal with entities a lot, Repositories are more convenient to use than EntityManagers:
631
658
 
632
659
  ```javascript
633
- import { DataSource } from "typeorm"
634
660
  import { Photo } from "./entity/Photo"
635
661
  import { AppDataSource } from "./index"
636
662
 
@@ -657,7 +683,6 @@ Learn more about Repository [here](./docs/working-with-repository.md).
657
683
  Let's try more load operations using the Repository:
658
684
 
659
685
  ```javascript
660
- import { DataSource } from "typeorm"
661
686
  import { Photo } from "./entity/Photo"
662
687
  import { AppDataSource } from "./index"
663
688
 
@@ -691,7 +716,6 @@ console.log("Photos count: ", photosCount)
691
716
  Now let's load a single photo from the database, update it and save it:
692
717
 
693
718
  ```javascript
694
- import { DataSource } from "typeorm"
695
719
  import { Photo } from "./entity/Photo"
696
720
  import { AppDataSource } from "./index"
697
721
 
@@ -710,7 +734,6 @@ Now photo with `id = 1` will be updated in the database.
710
734
  Now let's remove our photo from the database:
711
735
 
712
736
  ```javascript
713
- import { DataSource } from "typeorm"
714
737
  import { Photo } from "./entity/Photo"
715
738
  import { AppDataSource } from "./index"
716
739
 
@@ -796,7 +819,6 @@ If you run the app, you'll see a newly generated table, and it will contain a co
796
819
  Now let's save a photo, its metadata and attach them to each other.
797
820
 
798
821
  ```javascript
799
- import { DataSource } from "typeorm"
800
822
  import { Photo } from "./entity/Photo"
801
823
  import { PhotoMetadata } from "./entity/PhotoMetadata"
802
824
 
@@ -937,7 +959,6 @@ Let's use `find*` methods first.
937
959
  `find*` methods allow you to specify an object with the `FindOneOptions` / `FindManyOptions` interface.
938
960
 
939
961
  ```javascript
940
- import { DataSource } from "typeorm"
941
962
  import { Photo } from "./entity/Photo"
942
963
  import { PhotoMetadata } from "./entity/PhotoMetadata"
943
964
  import { AppDataSource } from "./index"
@@ -957,7 +978,6 @@ Using find options is good and dead simple, but if you need a more complex query
957
978
  `QueryBuilder` allows more complex queries to be used in an elegant way:
958
979
 
959
980
  ```javascript
960
- import { DataSource } from "typeorm"
961
981
  import { Photo } from "./entity/Photo"
962
982
  import { PhotoMetadata } from "./entity/PhotoMetadata"
963
983
  import { AppDataSource } from "./index"
@@ -1275,7 +1295,9 @@ There are several extensions that simplify working with TypeORM and integrating
1275
1295
  - Models generation from existing database - [typeorm-model-generator](https://github.com/Kononnable/typeorm-model-generator)
1276
1296
  - Fixtures loader - [typeorm-fixtures-cli](https://github.com/RobinCK/typeorm-fixtures)
1277
1297
  - ER Diagram generator - [typeorm-uml](https://github.com/eugene-manuilov/typeorm-uml/)
1278
- - Create/Drop database - [typeorm-extension](https://github.com/Tada5hi/typeorm-extension)
1298
+ - another ER Diagram generator - [erdia](https://www.npmjs.com/package/erdia/)
1299
+ - Create, drop & seed database - [typeorm-extension](https://github.com/tada5hi/typeorm-extension)
1300
+ - Automatically update `data-source.ts` after generating migrations/entities - [typeorm-codebase-sync](https://www.npmjs.com/package/typeorm-codebase-sync)
1279
1301
 
1280
1302
  ## Contributing
1281
1303
 
@@ -1,5 +1,6 @@
1
1
  import { MssqlParameter } from "../driver/sqlserver/MssqlParameter";
2
2
  import { Table } from "../schema-builder/table/Table";
3
+ import { v4 as uuidv4 } from "uuid";
3
4
  /**
4
5
  * Caches query result into current database, into separate table called "query-result-cache".
5
6
  */
@@ -51,7 +52,9 @@ export class DbQueryResultCache {
51
52
  type: driver.normalizeType({
52
53
  type: driver.mappedDataTypes.cacheId,
53
54
  }),
54
- generationStrategy: "increment",
55
+ generationStrategy: driver.options.type === "spanner"
56
+ ? "uuid"
57
+ : "increment",
55
58
  isGenerated: true,
56
59
  },
57
60
  {
@@ -196,6 +199,11 @@ export class DbQueryResultCache {
196
199
  await qb.execute();
197
200
  }
198
201
  else {
202
+ // Spanner does not support auto-generated columns
203
+ if (this.connection.driver.options.type === "spanner" &&
204
+ !insertedValues.id) {
205
+ insertedValues.id = uuidv4();
206
+ }
199
207
  // otherwise insert
200
208
  await queryRunner.manager
201
209
  .createQueryBuilder()
@@ -1 +1 @@
1
- {"version":3,"sources":["../browser/src/cache/DbQueryResultCache.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AAEnE,OAAO,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAA;AAIrD;;GAEG;AACH,MAAM,OAAO,kBAAkB;IAW3B,4EAA4E;IAC5E,cAAc;IACd,4EAA4E;IAE5E,YAAsB,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;QACxC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAc,CAAA;QACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAA;QAChD,MAAM,YAAY,GACd,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,KAAK,QAAQ;YAC7C,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK;YAC/B,CAAC,CAAC,EAAE,CAAA;QACZ,MAAM,cAAc,GAAG,YAAY,CAAC,SAAS,IAAI,oBAAoB,CAAA;QAErE,IAAI,CAAC,wBAAwB,GAAG,QAAQ,CAAA;QACxC,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAA;QACpC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAC9D,cAAc,EACd,MAAM,EACN,QAAQ,CACX,CAAA;IACL,CAAC;IAED,4EAA4E;IAC5E,iBAAiB;IACjB,4EAA4E;IAE5E;;OAEG;IACH,KAAK,CAAC,OAAO,KAAmB,CAAC;IAEjC;;OAEG;IACH,KAAK,CAAC,UAAU,KAAmB,CAAC;IAEpC;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,WAAyB;QACvC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAA;QACrC,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,QAAQ,CACzC,IAAI,CAAC,qBAAqB,CAC7B,CAAA,CAAC,0CAA0C;QAC5C,IAAI,UAAU;YAAE,OAAM;QAEtB,MAAM,WAAW,CAAC,WAAW,CACzB,IAAI,KAAK,CAAC;YACN,QAAQ,EAAE,IAAI,CAAC,wBAAwB;YACvC,MAAM,EAAE,IAAI,CAAC,sBAAsB;YACnC,IAAI,EAAE,IAAI,CAAC,qBAAqB;YAChC,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,IAAI;oBACV,SAAS,EAAE,IAAI;oBACf,UAAU,EAAE,KAAK;oBACjB,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC;wBACvB,IAAI,EAAE,MAAM,CAAC,eAAe,CAAC,OAAO;qBACvC,CAAC;oBACF,kBAAkB,EAAE,WAAW;oBAC/B,WAAW,EAAE,IAAI;iBACpB;gBACD;oBACI,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC;wBACvB,IAAI,EAAE,MAAM,CAAC,eAAe,CAAC,eAAe;qBAC/C,CAAC;oBACF,UAAU,EAAE,IAAI;iBACnB;gBACD;oBACI,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC;wBACvB,IAAI,EAAE,MAAM,CAAC,eAAe,CAAC,SAAS;qBACzC,CAAC;oBACF,SAAS,EAAE,KAAK;oBAChB,UAAU,EAAE,KAAK;iBACpB;gBACD;oBACI,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC;wBACvB,IAAI,EAAE,MAAM,CAAC,eAAe,CAAC,aAAa;qBAC7C,CAAC;oBACF,SAAS,EAAE,KAAK;oBAChB,UAAU,EAAE,KAAK;iBACpB;gBACD;oBACI,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC;wBACvB,IAAI,EAAE,MAAM,CAAC,eAAe,CAAC,UAAU;qBAC1C,CAAC;oBACF,SAAS,EAAE,KAAK;oBAChB,UAAU,EAAE,KAAK;iBACpB;gBACD;oBACI,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC;wBACvB,IAAI,EAAE,MAAM,CAAC,eAAe,CAAC,WAAW;qBAC3C,CAAC;oBACF,UAAU,EAAE,KAAK;iBACpB;aACJ;SACJ,CAAC,CACL,CAAA;IACL,CAAC;IAED;;;;OAIG;IACH,YAAY,CACR,OAAgC,EAChC,WAAyB;QAEzB,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;QAC9C,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU;aACrB,kBAAkB,CAAC,WAAW,CAAC;aAC/B,MAAM,EAAE;aACR,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAA;QAE9C,IAAI,OAAO,CAAC,UAAU,EAAE;YACpB,OAAO,EAAE;iBACJ,KAAK,CACF,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,CAC9B,YAAY,CACf,gBAAgB,CACpB;iBACA,aAAa,CAAC;gBACX,UAAU,EACN,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO;oBAC3C,CAAC,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC;oBACpD,CAAC,CAAC,OAAO,CAAC,UAAU;aAC/B,CAAC;iBACD,SAAS,EAAE,CAAA;SACnB;aAAM,IAAI,OAAO,CAAC,KAAK,EAAE;YACtB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAClD,OAAO,EAAE;qBACJ,KAAK,CACF,oBAAoB,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,CAC/C,OAAO,CACV,eAAe,EAChB,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAC3B;qBACA,SAAS,EAAE,CAAA;aACnB;YAED,OAAO,EAAE;iBACJ,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;iBAC7D,aAAa,CAAC;gBACX,KAAK,EACD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO;oBAC3C,CAAC,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC;oBAC/C,CAAC,CAAC,OAAO,CAAC,KAAK;aAC1B,CAAC;iBACD,SAAS,EAAE,CAAA;SACnB;QAED,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACrC,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,UAAmC;QACzC,MAAM,QAAQ,GACV,OAAO,UAAU,CAAC,QAAQ,KAAK,QAAQ;YACnC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC/B,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAA;QAC7B,OAAO,CACH,CAAC,OAAO,UAAU,CAAC,IAAI,KAAK,QAAQ;YAChC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAW,CAAC;YAClC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAE;YACnB,QAAQ;YACZ,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CACvB,CAAA;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CACd,OAAgC,EAChC,UAA+C,EAC/C,WAAyB;QAEzB,MAAM,uBAAuB,GACzB,WAAW,KAAK,SAAS;YACzB,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,kBAAkB,EAAE,MAAK,OAAO,CAAA;QAEjD,IAAI,WAAW,KAAK,SAAS,IAAI,uBAAuB,EAAE;YACtD,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAA;SAC5D;QAED,IAAI,cAAc,GAAkB,OAAO,CAAA;QAC3C,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE;YACjD,iHAAiH;YACjH,cAAc,GAAG;gBACb,UAAU,EAAE,IAAI,cAAc,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC;gBAC9D,IAAI,EAAE,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;gBAChD,QAAQ,EAAE,IAAI,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC;gBACrD,KAAK,EAAE,IAAI,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC;gBACpD,MAAM,EAAE,IAAI,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC;aACzD,CAAA;SACJ;QAED,IAAI,UAAU,IAAI,UAAU,CAAC,UAAU,EAAE;YACrC,uBAAuB;YACvB,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO;iBACzB,kBAAkB,EAAE;iBACpB,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC;iBAClC,GAAG,CAAC,cAAc,CAAC,CAAA;YAExB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE;gBAChD,SAAS,EAAE,cAAc,CAAC,UAAU;aACvC,CAAC,CAAA;YACF,MAAM,EAAE,CAAC,OAAO,EAAE,CAAA;SACrB;aAAM,IAAI,UAAU,IAAI,UAAU,CAAC,KAAK,EAAE;YACvC,uBAAuB;YACvB,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO;iBACzB,kBAAkB,EAAE;iBACpB,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC;iBAClC,GAAG,CAAC,cAAc,CAAC,CAAA;YAExB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAClD,EAAE,CAAC,KAAK,CAAC,2CAA2C,EAAE;oBAClD,SAAS,EAAE,cAAc,CAAC,KAAK;iBAClC,CAAC,CAAA;aACL;iBAAM;gBACH,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE;oBAC3C,SAAS,EAAE,cAAc,CAAC,KAAK;iBAClC,CAAC,CAAA;aACL;YAED,MAAM,EAAE,CAAC,OAAO,EAAE,CAAA;SACrB;aAAM;YACH,mBAAmB;YACnB,MAAM,WAAW,CAAC,OAAO;iBACpB,kBAAkB,EAAE;iBACpB,MAAM,EAAE;iBACR,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;iBAChC,MAAM,CAAC,cAAc,CAAC;iBACtB,OAAO,EAAE,CAAA;SACjB;QAED,IAAI,uBAAuB,EAAE;YACzB,MAAM,WAAW,CAAC,OAAO,EAAE,CAAA;SAC9B;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,WAAwB;QAChC,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,UAAU,CAC9C,IAAI,CAAC,qBAAqB,CAC7B,CAAA;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CACR,WAAqB,EACrB,WAAyB;QAEzB,MAAM,OAAO,CAAC,GAAG,CACb,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;YAC3B,MAAM,EAAE,GACJ,IAAI,CAAC,cAAc,CACf,WAAW,CACd,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAA;YAClC,OAAO,EAAE;iBACJ,MAAM,EAAE;iBACR,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;iBAChC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,gBAAgB,EAAE;gBAC/C,UAAU;aACb,CAAC;iBACD,OAAO,EAAE,CAAA;QAClB,CAAC,CAAC,CACL,CAAA;IACL,CAAC;IAED,4EAA4E;IAC5E,oBAAoB;IACpB,4EAA4E;IAE5E;;OAEG;IACO,cAAc,CACpB,WAAoC;QAEpC,IAAI,WAAW;YAAE,OAAO,WAAW,CAAA;QAEnC,OAAO,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAA;IAC9C,CAAC;CACJ","file":"DbQueryResultCache.js","sourcesContent":["import { ObjectLiteral } from \"../common/ObjectLiteral\"\nimport { DataSource } from \"../data-source/DataSource\"\nimport { MssqlParameter } from \"../driver/sqlserver/MssqlParameter\"\nimport { QueryRunner } from \"../query-runner/QueryRunner\"\nimport { Table } from \"../schema-builder/table/Table\"\nimport { QueryResultCache } from \"./QueryResultCache\"\nimport { QueryResultCacheOptions } from \"./QueryResultCacheOptions\"\n\n/**\n * Caches query result into current database, into separate table called \"query-result-cache\".\n */\nexport class DbQueryResultCache implements QueryResultCache {\n // -------------------------------------------------------------------------\n // Private properties\n // -------------------------------------------------------------------------\n\n private queryResultCacheTable: string\n\n private queryResultCacheDatabase?: string\n\n private queryResultCacheSchema?: string\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected connection: DataSource) {\n const { schema } = this.connection.driver.options as any\n const database = this.connection.driver.database\n const cacheOptions =\n typeof this.connection.options.cache === \"object\"\n ? this.connection.options.cache\n : {}\n const cacheTableName = cacheOptions.tableName || \"query-result-cache\"\n\n this.queryResultCacheDatabase = database\n this.queryResultCacheSchema = schema\n this.queryResultCacheTable = this.connection.driver.buildTableName(\n cacheTableName,\n schema,\n database,\n )\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates a connection with given cache provider.\n */\n async connect(): Promise<void> {}\n\n /**\n * Disconnects with given cache provider.\n */\n async disconnect(): Promise<void> {}\n\n /**\n * Creates table for storing cache if it does not exist yet.\n */\n async synchronize(queryRunner?: QueryRunner): Promise<void> {\n queryRunner = this.getQueryRunner(queryRunner)\n const driver = this.connection.driver\n const tableExist = await queryRunner.hasTable(\n this.queryResultCacheTable,\n ) // todo: table name should be configurable\n if (tableExist) return\n\n await queryRunner.createTable(\n new Table({\n database: this.queryResultCacheDatabase,\n schema: this.queryResultCacheSchema,\n name: this.queryResultCacheTable,\n columns: [\n {\n name: \"id\",\n isPrimary: true,\n isNullable: false,\n type: driver.normalizeType({\n type: driver.mappedDataTypes.cacheId,\n }),\n generationStrategy: \"increment\",\n isGenerated: true,\n },\n {\n name: \"identifier\",\n type: driver.normalizeType({\n type: driver.mappedDataTypes.cacheIdentifier,\n }),\n isNullable: true,\n },\n {\n name: \"time\",\n type: driver.normalizeType({\n type: driver.mappedDataTypes.cacheTime,\n }),\n isPrimary: false,\n isNullable: false,\n },\n {\n name: \"duration\",\n type: driver.normalizeType({\n type: driver.mappedDataTypes.cacheDuration,\n }),\n isPrimary: false,\n isNullable: false,\n },\n {\n name: \"query\",\n type: driver.normalizeType({\n type: driver.mappedDataTypes.cacheQuery,\n }),\n isPrimary: false,\n isNullable: false,\n },\n {\n name: \"result\",\n type: driver.normalizeType({\n type: driver.mappedDataTypes.cacheResult,\n }),\n isNullable: false,\n },\n ],\n }),\n )\n }\n\n /**\n * Caches given query result.\n * Returns cache result if found.\n * Returns undefined if result is not cached.\n */\n getFromCache(\n options: QueryResultCacheOptions,\n queryRunner?: QueryRunner,\n ): Promise<QueryResultCacheOptions | undefined> {\n queryRunner = this.getQueryRunner(queryRunner)\n const qb = this.connection\n .createQueryBuilder(queryRunner)\n .select()\n .from(this.queryResultCacheTable, \"cache\")\n\n if (options.identifier) {\n return qb\n .where(\n `${qb.escape(\"cache\")}.${qb.escape(\n \"identifier\",\n )} = :identifier`,\n )\n .setParameters({\n identifier:\n this.connection.driver.options.type === \"mssql\"\n ? new MssqlParameter(options.identifier, \"nvarchar\")\n : options.identifier,\n })\n .getRawOne()\n } else if (options.query) {\n if (this.connection.driver.options.type === \"oracle\") {\n return qb\n .where(\n `dbms_lob.compare(${qb.escape(\"cache\")}.${qb.escape(\n \"query\",\n )}, :query) = 0`,\n { query: options.query },\n )\n .getRawOne()\n }\n\n return qb\n .where(`${qb.escape(\"cache\")}.${qb.escape(\"query\")} = :query`)\n .setParameters({\n query:\n this.connection.driver.options.type === \"mssql\"\n ? new MssqlParameter(options.query, \"nvarchar\")\n : options.query,\n })\n .getRawOne()\n }\n\n return Promise.resolve(undefined)\n }\n\n /**\n * Checks if cache is expired or not.\n */\n isExpired(savedCache: QueryResultCacheOptions): boolean {\n const duration =\n typeof savedCache.duration === \"string\"\n ? parseInt(savedCache.duration)\n : savedCache.duration\n return (\n (typeof savedCache.time === \"string\"\n ? parseInt(savedCache.time as any)\n : savedCache.time)! +\n duration <\n new Date().getTime()\n )\n }\n\n /**\n * Stores given query result in the cache.\n */\n async storeInCache(\n options: QueryResultCacheOptions,\n savedCache: QueryResultCacheOptions | undefined,\n queryRunner?: QueryRunner,\n ): Promise<void> {\n const shouldCreateQueryRunner =\n queryRunner === undefined ||\n queryRunner?.getReplicationMode() === \"slave\"\n\n if (queryRunner === undefined || shouldCreateQueryRunner) {\n queryRunner = this.connection.createQueryRunner(\"master\")\n }\n\n let insertedValues: ObjectLiteral = options\n if (this.connection.driver.options.type === \"mssql\") {\n // todo: bad abstraction, re-implement this part, probably better if we create an entity metadata for cache table\n insertedValues = {\n identifier: new MssqlParameter(options.identifier, \"nvarchar\"),\n time: new MssqlParameter(options.time, \"bigint\"),\n duration: new MssqlParameter(options.duration, \"int\"),\n query: new MssqlParameter(options.query, \"nvarchar\"),\n result: new MssqlParameter(options.result, \"nvarchar\"),\n }\n }\n\n if (savedCache && savedCache.identifier) {\n // if exist then update\n const qb = queryRunner.manager\n .createQueryBuilder()\n .update(this.queryResultCacheTable)\n .set(insertedValues)\n\n qb.where(`${qb.escape(\"identifier\")} = :condition`, {\n condition: insertedValues.identifier,\n })\n await qb.execute()\n } else if (savedCache && savedCache.query) {\n // if exist then update\n const qb = queryRunner.manager\n .createQueryBuilder()\n .update(this.queryResultCacheTable)\n .set(insertedValues)\n\n if (this.connection.driver.options.type === \"oracle\") {\n qb.where(`dbms_lob.compare(\"query\", :condition) = 0`, {\n condition: insertedValues.query,\n })\n } else {\n qb.where(`${qb.escape(\"query\")} = :condition`, {\n condition: insertedValues.query,\n })\n }\n\n await qb.execute()\n } else {\n // otherwise insert\n await queryRunner.manager\n .createQueryBuilder()\n .insert()\n .into(this.queryResultCacheTable)\n .values(insertedValues)\n .execute()\n }\n\n if (shouldCreateQueryRunner) {\n await queryRunner.release()\n }\n }\n\n /**\n * Clears everything stored in the cache.\n */\n async clear(queryRunner: QueryRunner): Promise<void> {\n return this.getQueryRunner(queryRunner).clearTable(\n this.queryResultCacheTable,\n )\n }\n\n /**\n * Removes all cached results by given identifiers from cache.\n */\n async remove(\n identifiers: string[],\n queryRunner?: QueryRunner,\n ): Promise<void> {\n await Promise.all(\n identifiers.map((identifier) => {\n const qb =\n this.getQueryRunner(\n queryRunner,\n ).manager.createQueryBuilder()\n return qb\n .delete()\n .from(this.queryResultCacheTable)\n .where(`${qb.escape(\"identifier\")} = :identifier`, {\n identifier,\n })\n .execute()\n }),\n )\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Gets a query runner to work with.\n */\n protected getQueryRunner(\n queryRunner: QueryRunner | undefined,\n ): QueryRunner {\n if (queryRunner) return queryRunner\n\n return this.connection.createQueryRunner()\n }\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../browser/src/cache/DbQueryResultCache.ts"],"names":[],"mappings":"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","file":"DbQueryResultCache.js","sourcesContent":["import { ObjectLiteral } from \"../common/ObjectLiteral\"\nimport { DataSource } from \"../data-source/DataSource\"\nimport { MssqlParameter } from \"../driver/sqlserver/MssqlParameter\"\nimport { QueryRunner } from \"../query-runner/QueryRunner\"\nimport { Table } from \"../schema-builder/table/Table\"\nimport { QueryResultCache } from \"./QueryResultCache\"\nimport { QueryResultCacheOptions } from \"./QueryResultCacheOptions\"\nimport { v4 as uuidv4 } from \"uuid\"\n\n/**\n * Caches query result into current database, into separate table called \"query-result-cache\".\n */\nexport class DbQueryResultCache implements QueryResultCache {\n // -------------------------------------------------------------------------\n // Private properties\n // -------------------------------------------------------------------------\n\n private queryResultCacheTable: string\n\n private queryResultCacheDatabase?: string\n\n private queryResultCacheSchema?: string\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected connection: DataSource) {\n const { schema } = this.connection.driver.options as any\n const database = this.connection.driver.database\n const cacheOptions =\n typeof this.connection.options.cache === \"object\"\n ? this.connection.options.cache\n : {}\n const cacheTableName = cacheOptions.tableName || \"query-result-cache\"\n\n this.queryResultCacheDatabase = database\n this.queryResultCacheSchema = schema\n this.queryResultCacheTable = this.connection.driver.buildTableName(\n cacheTableName,\n schema,\n database,\n )\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates a connection with given cache provider.\n */\n async connect(): Promise<void> {}\n\n /**\n * Disconnects with given cache provider.\n */\n async disconnect(): Promise<void> {}\n\n /**\n * Creates table for storing cache if it does not exist yet.\n */\n async synchronize(queryRunner?: QueryRunner): Promise<void> {\n queryRunner = this.getQueryRunner(queryRunner)\n const driver = this.connection.driver\n const tableExist = await queryRunner.hasTable(\n this.queryResultCacheTable,\n ) // todo: table name should be configurable\n if (tableExist) return\n\n await queryRunner.createTable(\n new Table({\n database: this.queryResultCacheDatabase,\n schema: this.queryResultCacheSchema,\n name: this.queryResultCacheTable,\n columns: [\n {\n name: \"id\",\n isPrimary: true,\n isNullable: false,\n type: driver.normalizeType({\n type: driver.mappedDataTypes.cacheId,\n }),\n generationStrategy:\n driver.options.type === \"spanner\"\n ? \"uuid\"\n : \"increment\",\n isGenerated: true,\n },\n {\n name: \"identifier\",\n type: driver.normalizeType({\n type: driver.mappedDataTypes.cacheIdentifier,\n }),\n isNullable: true,\n },\n {\n name: \"time\",\n type: driver.normalizeType({\n type: driver.mappedDataTypes.cacheTime,\n }),\n isPrimary: false,\n isNullable: false,\n },\n {\n name: \"duration\",\n type: driver.normalizeType({\n type: driver.mappedDataTypes.cacheDuration,\n }),\n isPrimary: false,\n isNullable: false,\n },\n {\n name: \"query\",\n type: driver.normalizeType({\n type: driver.mappedDataTypes.cacheQuery,\n }),\n isPrimary: false,\n isNullable: false,\n },\n {\n name: \"result\",\n type: driver.normalizeType({\n type: driver.mappedDataTypes.cacheResult,\n }),\n isNullable: false,\n },\n ],\n }),\n )\n }\n\n /**\n * Caches given query result.\n * Returns cache result if found.\n * Returns undefined if result is not cached.\n */\n getFromCache(\n options: QueryResultCacheOptions,\n queryRunner?: QueryRunner,\n ): Promise<QueryResultCacheOptions | undefined> {\n queryRunner = this.getQueryRunner(queryRunner)\n const qb = this.connection\n .createQueryBuilder(queryRunner)\n .select()\n .from(this.queryResultCacheTable, \"cache\")\n\n if (options.identifier) {\n return qb\n .where(\n `${qb.escape(\"cache\")}.${qb.escape(\n \"identifier\",\n )} = :identifier`,\n )\n .setParameters({\n identifier:\n this.connection.driver.options.type === \"mssql\"\n ? new MssqlParameter(options.identifier, \"nvarchar\")\n : options.identifier,\n })\n .getRawOne()\n } else if (options.query) {\n if (this.connection.driver.options.type === \"oracle\") {\n return qb\n .where(\n `dbms_lob.compare(${qb.escape(\"cache\")}.${qb.escape(\n \"query\",\n )}, :query) = 0`,\n { query: options.query },\n )\n .getRawOne()\n }\n\n return qb\n .where(`${qb.escape(\"cache\")}.${qb.escape(\"query\")} = :query`)\n .setParameters({\n query:\n this.connection.driver.options.type === \"mssql\"\n ? new MssqlParameter(options.query, \"nvarchar\")\n : options.query,\n })\n .getRawOne()\n }\n\n return Promise.resolve(undefined)\n }\n\n /**\n * Checks if cache is expired or not.\n */\n isExpired(savedCache: QueryResultCacheOptions): boolean {\n const duration =\n typeof savedCache.duration === \"string\"\n ? parseInt(savedCache.duration)\n : savedCache.duration\n return (\n (typeof savedCache.time === \"string\"\n ? parseInt(savedCache.time as any)\n : savedCache.time)! +\n duration <\n new Date().getTime()\n )\n }\n\n /**\n * Stores given query result in the cache.\n */\n async storeInCache(\n options: QueryResultCacheOptions,\n savedCache: QueryResultCacheOptions | undefined,\n queryRunner?: QueryRunner,\n ): Promise<void> {\n const shouldCreateQueryRunner =\n queryRunner === undefined ||\n queryRunner?.getReplicationMode() === \"slave\"\n\n if (queryRunner === undefined || shouldCreateQueryRunner) {\n queryRunner = this.connection.createQueryRunner(\"master\")\n }\n\n let insertedValues: ObjectLiteral = options\n if (this.connection.driver.options.type === \"mssql\") {\n // todo: bad abstraction, re-implement this part, probably better if we create an entity metadata for cache table\n insertedValues = {\n identifier: new MssqlParameter(options.identifier, \"nvarchar\"),\n time: new MssqlParameter(options.time, \"bigint\"),\n duration: new MssqlParameter(options.duration, \"int\"),\n query: new MssqlParameter(options.query, \"nvarchar\"),\n result: new MssqlParameter(options.result, \"nvarchar\"),\n }\n }\n\n if (savedCache && savedCache.identifier) {\n // if exist then update\n const qb = queryRunner.manager\n .createQueryBuilder()\n .update(this.queryResultCacheTable)\n .set(insertedValues)\n\n qb.where(`${qb.escape(\"identifier\")} = :condition`, {\n condition: insertedValues.identifier,\n })\n await qb.execute()\n } else if (savedCache && savedCache.query) {\n // if exist then update\n const qb = queryRunner.manager\n .createQueryBuilder()\n .update(this.queryResultCacheTable)\n .set(insertedValues)\n\n if (this.connection.driver.options.type === \"oracle\") {\n qb.where(`dbms_lob.compare(\"query\", :condition) = 0`, {\n condition: insertedValues.query,\n })\n } else {\n qb.where(`${qb.escape(\"query\")} = :condition`, {\n condition: insertedValues.query,\n })\n }\n\n await qb.execute()\n } else {\n // Spanner does not support auto-generated columns\n if (\n this.connection.driver.options.type === \"spanner\" &&\n !insertedValues.id\n ) {\n insertedValues.id = uuidv4()\n }\n\n // otherwise insert\n await queryRunner.manager\n .createQueryBuilder()\n .insert()\n .into(this.queryResultCacheTable)\n .values(insertedValues)\n .execute()\n }\n\n if (shouldCreateQueryRunner) {\n await queryRunner.release()\n }\n }\n\n /**\n * Clears everything stored in the cache.\n */\n async clear(queryRunner: QueryRunner): Promise<void> {\n return this.getQueryRunner(queryRunner).clearTable(\n this.queryResultCacheTable,\n )\n }\n\n /**\n * Removes all cached results by given identifiers from cache.\n */\n async remove(\n identifiers: string[],\n queryRunner?: QueryRunner,\n ): Promise<void> {\n await Promise.all(\n identifiers.map((identifier) => {\n const qb =\n this.getQueryRunner(\n queryRunner,\n ).manager.createQueryBuilder()\n return qb\n .delete()\n .from(this.queryResultCacheTable)\n .where(`${qb.escape(\"identifier\")} = :identifier`, {\n identifier,\n })\n .execute()\n }),\n )\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Gets a query runner to work with.\n */\n protected getQueryRunner(\n queryRunner: QueryRunner | undefined,\n ): QueryRunner {\n if (queryRunner) return queryRunner\n\n return this.connection.createQueryRunner()\n }\n}\n"],"sourceRoot":".."}
@@ -31,6 +31,9 @@ export class RedisQueryResultCache {
31
31
  this.connection.logger.log("warn", err);
32
32
  });
33
33
  }
34
+ if ("connect" in this.client) {
35
+ await this.client.connect();
36
+ }
34
37
  }
35
38
  else if (this.clientType === "ioredis") {
36
39
  if (cacheOptions && cacheOptions.port) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../browser/src/cache/RedisQueryResultCache.ts"],"names":[],"mappings":"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","file":"RedisQueryResultCache.js","sourcesContent":["import { QueryResultCache } from \"./QueryResultCache\"\nimport { QueryResultCacheOptions } from \"./QueryResultCacheOptions\"\nimport { PlatformTools } from \"../platform/PlatformTools\"\nimport { DataSource } from \"../data-source/DataSource\"\nimport { QueryRunner } from \"../query-runner/QueryRunner\"\nimport { TypeORMError } from \"../error/TypeORMError\"\n\n/**\n * Caches query result into Redis database.\n */\nexport class RedisQueryResultCache implements QueryResultCache {\n // -------------------------------------------------------------------------\n // Protected Properties\n // -------------------------------------------------------------------------\n\n /**\n * Redis module instance loaded dynamically.\n */\n protected redis: any\n\n /**\n * Connected redis client.\n */\n protected client: any\n\n /**\n * Type of the Redis Client (redis or ioredis).\n */\n protected clientType: \"redis\" | \"ioredis\" | \"ioredis/cluster\"\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(\n protected connection: DataSource,\n clientType: \"redis\" | \"ioredis\" | \"ioredis/cluster\",\n ) {\n this.clientType = clientType\n this.redis = this.loadRedis()\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates a connection with given cache provider.\n */\n async connect(): Promise<void> {\n const cacheOptions: any = this.connection.options.cache\n if (this.clientType === \"redis\") {\n this.client = this.redis.createClient({\n ...cacheOptions?.options,\n legacyMode: true,\n })\n if (\n typeof this.connection.options.cache === \"object\" &&\n this.connection.options.cache.ignoreErrors\n ) {\n this.client.on(\"error\", (err: any) => {\n this.connection.logger.log(\"warn\", err)\n })\n }\n } else if (this.clientType === \"ioredis\") {\n if (cacheOptions && cacheOptions.port) {\n if (cacheOptions.options) {\n this.client = new this.redis(\n cacheOptions.port,\n cacheOptions.options,\n )\n } else {\n this.client = new this.redis(cacheOptions.port)\n }\n } else if (cacheOptions && cacheOptions.options) {\n this.client = new this.redis(cacheOptions.options)\n } else {\n this.client = new this.redis()\n }\n } else if (this.clientType === \"ioredis/cluster\") {\n if (\n cacheOptions &&\n cacheOptions.options &&\n Array.isArray(cacheOptions.options)\n ) {\n this.client = new this.redis.Cluster(cacheOptions.options)\n } else if (\n cacheOptions &&\n cacheOptions.options &&\n cacheOptions.options.startupNodes\n ) {\n this.client = new this.redis.Cluster(\n cacheOptions.options.startupNodes,\n cacheOptions.options.options,\n )\n } else {\n throw new TypeORMError(\n `options.startupNodes required for ${this.clientType}.`,\n )\n }\n }\n }\n\n /**\n * Disconnects the connection\n */\n async disconnect(): Promise<void> {\n return new Promise<void>((ok, fail) => {\n this.client.quit((err: any, result: any) => {\n if (err) return fail(err)\n ok()\n this.client = undefined\n })\n })\n }\n\n /**\n * Creates table for storing cache if it does not exist yet.\n */\n async synchronize(queryRunner: QueryRunner): Promise<void> {}\n\n /**\n * Caches given query result.\n * Returns cache result if found.\n * Returns undefined if result is not cached.\n */\n getFromCache(\n options: QueryResultCacheOptions,\n queryRunner?: QueryRunner,\n ): Promise<QueryResultCacheOptions | undefined> {\n return new Promise<QueryResultCacheOptions | undefined>((ok, fail) => {\n if (options.identifier) {\n this.client.get(options.identifier, (err: any, result: any) => {\n if (err) return fail(err)\n ok(JSON.parse(result))\n })\n } else if (options.query) {\n this.client.get(options.query, (err: any, result: any) => {\n if (err) return fail(err)\n ok(JSON.parse(result))\n })\n } else {\n ok(undefined)\n }\n })\n }\n\n /**\n * Checks if cache is expired or not.\n */\n isExpired(savedCache: QueryResultCacheOptions): boolean {\n return savedCache.time! + savedCache.duration < new Date().getTime()\n }\n\n /**\n * Stores given query result in the cache.\n */\n async storeInCache(\n options: QueryResultCacheOptions,\n savedCache: QueryResultCacheOptions,\n queryRunner?: QueryRunner,\n ): Promise<void> {\n return new Promise<void>((ok, fail) => {\n if (options.identifier) {\n this.client.set(\n options.identifier,\n JSON.stringify(options),\n \"PX\",\n options.duration,\n (err: any, result: any) => {\n if (err) return fail(err)\n ok()\n },\n )\n } else if (options.query) {\n this.client.set(\n options.query,\n JSON.stringify(options),\n \"PX\",\n options.duration,\n (err: any, result: any) => {\n if (err) return fail(err)\n ok()\n },\n )\n }\n })\n }\n\n /**\n * Clears everything stored in the cache.\n */\n async clear(queryRunner?: QueryRunner): Promise<void> {\n return new Promise<void>((ok, fail) => {\n this.client.flushdb((err: any, result: any) => {\n if (err) return fail(err)\n ok()\n })\n })\n }\n\n /**\n * Removes all cached results by given identifiers from cache.\n */\n async remove(\n identifiers: string[],\n queryRunner?: QueryRunner,\n ): Promise<void> {\n await Promise.all(\n identifiers.map((identifier) => {\n return this.deleteKey(identifier)\n }),\n )\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Removes a single key from redis database.\n */\n protected deleteKey(key: string): Promise<void> {\n return new Promise<void>((ok, fail) => {\n this.client.del(key, (err: any, result: any) => {\n if (err) return fail(err)\n ok()\n })\n })\n }\n\n /**\n * Loads redis dependency.\n */\n protected loadRedis(): any {\n try {\n if (this.clientType === \"ioredis/cluster\") {\n return PlatformTools.load(\"ioredis\")\n } else {\n return PlatformTools.load(this.clientType)\n }\n } catch (e) {\n throw new TypeORMError(\n `Cannot use cache because ${this.clientType} is not installed. Please run \"npm i ${this.clientType} --save\".`,\n )\n }\n }\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../browser/src/cache/RedisQueryResultCache.ts"],"names":[],"mappings":"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","file":"RedisQueryResultCache.js","sourcesContent":["import { QueryResultCache } from \"./QueryResultCache\"\nimport { QueryResultCacheOptions } from \"./QueryResultCacheOptions\"\nimport { PlatformTools } from \"../platform/PlatformTools\"\nimport { DataSource } from \"../data-source/DataSource\"\nimport { QueryRunner } from \"../query-runner/QueryRunner\"\nimport { TypeORMError } from \"../error/TypeORMError\"\n\n/**\n * Caches query result into Redis database.\n */\nexport class RedisQueryResultCache implements QueryResultCache {\n // -------------------------------------------------------------------------\n // Protected Properties\n // -------------------------------------------------------------------------\n\n /**\n * Redis module instance loaded dynamically.\n */\n protected redis: any\n\n /**\n * Connected redis client.\n */\n protected client: any\n\n /**\n * Type of the Redis Client (redis or ioredis).\n */\n protected clientType: \"redis\" | \"ioredis\" | \"ioredis/cluster\"\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(\n protected connection: DataSource,\n clientType: \"redis\" | \"ioredis\" | \"ioredis/cluster\",\n ) {\n this.clientType = clientType\n this.redis = this.loadRedis()\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates a connection with given cache provider.\n */\n async connect(): Promise<void> {\n const cacheOptions: any = this.connection.options.cache\n if (this.clientType === \"redis\") {\n this.client = this.redis.createClient({\n ...cacheOptions?.options,\n legacyMode: true,\n })\n if (\n typeof this.connection.options.cache === \"object\" &&\n this.connection.options.cache.ignoreErrors\n ) {\n this.client.on(\"error\", (err: any) => {\n this.connection.logger.log(\"warn\", err)\n })\n }\n if (\"connect\" in this.client) {\n await this.client.connect()\n }\n } else if (this.clientType === \"ioredis\") {\n if (cacheOptions && cacheOptions.port) {\n if (cacheOptions.options) {\n this.client = new this.redis(\n cacheOptions.port,\n cacheOptions.options,\n )\n } else {\n this.client = new this.redis(cacheOptions.port)\n }\n } else if (cacheOptions && cacheOptions.options) {\n this.client = new this.redis(cacheOptions.options)\n } else {\n this.client = new this.redis()\n }\n } else if (this.clientType === \"ioredis/cluster\") {\n if (\n cacheOptions &&\n cacheOptions.options &&\n Array.isArray(cacheOptions.options)\n ) {\n this.client = new this.redis.Cluster(cacheOptions.options)\n } else if (\n cacheOptions &&\n cacheOptions.options &&\n cacheOptions.options.startupNodes\n ) {\n this.client = new this.redis.Cluster(\n cacheOptions.options.startupNodes,\n cacheOptions.options.options,\n )\n } else {\n throw new TypeORMError(\n `options.startupNodes required for ${this.clientType}.`,\n )\n }\n }\n }\n\n /**\n * Disconnects the connection\n */\n async disconnect(): Promise<void> {\n return new Promise<void>((ok, fail) => {\n this.client.quit((err: any, result: any) => {\n if (err) return fail(err)\n ok()\n this.client = undefined\n })\n })\n }\n\n /**\n * Creates table for storing cache if it does not exist yet.\n */\n async synchronize(queryRunner: QueryRunner): Promise<void> {}\n\n /**\n * Caches given query result.\n * Returns cache result if found.\n * Returns undefined if result is not cached.\n */\n getFromCache(\n options: QueryResultCacheOptions,\n queryRunner?: QueryRunner,\n ): Promise<QueryResultCacheOptions | undefined> {\n return new Promise<QueryResultCacheOptions | undefined>((ok, fail) => {\n if (options.identifier) {\n this.client.get(options.identifier, (err: any, result: any) => {\n if (err) return fail(err)\n ok(JSON.parse(result))\n })\n } else if (options.query) {\n this.client.get(options.query, (err: any, result: any) => {\n if (err) return fail(err)\n ok(JSON.parse(result))\n })\n } else {\n ok(undefined)\n }\n })\n }\n\n /**\n * Checks if cache is expired or not.\n */\n isExpired(savedCache: QueryResultCacheOptions): boolean {\n return savedCache.time! + savedCache.duration < new Date().getTime()\n }\n\n /**\n * Stores given query result in the cache.\n */\n async storeInCache(\n options: QueryResultCacheOptions,\n savedCache: QueryResultCacheOptions,\n queryRunner?: QueryRunner,\n ): Promise<void> {\n return new Promise<void>((ok, fail) => {\n if (options.identifier) {\n this.client.set(\n options.identifier,\n JSON.stringify(options),\n \"PX\",\n options.duration,\n (err: any, result: any) => {\n if (err) return fail(err)\n ok()\n },\n )\n } else if (options.query) {\n this.client.set(\n options.query,\n JSON.stringify(options),\n \"PX\",\n options.duration,\n (err: any, result: any) => {\n if (err) return fail(err)\n ok()\n },\n )\n }\n })\n }\n\n /**\n * Clears everything stored in the cache.\n */\n async clear(queryRunner?: QueryRunner): Promise<void> {\n return new Promise<void>((ok, fail) => {\n this.client.flushdb((err: any, result: any) => {\n if (err) return fail(err)\n ok()\n })\n })\n }\n\n /**\n * Removes all cached results by given identifiers from cache.\n */\n async remove(\n identifiers: string[],\n queryRunner?: QueryRunner,\n ): Promise<void> {\n await Promise.all(\n identifiers.map((identifier) => {\n return this.deleteKey(identifier)\n }),\n )\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Removes a single key from redis database.\n */\n protected deleteKey(key: string): Promise<void> {\n return new Promise<void>((ok, fail) => {\n this.client.del(key, (err: any, result: any) => {\n if (err) return fail(err)\n ok()\n })\n })\n }\n\n /**\n * Loads redis dependency.\n */\n protected loadRedis(): any {\n try {\n if (this.clientType === \"ioredis/cluster\") {\n return PlatformTools.load(\"ioredis\")\n } else {\n return PlatformTools.load(this.clientType)\n }\n } catch (e) {\n throw new TypeORMError(\n `Cannot use cache because ${this.clientType} is not installed. Please run \"npm i ${this.clientType} --save\".`,\n )\n }\n }\n}\n"],"sourceRoot":".."}
@@ -1,2 +1,2 @@
1
- #!/usr/bin/env node --require ts-node/register
1
+ #!/usr/bin/env node
2
2
  import "./cli";
@@ -1,4 +1,5 @@
1
- #!/usr/bin/env node --require ts-node/register
1
+ #!/usr/bin/env node
2
+ require("ts-node").register();
2
3
  import "./cli";
3
4
 
4
5
  //# sourceMappingURL=cli-ts-node-commonjs.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../browser/src/cli-ts-node-commonjs.ts"],"names":[],"mappings":";AACA,OAAO,OAAO,CAAA","file":"cli-ts-node-commonjs.js","sourcesContent":["#!/usr/bin/env node --require ts-node/register\nimport \"./cli\"\n"],"sourceRoot":"."}
1
+ {"version":3,"sources":["../browser/src/cli-ts-node-commonjs.ts"],"names":[],"mappings":";AACA,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAA;AAC7B,OAAO,OAAO,CAAA","file":"cli-ts-node-commonjs.js","sourcesContent":["#!/usr/bin/env node\nrequire(\"ts-node\").register()\nimport \"./cli\"\n"],"sourceRoot":"."}
@@ -1,2 +1,2 @@
1
- #!/usr/bin/env node --loader ts-node/esm --no-warnings
2
- import "./cli";
1
+ #!/usr/bin/env node
2
+ export {};
@@ -1,4 +1,21 @@
1
- #!/usr/bin/env node --loader ts-node/esm --no-warnings
2
- import "./cli";
1
+ #!/usr/bin/env node
2
+ import { spawnSync } from "child_process";
3
+ if ((process.env["NODE_OPTIONS"] || "").includes("--loader ts-node"))
4
+ require("./cli");
5
+ else
6
+ spawnSync(process.argv[0], process.argv.slice(1), {
7
+ stdio: "inherit",
8
+ env: {
9
+ ...process.env,
10
+ NODE_OPTIONS: [
11
+ process.env["NODE_OPTIONS"],
12
+ "--loader ts-node/esm",
13
+ "--no-warnings",
14
+ ]
15
+ .filter((item) => !!item)
16
+ .join(" "),
17
+ },
18
+ windowsHide: true,
19
+ });
3
20
 
4
21
  //# sourceMappingURL=cli-ts-node-esm.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../browser/src/cli-ts-node-esm.ts"],"names":[],"mappings":";AACA,OAAO,OAAO,CAAA","file":"cli-ts-node-esm.js","sourcesContent":["#!/usr/bin/env node --loader ts-node/esm --no-warnings\nimport \"./cli\"\n"],"sourceRoot":"."}
1
+ {"version":3,"sources":["../browser/src/cli-ts-node-esm.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAEzC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAChE,OAAO,CAAC,OAAO,CAAC,CAAA;;IAEhB,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QAC9C,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE;YACD,GAAG,OAAO,CAAC,GAAG;YACd,YAAY,EAAE;gBACV,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;gBAC3B,sBAAsB;gBACtB,eAAe;aAClB;iBACI,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;iBACxB,IAAI,CAAC,GAAG,CAAC;SACjB;QACD,WAAW,EAAE,IAAI;KACpB,CAAC,CAAA","file":"cli-ts-node-esm.js","sourcesContent":["#!/usr/bin/env node\nimport { spawnSync } from \"child_process\"\n\nif ((process.env[\"NODE_OPTIONS\"] || \"\").includes(\"--loader ts-node\"))\n require(\"./cli\")\nelse\n spawnSync(process.argv[0], process.argv.slice(1), {\n stdio: \"inherit\",\n env: {\n ...process.env,\n NODE_OPTIONS: [\n process.env[\"NODE_OPTIONS\"],\n \"--loader ts-node/esm\",\n \"--no-warnings\",\n ]\n .filter((item) => !!item)\n .join(\" \"),\n },\n windowsHide: true,\n })\n"],"sourceRoot":"."}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Same as Partial<T> but goes deeper and makes Partial<T> all its properties and sub-properties.
3
3
  */
4
- export declare type DeepPartial<T> = T extends Array<infer U> ? DeepPartial<U>[] : T extends Map<infer K, infer V> ? Map<DeepPartial<K>, DeepPartial<V>> : T extends Set<infer M> ? Set<DeepPartial<M>> : T extends object ? {
4
+ export declare type DeepPartial<T> = T | (T extends Array<infer U> ? DeepPartial<U>[] : T extends Map<infer K, infer V> ? Map<DeepPartial<K>, DeepPartial<V>> : T extends Set<infer M> ? Set<DeepPartial<M>> : T extends object ? {
5
5
  [K in keyof T]?: DeepPartial<T[K]>;
6
- } : T;
6
+ } : T);
@@ -1 +1 @@
1
- {"version":3,"sources":["../browser/src/common/DeepPartial.ts"],"names":[],"mappings":"","file":"DeepPartial.js","sourcesContent":["/**\n * Same as Partial<T> but goes deeper and makes Partial<T> all its properties and sub-properties.\n */\nexport type DeepPartial<T> = T extends Array<infer U>\n ? DeepPartial<U>[]\n : T extends Map<infer K, infer V>\n ? Map<DeepPartial<K>, DeepPartial<V>>\n : T extends Set<infer M>\n ? Set<DeepPartial<M>>\n : T extends object\n ? { [K in keyof T]?: DeepPartial<T[K]> }\n : T\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../browser/src/common/DeepPartial.ts"],"names":[],"mappings":"","file":"DeepPartial.js","sourcesContent":["/**\n * Same as Partial<T> but goes deeper and makes Partial<T> all its properties and sub-properties.\n */\nexport type DeepPartial<T> =\n | T\n | (T extends Array<infer U>\n ? DeepPartial<U>[]\n : T extends Map<infer K, infer V>\n ? Map<DeepPartial<K>, DeepPartial<V>>\n : T extends Set<infer M>\n ? Set<DeepPartial<M>>\n : T extends object\n ? { [K in keyof T]?: DeepPartial<T[K]> }\n : T)\n"],"sourceRoot":".."}
@@ -35,8 +35,7 @@ export interface BaseDataSourceOptions {
35
35
  readonly subscribers?: MixedList<Function | string>;
36
36
  /**
37
37
  * Migrations to be loaded for this connection.
38
- * Accepts both migration classes and directories where from migrations need to be loaded.
39
- * Directories support glob patterns.
38
+ * Accepts both migration classes and glob patterns representing migration files.
40
39
  */
41
40
  readonly migrations?: MixedList<Function | string>;
42
41
  /**
@@ -1 +1 @@
1
- {"version":3,"sources":["../browser/src/data-source/BaseDataSourceOptions.ts"],"names":[],"mappings":"","file":"BaseDataSourceOptions.js","sourcesContent":["import { EntitySchema } from \"../entity-schema/EntitySchema\"\nimport { LoggerOptions } from \"../logger/LoggerOptions\"\nimport { NamingStrategyInterface } from \"../naming-strategy/NamingStrategyInterface\"\nimport { DatabaseType } from \"../driver/types/DatabaseType\"\nimport { Logger } from \"../logger/Logger\"\nimport { DataSource } from \"../data-source/DataSource\"\nimport { QueryResultCache } from \"../cache/QueryResultCache\"\nimport { MixedList } from \"../common/MixedList\"\n\n/**\n * BaseDataSourceOptions is set of DataSourceOptions shared by all database types.\n */\nexport interface BaseDataSourceOptions {\n /**\n * Database type. This value is required.\n */\n readonly type: DatabaseType\n\n /**\n * Connection name. If connection name is not given then it will be called \"default\".\n * Different connections must have different names.\n *\n * @deprecated\n */\n readonly name?: string\n\n /**\n * Entities to be loaded for this connection.\n * Accepts both entity classes and directories where from entities need to be loaded.\n * Directories support glob patterns.\n */\n readonly entities?: MixedList<Function | string | EntitySchema>\n\n /**\n * Subscribers to be loaded for this connection.\n * Accepts both subscriber classes and directories where from subscribers need to be loaded.\n * Directories support glob patterns.\n */\n readonly subscribers?: MixedList<Function | string>\n\n /**\n * Migrations to be loaded for this connection.\n * Accepts both migration classes and directories where from migrations need to be loaded.\n * Directories support glob patterns.\n */\n readonly migrations?: MixedList<Function | string>\n\n /**\n * Migrations table name, in case of different name from \"migrations\".\n * Accepts single string name.\n */\n readonly migrationsTableName?: string\n\n /**\n * Transaction mode for migrations to run in\n */\n readonly migrationsTransactionMode?: \"all\" | \"none\" | \"each\"\n\n /**\n * Typeorm metadata table name, in case of different name from \"typeorm_metadata\".\n * Accepts single string name.\n */\n readonly metadataTableName?: string\n\n /**\n * Naming strategy to be used to name tables and columns in the database.\n */\n readonly namingStrategy?: NamingStrategyInterface\n\n /**\n * Logging options.\n */\n readonly logging?: LoggerOptions\n\n /**\n * Logger instance used to log queries and events in the ORM.\n */\n readonly logger?:\n | \"advanced-console\"\n | \"simple-console\"\n | \"file\"\n | \"debug\"\n | Logger\n\n /**\n * Maximum number of milliseconds query should be executed before logger log a warning.\n */\n readonly maxQueryExecutionTime?: number\n\n /**\n * Indicates if database schema should be auto created on every application launch.\n * Be careful with this option and don't use this in production - otherwise you can lose production data.\n * This option is useful during debug and development.\n * Alternative to it, you can use CLI and run schema:sync command.\n *\n * Note that for MongoDB database it does not create schema, because MongoDB is schemaless.\n * Instead, it syncs just by creating indices.\n */\n readonly synchronize?: boolean\n\n /**\n * Indicates if migrations should be auto run on every application launch.\n * Alternative to it, you can use CLI and run migrations:run command.\n */\n readonly migrationsRun?: boolean\n\n /**\n * Drops the schema each time connection is being established.\n * Be careful with this option and don't use this in production - otherwise you'll lose all production data.\n * This option is useful during debug and development.\n */\n readonly dropSchema?: boolean\n\n /**\n * Prefix to use on all tables (collections) of this connection in the database.\n */\n readonly entityPrefix?: string\n\n /**\n * When creating new Entity instances, skip all constructors when true.\n */\n readonly entitySkipConstructor?: boolean\n\n /**\n * Extra connection options to be passed to the underlying driver.\n *\n * todo: deprecate this and move all database-specific types into hts own connection options object.\n */\n readonly extra?: any\n\n /**\n * Specifies how relations must be loaded - using \"joins\" or separate queries.\n * If you are loading too much data with nested joins it's better to load relations\n * using separate queries.\n *\n * Default strategy is \"join\", but this default can be changed here.\n * Also, strategy can be set per-query in FindOptions and QueryBuilder.\n */\n readonly relationLoadStrategy?: \"join\" | \"query\"\n\n /**\n * Optionally applied \"typename\" to the model.\n * If set, then each hydrated model will have this property with the target model / entity name inside.\n *\n * (works like a discriminator property).\n */\n readonly typename?: string\n\n /**\n * Holds reference to the baseDirectory where configuration file are expected.\n *\n * @internal\n */\n baseDirectory?: string\n\n /**\n * Allows to setup cache options.\n */\n readonly cache?:\n | boolean\n | {\n /**\n * Type of caching.\n *\n * - \"database\" means cached values will be stored in the separate table in database. This is default value.\n * - \"redis\" means cached values will be stored inside redis. You must provide redis connection options.\n */\n readonly type?:\n | \"database\"\n | \"redis\"\n | \"ioredis\"\n | \"ioredis/cluster\" // todo: add mongodb and other cache providers as well in the future\n\n /**\n * Factory function for custom cache providers that implement QueryResultCache.\n */\n readonly provider?: (connection: DataSource) => QueryResultCache\n\n /**\n * Configurable table name for \"database\" type cache.\n * Default value is \"query-result-cache\"\n */\n readonly tableName?: string\n\n /**\n * Used to provide redis connection options.\n */\n readonly options?: any\n\n /**\n * If set to true then queries (using find methods and QueryBuilder's methods) will always be cached.\n */\n readonly alwaysEnabled?: boolean\n\n /**\n * Time in milliseconds in which cache will expire.\n * This can be setup per-query.\n * Default value is 1000 which is equivalent to 1 second.\n */\n readonly duration?: number\n\n /**\n * Used to specify if cache errors should be ignored, and pass through the call to the Database.\n */\n readonly ignoreErrors?: boolean\n }\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../browser/src/data-source/BaseDataSourceOptions.ts"],"names":[],"mappings":"","file":"BaseDataSourceOptions.js","sourcesContent":["import { EntitySchema } from \"../entity-schema/EntitySchema\"\nimport { LoggerOptions } from \"../logger/LoggerOptions\"\nimport { NamingStrategyInterface } from \"../naming-strategy/NamingStrategyInterface\"\nimport { DatabaseType } from \"../driver/types/DatabaseType\"\nimport { Logger } from \"../logger/Logger\"\nimport { DataSource } from \"../data-source/DataSource\"\nimport { QueryResultCache } from \"../cache/QueryResultCache\"\nimport { MixedList } from \"../common/MixedList\"\n\n/**\n * BaseDataSourceOptions is set of DataSourceOptions shared by all database types.\n */\nexport interface BaseDataSourceOptions {\n /**\n * Database type. This value is required.\n */\n readonly type: DatabaseType\n\n /**\n * Connection name. If connection name is not given then it will be called \"default\".\n * Different connections must have different names.\n *\n * @deprecated\n */\n readonly name?: string\n\n /**\n * Entities to be loaded for this connection.\n * Accepts both entity classes and directories where from entities need to be loaded.\n * Directories support glob patterns.\n */\n readonly entities?: MixedList<Function | string | EntitySchema>\n\n /**\n * Subscribers to be loaded for this connection.\n * Accepts both subscriber classes and directories where from subscribers need to be loaded.\n * Directories support glob patterns.\n */\n readonly subscribers?: MixedList<Function | string>\n\n /**\n * Migrations to be loaded for this connection.\n * Accepts both migration classes and glob patterns representing migration files.\n */\n readonly migrations?: MixedList<Function | string>\n\n /**\n * Migrations table name, in case of different name from \"migrations\".\n * Accepts single string name.\n */\n readonly migrationsTableName?: string\n\n /**\n * Transaction mode for migrations to run in\n */\n readonly migrationsTransactionMode?: \"all\" | \"none\" | \"each\"\n\n /**\n * Typeorm metadata table name, in case of different name from \"typeorm_metadata\".\n * Accepts single string name.\n */\n readonly metadataTableName?: string\n\n /**\n * Naming strategy to be used to name tables and columns in the database.\n */\n readonly namingStrategy?: NamingStrategyInterface\n\n /**\n * Logging options.\n */\n readonly logging?: LoggerOptions\n\n /**\n * Logger instance used to log queries and events in the ORM.\n */\n readonly logger?:\n | \"advanced-console\"\n | \"simple-console\"\n | \"file\"\n | \"debug\"\n | Logger\n\n /**\n * Maximum number of milliseconds query should be executed before logger log a warning.\n */\n readonly maxQueryExecutionTime?: number\n\n /**\n * Indicates if database schema should be auto created on every application launch.\n * Be careful with this option and don't use this in production - otherwise you can lose production data.\n * This option is useful during debug and development.\n * Alternative to it, you can use CLI and run schema:sync command.\n *\n * Note that for MongoDB database it does not create schema, because MongoDB is schemaless.\n * Instead, it syncs just by creating indices.\n */\n readonly synchronize?: boolean\n\n /**\n * Indicates if migrations should be auto run on every application launch.\n * Alternative to it, you can use CLI and run migrations:run command.\n */\n readonly migrationsRun?: boolean\n\n /**\n * Drops the schema each time connection is being established.\n * Be careful with this option and don't use this in production - otherwise you'll lose all production data.\n * This option is useful during debug and development.\n */\n readonly dropSchema?: boolean\n\n /**\n * Prefix to use on all tables (collections) of this connection in the database.\n */\n readonly entityPrefix?: string\n\n /**\n * When creating new Entity instances, skip all constructors when true.\n */\n readonly entitySkipConstructor?: boolean\n\n /**\n * Extra connection options to be passed to the underlying driver.\n *\n * todo: deprecate this and move all database-specific types into hts own connection options object.\n */\n readonly extra?: any\n\n /**\n * Specifies how relations must be loaded - using \"joins\" or separate queries.\n * If you are loading too much data with nested joins it's better to load relations\n * using separate queries.\n *\n * Default strategy is \"join\", but this default can be changed here.\n * Also, strategy can be set per-query in FindOptions and QueryBuilder.\n */\n readonly relationLoadStrategy?: \"join\" | \"query\"\n\n /**\n * Optionally applied \"typename\" to the model.\n * If set, then each hydrated model will have this property with the target model / entity name inside.\n *\n * (works like a discriminator property).\n */\n readonly typename?: string\n\n /**\n * Holds reference to the baseDirectory where configuration file are expected.\n *\n * @internal\n */\n baseDirectory?: string\n\n /**\n * Allows to setup cache options.\n */\n readonly cache?:\n | boolean\n | {\n /**\n * Type of caching.\n *\n * - \"database\" means cached values will be stored in the separate table in database. This is default value.\n * - \"redis\" means cached values will be stored inside redis. You must provide redis connection options.\n */\n readonly type?:\n | \"database\"\n | \"redis\"\n | \"ioredis\"\n | \"ioredis/cluster\" // todo: add mongodb and other cache providers as well in the future\n\n /**\n * Factory function for custom cache providers that implement QueryResultCache.\n */\n readonly provider?: (connection: DataSource) => QueryResultCache\n\n /**\n * Configurable table name for \"database\" type cache.\n * Default value is \"query-result-cache\"\n */\n readonly tableName?: string\n\n /**\n * Used to provide redis connection options.\n */\n readonly options?: any\n\n /**\n * If set to true then queries (using find methods and QueryBuilder's methods) will always be cached.\n */\n readonly alwaysEnabled?: boolean\n\n /**\n * Time in milliseconds in which cache will expire.\n * This can be setup per-query.\n * Default value is 1000 which is equivalent to 1 second.\n */\n readonly duration?: number\n\n /**\n * Used to specify if cache errors should be ignored, and pass through the call to the Database.\n */\n readonly ignoreErrors?: boolean\n }\n}\n"],"sourceRoot":".."}
@@ -1,10 +1,7 @@
1
1
  import { DefaultNamingStrategy } from "../naming-strategy/DefaultNamingStrategy";
2
- import { CannotExecuteNotConnectedError } from "../error/CannotExecuteNotConnectedError";
3
- import { CannotConnectAlreadyConnectedError } from "../error/CannotConnectAlreadyConnectedError";
4
- import { EntityMetadataNotFoundError } from "../error/EntityMetadataNotFoundError";
2
+ import { CannotConnectAlreadyConnectedError, CannotExecuteNotConnectedError, EntityMetadataNotFoundError, QueryRunnerProviderAlreadyReleasedError, } from "../error";
5
3
  import { MigrationExecutor } from "../migration/MigrationExecutor";
6
4
  import { EntityMetadataValidator } from "../metadata-builder/EntityMetadataValidator";
7
- import { QueryRunnerProviderAlreadyReleasedError } from "../error/QueryRunnerProviderAlreadyReleasedError";
8
5
  import { EntityManagerFactory } from "../entity-manager/EntityManagerFactory";
9
6
  import { DriverFactory } from "../driver/DriverFactory";
10
7
  import { ConnectionMetadataBuilder } from "../connection/ConnectionMetadataBuilder";
@@ -13,7 +10,7 @@ import { LoggerFactory } from "../logger/LoggerFactory";
13
10
  import { QueryResultCacheFactory } from "../cache/QueryResultCacheFactory";
14
11
  import { RelationLoader } from "../query-builder/RelationLoader";
15
12
  import { ObjectUtils } from "../util/ObjectUtils";
16
- import { TypeORMError } from "../error/TypeORMError";
13
+ import { TypeORMError } from "../error";
17
14
  import { RelationIdLoader } from "../query-builder/RelationIdLoader";
18
15
  import { DriverUtils } from "../driver/DriverUtils";
19
16
  import { InstanceChecker } from "../util/InstanceChecker";