typeorm 0.3.12-dev.ef64bfc → 0.3.13-dev.0619aca

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 (296) hide show
  1. package/browser/cli-ts-node-commonjs.js +0 -0
  2. package/browser/cli-ts-node-esm.js +0 -0
  3. package/browser/common/DeepPartial.d.ts +1 -1
  4. package/browser/common/EntityTarget.d.ts +1 -1
  5. package/browser/common/MixedList.d.ts +1 -1
  6. package/browser/common/NonNever.d.ts +1 -1
  7. package/browser/common/ObjectType.d.ts +1 -1
  8. package/browser/common/PickKeysByType.d.ts +6 -0
  9. package/browser/common/PickKeysByType.js +3 -0
  10. package/browser/common/PickKeysByType.js.map +1 -0
  11. package/browser/common/RelationType.d.ts +1 -1
  12. package/browser/connection/BaseConnectionOptions.d.ts +1 -1
  13. package/browser/connection/ConnectionOptions.d.ts +1 -1
  14. package/browser/container.d.ts +1 -1
  15. package/browser/data-source/DataSourceOptions.d.ts +1 -1
  16. package/browser/decorator/columns/PrimaryColumn.d.ts +1 -1
  17. package/browser/driver/Driver.d.ts +1 -1
  18. package/browser/driver/better-sqlite3/BetterSqlite3ConnectionOptions.d.ts +6 -0
  19. package/browser/driver/better-sqlite3/BetterSqlite3ConnectionOptions.js.map +1 -1
  20. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js +3 -1
  21. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  22. package/browser/driver/mongodb/MongoDriver.d.ts +1 -1
  23. package/browser/driver/mongodb/MongoDriver.js.map +1 -1
  24. package/browser/driver/mongodb/typings.d.ts +6 -6
  25. package/browser/driver/oracle/OracleDriver.d.ts +1 -1
  26. package/browser/driver/oracle/OracleDriver.js.map +1 -1
  27. package/browser/driver/postgres/PostgresQueryRunner.js +1 -1
  28. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  29. package/browser/driver/react-native/ReactNativeDriver.d.ts +219 -6
  30. package/browser/driver/react-native/ReactNativeDriver.js +662 -10
  31. package/browser/driver/react-native/ReactNativeDriver.js.map +1 -1
  32. package/browser/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  33. package/browser/driver/sap/SapDriver.d.ts +1 -1
  34. package/browser/driver/sap/SapDriver.js.map +1 -1
  35. package/browser/driver/spanner/SpannerDriver.d.ts +1 -1
  36. package/browser/driver/spanner/SpannerDriver.js.map +1 -1
  37. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +1 -1
  38. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +12 -0
  39. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  40. package/browser/driver/sqlserver/SqlServerConnectionCredentialsOptions.d.ts +1 -1
  41. package/browser/driver/sqlserver/SqlServerDriver.d.ts +1 -1
  42. package/browser/driver/sqlserver/SqlServerDriver.js +7 -2
  43. package/browser/driver/sqlserver/SqlServerDriver.js.map +1 -1
  44. package/browser/driver/sqlserver/SqlServerQueryRunner.d.ts +2 -1
  45. package/browser/driver/sqlserver/SqlServerQueryRunner.js +31 -9
  46. package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  47. package/browser/driver/types/ColumnTypes.d.ts +7 -7
  48. package/browser/driver/types/DatabaseType.d.ts +1 -1
  49. package/browser/driver/types/GeoJsonTypes.d.ts +12 -12
  50. package/browser/driver/types/IsolationLevel.d.ts +1 -1
  51. package/browser/driver/types/ReplicationMode.d.ts +1 -1
  52. package/browser/driver/types/UpsertType.d.ts +1 -1
  53. package/browser/entity-manager/EntityManager.d.ts +18 -0
  54. package/browser/entity-manager/EntityManager.js +32 -0
  55. package/browser/entity-manager/EntityManager.js.map +1 -1
  56. package/browser/entity-manager/MongoEntityManager.js +4 -4
  57. package/browser/entity-manager/MongoEntityManager.js.map +1 -1
  58. package/browser/find-options/FindOperator.d.ts +1 -1
  59. package/browser/find-options/FindOperatorType.d.ts +1 -1
  60. package/browser/find-options/FindOperatorType.js.map +1 -1
  61. package/browser/find-options/FindOptionsOrder.d.ts +3 -3
  62. package/browser/find-options/FindOptionsOrder.js.map +1 -1
  63. package/browser/find-options/FindOptionsRelations.d.ts +3 -3
  64. package/browser/find-options/FindOptionsSelect.d.ts +3 -3
  65. package/browser/find-options/FindOptionsWhere.d.ts +6 -2
  66. package/browser/find-options/FindOptionsWhere.js.map +1 -1
  67. package/browser/find-options/OrderByCondition.d.ts +1 -1
  68. package/browser/find-options/mongodb/MongoFindOneOptions.d.ts +1 -1
  69. package/browser/find-options/operator/JsonContains.d.ts +6 -0
  70. package/browser/find-options/operator/JsonContains.js +10 -0
  71. package/browser/find-options/operator/JsonContains.js.map +1 -0
  72. package/browser/index.d.ts +3 -0
  73. package/browser/index.js +3 -0
  74. package/browser/index.js.map +1 -1
  75. package/browser/logger/AbstractLogger.d.ts +49 -0
  76. package/browser/logger/AbstractLogger.js +230 -0
  77. package/browser/logger/AbstractLogger.js.map +1 -0
  78. package/browser/logger/AdvancedConsoleLogger.d.ts +5 -33
  79. package/browser/logger/AdvancedConsoleLogger.js +41 -106
  80. package/browser/logger/AdvancedConsoleLogger.js.map +1 -1
  81. package/browser/logger/DebugLogger.d.ts +9 -29
  82. package/browser/logger/DebugLogger.js +56 -74
  83. package/browser/logger/DebugLogger.js.map +1 -1
  84. package/browser/logger/FileLogger.d.ts +6 -32
  85. package/browser/logger/FileLogger.js +50 -97
  86. package/browser/logger/FileLogger.js.map +1 -1
  87. package/browser/logger/Logger.d.ts +31 -0
  88. package/browser/logger/Logger.js.map +1 -1
  89. package/browser/logger/LoggerOptions.d.ts +3 -2
  90. package/browser/logger/LoggerOptions.js.map +1 -1
  91. package/browser/logger/SimpleConsoleLogger.d.ts +5 -33
  92. package/browser/logger/SimpleConsoleLogger.js +43 -106
  93. package/browser/logger/SimpleConsoleLogger.js.map +1 -1
  94. package/browser/metadata/types/DeferrableType.d.ts +1 -1
  95. package/browser/metadata/types/EventListenerTypes.d.ts +1 -1
  96. package/browser/metadata/types/OnDeleteType.d.ts +1 -1
  97. package/browser/metadata/types/OnUpdateType.d.ts +1 -1
  98. package/browser/metadata/types/PropertyTypeInFunction.d.ts +1 -1
  99. package/browser/metadata/types/RelationTypeInFunction.d.ts +1 -1
  100. package/browser/metadata/types/RelationTypes.d.ts +1 -1
  101. package/browser/metadata/types/TableTypes.d.ts +1 -1
  102. package/browser/metadata/types/TreeTypes.d.ts +1 -1
  103. package/browser/metadata-args/types/ColumnMode.d.ts +1 -1
  104. package/browser/metadata-builder/RelationJoinColumnBuilder.js +2 -1
  105. package/browser/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
  106. package/browser/migration/MigrationExecutor.js +1 -1
  107. package/browser/migration/MigrationExecutor.js.map +1 -1
  108. package/browser/naming-strategy/LegacyOracleNamingStrategy.d.ts +21 -0
  109. package/browser/naming-strategy/LegacyOracleNamingStrategy.js +46 -0
  110. package/browser/naming-strategy/LegacyOracleNamingStrategy.js.map +1 -0
  111. package/browser/persistence/SubjectExecutor.js +6 -6
  112. package/browser/persistence/SubjectExecutor.js.map +1 -1
  113. package/browser/persistence/SubjectTopoligicalSorter.js +2 -6
  114. package/browser/persistence/SubjectTopoligicalSorter.js.map +1 -1
  115. package/browser/platform/BrowserPlatformTools.js +2 -2
  116. package/browser/platform/BrowserPlatformTools.js.map +1 -1
  117. package/browser/platform/PlatformTools.d.ts +3 -1
  118. package/browser/platform/PlatformTools.js +11 -2
  119. package/browser/platform/PlatformTools.js.map +1 -1
  120. package/browser/query-builder/InsertOrUpdateOptions.d.ts +1 -1
  121. package/browser/query-builder/QueryBuilder.js +2 -0
  122. package/browser/query-builder/QueryBuilder.js.map +1 -1
  123. package/browser/query-builder/QueryPartialEntity.d.ts +3 -3
  124. package/browser/query-builder/SelectQueryBuilder.d.ts +1 -1
  125. package/browser/query-builder/SelectQueryBuilder.js +8 -4
  126. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  127. package/browser/query-builder/SelectQueryBuilderOption.d.ts +1 -1
  128. package/browser/query-builder/WhereClause.d.ts +3 -3
  129. package/browser/query-builder/WhereClause.js.map +1 -1
  130. package/browser/query-runner/BaseQueryRunner.d.ts +2 -1
  131. package/browser/query-runner/BaseQueryRunner.js +5 -2
  132. package/browser/query-runner/BaseQueryRunner.js.map +1 -1
  133. package/browser/repository/BaseEntity.d.ts +25 -0
  134. package/browser/repository/BaseEntity.js +24 -0
  135. package/browser/repository/BaseEntity.js.map +1 -1
  136. package/browser/repository/EntityId.d.ts +1 -1
  137. package/browser/repository/Repository.d.ts +17 -0
  138. package/browser/repository/Repository.js +32 -8
  139. package/browser/repository/Repository.js.map +1 -1
  140. package/browser/subscriber/Broadcaster.d.ts +6 -6
  141. package/browser/subscriber/Broadcaster.js +12 -12
  142. package/browser/subscriber/Broadcaster.js.map +1 -1
  143. package/browser/util/DateUtils.d.ts +12 -0
  144. package/browser/util/DateUtils.js +20 -16
  145. package/browser/util/DateUtils.js.map +1 -1
  146. package/browser/util/VersionUtils.d.ts +1 -1
  147. package/cli-ts-node-commonjs.js +0 -0
  148. package/cli-ts-node-esm.js +0 -0
  149. package/cli.js +0 -0
  150. package/commands/CommandUtils.d.ts +1 -1
  151. package/commands/MigrationCreateCommand.d.ts +1 -1
  152. package/commands/MigrationGenerateCommand.d.ts +1 -1
  153. package/common/DeepPartial.d.ts +1 -1
  154. package/common/EntityTarget.d.ts +1 -1
  155. package/common/MixedList.d.ts +1 -1
  156. package/common/NonNever.d.ts +1 -1
  157. package/common/ObjectType.d.ts +1 -1
  158. package/common/PickKeysByType.d.ts +6 -0
  159. package/common/PickKeysByType.js +4 -0
  160. package/common/PickKeysByType.js.map +1 -0
  161. package/common/RelationType.d.ts +1 -1
  162. package/connection/BaseConnectionOptions.d.ts +1 -1
  163. package/connection/ConnectionOptions.d.ts +1 -1
  164. package/container.d.ts +1 -1
  165. package/data-source/DataSourceOptions.d.ts +1 -1
  166. package/decorator/columns/PrimaryColumn.d.ts +1 -1
  167. package/driver/Driver.d.ts +1 -1
  168. package/driver/better-sqlite3/BetterSqlite3ConnectionOptions.d.ts +6 -0
  169. package/driver/better-sqlite3/BetterSqlite3ConnectionOptions.js.map +1 -1
  170. package/driver/better-sqlite3/BetterSqlite3Driver.js +3 -1
  171. package/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  172. package/driver/mongodb/MongoDriver.d.ts +1 -1
  173. package/driver/mongodb/MongoDriver.js.map +1 -1
  174. package/driver/mongodb/typings.d.ts +6 -6
  175. package/driver/oracle/OracleDriver.d.ts +1 -1
  176. package/driver/oracle/OracleDriver.js.map +1 -1
  177. package/driver/postgres/PostgresQueryRunner.js +1 -1
  178. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  179. package/driver/react-native/ReactNativeDriver.d.ts +219 -6
  180. package/driver/react-native/ReactNativeDriver.js +663 -11
  181. package/driver/react-native/ReactNativeDriver.js.map +1 -1
  182. package/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  183. package/driver/sap/SapDriver.d.ts +1 -1
  184. package/driver/sap/SapDriver.js.map +1 -1
  185. package/driver/spanner/SpannerDriver.d.ts +1 -1
  186. package/driver/spanner/SpannerDriver.js.map +1 -1
  187. package/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +1 -1
  188. package/driver/sqlite-abstract/AbstractSqliteDriver.js +12 -0
  189. package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  190. package/driver/sqlserver/SqlServerConnectionCredentialsOptions.d.ts +1 -1
  191. package/driver/sqlserver/SqlServerDriver.d.ts +1 -1
  192. package/driver/sqlserver/SqlServerDriver.js +7 -2
  193. package/driver/sqlserver/SqlServerDriver.js.map +1 -1
  194. package/driver/sqlserver/SqlServerQueryRunner.d.ts +2 -1
  195. package/driver/sqlserver/SqlServerQueryRunner.js +31 -9
  196. package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  197. package/driver/types/ColumnTypes.d.ts +7 -7
  198. package/driver/types/DatabaseType.d.ts +1 -1
  199. package/driver/types/GeoJsonTypes.d.ts +12 -12
  200. package/driver/types/IsolationLevel.d.ts +1 -1
  201. package/driver/types/ReplicationMode.d.ts +1 -1
  202. package/driver/types/UpsertType.d.ts +1 -1
  203. package/entity-manager/EntityManager.d.ts +18 -0
  204. package/entity-manager/EntityManager.js +32 -0
  205. package/entity-manager/EntityManager.js.map +1 -1
  206. package/entity-manager/MongoEntityManager.js +4 -4
  207. package/entity-manager/MongoEntityManager.js.map +1 -1
  208. package/find-options/FindOperator.d.ts +1 -1
  209. package/find-options/FindOperatorType.d.ts +1 -1
  210. package/find-options/FindOperatorType.js.map +1 -1
  211. package/find-options/FindOptionsOrder.d.ts +3 -3
  212. package/find-options/FindOptionsOrder.js.map +1 -1
  213. package/find-options/FindOptionsRelations.d.ts +3 -3
  214. package/find-options/FindOptionsSelect.d.ts +3 -3
  215. package/find-options/FindOptionsWhere.d.ts +6 -2
  216. package/find-options/FindOptionsWhere.js.map +1 -1
  217. package/find-options/OrderByCondition.d.ts +1 -1
  218. package/find-options/mongodb/MongoFindOneOptions.d.ts +1 -1
  219. package/find-options/operator/JsonContains.d.ts +6 -0
  220. package/find-options/operator/JsonContains.js +14 -0
  221. package/find-options/operator/JsonContains.js.map +1 -0
  222. package/index.d.ts +3 -0
  223. package/index.js +5 -1
  224. package/index.js.map +1 -1
  225. package/index.mjs +6 -0
  226. package/logger/AbstractLogger.d.ts +49 -0
  227. package/logger/AbstractLogger.js +234 -0
  228. package/logger/AbstractLogger.js.map +1 -0
  229. package/logger/AdvancedConsoleLogger.d.ts +5 -33
  230. package/logger/AdvancedConsoleLogger.js +41 -106
  231. package/logger/AdvancedConsoleLogger.js.map +1 -1
  232. package/logger/DebugLogger.d.ts +9 -29
  233. package/logger/DebugLogger.js +56 -75
  234. package/logger/DebugLogger.js.map +1 -1
  235. package/logger/FileLogger.d.ts +6 -32
  236. package/logger/FileLogger.js +50 -97
  237. package/logger/FileLogger.js.map +1 -1
  238. package/logger/Logger.d.ts +31 -0
  239. package/logger/Logger.js.map +1 -1
  240. package/logger/LoggerOptions.d.ts +3 -2
  241. package/logger/LoggerOptions.js.map +1 -1
  242. package/logger/SimpleConsoleLogger.d.ts +5 -33
  243. package/logger/SimpleConsoleLogger.js +43 -106
  244. package/logger/SimpleConsoleLogger.js.map +1 -1
  245. package/metadata/types/DeferrableType.d.ts +1 -1
  246. package/metadata/types/EventListenerTypes.d.ts +1 -1
  247. package/metadata/types/OnDeleteType.d.ts +1 -1
  248. package/metadata/types/OnUpdateType.d.ts +1 -1
  249. package/metadata/types/PropertyTypeInFunction.d.ts +1 -1
  250. package/metadata/types/RelationTypeInFunction.d.ts +1 -1
  251. package/metadata/types/RelationTypes.d.ts +1 -1
  252. package/metadata/types/TableTypes.d.ts +1 -1
  253. package/metadata/types/TreeTypes.d.ts +1 -1
  254. package/metadata-args/types/ColumnMode.d.ts +1 -1
  255. package/metadata-builder/RelationJoinColumnBuilder.js +2 -1
  256. package/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
  257. package/migration/MigrationExecutor.js +1 -1
  258. package/migration/MigrationExecutor.js.map +1 -1
  259. package/naming-strategy/LegacyOracleNamingStrategy.d.ts +21 -0
  260. package/naming-strategy/LegacyOracleNamingStrategy.js +50 -0
  261. package/naming-strategy/LegacyOracleNamingStrategy.js.map +1 -0
  262. package/package.json +1 -1
  263. package/persistence/SubjectExecutor.js +6 -6
  264. package/persistence/SubjectExecutor.js.map +1 -1
  265. package/persistence/SubjectTopoligicalSorter.js +2 -6
  266. package/persistence/SubjectTopoligicalSorter.js.map +1 -1
  267. package/platform/PlatformTools.d.ts +3 -1
  268. package/platform/PlatformTools.js +11 -2
  269. package/platform/PlatformTools.js.map +1 -1
  270. package/query-builder/InsertOrUpdateOptions.d.ts +1 -1
  271. package/query-builder/QueryBuilder.js +2 -0
  272. package/query-builder/QueryBuilder.js.map +1 -1
  273. package/query-builder/QueryPartialEntity.d.ts +3 -3
  274. package/query-builder/SelectQueryBuilder.d.ts +1 -1
  275. package/query-builder/SelectQueryBuilder.js +8 -4
  276. package/query-builder/SelectQueryBuilder.js.map +1 -1
  277. package/query-builder/SelectQueryBuilderOption.d.ts +1 -1
  278. package/query-builder/WhereClause.d.ts +3 -3
  279. package/query-builder/WhereClause.js.map +1 -1
  280. package/query-runner/BaseQueryRunner.d.ts +2 -1
  281. package/query-runner/BaseQueryRunner.js +5 -2
  282. package/query-runner/BaseQueryRunner.js.map +1 -1
  283. package/repository/BaseEntity.d.ts +25 -0
  284. package/repository/BaseEntity.js +24 -0
  285. package/repository/BaseEntity.js.map +1 -1
  286. package/repository/EntityId.d.ts +1 -1
  287. package/repository/Repository.d.ts +17 -0
  288. package/repository/Repository.js +32 -8
  289. package/repository/Repository.js.map +1 -1
  290. package/subscriber/Broadcaster.d.ts +6 -6
  291. package/subscriber/Broadcaster.js +12 -12
  292. package/subscriber/Broadcaster.js.map +1 -1
  293. package/util/DateUtils.d.ts +12 -0
  294. package/util/DateUtils.js +20 -16
  295. package/util/DateUtils.js.map +1 -1
  296. package/util/VersionUtils.d.ts +1 -1
@@ -1 +1 @@
1
- export declare type SelectQueryBuilderOption = "disable-global-order" | "create-pojo";
1
+ export type SelectQueryBuilderOption = "disable-global-order" | "create-pojo";
@@ -1,5 +1,5 @@
1
- declare type WrappingOperator = "not" | "brackets";
2
- declare type PredicateOperator = "lessThan" | "lessThanOrEqual" | "moreThan" | "moreThanOrEqual" | "equal" | "notEqual" | "ilike" | "like" | "between" | "in" | "any" | "isNull" | "arrayContains" | "arrayContainedBy" | "arrayOverlap" | "and";
1
+ type WrappingOperator = "not" | "brackets";
2
+ type PredicateOperator = "lessThan" | "lessThanOrEqual" | "moreThan" | "moreThanOrEqual" | "equal" | "notEqual" | "ilike" | "like" | "between" | "in" | "any" | "isNull" | "arrayContains" | "arrayContainedBy" | "arrayOverlap" | "and" | "jsonContains";
3
3
  export interface WherePredicateOperator {
4
4
  operator: PredicateOperator;
5
5
  parameters: string[];
@@ -12,5 +12,5 @@ export interface WhereClause {
12
12
  type: "simple" | "and" | "or";
13
13
  condition: WhereClauseCondition;
14
14
  }
15
- export declare type WhereClauseCondition = string | WherePredicateOperator | WhereWrappingOperator | WhereClause[];
15
+ export type WhereClauseCondition = string | WherePredicateOperator | WhereWrappingOperator | WhereClause[];
16
16
  export {};
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/query-builder/WhereClause.ts"],"names":[],"mappings":"","file":"WhereClause.js","sourcesContent":["type WrappingOperator = \"not\" | \"brackets\"\n\ntype PredicateOperator =\n | \"lessThan\"\n | \"lessThanOrEqual\"\n | \"moreThan\"\n | \"moreThanOrEqual\"\n | \"equal\"\n | \"notEqual\"\n | \"ilike\"\n | \"like\"\n | \"between\"\n | \"in\"\n | \"any\"\n | \"isNull\"\n | \"arrayContains\"\n | \"arrayContainedBy\"\n | \"arrayOverlap\"\n | \"and\"\n\nexport interface WherePredicateOperator {\n operator: PredicateOperator\n\n parameters: string[]\n}\n\nexport interface WhereWrappingOperator {\n operator: WrappingOperator\n\n condition: WhereClauseCondition\n}\n\nexport interface WhereClause {\n type: \"simple\" | \"and\" | \"or\"\n\n condition: WhereClauseCondition\n}\n\nexport type WhereClauseCondition =\n | string\n | WherePredicateOperator\n | WhereWrappingOperator\n | WhereClause[]\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../../src/query-builder/WhereClause.ts"],"names":[],"mappings":"","file":"WhereClause.js","sourcesContent":["type WrappingOperator = \"not\" | \"brackets\"\n\ntype PredicateOperator =\n | \"lessThan\"\n | \"lessThanOrEqual\"\n | \"moreThan\"\n | \"moreThanOrEqual\"\n | \"equal\"\n | \"notEqual\"\n | \"ilike\"\n | \"like\"\n | \"between\"\n | \"in\"\n | \"any\"\n | \"isNull\"\n | \"arrayContains\"\n | \"arrayContainedBy\"\n | \"arrayOverlap\"\n | \"and\"\n | \"jsonContains\"\n\nexport interface WherePredicateOperator {\n operator: PredicateOperator\n\n parameters: string[]\n}\n\nexport interface WhereWrappingOperator {\n operator: WrappingOperator\n\n condition: WhereClauseCondition\n}\n\nexport interface WhereClause {\n type: \"simple\" | \"and\" | \"or\"\n\n condition: WhereClauseCondition\n}\n\nexport type WhereClauseCondition =\n | string\n | WherePredicateOperator\n | WhereWrappingOperator\n | WhereClause[]\n"],"sourceRoot":".."}
@@ -179,7 +179,8 @@ export declare abstract class BaseQueryRunner {
179
179
  * Checks if at least one of column properties was changed.
180
180
  * Does not checks column type, length and autoincrement, because these properties changes separately.
181
181
  */
182
- protected isColumnChanged(oldColumn: TableColumn, newColumn: TableColumn, checkDefault?: boolean, checkComment?: boolean): boolean;
182
+ protected isColumnChanged(oldColumn: TableColumn, newColumn: TableColumn, checkDefault?: boolean, checkComment?: boolean, checkEnum?: boolean): boolean;
183
+ protected isEnumChanged(oldColumn: TableColumn, newColumn: TableColumn): boolean;
183
184
  /**
184
185
  * Checks if column length is by default.
185
186
  */
@@ -297,7 +297,7 @@ class BaseQueryRunner {
297
297
  * Checks if at least one of column properties was changed.
298
298
  * Does not checks column type, length and autoincrement, because these properties changes separately.
299
299
  */
300
- isColumnChanged(oldColumn, newColumn, checkDefault, checkComment) {
300
+ isColumnChanged(oldColumn, newColumn, checkDefault, checkComment, checkEnum = true) {
301
301
  // this logs need to debug issues in column change detection. Do not delete it!
302
302
  // console.log("charset ---------------");
303
303
  // console.log(oldColumn.charset !== newColumn.charset);
@@ -335,7 +335,10 @@ class BaseQueryRunner {
335
335
  oldColumn.onUpdate !== newColumn.onUpdate || // MySQL only
336
336
  oldColumn.isNullable !== newColumn.isNullable ||
337
337
  (checkComment && oldColumn.comment !== newColumn.comment) ||
338
- !OrmUtils_1.OrmUtils.isArraysEqual(oldColumn.enum || [], newColumn.enum || []));
338
+ (checkEnum && this.isEnumChanged(oldColumn, newColumn)));
339
+ }
340
+ isEnumChanged(oldColumn, newColumn) {
341
+ return !OrmUtils_1.OrmUtils.isArraysEqual(oldColumn.enum || [], newColumn.enum || []);
339
342
  }
340
343
  /**
341
344
  * Checks if column length is by default.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/query-runner/BaseQueryRunner.ts"],"names":[],"mappings":"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","file":"BaseQueryRunner.js","sourcesContent":["import { PostgresConnectionOptions } from \"../driver/postgres/PostgresConnectionOptions\"\nimport { Query } from \"../driver/Query\"\nimport { SqlInMemory } from \"../driver/SqlInMemory\"\nimport { SqlServerConnectionOptions } from \"../driver/sqlserver/SqlServerConnectionOptions\"\nimport { TableIndex } from \"../schema-builder/table/TableIndex\"\nimport { View } from \"../schema-builder/view/View\"\nimport { DataSource } from \"../data-source/DataSource\"\nimport { Table } from \"../schema-builder/table/Table\"\nimport { EntityManager } from \"../entity-manager/EntityManager\"\nimport { TableColumn } from \"../schema-builder/table/TableColumn\"\nimport { Broadcaster } from \"../subscriber/Broadcaster\"\nimport { ReplicationMode } from \"../driver/types/ReplicationMode\"\nimport { TypeORMError } from \"../error/TypeORMError\"\nimport { EntityMetadata } from \"../metadata/EntityMetadata\"\nimport { TableForeignKey } from \"../schema-builder/table/TableForeignKey\"\nimport { OrmUtils } from \"../util/OrmUtils\"\nimport { MetadataTableType } from \"../driver/types/MetadataTableType\"\nimport { InstanceChecker } from \"../util/InstanceChecker\"\n\nexport abstract class BaseQueryRunner {\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection used by this query runner.\n */\n connection: DataSource\n\n /**\n * Entity manager working only with current query runner.\n */\n manager: EntityManager\n\n /**\n * Indicates if connection for this query runner is released.\n * Once its released, query runner cannot run queries anymore.\n */\n isReleased = false\n\n /**\n * Indicates if transaction is in progress.\n */\n isTransactionActive = false\n\n /**\n * Stores temporarily user data.\n * Useful for sharing data with subscribers.\n */\n data = {}\n\n /**\n * All synchronized tables in the database.\n */\n loadedTables: Table[] = []\n\n /**\n * All synchronized views in the database.\n */\n loadedViews: View[] = []\n\n /**\n * Broadcaster used on this query runner to broadcast entity events.\n */\n broadcaster: Broadcaster\n\n // -------------------------------------------------------------------------\n // Protected Properties\n // -------------------------------------------------------------------------\n\n /**\n * Real database connection from a connection pool used to perform queries.\n */\n protected databaseConnection: any\n\n /**\n * Indicates if special query runner mode in which sql queries won't be executed is enabled.\n */\n protected sqlMemoryMode: boolean = false\n\n /**\n * Sql-s stored if \"sql in memory\" mode is enabled.\n */\n protected sqlInMemory: SqlInMemory = new SqlInMemory()\n\n /**\n * Mode in which query runner executes.\n * Used for replication.\n * If replication is not setup its value is ignored.\n */\n protected mode: ReplicationMode\n\n /**\n * current depth of transaction.\n * for transactionDepth > 0 will use SAVEPOINT to start and commit/rollback transaction blocks\n */\n protected transactionDepth = 0\n\n private cachedTablePaths: Record<string, string> = {}\n\n // -------------------------------------------------------------------------\n // Public Abstract Methods\n // -------------------------------------------------------------------------\n\n /**\n * Executes a given SQL query.\n */\n abstract query(\n query: string,\n parameters?: any[],\n useStructuredResult?: boolean,\n ): Promise<any>\n\n // -------------------------------------------------------------------------\n // Protected Abstract Methods\n // -------------------------------------------------------------------------\n\n protected abstract loadTables(tablePaths?: string[]): Promise<Table[]>\n\n protected abstract loadViews(tablePaths?: string[]): Promise<View[]>\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Called before migrations are run.\n */\n async beforeMigration(): Promise<void> {\n // Do nothing\n }\n\n /**\n * Called after migrations are run.\n */\n async afterMigration(): Promise<void> {\n // Do nothing\n }\n\n /**\n * Loads given table's data from the database.\n */\n async getTable(tablePath: string): Promise<Table | undefined> {\n this.loadedTables = await this.loadTables([tablePath])\n return this.loadedTables.length > 0 ? this.loadedTables[0] : undefined\n }\n\n /**\n * Loads all tables (with given names) from the database.\n */\n async getTables(tableNames?: string[]): Promise<Table[]> {\n if (!tableNames) {\n // Don't cache in this case.\n // This is the new case & isn't used anywhere else anyway.\n return await this.loadTables(tableNames)\n }\n\n this.loadedTables = await this.loadTables(tableNames)\n return this.loadedTables\n }\n\n /**\n * Loads given view's data from the database.\n */\n async getView(viewPath: string): Promise<View | undefined> {\n this.loadedViews = await this.loadViews([viewPath])\n return this.loadedViews.length > 0 ? this.loadedViews[0] : undefined\n }\n\n /**\n * Loads given view's data from the database.\n */\n async getViews(viewPaths?: string[]): Promise<View[]> {\n this.loadedViews = await this.loadViews(viewPaths)\n return this.loadedViews\n }\n\n /**\n * Enables special query runner mode in which sql queries won't be executed,\n * instead they will be memorized into a special variable inside query runner.\n * You can get memorized sql using getMemorySql() method.\n */\n enableSqlMemory(): void {\n this.sqlInMemory = new SqlInMemory()\n this.sqlMemoryMode = true\n }\n\n /**\n * Disables special query runner mode in which sql queries won't be executed\n * started by calling enableSqlMemory() method.\n *\n * Previously memorized sql will be flushed.\n */\n disableSqlMemory(): void {\n this.sqlInMemory = new SqlInMemory()\n this.sqlMemoryMode = false\n }\n\n /**\n * Flushes all memorized sqls.\n */\n clearSqlMemory(): void {\n this.sqlInMemory = new SqlInMemory()\n }\n\n /**\n * Gets sql stored in the memory. Parameters in the sql are already replaced.\n */\n getMemorySql(): SqlInMemory {\n return this.sqlInMemory\n }\n\n /**\n * Executes up sql queries.\n */\n async executeMemoryUpSql(): Promise<void> {\n for (const { query, parameters } of this.sqlInMemory.upQueries) {\n await this.query(query, parameters)\n }\n }\n\n /**\n * Executes down sql queries.\n */\n async executeMemoryDownSql(): Promise<void> {\n for (const {\n query,\n parameters,\n } of this.sqlInMemory.downQueries.reverse()) {\n await this.query(query, parameters)\n }\n }\n\n getReplicationMode(): ReplicationMode {\n return this.mode\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Gets view from previously loaded views, otherwise loads it from database.\n */\n protected async getCachedView(viewName: string): Promise<View> {\n const view = this.loadedViews.find((view) => view.name === viewName)\n if (view) return view\n\n const foundViews = await this.loadViews([viewName])\n if (foundViews.length > 0) {\n this.loadedViews.push(foundViews[0])\n return foundViews[0]\n } else {\n throw new TypeORMError(`View \"${viewName}\" does not exist.`)\n }\n }\n\n /**\n * Gets table from previously loaded tables, otherwise loads it from database.\n */\n protected async getCachedTable(tableName: string): Promise<Table> {\n if (tableName in this.cachedTablePaths) {\n const tablePath = this.cachedTablePaths[tableName]\n const table = this.loadedTables.find(\n (table) => this.getTablePath(table) === tablePath,\n )\n\n if (table) {\n return table\n }\n }\n\n const foundTables = await this.loadTables([tableName])\n\n if (foundTables.length > 0) {\n const foundTablePath = this.getTablePath(foundTables[0])\n\n const cachedTable = this.loadedTables.find(\n (table) => this.getTablePath(table) === foundTablePath,\n )\n\n if (!cachedTable) {\n this.cachedTablePaths[tableName] = this.getTablePath(\n foundTables[0],\n )\n this.loadedTables.push(foundTables[0])\n return foundTables[0]\n } else {\n return cachedTable\n }\n } else {\n throw new TypeORMError(`Table \"${tableName}\" does not exist.`)\n }\n }\n\n /**\n * Replaces loaded table with given changed table.\n */\n protected replaceCachedTable(table: Table, changedTable: Table): void {\n const oldTablePath = this.getTablePath(table)\n const foundTable = this.loadedTables.find(\n (loadedTable) => this.getTablePath(loadedTable) === oldTablePath,\n )\n\n // Clean up the lookup cache..\n for (const [key, cachedPath] of Object.entries(this.cachedTablePaths)) {\n if (cachedPath === oldTablePath) {\n this.cachedTablePaths[key] = this.getTablePath(changedTable)\n }\n }\n\n if (foundTable) {\n foundTable.database = changedTable.database\n foundTable.schema = changedTable.schema\n foundTable.name = changedTable.name\n foundTable.columns = changedTable.columns\n foundTable.indices = changedTable.indices\n foundTable.foreignKeys = changedTable.foreignKeys\n foundTable.uniques = changedTable.uniques\n foundTable.checks = changedTable.checks\n foundTable.justCreated = changedTable.justCreated\n foundTable.engine = changedTable.engine\n }\n }\n\n protected getTablePath(\n target: EntityMetadata | Table | View | TableForeignKey | string,\n ): string {\n const parsed = this.connection.driver.parseTableName(target)\n\n return this.connection.driver.buildTableName(\n parsed.tableName,\n parsed.schema,\n parsed.database,\n )\n }\n\n protected getTypeormMetadataTableName(): string {\n const options = <\n SqlServerConnectionOptions | PostgresConnectionOptions\n >this.connection.driver.options\n return this.connection.driver.buildTableName(\n this.connection.metadataTableName,\n options.schema,\n options.database,\n )\n }\n\n /**\n * Generates SQL query to select record from typeorm metadata table.\n */\n protected selectTypeormMetadataSql({\n database,\n schema,\n table,\n type,\n name,\n }: {\n database?: string\n schema?: string\n table?: string\n type: MetadataTableType\n name: string\n }): Query {\n const qb = this.connection.createQueryBuilder()\n const selectQb = qb\n .select()\n .from(this.getTypeormMetadataTableName(), \"t\")\n .where(`${qb.escape(\"type\")} = :type`, { type })\n .andWhere(`${qb.escape(\"name\")} = :name`, { name })\n\n if (database) {\n selectQb.andWhere(`${qb.escape(\"database\")} = :database`, {\n database,\n })\n }\n\n if (schema) {\n selectQb.andWhere(`${qb.escape(\"schema\")} = :schema`, { schema })\n }\n\n if (table) {\n selectQb.andWhere(`${qb.escape(\"table\")} = :table`, { table })\n }\n\n const [query, parameters] = selectQb.getQueryAndParameters()\n return new Query(query, parameters)\n }\n\n /**\n * Generates SQL query to insert a record into typeorm metadata table.\n */\n protected insertTypeormMetadataSql({\n database,\n schema,\n table,\n type,\n name,\n value,\n }: {\n database?: string\n schema?: string\n table?: string\n type: MetadataTableType\n name: string\n value?: string\n }): Query {\n const [query, parameters] = this.connection\n .createQueryBuilder()\n .insert()\n .into(this.getTypeormMetadataTableName())\n .values({\n database: database,\n schema: schema,\n table: table,\n type: type,\n name: name,\n value: value,\n })\n .getQueryAndParameters()\n\n return new Query(query, parameters)\n }\n\n /**\n * Generates SQL query to delete a record from typeorm metadata table.\n */\n protected deleteTypeormMetadataSql({\n database,\n schema,\n table,\n type,\n name,\n }: {\n database?: string\n schema?: string\n table?: string\n type: MetadataTableType\n name: string\n }): Query {\n const qb = this.connection.createQueryBuilder()\n const deleteQb = qb\n .delete()\n .from(this.getTypeormMetadataTableName())\n .where(`${qb.escape(\"type\")} = :type`, { type })\n .andWhere(`${qb.escape(\"name\")} = :name`, { name })\n\n if (database) {\n deleteQb.andWhere(`${qb.escape(\"database\")} = :database`, {\n database,\n })\n }\n\n if (schema) {\n deleteQb.andWhere(`${qb.escape(\"schema\")} = :schema`, { schema })\n }\n\n if (table) {\n deleteQb.andWhere(`${qb.escape(\"table\")} = :table`, { table })\n }\n\n const [query, parameters] = deleteQb.getQueryAndParameters()\n return new Query(query, parameters)\n }\n\n /**\n * Checks if at least one of column properties was changed.\n * Does not checks column type, length and autoincrement, because these properties changes separately.\n */\n protected isColumnChanged(\n oldColumn: TableColumn,\n newColumn: TableColumn,\n checkDefault?: boolean,\n checkComment?: boolean,\n ): boolean {\n // this logs need to debug issues in column change detection. Do not delete it!\n\n // console.log(\"charset ---------------\");\n // console.log(oldColumn.charset !== newColumn.charset);\n // console.log(oldColumn.charset, newColumn.charset);\n // console.log(\"collation ---------------\");\n // console.log(oldColumn.collation !== newColumn.collation);\n // console.log(oldColumn.collation, newColumn.collation);\n // console.log(\"precision ---------------\");\n // console.log(oldColumn.precision !== newColumn.precision);\n // console.log(oldColumn.precision, newColumn.precision);\n // console.log(\"scale ---------------\");\n // console.log(oldColumn.scale !== newColumn.scale);\n // console.log(oldColumn.scale, newColumn.scale);\n // console.log(\"default ---------------\");\n // console.log((checkDefault && oldColumn.default !== newColumn.default));\n // console.log(oldColumn.default, newColumn.default);\n // console.log(\"isNullable ---------------\");\n // console.log(oldColumn.isNullable !== newColumn.isNullable);\n // console.log(oldColumn.isNullable, newColumn.isNullable);\n // console.log(\"comment ---------------\");\n // console.log((checkComment && oldColumn.comment !== newColumn.comment));\n // console.log(oldColumn.comment, newColumn.comment);\n // console.log(\"enum ---------------\");\n // console.log(!OrmUtils.isArraysEqual(oldColumn.enum || [], newColumn.enum || []));\n // console.log(oldColumn.enum, newColumn.enum);\n\n return (\n oldColumn.charset !== newColumn.charset ||\n oldColumn.collation !== newColumn.collation ||\n oldColumn.precision !== newColumn.precision ||\n oldColumn.scale !== newColumn.scale ||\n oldColumn.width !== newColumn.width || // MySQL only\n oldColumn.zerofill !== newColumn.zerofill || // MySQL only\n oldColumn.unsigned !== newColumn.unsigned || // MySQL only\n oldColumn.asExpression !== newColumn.asExpression ||\n (checkDefault && oldColumn.default !== newColumn.default) ||\n oldColumn.onUpdate !== newColumn.onUpdate || // MySQL only\n oldColumn.isNullable !== newColumn.isNullable ||\n (checkComment && oldColumn.comment !== newColumn.comment) ||\n !OrmUtils.isArraysEqual(oldColumn.enum || [], newColumn.enum || [])\n )\n }\n\n /**\n * Checks if column length is by default.\n */\n protected isDefaultColumnLength(\n table: Table,\n column: TableColumn,\n length: string,\n ): boolean {\n // if table have metadata, we check if length is specified in column metadata\n if (this.connection.hasMetadata(table.name)) {\n const metadata = this.connection.getMetadata(table.name)\n const columnMetadata = metadata.findColumnWithDatabaseName(\n column.name,\n )\n\n if (columnMetadata) {\n const columnMetadataLength =\n this.connection.driver.getColumnLength(columnMetadata)\n if (columnMetadataLength) return false\n }\n }\n\n if (\n this.connection.driver.dataTypeDefaults &&\n this.connection.driver.dataTypeDefaults[column.type] &&\n this.connection.driver.dataTypeDefaults[column.type].length\n ) {\n return (\n this.connection.driver.dataTypeDefaults[\n column.type\n ].length!.toString() === length.toString()\n )\n }\n\n return false\n }\n\n /**\n * Checks if column precision is by default.\n */\n protected isDefaultColumnPrecision(\n table: Table,\n column: TableColumn,\n precision: number,\n ): boolean {\n // if table have metadata, we check if length is specified in column metadata\n if (this.connection.hasMetadata(table.name)) {\n const metadata = this.connection.getMetadata(table.name)\n const columnMetadata = metadata.findColumnWithDatabaseName(\n column.name,\n )\n if (\n columnMetadata &&\n columnMetadata.precision !== null &&\n columnMetadata.precision !== undefined\n )\n return false\n }\n\n if (\n this.connection.driver.dataTypeDefaults &&\n this.connection.driver.dataTypeDefaults[column.type] &&\n this.connection.driver.dataTypeDefaults[column.type].precision !==\n null &&\n this.connection.driver.dataTypeDefaults[column.type].precision !==\n undefined\n )\n return (\n this.connection.driver.dataTypeDefaults[column.type]\n .precision === precision\n )\n\n return false\n }\n\n /**\n * Checks if column scale is by default.\n */\n protected isDefaultColumnScale(\n table: Table,\n column: TableColumn,\n scale: number,\n ): boolean {\n // if table have metadata, we check if length is specified in column metadata\n if (this.connection.hasMetadata(table.name)) {\n const metadata = this.connection.getMetadata(table.name)\n const columnMetadata = metadata.findColumnWithDatabaseName(\n column.name,\n )\n if (\n columnMetadata &&\n columnMetadata.scale !== null &&\n columnMetadata.scale !== undefined\n )\n return false\n }\n\n if (\n this.connection.driver.dataTypeDefaults &&\n this.connection.driver.dataTypeDefaults[column.type] &&\n this.connection.driver.dataTypeDefaults[column.type].scale !==\n null &&\n this.connection.driver.dataTypeDefaults[column.type].scale !==\n undefined\n )\n return (\n this.connection.driver.dataTypeDefaults[column.type].scale ===\n scale\n )\n\n return false\n }\n\n /**\n * Executes sql used special for schema build.\n */\n protected async executeQueries(\n upQueries: Query | Query[],\n downQueries: Query | Query[],\n ): Promise<void> {\n if (InstanceChecker.isQuery(upQueries)) upQueries = [upQueries]\n if (InstanceChecker.isQuery(downQueries)) downQueries = [downQueries]\n\n this.sqlInMemory.upQueries.push(...upQueries)\n this.sqlInMemory.downQueries.push(...downQueries)\n\n // if sql-in-memory mode is enabled then simply store sql in memory and return\n if (this.sqlMemoryMode === true)\n return Promise.resolve() as Promise<any>\n\n for (const { query, parameters } of upQueries) {\n await this.query(query, parameters)\n }\n }\n\n /**\n * Generated an index name for a table and index\n */\n protected generateIndexName(\n table: Table | View,\n index: TableIndex,\n ): string {\n // new index may be passed without name. In this case we generate index name manually.\n return this.connection.namingStrategy.indexName(\n table,\n index.columnNames,\n index.where,\n )\n }\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../../src/query-runner/BaseQueryRunner.ts"],"names":[],"mappings":"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","file":"BaseQueryRunner.js","sourcesContent":["import { PostgresConnectionOptions } from \"../driver/postgres/PostgresConnectionOptions\"\nimport { Query } from \"../driver/Query\"\nimport { SqlInMemory } from \"../driver/SqlInMemory\"\nimport { SqlServerConnectionOptions } from \"../driver/sqlserver/SqlServerConnectionOptions\"\nimport { TableIndex } from \"../schema-builder/table/TableIndex\"\nimport { View } from \"../schema-builder/view/View\"\nimport { DataSource } from \"../data-source/DataSource\"\nimport { Table } from \"../schema-builder/table/Table\"\nimport { EntityManager } from \"../entity-manager/EntityManager\"\nimport { TableColumn } from \"../schema-builder/table/TableColumn\"\nimport { Broadcaster } from \"../subscriber/Broadcaster\"\nimport { ReplicationMode } from \"../driver/types/ReplicationMode\"\nimport { TypeORMError } from \"../error/TypeORMError\"\nimport { EntityMetadata } from \"../metadata/EntityMetadata\"\nimport { TableForeignKey } from \"../schema-builder/table/TableForeignKey\"\nimport { OrmUtils } from \"../util/OrmUtils\"\nimport { MetadataTableType } from \"../driver/types/MetadataTableType\"\nimport { InstanceChecker } from \"../util/InstanceChecker\"\n\nexport abstract class BaseQueryRunner {\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection used by this query runner.\n */\n connection: DataSource\n\n /**\n * Entity manager working only with current query runner.\n */\n manager: EntityManager\n\n /**\n * Indicates if connection for this query runner is released.\n * Once its released, query runner cannot run queries anymore.\n */\n isReleased = false\n\n /**\n * Indicates if transaction is in progress.\n */\n isTransactionActive = false\n\n /**\n * Stores temporarily user data.\n * Useful for sharing data with subscribers.\n */\n data = {}\n\n /**\n * All synchronized tables in the database.\n */\n loadedTables: Table[] = []\n\n /**\n * All synchronized views in the database.\n */\n loadedViews: View[] = []\n\n /**\n * Broadcaster used on this query runner to broadcast entity events.\n */\n broadcaster: Broadcaster\n\n // -------------------------------------------------------------------------\n // Protected Properties\n // -------------------------------------------------------------------------\n\n /**\n * Real database connection from a connection pool used to perform queries.\n */\n protected databaseConnection: any\n\n /**\n * Indicates if special query runner mode in which sql queries won't be executed is enabled.\n */\n protected sqlMemoryMode: boolean = false\n\n /**\n * Sql-s stored if \"sql in memory\" mode is enabled.\n */\n protected sqlInMemory: SqlInMemory = new SqlInMemory()\n\n /**\n * Mode in which query runner executes.\n * Used for replication.\n * If replication is not setup its value is ignored.\n */\n protected mode: ReplicationMode\n\n /**\n * current depth of transaction.\n * for transactionDepth > 0 will use SAVEPOINT to start and commit/rollback transaction blocks\n */\n protected transactionDepth = 0\n\n private cachedTablePaths: Record<string, string> = {}\n\n // -------------------------------------------------------------------------\n // Public Abstract Methods\n // -------------------------------------------------------------------------\n\n /**\n * Executes a given SQL query.\n */\n abstract query(\n query: string,\n parameters?: any[],\n useStructuredResult?: boolean,\n ): Promise<any>\n\n // -------------------------------------------------------------------------\n // Protected Abstract Methods\n // -------------------------------------------------------------------------\n\n protected abstract loadTables(tablePaths?: string[]): Promise<Table[]>\n\n protected abstract loadViews(tablePaths?: string[]): Promise<View[]>\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Called before migrations are run.\n */\n async beforeMigration(): Promise<void> {\n // Do nothing\n }\n\n /**\n * Called after migrations are run.\n */\n async afterMigration(): Promise<void> {\n // Do nothing\n }\n\n /**\n * Loads given table's data from the database.\n */\n async getTable(tablePath: string): Promise<Table | undefined> {\n this.loadedTables = await this.loadTables([tablePath])\n return this.loadedTables.length > 0 ? this.loadedTables[0] : undefined\n }\n\n /**\n * Loads all tables (with given names) from the database.\n */\n async getTables(tableNames?: string[]): Promise<Table[]> {\n if (!tableNames) {\n // Don't cache in this case.\n // This is the new case & isn't used anywhere else anyway.\n return await this.loadTables(tableNames)\n }\n\n this.loadedTables = await this.loadTables(tableNames)\n return this.loadedTables\n }\n\n /**\n * Loads given view's data from the database.\n */\n async getView(viewPath: string): Promise<View | undefined> {\n this.loadedViews = await this.loadViews([viewPath])\n return this.loadedViews.length > 0 ? this.loadedViews[0] : undefined\n }\n\n /**\n * Loads given view's data from the database.\n */\n async getViews(viewPaths?: string[]): Promise<View[]> {\n this.loadedViews = await this.loadViews(viewPaths)\n return this.loadedViews\n }\n\n /**\n * Enables special query runner mode in which sql queries won't be executed,\n * instead they will be memorized into a special variable inside query runner.\n * You can get memorized sql using getMemorySql() method.\n */\n enableSqlMemory(): void {\n this.sqlInMemory = new SqlInMemory()\n this.sqlMemoryMode = true\n }\n\n /**\n * Disables special query runner mode in which sql queries won't be executed\n * started by calling enableSqlMemory() method.\n *\n * Previously memorized sql will be flushed.\n */\n disableSqlMemory(): void {\n this.sqlInMemory = new SqlInMemory()\n this.sqlMemoryMode = false\n }\n\n /**\n * Flushes all memorized sqls.\n */\n clearSqlMemory(): void {\n this.sqlInMemory = new SqlInMemory()\n }\n\n /**\n * Gets sql stored in the memory. Parameters in the sql are already replaced.\n */\n getMemorySql(): SqlInMemory {\n return this.sqlInMemory\n }\n\n /**\n * Executes up sql queries.\n */\n async executeMemoryUpSql(): Promise<void> {\n for (const { query, parameters } of this.sqlInMemory.upQueries) {\n await this.query(query, parameters)\n }\n }\n\n /**\n * Executes down sql queries.\n */\n async executeMemoryDownSql(): Promise<void> {\n for (const {\n query,\n parameters,\n } of this.sqlInMemory.downQueries.reverse()) {\n await this.query(query, parameters)\n }\n }\n\n getReplicationMode(): ReplicationMode {\n return this.mode\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Gets view from previously loaded views, otherwise loads it from database.\n */\n protected async getCachedView(viewName: string): Promise<View> {\n const view = this.loadedViews.find((view) => view.name === viewName)\n if (view) return view\n\n const foundViews = await this.loadViews([viewName])\n if (foundViews.length > 0) {\n this.loadedViews.push(foundViews[0])\n return foundViews[0]\n } else {\n throw new TypeORMError(`View \"${viewName}\" does not exist.`)\n }\n }\n\n /**\n * Gets table from previously loaded tables, otherwise loads it from database.\n */\n protected async getCachedTable(tableName: string): Promise<Table> {\n if (tableName in this.cachedTablePaths) {\n const tablePath = this.cachedTablePaths[tableName]\n const table = this.loadedTables.find(\n (table) => this.getTablePath(table) === tablePath,\n )\n\n if (table) {\n return table\n }\n }\n\n const foundTables = await this.loadTables([tableName])\n\n if (foundTables.length > 0) {\n const foundTablePath = this.getTablePath(foundTables[0])\n\n const cachedTable = this.loadedTables.find(\n (table) => this.getTablePath(table) === foundTablePath,\n )\n\n if (!cachedTable) {\n this.cachedTablePaths[tableName] = this.getTablePath(\n foundTables[0],\n )\n this.loadedTables.push(foundTables[0])\n return foundTables[0]\n } else {\n return cachedTable\n }\n } else {\n throw new TypeORMError(`Table \"${tableName}\" does not exist.`)\n }\n }\n\n /**\n * Replaces loaded table with given changed table.\n */\n protected replaceCachedTable(table: Table, changedTable: Table): void {\n const oldTablePath = this.getTablePath(table)\n const foundTable = this.loadedTables.find(\n (loadedTable) => this.getTablePath(loadedTable) === oldTablePath,\n )\n\n // Clean up the lookup cache..\n for (const [key, cachedPath] of Object.entries(this.cachedTablePaths)) {\n if (cachedPath === oldTablePath) {\n this.cachedTablePaths[key] = this.getTablePath(changedTable)\n }\n }\n\n if (foundTable) {\n foundTable.database = changedTable.database\n foundTable.schema = changedTable.schema\n foundTable.name = changedTable.name\n foundTable.columns = changedTable.columns\n foundTable.indices = changedTable.indices\n foundTable.foreignKeys = changedTable.foreignKeys\n foundTable.uniques = changedTable.uniques\n foundTable.checks = changedTable.checks\n foundTable.justCreated = changedTable.justCreated\n foundTable.engine = changedTable.engine\n }\n }\n\n protected getTablePath(\n target: EntityMetadata | Table | View | TableForeignKey | string,\n ): string {\n const parsed = this.connection.driver.parseTableName(target)\n\n return this.connection.driver.buildTableName(\n parsed.tableName,\n parsed.schema,\n parsed.database,\n )\n }\n\n protected getTypeormMetadataTableName(): string {\n const options = <\n SqlServerConnectionOptions | PostgresConnectionOptions\n >this.connection.driver.options\n return this.connection.driver.buildTableName(\n this.connection.metadataTableName,\n options.schema,\n options.database,\n )\n }\n\n /**\n * Generates SQL query to select record from typeorm metadata table.\n */\n protected selectTypeormMetadataSql({\n database,\n schema,\n table,\n type,\n name,\n }: {\n database?: string\n schema?: string\n table?: string\n type: MetadataTableType\n name: string\n }): Query {\n const qb = this.connection.createQueryBuilder()\n const selectQb = qb\n .select()\n .from(this.getTypeormMetadataTableName(), \"t\")\n .where(`${qb.escape(\"type\")} = :type`, { type })\n .andWhere(`${qb.escape(\"name\")} = :name`, { name })\n\n if (database) {\n selectQb.andWhere(`${qb.escape(\"database\")} = :database`, {\n database,\n })\n }\n\n if (schema) {\n selectQb.andWhere(`${qb.escape(\"schema\")} = :schema`, { schema })\n }\n\n if (table) {\n selectQb.andWhere(`${qb.escape(\"table\")} = :table`, { table })\n }\n\n const [query, parameters] = selectQb.getQueryAndParameters()\n return new Query(query, parameters)\n }\n\n /**\n * Generates SQL query to insert a record into typeorm metadata table.\n */\n protected insertTypeormMetadataSql({\n database,\n schema,\n table,\n type,\n name,\n value,\n }: {\n database?: string\n schema?: string\n table?: string\n type: MetadataTableType\n name: string\n value?: string\n }): Query {\n const [query, parameters] = this.connection\n .createQueryBuilder()\n .insert()\n .into(this.getTypeormMetadataTableName())\n .values({\n database: database,\n schema: schema,\n table: table,\n type: type,\n name: name,\n value: value,\n })\n .getQueryAndParameters()\n\n return new Query(query, parameters)\n }\n\n /**\n * Generates SQL query to delete a record from typeorm metadata table.\n */\n protected deleteTypeormMetadataSql({\n database,\n schema,\n table,\n type,\n name,\n }: {\n database?: string\n schema?: string\n table?: string\n type: MetadataTableType\n name: string\n }): Query {\n const qb = this.connection.createQueryBuilder()\n const deleteQb = qb\n .delete()\n .from(this.getTypeormMetadataTableName())\n .where(`${qb.escape(\"type\")} = :type`, { type })\n .andWhere(`${qb.escape(\"name\")} = :name`, { name })\n\n if (database) {\n deleteQb.andWhere(`${qb.escape(\"database\")} = :database`, {\n database,\n })\n }\n\n if (schema) {\n deleteQb.andWhere(`${qb.escape(\"schema\")} = :schema`, { schema })\n }\n\n if (table) {\n deleteQb.andWhere(`${qb.escape(\"table\")} = :table`, { table })\n }\n\n const [query, parameters] = deleteQb.getQueryAndParameters()\n return new Query(query, parameters)\n }\n\n /**\n * Checks if at least one of column properties was changed.\n * Does not checks column type, length and autoincrement, because these properties changes separately.\n */\n protected isColumnChanged(\n oldColumn: TableColumn,\n newColumn: TableColumn,\n checkDefault?: boolean,\n checkComment?: boolean,\n checkEnum = true,\n ): boolean {\n // this logs need to debug issues in column change detection. Do not delete it!\n\n // console.log(\"charset ---------------\");\n // console.log(oldColumn.charset !== newColumn.charset);\n // console.log(oldColumn.charset, newColumn.charset);\n // console.log(\"collation ---------------\");\n // console.log(oldColumn.collation !== newColumn.collation);\n // console.log(oldColumn.collation, newColumn.collation);\n // console.log(\"precision ---------------\");\n // console.log(oldColumn.precision !== newColumn.precision);\n // console.log(oldColumn.precision, newColumn.precision);\n // console.log(\"scale ---------------\");\n // console.log(oldColumn.scale !== newColumn.scale);\n // console.log(oldColumn.scale, newColumn.scale);\n // console.log(\"default ---------------\");\n // console.log((checkDefault && oldColumn.default !== newColumn.default));\n // console.log(oldColumn.default, newColumn.default);\n // console.log(\"isNullable ---------------\");\n // console.log(oldColumn.isNullable !== newColumn.isNullable);\n // console.log(oldColumn.isNullable, newColumn.isNullable);\n // console.log(\"comment ---------------\");\n // console.log((checkComment && oldColumn.comment !== newColumn.comment));\n // console.log(oldColumn.comment, newColumn.comment);\n // console.log(\"enum ---------------\");\n // console.log(!OrmUtils.isArraysEqual(oldColumn.enum || [], newColumn.enum || []));\n // console.log(oldColumn.enum, newColumn.enum);\n\n return (\n oldColumn.charset !== newColumn.charset ||\n oldColumn.collation !== newColumn.collation ||\n oldColumn.precision !== newColumn.precision ||\n oldColumn.scale !== newColumn.scale ||\n oldColumn.width !== newColumn.width || // MySQL only\n oldColumn.zerofill !== newColumn.zerofill || // MySQL only\n oldColumn.unsigned !== newColumn.unsigned || // MySQL only\n oldColumn.asExpression !== newColumn.asExpression ||\n (checkDefault && oldColumn.default !== newColumn.default) ||\n oldColumn.onUpdate !== newColumn.onUpdate || // MySQL only\n oldColumn.isNullable !== newColumn.isNullable ||\n (checkComment && oldColumn.comment !== newColumn.comment) ||\n (checkEnum && this.isEnumChanged(oldColumn, newColumn))\n )\n }\n\n protected isEnumChanged(oldColumn: TableColumn, newColumn: TableColumn) {\n return !OrmUtils.isArraysEqual(\n oldColumn.enum || [],\n newColumn.enum || [],\n )\n }\n\n /**\n * Checks if column length is by default.\n */\n protected isDefaultColumnLength(\n table: Table,\n column: TableColumn,\n length: string,\n ): boolean {\n // if table have metadata, we check if length is specified in column metadata\n if (this.connection.hasMetadata(table.name)) {\n const metadata = this.connection.getMetadata(table.name)\n const columnMetadata = metadata.findColumnWithDatabaseName(\n column.name,\n )\n\n if (columnMetadata) {\n const columnMetadataLength =\n this.connection.driver.getColumnLength(columnMetadata)\n if (columnMetadataLength) return false\n }\n }\n\n if (\n this.connection.driver.dataTypeDefaults &&\n this.connection.driver.dataTypeDefaults[column.type] &&\n this.connection.driver.dataTypeDefaults[column.type].length\n ) {\n return (\n this.connection.driver.dataTypeDefaults[\n column.type\n ].length!.toString() === length.toString()\n )\n }\n\n return false\n }\n\n /**\n * Checks if column precision is by default.\n */\n protected isDefaultColumnPrecision(\n table: Table,\n column: TableColumn,\n precision: number,\n ): boolean {\n // if table have metadata, we check if length is specified in column metadata\n if (this.connection.hasMetadata(table.name)) {\n const metadata = this.connection.getMetadata(table.name)\n const columnMetadata = metadata.findColumnWithDatabaseName(\n column.name,\n )\n if (\n columnMetadata &&\n columnMetadata.precision !== null &&\n columnMetadata.precision !== undefined\n )\n return false\n }\n\n if (\n this.connection.driver.dataTypeDefaults &&\n this.connection.driver.dataTypeDefaults[column.type] &&\n this.connection.driver.dataTypeDefaults[column.type].precision !==\n null &&\n this.connection.driver.dataTypeDefaults[column.type].precision !==\n undefined\n )\n return (\n this.connection.driver.dataTypeDefaults[column.type]\n .precision === precision\n )\n\n return false\n }\n\n /**\n * Checks if column scale is by default.\n */\n protected isDefaultColumnScale(\n table: Table,\n column: TableColumn,\n scale: number,\n ): boolean {\n // if table have metadata, we check if length is specified in column metadata\n if (this.connection.hasMetadata(table.name)) {\n const metadata = this.connection.getMetadata(table.name)\n const columnMetadata = metadata.findColumnWithDatabaseName(\n column.name,\n )\n if (\n columnMetadata &&\n columnMetadata.scale !== null &&\n columnMetadata.scale !== undefined\n )\n return false\n }\n\n if (\n this.connection.driver.dataTypeDefaults &&\n this.connection.driver.dataTypeDefaults[column.type] &&\n this.connection.driver.dataTypeDefaults[column.type].scale !==\n null &&\n this.connection.driver.dataTypeDefaults[column.type].scale !==\n undefined\n )\n return (\n this.connection.driver.dataTypeDefaults[column.type].scale ===\n scale\n )\n\n return false\n }\n\n /**\n * Executes sql used special for schema build.\n */\n protected async executeQueries(\n upQueries: Query | Query[],\n downQueries: Query | Query[],\n ): Promise<void> {\n if (InstanceChecker.isQuery(upQueries)) upQueries = [upQueries]\n if (InstanceChecker.isQuery(downQueries)) downQueries = [downQueries]\n\n this.sqlInMemory.upQueries.push(...upQueries)\n this.sqlInMemory.downQueries.push(...downQueries)\n\n // if sql-in-memory mode is enabled then simply store sql in memory and return\n if (this.sqlMemoryMode === true)\n return Promise.resolve() as Promise<any>\n\n for (const { query, parameters } of upQueries) {\n await this.query(query, parameters)\n }\n }\n\n /**\n * Generated an index name for a table and index\n */\n protected generateIndexName(\n table: Table | View,\n index: TableIndex,\n ): string {\n // new index may be passed without name. In this case we generate index name manually.\n return this.connection.namingStrategy.indexName(\n table,\n index.columnNames,\n index.where,\n )\n }\n}\n"],"sourceRoot":".."}
@@ -14,6 +14,7 @@ import { ObjectID } from "../driver/mongodb/typings";
14
14
  import { QueryDeepPartialEntity } from "../query-builder/QueryPartialEntity";
15
15
  import { UpsertOptions } from "./UpsertOptions";
16
16
  import { EntityTarget } from "../common/EntityTarget";
17
+ import { PickKeysByType } from "../common/PickKeysByType";
17
18
  /**
18
19
  * Base abstract entity for all entities, used in ActiveRecord patterns.
19
20
  */
@@ -204,6 +205,30 @@ export declare class BaseEntity {
204
205
  static countBy<T extends BaseEntity>(this: {
205
206
  new (): T;
206
207
  } & typeof BaseEntity, where: FindOptionsWhere<T>): Promise<number>;
208
+ /**
209
+ * Return the SUM of a column
210
+ */
211
+ static sum<T extends BaseEntity>(this: {
212
+ new (): T;
213
+ } & typeof BaseEntity, columnName: PickKeysByType<T, number>, where: FindOptionsWhere<T>): Promise<number | null>;
214
+ /**
215
+ * Return the AVG of a column
216
+ */
217
+ static average<T extends BaseEntity>(this: {
218
+ new (): T;
219
+ } & typeof BaseEntity, columnName: PickKeysByType<T, number>, where: FindOptionsWhere<T>): Promise<number | null>;
220
+ /**
221
+ * Return the MIN of a column
222
+ */
223
+ static minimum<T extends BaseEntity>(this: {
224
+ new (): T;
225
+ } & typeof BaseEntity, columnName: PickKeysByType<T, number>, where: FindOptionsWhere<T>): Promise<number | null>;
226
+ /**
227
+ * Return the MAX of a column
228
+ */
229
+ static maximum<T extends BaseEntity>(this: {
230
+ new (): T;
231
+ } & typeof BaseEntity, columnName: PickKeysByType<T, number>, where: FindOptionsWhere<T>): Promise<number | null>;
207
232
  /**
208
233
  * Finds entities that match given options.
209
234
  */
@@ -196,6 +196,30 @@ class BaseEntity {
196
196
  static countBy(where) {
197
197
  return this.getRepository().countBy(where);
198
198
  }
199
+ /**
200
+ * Return the SUM of a column
201
+ */
202
+ static sum(columnName, where) {
203
+ return this.getRepository().sum(columnName, where);
204
+ }
205
+ /**
206
+ * Return the AVG of a column
207
+ */
208
+ static average(columnName, where) {
209
+ return this.getRepository().average(columnName, where);
210
+ }
211
+ /**
212
+ * Return the MIN of a column
213
+ */
214
+ static minimum(columnName, where) {
215
+ return this.getRepository().minimum(columnName, where);
216
+ }
217
+ /**
218
+ * Return the MAX of a column
219
+ */
220
+ static maximum(columnName, where) {
221
+ return this.getRepository().maximum(columnName, where);
222
+ }
199
223
  /**
200
224
  * Finds entities that match given options.
201
225
  */
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/repository/BaseEntity.ts"],"names":[],"mappings":"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","file":"BaseEntity.js","sourcesContent":["import { Repository } from \"./Repository\"\nimport { FindOptionsWhere } from \"../find-options/FindOptionsWhere\"\nimport { DeepPartial } from \"../common/DeepPartial\"\nimport { SaveOptions } from \"./SaveOptions\"\nimport { FindOneOptions } from \"../find-options/FindOneOptions\"\nimport { RemoveOptions } from \"./RemoveOptions\"\nimport { FindManyOptions } from \"../find-options/FindManyOptions\"\nimport { DataSource } from \"../data-source\"\nimport { SelectQueryBuilder } from \"../query-builder/SelectQueryBuilder\"\nimport { InsertResult } from \"../query-builder/result/InsertResult\"\nimport { UpdateResult } from \"../query-builder/result/UpdateResult\"\nimport { DeleteResult } from \"../query-builder/result/DeleteResult\"\nimport { ObjectID } from \"../driver/mongodb/typings\"\nimport { ObjectUtils } from \"../util/ObjectUtils\"\nimport { QueryDeepPartialEntity } from \"../query-builder/QueryPartialEntity\"\nimport { UpsertOptions } from \"./UpsertOptions\"\nimport { EntityTarget } from \"../common/EntityTarget\"\n\n/**\n * Base abstract entity for all entities, used in ActiveRecord patterns.\n */\nexport class BaseEntity {\n // -------------------------------------------------------------------------\n // Private Static Properties\n // -------------------------------------------------------------------------\n\n /**\n * DataSource used in all static methods of the BaseEntity.\n */\n private static dataSource: DataSource | null\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Checks if entity has an id.\n * If entity composite compose ids, it will check them all.\n */\n hasId(): boolean {\n const baseEntity = this.constructor as typeof BaseEntity\n return baseEntity.getRepository().hasId(this)\n }\n\n /**\n * Saves current entity in the database.\n * If entity does not exist in the database then inserts, otherwise updates.\n */\n save(options?: SaveOptions): Promise<this> {\n const baseEntity = this.constructor as typeof BaseEntity\n return baseEntity.getRepository().save(this, options)\n }\n\n /**\n * Removes current entity from the database.\n */\n remove(options?: RemoveOptions): Promise<this> {\n const baseEntity = this.constructor as typeof BaseEntity\n return baseEntity.getRepository().remove(this, options) as Promise<this>\n }\n\n /**\n * Records the delete date of current entity.\n */\n softRemove(options?: SaveOptions): Promise<this> {\n const baseEntity = this.constructor as typeof BaseEntity\n return baseEntity.getRepository().softRemove(this, options)\n }\n\n /**\n * Recovers a given entity in the database.\n */\n recover(options?: SaveOptions): Promise<this> {\n const baseEntity = this.constructor as typeof BaseEntity\n return baseEntity.getRepository().recover(this, options)\n }\n\n /**\n * Reloads entity data from the database.\n */\n async reload(): Promise<void> {\n const baseEntity = this.constructor as typeof BaseEntity\n const id = baseEntity.getRepository().metadata.getEntityIdMap(this)\n if (!id) {\n throw new Error(\n `Entity doesn't have id-s set, cannot reload entity`,\n )\n }\n const reloadedEntity: BaseEntity = await baseEntity\n .getRepository()\n .findOneByOrFail(id)\n\n ObjectUtils.assign(this, reloadedEntity)\n }\n\n // -------------------------------------------------------------------------\n // Public Static Methods\n // -------------------------------------------------------------------------\n\n /**\n * Sets DataSource to be used by entity.\n */\n static useDataSource(dataSource: DataSource | null) {\n this.dataSource = dataSource\n }\n\n /**\n * Gets current entity's Repository.\n */\n static getRepository<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n ): Repository<T> {\n const dataSource = (this as typeof BaseEntity).dataSource\n if (!dataSource)\n throw new Error(`DataSource is not set for this entity.`)\n return dataSource.getRepository<T>(this)\n }\n\n /**\n * Returns object that is managed by this repository.\n * If this repository manages entity from schema,\n * then it returns a name of that schema instead.\n */\n static get target(): EntityTarget<any> {\n return this.getRepository().target\n }\n\n /**\n * Checks entity has an id.\n * If entity composite compose ids, it will check them all.\n */\n static hasId(entity: BaseEntity): boolean {\n return this.getRepository().hasId(entity)\n }\n\n /**\n * Gets entity mixed id.\n */\n static getId<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entity: T,\n ): any {\n return this.getRepository<T>().getId(entity)\n }\n\n /**\n * Creates a new query builder that can be used to build a SQL query.\n */\n static createQueryBuilder<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n alias?: string,\n ): SelectQueryBuilder<T> {\n return this.getRepository<T>().createQueryBuilder(alias)\n }\n\n /**\n * Creates a new entity instance.\n */\n static create<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n ): T\n\n /**\n * Creates a new entities and copies all entity properties from given objects into their new entities.\n * Note that it copies only properties that present in entity schema.\n */\n static create<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entityLikeArray: DeepPartial<T>[],\n ): T[]\n\n /**\n * Creates a new entity instance and copies all entity properties from this object into a new entity.\n * Note that it copies only properties that present in entity schema.\n */\n static create<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entityLike: DeepPartial<T>,\n ): T\n\n /**\n * Creates a new entity instance and copies all entity properties from this object into a new entity.\n * Note that it copies only properties that present in entity schema.\n */\n static create<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entityOrEntities?: any,\n ) {\n return this.getRepository<T>().create(entityOrEntities)\n }\n\n /**\n * Merges multiple entities (or entity-like objects) into a given entity.\n */\n static merge<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n mergeIntoEntity: T,\n ...entityLikes: DeepPartial<T>[]\n ): T {\n return this.getRepository<T>().merge(\n mergeIntoEntity,\n ...entityLikes,\n ) as T\n }\n\n /**\n * Creates a new entity from the given plain javascript object. If entity already exist in the database, then\n * it loads it (and everything related to it), replaces all values with the new ones from the given object\n * and returns this new entity. This new entity is actually a loaded from the db entity with all properties\n * replaced from the new object.\n *\n * Note that given entity-like object must have an entity id / primary key to find entity by.\n * Returns undefined if entity with given id was not found.\n */\n static preload<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entityLike: DeepPartial<T>,\n ): Promise<T | undefined> {\n const thisRepository = this.getRepository<T>()\n return thisRepository.preload(entityLike)\n }\n\n /**\n * Saves all given entities in the database.\n * If entities do not exist in the database then inserts, otherwise updates.\n */\n static save<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entities: DeepPartial<T>[],\n options?: SaveOptions,\n ): Promise<T[]>\n\n /**\n * Saves a given entity in the database.\n * If entity does not exist in the database then inserts, otherwise updates.\n */\n static save<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entity: DeepPartial<T>,\n options?: SaveOptions,\n ): Promise<T>\n\n /**\n * Saves one or many given entities.\n */\n static save<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entityOrEntities: DeepPartial<T> | DeepPartial<T>[],\n options?: SaveOptions,\n ) {\n return this.getRepository<T>().save(entityOrEntities as any, options)\n }\n\n /**\n * Removes a given entities from the database.\n */\n static remove<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entities: T[],\n options?: RemoveOptions,\n ): Promise<T[]>\n\n /**\n * Removes a given entity from the database.\n */\n static remove<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entity: T,\n options?: RemoveOptions,\n ): Promise<T>\n\n /**\n * Removes one or many given entities.\n */\n static remove<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entityOrEntities: T | T[],\n options?: RemoveOptions,\n ) {\n return this.getRepository<T>().remove(entityOrEntities as any, options)\n }\n\n /**\n * Records the delete date of all given entities.\n */\n static softRemove<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entities: T[],\n options?: SaveOptions,\n ): Promise<T[]>\n\n /**\n * Records the delete date of a given entity.\n */\n static softRemove<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entity: T,\n options?: SaveOptions,\n ): Promise<T>\n\n /**\n * Records the delete date of one or many given entities.\n */\n static softRemove<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entityOrEntities: T | T[],\n options?: SaveOptions,\n ) {\n return this.getRepository<T>().softRemove(\n entityOrEntities as any,\n options,\n )\n }\n\n /**\n * Inserts a given entity into the database.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT query.\n * Does not check if entity exist in the database, so query will fail if duplicate entity is being inserted.\n */\n static insert<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entity: QueryDeepPartialEntity<T> | QueryDeepPartialEntity<T>[],\n ): Promise<InsertResult> {\n return this.getRepository<T>().insert(entity)\n }\n\n /**\n * Updates entity partially. Entity can be found by a given conditions.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient UPDATE query.\n * Does not check if entity exist in the database.\n */\n static update<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n criteria:\n | string\n | string[]\n | number\n | number[]\n | Date\n | Date[]\n | ObjectID\n | ObjectID[]\n | FindOptionsWhere<T>,\n partialEntity: QueryDeepPartialEntity<T>,\n ): Promise<UpdateResult> {\n return this.getRepository<T>().update(criteria, partialEntity)\n }\n\n /**\n * Inserts a given entity into the database, unless a unique constraint conflicts then updates the entity\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT ... ON CONFLICT DO UPDATE/ON DUPLICATE KEY UPDATE query.\n */\n static upsert<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entityOrEntities:\n | QueryDeepPartialEntity<T>\n | QueryDeepPartialEntity<T>[],\n conflictPathsOrOptions: string[] | UpsertOptions<T>,\n ): Promise<InsertResult> {\n return this.getRepository<T>().upsert(\n entityOrEntities,\n conflictPathsOrOptions,\n )\n }\n\n /**\n * Deletes entities by a given criteria.\n * Unlike remove method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n */\n static delete<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n criteria:\n | string\n | string[]\n | number\n | number[]\n | Date\n | Date[]\n | ObjectID\n | ObjectID[]\n | FindOptionsWhere<T>,\n ): Promise<DeleteResult> {\n return this.getRepository<T>().delete(criteria)\n }\n\n /**\n * Counts entities that match given options.\n */\n static count<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n options?: FindManyOptions<T>,\n ): Promise<number> {\n return this.getRepository<T>().count(options)\n }\n\n /**\n * Counts entities that match given WHERE conditions.\n */\n static countBy<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n where: FindOptionsWhere<T>,\n ): Promise<number> {\n return this.getRepository<T>().countBy(where)\n }\n\n /**\n * Finds entities that match given options.\n */\n static find<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n options?: FindManyOptions<T>,\n ): Promise<T[]> {\n return this.getRepository<T>().find(options)\n }\n\n /**\n * Finds entities that match given WHERE conditions.\n */\n static findBy<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n where: FindOptionsWhere<T>,\n ): Promise<T[]> {\n return this.getRepository<T>().findBy(where)\n }\n\n /**\n * Finds entities that match given find options.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n static findAndCount<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n options?: FindManyOptions<T>,\n ): Promise<[T[], number]> {\n return this.getRepository<T>().findAndCount(options)\n }\n\n /**\n * Finds entities that match given WHERE conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n static findAndCountBy<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n where: FindOptionsWhere<T>,\n ): Promise<[T[], number]> {\n return this.getRepository<T>().findAndCountBy(where)\n }\n\n /**\n * Finds entities by ids.\n * Optionally find options can be applied.\n *\n * @deprecated use `findBy` method instead in conjunction with `In` operator, for example:\n *\n * .findBy({\n * id: In([1, 2, 3])\n * })\n */\n static findByIds<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n ids: any[],\n ): Promise<T[]> {\n return this.getRepository<T>().findByIds(ids)\n }\n\n /**\n * Finds first entity that matches given conditions.\n */\n static findOne<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n options: FindOneOptions<T>,\n ): Promise<T | null> {\n return this.getRepository<T>().findOne(options)\n }\n\n /**\n * Finds first entity that matches given conditions.\n */\n static findOneBy<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n where: FindOptionsWhere<T>,\n ): Promise<T | null> {\n return this.getRepository<T>().findOneBy(where)\n }\n\n /**\n * Finds first entity that matches given options.\n *\n * @deprecated use `findOneBy` method instead in conjunction with `In` operator, for example:\n *\n * .findOneBy({\n * id: 1 // where \"id\" is your primary column name\n * })\n */\n static findOneById<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n id: string | number | Date | ObjectID,\n ): Promise<T | null> {\n return this.getRepository<T>().findOneById(id)\n }\n\n /**\n * Finds first entity that matches given conditions.\n */\n static findOneOrFail<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n options: FindOneOptions<T>,\n ): Promise<T> {\n return this.getRepository<T>().findOneOrFail(options)\n }\n\n /**\n * Finds first entity that matches given conditions.\n */\n static findOneByOrFail<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n where: FindOptionsWhere<T>,\n ): Promise<T> {\n return this.getRepository<T>().findOneByOrFail(where)\n }\n\n /**\n * Executes a raw SQL query and returns a raw database results.\n * Raw query execution is supported only by relational databases (MongoDB is not supported).\n */\n static query<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n query: string,\n parameters?: any[],\n ): Promise<any> {\n return this.getRepository<T>().query(query, parameters)\n }\n\n /**\n * Clears all the data from the given table/collection (truncates/drops it).\n */\n static clear<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n ): Promise<void> {\n return this.getRepository<T>().clear()\n }\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../../src/repository/BaseEntity.ts"],"names":[],"mappings":"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","file":"BaseEntity.js","sourcesContent":["import { Repository } from \"./Repository\"\nimport { FindOptionsWhere } from \"../find-options/FindOptionsWhere\"\nimport { DeepPartial } from \"../common/DeepPartial\"\nimport { SaveOptions } from \"./SaveOptions\"\nimport { FindOneOptions } from \"../find-options/FindOneOptions\"\nimport { RemoveOptions } from \"./RemoveOptions\"\nimport { FindManyOptions } from \"../find-options/FindManyOptions\"\nimport { DataSource } from \"../data-source\"\nimport { SelectQueryBuilder } from \"../query-builder/SelectQueryBuilder\"\nimport { InsertResult } from \"../query-builder/result/InsertResult\"\nimport { UpdateResult } from \"../query-builder/result/UpdateResult\"\nimport { DeleteResult } from \"../query-builder/result/DeleteResult\"\nimport { ObjectID } from \"../driver/mongodb/typings\"\nimport { ObjectUtils } from \"../util/ObjectUtils\"\nimport { QueryDeepPartialEntity } from \"../query-builder/QueryPartialEntity\"\nimport { UpsertOptions } from \"./UpsertOptions\"\nimport { EntityTarget } from \"../common/EntityTarget\"\nimport { PickKeysByType } from \"../common/PickKeysByType\"\n\n/**\n * Base abstract entity for all entities, used in ActiveRecord patterns.\n */\nexport class BaseEntity {\n // -------------------------------------------------------------------------\n // Private Static Properties\n // -------------------------------------------------------------------------\n\n /**\n * DataSource used in all static methods of the BaseEntity.\n */\n private static dataSource: DataSource | null\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Checks if entity has an id.\n * If entity composite compose ids, it will check them all.\n */\n hasId(): boolean {\n const baseEntity = this.constructor as typeof BaseEntity\n return baseEntity.getRepository().hasId(this)\n }\n\n /**\n * Saves current entity in the database.\n * If entity does not exist in the database then inserts, otherwise updates.\n */\n save(options?: SaveOptions): Promise<this> {\n const baseEntity = this.constructor as typeof BaseEntity\n return baseEntity.getRepository().save(this, options)\n }\n\n /**\n * Removes current entity from the database.\n */\n remove(options?: RemoveOptions): Promise<this> {\n const baseEntity = this.constructor as typeof BaseEntity\n return baseEntity.getRepository().remove(this, options) as Promise<this>\n }\n\n /**\n * Records the delete date of current entity.\n */\n softRemove(options?: SaveOptions): Promise<this> {\n const baseEntity = this.constructor as typeof BaseEntity\n return baseEntity.getRepository().softRemove(this, options)\n }\n\n /**\n * Recovers a given entity in the database.\n */\n recover(options?: SaveOptions): Promise<this> {\n const baseEntity = this.constructor as typeof BaseEntity\n return baseEntity.getRepository().recover(this, options)\n }\n\n /**\n * Reloads entity data from the database.\n */\n async reload(): Promise<void> {\n const baseEntity = this.constructor as typeof BaseEntity\n const id = baseEntity.getRepository().metadata.getEntityIdMap(this)\n if (!id) {\n throw new Error(\n `Entity doesn't have id-s set, cannot reload entity`,\n )\n }\n const reloadedEntity: BaseEntity = await baseEntity\n .getRepository()\n .findOneByOrFail(id)\n\n ObjectUtils.assign(this, reloadedEntity)\n }\n\n // -------------------------------------------------------------------------\n // Public Static Methods\n // -------------------------------------------------------------------------\n\n /**\n * Sets DataSource to be used by entity.\n */\n static useDataSource(dataSource: DataSource | null) {\n this.dataSource = dataSource\n }\n\n /**\n * Gets current entity's Repository.\n */\n static getRepository<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n ): Repository<T> {\n const dataSource = (this as typeof BaseEntity).dataSource\n if (!dataSource)\n throw new Error(`DataSource is not set for this entity.`)\n return dataSource.getRepository<T>(this)\n }\n\n /**\n * Returns object that is managed by this repository.\n * If this repository manages entity from schema,\n * then it returns a name of that schema instead.\n */\n static get target(): EntityTarget<any> {\n return this.getRepository().target\n }\n\n /**\n * Checks entity has an id.\n * If entity composite compose ids, it will check them all.\n */\n static hasId(entity: BaseEntity): boolean {\n return this.getRepository().hasId(entity)\n }\n\n /**\n * Gets entity mixed id.\n */\n static getId<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entity: T,\n ): any {\n return this.getRepository<T>().getId(entity)\n }\n\n /**\n * Creates a new query builder that can be used to build a SQL query.\n */\n static createQueryBuilder<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n alias?: string,\n ): SelectQueryBuilder<T> {\n return this.getRepository<T>().createQueryBuilder(alias)\n }\n\n /**\n * Creates a new entity instance.\n */\n static create<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n ): T\n\n /**\n * Creates a new entities and copies all entity properties from given objects into their new entities.\n * Note that it copies only properties that present in entity schema.\n */\n static create<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entityLikeArray: DeepPartial<T>[],\n ): T[]\n\n /**\n * Creates a new entity instance and copies all entity properties from this object into a new entity.\n * Note that it copies only properties that present in entity schema.\n */\n static create<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entityLike: DeepPartial<T>,\n ): T\n\n /**\n * Creates a new entity instance and copies all entity properties from this object into a new entity.\n * Note that it copies only properties that present in entity schema.\n */\n static create<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entityOrEntities?: any,\n ) {\n return this.getRepository<T>().create(entityOrEntities)\n }\n\n /**\n * Merges multiple entities (or entity-like objects) into a given entity.\n */\n static merge<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n mergeIntoEntity: T,\n ...entityLikes: DeepPartial<T>[]\n ): T {\n return this.getRepository<T>().merge(\n mergeIntoEntity,\n ...entityLikes,\n ) as T\n }\n\n /**\n * Creates a new entity from the given plain javascript object. If entity already exist in the database, then\n * it loads it (and everything related to it), replaces all values with the new ones from the given object\n * and returns this new entity. This new entity is actually a loaded from the db entity with all properties\n * replaced from the new object.\n *\n * Note that given entity-like object must have an entity id / primary key to find entity by.\n * Returns undefined if entity with given id was not found.\n */\n static preload<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entityLike: DeepPartial<T>,\n ): Promise<T | undefined> {\n const thisRepository = this.getRepository<T>()\n return thisRepository.preload(entityLike)\n }\n\n /**\n * Saves all given entities in the database.\n * If entities do not exist in the database then inserts, otherwise updates.\n */\n static save<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entities: DeepPartial<T>[],\n options?: SaveOptions,\n ): Promise<T[]>\n\n /**\n * Saves a given entity in the database.\n * If entity does not exist in the database then inserts, otherwise updates.\n */\n static save<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entity: DeepPartial<T>,\n options?: SaveOptions,\n ): Promise<T>\n\n /**\n * Saves one or many given entities.\n */\n static save<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entityOrEntities: DeepPartial<T> | DeepPartial<T>[],\n options?: SaveOptions,\n ) {\n return this.getRepository<T>().save(entityOrEntities as any, options)\n }\n\n /**\n * Removes a given entities from the database.\n */\n static remove<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entities: T[],\n options?: RemoveOptions,\n ): Promise<T[]>\n\n /**\n * Removes a given entity from the database.\n */\n static remove<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entity: T,\n options?: RemoveOptions,\n ): Promise<T>\n\n /**\n * Removes one or many given entities.\n */\n static remove<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entityOrEntities: T | T[],\n options?: RemoveOptions,\n ) {\n return this.getRepository<T>().remove(entityOrEntities as any, options)\n }\n\n /**\n * Records the delete date of all given entities.\n */\n static softRemove<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entities: T[],\n options?: SaveOptions,\n ): Promise<T[]>\n\n /**\n * Records the delete date of a given entity.\n */\n static softRemove<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entity: T,\n options?: SaveOptions,\n ): Promise<T>\n\n /**\n * Records the delete date of one or many given entities.\n */\n static softRemove<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entityOrEntities: T | T[],\n options?: SaveOptions,\n ) {\n return this.getRepository<T>().softRemove(\n entityOrEntities as any,\n options,\n )\n }\n\n /**\n * Inserts a given entity into the database.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT query.\n * Does not check if entity exist in the database, so query will fail if duplicate entity is being inserted.\n */\n static insert<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entity: QueryDeepPartialEntity<T> | QueryDeepPartialEntity<T>[],\n ): Promise<InsertResult> {\n return this.getRepository<T>().insert(entity)\n }\n\n /**\n * Updates entity partially. Entity can be found by a given conditions.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient UPDATE query.\n * Does not check if entity exist in the database.\n */\n static update<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n criteria:\n | string\n | string[]\n | number\n | number[]\n | Date\n | Date[]\n | ObjectID\n | ObjectID[]\n | FindOptionsWhere<T>,\n partialEntity: QueryDeepPartialEntity<T>,\n ): Promise<UpdateResult> {\n return this.getRepository<T>().update(criteria, partialEntity)\n }\n\n /**\n * Inserts a given entity into the database, unless a unique constraint conflicts then updates the entity\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT ... ON CONFLICT DO UPDATE/ON DUPLICATE KEY UPDATE query.\n */\n static upsert<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n entityOrEntities:\n | QueryDeepPartialEntity<T>\n | QueryDeepPartialEntity<T>[],\n conflictPathsOrOptions: string[] | UpsertOptions<T>,\n ): Promise<InsertResult> {\n return this.getRepository<T>().upsert(\n entityOrEntities,\n conflictPathsOrOptions,\n )\n }\n\n /**\n * Deletes entities by a given criteria.\n * Unlike remove method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n */\n static delete<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n criteria:\n | string\n | string[]\n | number\n | number[]\n | Date\n | Date[]\n | ObjectID\n | ObjectID[]\n | FindOptionsWhere<T>,\n ): Promise<DeleteResult> {\n return this.getRepository<T>().delete(criteria)\n }\n\n /**\n * Counts entities that match given options.\n */\n static count<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n options?: FindManyOptions<T>,\n ): Promise<number> {\n return this.getRepository<T>().count(options)\n }\n\n /**\n * Counts entities that match given WHERE conditions.\n */\n static countBy<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n where: FindOptionsWhere<T>,\n ): Promise<number> {\n return this.getRepository<T>().countBy(where)\n }\n\n /**\n * Return the SUM of a column\n */\n static sum<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n columnName: PickKeysByType<T, number>,\n where: FindOptionsWhere<T>,\n ): Promise<number | null> {\n return this.getRepository<T>().sum(columnName, where)\n }\n\n /**\n * Return the AVG of a column\n */\n static average<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n columnName: PickKeysByType<T, number>,\n where: FindOptionsWhere<T>,\n ): Promise<number | null> {\n return this.getRepository<T>().average(columnName, where)\n }\n\n /**\n * Return the MIN of a column\n */\n static minimum<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n columnName: PickKeysByType<T, number>,\n where: FindOptionsWhere<T>,\n ): Promise<number | null> {\n return this.getRepository<T>().minimum(columnName, where)\n }\n\n /**\n * Return the MAX of a column\n */\n static maximum<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n columnName: PickKeysByType<T, number>,\n where: FindOptionsWhere<T>,\n ): Promise<number | null> {\n return this.getRepository<T>().maximum(columnName, where)\n }\n\n /**\n * Finds entities that match given options.\n */\n static find<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n options?: FindManyOptions<T>,\n ): Promise<T[]> {\n return this.getRepository<T>().find(options)\n }\n\n /**\n * Finds entities that match given WHERE conditions.\n */\n static findBy<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n where: FindOptionsWhere<T>,\n ): Promise<T[]> {\n return this.getRepository<T>().findBy(where)\n }\n\n /**\n * Finds entities that match given find options.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n static findAndCount<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n options?: FindManyOptions<T>,\n ): Promise<[T[], number]> {\n return this.getRepository<T>().findAndCount(options)\n }\n\n /**\n * Finds entities that match given WHERE conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n static findAndCountBy<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n where: FindOptionsWhere<T>,\n ): Promise<[T[], number]> {\n return this.getRepository<T>().findAndCountBy(where)\n }\n\n /**\n * Finds entities by ids.\n * Optionally find options can be applied.\n *\n * @deprecated use `findBy` method instead in conjunction with `In` operator, for example:\n *\n * .findBy({\n * id: In([1, 2, 3])\n * })\n */\n static findByIds<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n ids: any[],\n ): Promise<T[]> {\n return this.getRepository<T>().findByIds(ids)\n }\n\n /**\n * Finds first entity that matches given conditions.\n */\n static findOne<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n options: FindOneOptions<T>,\n ): Promise<T | null> {\n return this.getRepository<T>().findOne(options)\n }\n\n /**\n * Finds first entity that matches given conditions.\n */\n static findOneBy<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n where: FindOptionsWhere<T>,\n ): Promise<T | null> {\n return this.getRepository<T>().findOneBy(where)\n }\n\n /**\n * Finds first entity that matches given options.\n *\n * @deprecated use `findOneBy` method instead in conjunction with `In` operator, for example:\n *\n * .findOneBy({\n * id: 1 // where \"id\" is your primary column name\n * })\n */\n static findOneById<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n id: string | number | Date | ObjectID,\n ): Promise<T | null> {\n return this.getRepository<T>().findOneById(id)\n }\n\n /**\n * Finds first entity that matches given conditions.\n */\n static findOneOrFail<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n options: FindOneOptions<T>,\n ): Promise<T> {\n return this.getRepository<T>().findOneOrFail(options)\n }\n\n /**\n * Finds first entity that matches given conditions.\n */\n static findOneByOrFail<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n where: FindOptionsWhere<T>,\n ): Promise<T> {\n return this.getRepository<T>().findOneByOrFail(where)\n }\n\n /**\n * Executes a raw SQL query and returns a raw database results.\n * Raw query execution is supported only by relational databases (MongoDB is not supported).\n */\n static query<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n query: string,\n parameters?: any[],\n ): Promise<any> {\n return this.getRepository<T>().query(query, parameters)\n }\n\n /**\n * Clears all the data from the given table/collection (truncates/drops it).\n */\n static clear<T extends BaseEntity>(\n this: { new (): T } & typeof BaseEntity,\n ): Promise<void> {\n return this.getRepository<T>().clear()\n }\n}\n"],"sourceRoot":".."}
@@ -1,2 +1,2 @@
1
1
  import { ObjectID } from "../driver/mongodb/typings";
2
- export declare type EntityId = string | number | Date | ObjectID;
2
+ export type EntityId = string | number | Date | ObjectID;
@@ -15,6 +15,7 @@ import { ObjectID } from "../driver/mongodb/typings";
15
15
  import { FindOptionsWhere } from "../find-options/FindOptionsWhere";
16
16
  import { UpsertOptions } from "./UpsertOptions";
17
17
  import { EntityTarget } from "../common/EntityTarget";
18
+ import { PickKeysByType } from "../common/PickKeysByType";
18
19
  /**
19
20
  * Repository is supposed to work with your entity objects. Find entities, insert, update, delete, etc.
20
21
  */
@@ -206,6 +207,22 @@ export declare class Repository<Entity extends ObjectLiteral> {
206
207
  * Useful for pagination.
207
208
  */
208
209
  countBy(where: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[]): Promise<number>;
210
+ /**
211
+ * Return the SUM of a column
212
+ */
213
+ sum(columnName: PickKeysByType<Entity, number>, where?: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[]): Promise<number | null>;
214
+ /**
215
+ * Return the AVG of a column
216
+ */
217
+ average(columnName: PickKeysByType<Entity, number>, where?: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[]): Promise<number | null>;
218
+ /**
219
+ * Return the MIN of a column
220
+ */
221
+ minimum(columnName: PickKeysByType<Entity, number>, where?: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[]): Promise<number | null>;
222
+ /**
223
+ * Return the MAX of a column
224
+ */
225
+ maximum(columnName: PickKeysByType<Entity, number>, where?: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[]): Promise<number | null>;
209
226
  /**
210
227
  * Finds entities that match given find options.
211
228
  */
@@ -5,14 +5,6 @@ exports.Repository = void 0;
5
5
  * Repository is supposed to work with your entity objects. Find entities, insert, update, delete, etc.
6
6
  */
7
7
  class Repository {
8
- // -------------------------------------------------------------------------
9
- // Constructor
10
- // -------------------------------------------------------------------------
11
- constructor(target, manager, queryRunner) {
12
- this.target = target;
13
- this.manager = manager;
14
- this.queryRunner = queryRunner;
15
- }
16
8
  // -------------------------------------------------------------------------
17
9
  // Accessors
18
10
  // -------------------------------------------------------------------------
@@ -23,6 +15,14 @@ class Repository {
23
15
  return this.manager.connection.getMetadata(this.target);
24
16
  }
25
17
  // -------------------------------------------------------------------------
18
+ // Constructor
19
+ // -------------------------------------------------------------------------
20
+ constructor(target, manager, queryRunner) {
21
+ this.target = target;
22
+ this.manager = manager;
23
+ this.queryRunner = queryRunner;
24
+ }
25
+ // -------------------------------------------------------------------------
26
26
  // Public Methods
27
27
  // -------------------------------------------------------------------------
28
28
  /**
@@ -166,6 +166,30 @@ class Repository {
166
166
  countBy(where) {
167
167
  return this.manager.countBy(this.metadata.target, where);
168
168
  }
169
+ /**
170
+ * Return the SUM of a column
171
+ */
172
+ sum(columnName, where) {
173
+ return this.manager.sum(this.metadata.target, columnName, where);
174
+ }
175
+ /**
176
+ * Return the AVG of a column
177
+ */
178
+ average(columnName, where) {
179
+ return this.manager.average(this.metadata.target, columnName, where);
180
+ }
181
+ /**
182
+ * Return the MIN of a column
183
+ */
184
+ minimum(columnName, where) {
185
+ return this.manager.minimum(this.metadata.target, columnName, where);
186
+ }
187
+ /**
188
+ * Return the MAX of a column
189
+ */
190
+ maximum(columnName, where) {
191
+ return this.manager.maximum(this.metadata.target, columnName, where);
192
+ }
169
193
  /**
170
194
  * Finds entities that match given find options.
171
195
  */