@tstdl/base 0.87.15 → 0.88.0-alpha2

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 (784) hide show
  1. package/api/client/client.js +111 -127
  2. package/api/client/index.js +1 -18
  3. package/api/default-error-handlers.js +18 -44
  4. package/api/index.js +14 -20
  5. package/api/response.js +99 -123
  6. package/api/server/api-controller.js +43 -71
  7. package/api/server/api-request-token.provider.js +13 -40
  8. package/api/server/error-handler.js +25 -46
  9. package/api/server/gateway.js +219 -225
  10. package/api/server/index.js +5 -22
  11. package/api/server/middlewares/allowed-methods.middleware.js +17 -40
  12. package/api/server/middlewares/catch-error.middleware.js +12 -33
  13. package/api/server/middlewares/cors.middleware.js +49 -69
  14. package/api/server/middlewares/index.js +4 -21
  15. package/api/server/middlewares/response-time.middleware.js +8 -31
  16. package/api/server/module.js +18 -42
  17. package/api/server/tokens.js +6 -31
  18. package/api/types.js +14 -40
  19. package/api/utils.js +13 -36
  20. package/application/application.js +147 -169
  21. package/application/index.js +1 -18
  22. package/authentication/authentication.api.js +89 -113
  23. package/authentication/client/api.client.js +29 -57
  24. package/authentication/client/authentication.service.js +214 -235
  25. package/authentication/client/http-client.middleware.js +16 -38
  26. package/authentication/client/index.js +5 -22
  27. package/authentication/client/module.js +22 -45
  28. package/authentication/client/tokens.js +6 -30
  29. package/authentication/errors/index.js +1 -18
  30. package/authentication/errors/secret-requirements.error.js +6 -29
  31. package/authentication/index.d.ts +1 -0
  32. package/authentication/index.js +3 -19
  33. package/authentication/models/authentication-credentials.model.js +37 -66
  34. package/authentication/models/authentication-session.model.js +51 -80
  35. package/authentication/models/index.js +6 -23
  36. package/authentication/models/init-secret-reset-data.model.js +16 -44
  37. package/authentication/models/secret-check-result.model.js +10 -36
  38. package/authentication/models/token-payload-base.model.js +31 -59
  39. package/authentication/models/token.model.js +1 -16
  40. package/authentication/server/authentication-api-request-token.provider.js +25 -52
  41. package/authentication/server/authentication-credentials.repository.js +1 -24
  42. package/authentication/server/authentication-secret-requirements.validator.js +30 -57
  43. package/authentication/server/authentication-secret-reset.handler.js +1 -24
  44. package/authentication/server/authentication-session.repository.js +1 -24
  45. package/authentication/server/authentication-subject.resolver.js +5 -24
  46. package/authentication/server/authentication-token-payload.provider.js +5 -29
  47. package/authentication/server/authentication.api-controller.js +89 -114
  48. package/authentication/server/authentication.service.js +273 -308
  49. package/authentication/server/helper.js +66 -87
  50. package/authentication/server/index.js +11 -28
  51. package/authentication/server/module.js +26 -48
  52. package/authentication/server/mongo/index.js +2 -19
  53. package/authentication/server/mongo/mongo-authentication-credentials.repository.js +54 -84
  54. package/authentication/server/mongo/mongo-authentication-session.repository.js +51 -81
  55. package/browser/browser-context-controller.js +106 -133
  56. package/browser/browser-controller.js +87 -113
  57. package/browser/browser.service.js +87 -117
  58. package/browser/document-controller.js +70 -94
  59. package/browser/element-controller.js +231 -252
  60. package/browser/frame-controller.js +24 -47
  61. package/browser/index.d.ts +1 -0
  62. package/browser/index.js +11 -27
  63. package/browser/locator-controller.js +36 -59
  64. package/browser/module.js +26 -50
  65. package/browser/page-controller.js +150 -166
  66. package/browser/pdf-options.js +73 -103
  67. package/browser/types.js +1 -16
  68. package/browser/utils.js +94 -128
  69. package/cancellation/index.js +1 -18
  70. package/cancellation/token.js +164 -184
  71. package/collections/awaitable/awaitable-list.js +99 -122
  72. package/collections/awaitable/awaitable-map.js +93 -116
  73. package/collections/awaitable/awaitable-set.js +63 -86
  74. package/collections/awaitable/index.js +3 -20
  75. package/collections/collection.js +1 -16
  76. package/collections/index.js +6 -23
  77. package/collections/keyed-set.js +53 -77
  78. package/collections/list.js +1 -16
  79. package/collections/observable/index.js +8 -25
  80. package/collections/observable/observable-array.js +95 -118
  81. package/collections/observable/observable-collection-base.js +60 -83
  82. package/collections/observable/observable-collection.js +1 -16
  83. package/collections/observable/observable-list-base.js +55 -78
  84. package/collections/observable/observable-list.js +1 -16
  85. package/collections/observable/observable-map.js +56 -79
  86. package/collections/observable/observable-set.js +75 -98
  87. package/collections/observable/observable-sorted-array-list.js +165 -188
  88. package/collections/sorted-array-list.js +156 -179
  89. package/collections/sorted-list.js +1 -16
  90. package/collections/sorted-map.js +70 -93
  91. package/container/decorators.js +1 -34
  92. package/container/index.js +3 -20
  93. package/container/interfaces.js +1 -25
  94. package/container/token.js +1 -26
  95. package/cookie/cookie.js +49 -71
  96. package/cookie/index.js +1 -18
  97. package/core.js +56 -81
  98. package/data-structures/array-dictionary.js +89 -110
  99. package/data-structures/array-list.js +107 -130
  100. package/data-structures/cache.js +41 -64
  101. package/data-structures/circular-buffer.js +200 -220
  102. package/data-structures/collection.js +86 -109
  103. package/data-structures/dictionary.js +51 -75
  104. package/data-structures/distinct-collection.js +49 -73
  105. package/data-structures/index-out-of-bounds.error.js +8 -31
  106. package/data-structures/index.d.ts +1 -0
  107. package/data-structures/index.js +17 -33
  108. package/data-structures/iterable-weak-map.js +129 -149
  109. package/data-structures/linked-list.js +368 -385
  110. package/data-structures/list.js +86 -109
  111. package/data-structures/map-dictionary.js +55 -78
  112. package/data-structures/multi-key-map.js +141 -163
  113. package/data-structures/multi-key-set.js +56 -79
  114. package/data-structures/set-collection.js +54 -77
  115. package/data-structures/sorted-array-list.js +140 -166
  116. package/data-structures/weak-ref-map.js +126 -146
  117. package/database/entity-repository.js +2 -26
  118. package/database/entity.js +1 -16
  119. package/database/id.js +8 -29
  120. package/database/index.js +6 -23
  121. package/database/module.js +9 -33
  122. package/database/mongo/classes.js +18 -43
  123. package/database/mongo/index.js +10 -27
  124. package/database/mongo/model/document.js +62 -93
  125. package/database/mongo/model/index.js +1 -18
  126. package/database/mongo/module.js +59 -79
  127. package/database/mongo/mongo-base.repository.js +259 -283
  128. package/database/mongo/mongo-bulk.js +87 -110
  129. package/database/mongo/mongo-entity-repository.js +270 -296
  130. package/database/mongo/operations.js +48 -76
  131. package/database/mongo/query-converter.js +73 -96
  132. package/database/mongo/simple-entity-repository.js +5 -28
  133. package/database/mongo/types.js +2 -25
  134. package/database/query.js +7 -36
  135. package/database/utils.js +2 -25
  136. package/decorators/index.js +1 -18
  137. package/decorators/log.js +29 -51
  138. package/disposable/async-disposer.js +118 -130
  139. package/disposable/disposable.js +9 -36
  140. package/disposable/index.js +3 -20
  141. package/disposable/using.js +15 -37
  142. package/distributed-loop/controller.js +1 -16
  143. package/distributed-loop/distributed-loop.js +77 -105
  144. package/distributed-loop/index.js +3 -20
  145. package/distributed-loop/provider.js +21 -48
  146. package/enumerable/async-enumerable.js +238 -261
  147. package/enumerable/enumerable-methods.js +1 -16
  148. package/enumerable/enumerable.js +177 -200
  149. package/enumerable/index.js +2 -19
  150. package/environment.js +25 -57
  151. package/error/api.error.js +10 -33
  152. package/error/assertion.error.js +6 -29
  153. package/error/bad-request.error.js +6 -29
  154. package/error/custom.error.js +25 -47
  155. package/error/details.error.js +8 -31
  156. package/error/forbidden.error.js +6 -29
  157. package/error/index.js +16 -33
  158. package/error/invalid-token.error.js +6 -29
  159. package/error/max-bytes-exceeded.error.js +9 -32
  160. package/error/method-not-allowed.error.js +6 -29
  161. package/error/multi.error.js +8 -31
  162. package/error/not-found.error.js +6 -29
  163. package/error/not-implemented.error.js +6 -29
  164. package/error/not-supported.error.js +11 -34
  165. package/error/timeout.error.js +6 -29
  166. package/error/unauthorized.error.js +6 -29
  167. package/error/unsupported-media-type.error.js +6 -29
  168. package/examples/api/authentication.js +49 -49
  169. package/examples/api/basic-overview.js +80 -85
  170. package/examples/api/custom-authentication.js +94 -99
  171. package/examples/api/streaming.js +90 -95
  172. package/examples/browser/basic.js +21 -22
  173. package/examples/http/client.js +15 -16
  174. package/examples/mail/basic.js +41 -42
  175. package/examples/mail/templates/hello-name.js +10 -33
  176. package/examples/pdf/basic.js +48 -49
  177. package/examples/pdf/templates/hello-name.js +35 -58
  178. package/examples/reflection/basic.js +53 -84
  179. package/examples/template/basic.js +32 -33
  180. package/examples/template/templates/hello-jsx.js +8 -32
  181. package/examples/template/templates/hello-name.js +18 -41
  182. package/function/index.js +1 -18
  183. package/function/log.js +18 -40
  184. package/http/client/adapters/index.d.ts +1 -0
  185. package/http/client/adapters/index.js +1 -0
  186. package/http/client/adapters/undici-http-client.adapter.js +92 -111
  187. package/http/client/http-client-options.js +10 -33
  188. package/http/client/http-client-request.js +149 -171
  189. package/http/client/http-client-response.js +33 -56
  190. package/http/client/http-client.adapter.js +1 -24
  191. package/http/client/http-client.js +295 -313
  192. package/http/client/index.d.ts +2 -0
  193. package/http/client/index.js +8 -23
  194. package/http/client/middleware.js +1 -16
  195. package/http/client/module.js +20 -43
  196. package/http/client/tokens.js +2 -25
  197. package/http/cookie-parser.js +19 -42
  198. package/http/http-body.js +52 -75
  199. package/http/http-form.js +14 -37
  200. package/http/http-headers.js +86 -109
  201. package/http/http-query.js +14 -37
  202. package/http/http-url-parameters.js +8 -31
  203. package/http/http-value-map.js +110 -133
  204. package/http/http.error.js +60 -82
  205. package/http/index.js +11 -28
  206. package/http/server/http-server-request.js +24 -47
  207. package/http/server/http-server-response.js +22 -45
  208. package/http/server/http-server.js +2 -25
  209. package/http/server/index.js +3 -20
  210. package/http/server/node/index.js +2 -19
  211. package/http/server/node/module.js +8 -28
  212. package/http/server/node/node-http-server.js +205 -230
  213. package/http/types.js +21 -47
  214. package/http/utils.js +92 -108
  215. package/image-service/image-service.js +59 -91
  216. package/image-service/imgproxy/imgproxy-image-service.js +88 -125
  217. package/image-service/imgproxy/index.js +1 -18
  218. package/image-service/index.js +1 -18
  219. package/import.js +2 -25
  220. package/index.js +1 -18
  221. package/injector/decorators.js +134 -112
  222. package/injector/index.js +11 -28
  223. package/injector/inject.js +104 -103
  224. package/injector/injector.js +481 -497
  225. package/injector/interfaces.js +2 -26
  226. package/injector/provider.js +22 -54
  227. package/injector/resolve-chain.js +91 -117
  228. package/injector/resolve.error.js +11 -36
  229. package/injector/symbols.js +2 -26
  230. package/injector/token.js +17 -38
  231. package/injector/type-info.js +1 -16
  232. package/injector/types.js +1 -16
  233. package/interfaces.js +1 -16
  234. package/json-path/index.js +1 -18
  235. package/json-path/json-path.js +138 -138
  236. package/key-value-store/index.js +2 -19
  237. package/key-value-store/key-value-store.provider.js +1 -24
  238. package/key-value-store/key-value.store.js +6 -29
  239. package/key-value-store/mongo/index.js +6 -23
  240. package/key-value-store/mongo/module.js +17 -35
  241. package/key-value-store/mongo/mongo-key-value-store.provider.js +21 -48
  242. package/key-value-store/mongo/mongo-key-value.model.js +1 -16
  243. package/key-value-store/mongo/mongo-key-value.repository.js +23 -52
  244. package/key-value-store/mongo/mongo-key-value.store.js +60 -89
  245. package/key-value-store/mongo/tokens.js +2 -25
  246. package/lock/index.js +2 -19
  247. package/lock/lock.js +6 -29
  248. package/lock/mongo/index.js +5 -22
  249. package/lock/mongo/lock.js +112 -135
  250. package/lock/mongo/model.js +1 -16
  251. package/lock/mongo/module.js +18 -37
  252. package/lock/mongo/mongo-lock-repository.js +57 -85
  253. package/lock/mongo/provider.js +39 -68
  254. package/lock/provider.js +2 -25
  255. package/lock/web/index.js +3 -20
  256. package/lock/web/module.js +11 -31
  257. package/lock/web/web-lock.js +81 -105
  258. package/lock/web/web-lock.provider.js +28 -57
  259. package/logger/console/index.js +1 -18
  260. package/logger/console/logger.js +55 -81
  261. package/logger/index.js +3 -20
  262. package/logger/level.js +8 -31
  263. package/logger/logger.js +38 -61
  264. package/logger/noop/index.js +1 -18
  265. package/logger/noop/logger.js +20 -42
  266. package/logger/tokens.js +2 -25
  267. package/mail/clients/index.d.ts +1 -0
  268. package/mail/clients/index.js +1 -0
  269. package/mail/clients/nodemailer.mail-client.js +64 -91
  270. package/mail/index.d.ts +2 -0
  271. package/mail/index.js +7 -22
  272. package/mail/mail.client.js +35 -63
  273. package/mail/mail.service.d.ts +1 -1
  274. package/mail/mail.service.js +74 -106
  275. package/mail/models/index.js +6 -23
  276. package/mail/models/mail-address.model.js +1 -16
  277. package/mail/models/mail-content.model.js +1 -16
  278. package/mail/models/mail-data.model.js +1 -16
  279. package/mail/models/mail-log.model.js +1 -16
  280. package/mail/models/mail-send-result.model.js +1 -16
  281. package/mail/models/mail-template.model.js +5 -28
  282. package/mail/module.d.ts +1 -1
  283. package/mail/module.js +21 -41
  284. package/mail/repositories/index.d.ts +1 -0
  285. package/mail/repositories/index.js +1 -0
  286. package/mail/repositories/mail-log.repository.d.ts +4 -0
  287. package/mail/repositories/mail-log.repository.js +3 -0
  288. package/mail/repositories/mongo/index.d.ts +1 -0
  289. package/mail/repositories/mongo/index.js +1 -0
  290. package/mail/repositories/{mongo-mail-log.repository.d.ts → mongo/mongo-mail-log.repository.d.ts} +6 -6
  291. package/mail/repositories/mongo/mongo-mail-log.repository.js +33 -0
  292. package/mail/tokens.js +2 -25
  293. package/memory/finalization.js +36 -60
  294. package/memory/index.js +2 -19
  295. package/memory/observable-finalization-registry.js +9 -32
  296. package/message-bus/broadcast-channel/broadcast-channel-message-bus-provider.js +24 -53
  297. package/message-bus/broadcast-channel/broadcast-channel-message-bus.js +47 -74
  298. package/message-bus/broadcast-channel/index.js +3 -20
  299. package/message-bus/broadcast-channel/module.js +11 -31
  300. package/message-bus/index.js +3 -20
  301. package/message-bus/local/index.js +3 -20
  302. package/message-bus/local/local-message-bus-provider.js +36 -65
  303. package/message-bus/local/local-message-bus.js +39 -66
  304. package/message-bus/local/module.js +11 -31
  305. package/message-bus/local/types.js +1 -16
  306. package/message-bus/message-bus-base.js +41 -63
  307. package/message-bus/message-bus-provider.js +1 -24
  308. package/message-bus/message-bus.js +6 -29
  309. package/migration/index.js +3 -20
  310. package/migration/migration-state-repository.js +2 -25
  311. package/migration/migration-state.js +1 -16
  312. package/migration/migrator.js +81 -108
  313. package/migration/mongo/index.js +2 -19
  314. package/migration/mongo/migration-state-repository.js +24 -53
  315. package/migration/mongo/module.js +15 -34
  316. package/module/index.js +4 -21
  317. package/module/module-base.js +37 -60
  318. package/module/module-metric-reporter.js +58 -77
  319. package/module/module.js +10 -34
  320. package/module/modules/function.module.js +11 -34
  321. package/module/modules/index.js +2 -19
  322. package/module/modules/web-server.module.js +54 -83
  323. package/module/utils.js +19 -43
  324. package/object-storage/index.js +3 -20
  325. package/object-storage/object-storage-provider.js +1 -24
  326. package/object-storage/object-storage.js +7 -30
  327. package/object-storage/object.js +7 -30
  328. package/object-storage/s3/index.js +3 -20
  329. package/object-storage/s3/s3.object-storage-provider.js +75 -100
  330. package/object-storage/s3/s3.object-storage.js +134 -160
  331. package/object-storage/s3/s3.object.js +39 -62
  332. package/openid-connect/cached-oidc-configuration.service.js +36 -65
  333. package/openid-connect/index.js +11 -28
  334. package/openid-connect/mongo-oidc-state.repository.js +40 -65
  335. package/openid-connect/oidc-configuration.service.js +39 -66
  336. package/openid-connect/oidc-state.model.js +1 -16
  337. package/openid-connect/oidc-state.repository.js +2 -25
  338. package/openid-connect/oidc.service-model.js +1 -16
  339. package/openid-connect/oidc.service.js +158 -187
  340. package/package.json +95 -5
  341. package/password/have-i-been-pwned.js +21 -39
  342. package/password/index.js +4 -21
  343. package/password/password-check-result.model.js +34 -63
  344. package/password/password-check.js +46 -76
  345. package/password/password-check.localization.js +86 -111
  346. package/pdf/index.js +1 -18
  347. package/pdf/pdf.service.js +172 -206
  348. package/polyfills.js +1 -2
  349. package/pool/index.js +1 -18
  350. package/pool/pool.js +116 -133
  351. package/process-shutdown.js +57 -81
  352. package/promise/cancelable-promise.js +23 -41
  353. package/promise/deferred-promise.js +68 -92
  354. package/promise/index.js +3 -20
  355. package/promise/lazy-promise.js +24 -47
  356. package/queue/enqueue-batch.js +18 -41
  357. package/queue/index.js +3 -20
  358. package/queue/mongo/index.js +4 -21
  359. package/queue/mongo/job.js +1 -16
  360. package/queue/mongo/mongo-job.repository.js +45 -70
  361. package/queue/mongo/queue.js +243 -265
  362. package/queue/mongo/queue.provider.js +47 -72
  363. package/queue/provider.js +1 -24
  364. package/queue/queue.js +15 -41
  365. package/random/index.js +2 -19
  366. package/random/number-generator/index.d.ts +2 -0
  367. package/random/number-generator/index.js +5 -20
  368. package/random/number-generator/mulberry32.js +34 -51
  369. package/random/number-generator/random-number-generator-function.js +1 -24
  370. package/random/number-generator/random-number-generator.js +8 -31
  371. package/random/number-generator/seeded-random-number-generator.js +5 -28
  372. package/random/number-generator/sfc32.js +41 -64
  373. package/random/number-generator/utils.d.ts +1 -0
  374. package/random/number-generator/utils.js +7 -25
  375. package/random/series.js +41 -43
  376. package/reflection/decorator-data.js +63 -80
  377. package/reflection/decorators.js +39 -69
  378. package/reflection/index.js +5 -22
  379. package/reflection/reflection-data-map.js +32 -55
  380. package/reflection/registry.js +110 -130
  381. package/reflection/types.js +1 -16
  382. package/reflection/utils.js +96 -124
  383. package/require.js +3 -26
  384. package/rpc/endpoints/index.d.ts +1 -0
  385. package/rpc/endpoints/index.js +1 -0
  386. package/rpc/endpoints/message-port.rpc-endpoint.js +29 -48
  387. package/rpc/index.js +4 -21
  388. package/rpc/model.js +7 -30
  389. package/rpc/rpc-endpoint.js +17 -40
  390. package/rpc/rpc-error.js +17 -40
  391. package/rpc/rpc.js +223 -235
  392. package/rxjs/cast.js +4 -28
  393. package/rxjs/index.js +13 -30
  394. package/rxjs/intersection-observer.js +25 -48
  395. package/rxjs/media-query.js +8 -27
  396. package/rxjs/mutation-observer.js +28 -50
  397. package/rxjs/noop.js +4 -28
  398. package/rxjs/performance-observer.js +37 -60
  399. package/rxjs/resize-observer.js +28 -50
  400. package/rxjs/retry-backoff.js +23 -47
  401. package/rxjs/slow-array.js +22 -36
  402. package/rxjs/start-with-provider.js +5 -28
  403. package/rxjs/teardown.js +21 -44
  404. package/rxjs/timing.js +26 -57
  405. package/rxjs/touch.js +11 -30
  406. package/schema/array-constraints/index.js +2 -19
  407. package/schema/array-constraints/maximum-length.js +19 -42
  408. package/schema/array-constraints/minimum-length.js +19 -42
  409. package/schema/coercers/boolean.coercer.js +25 -49
  410. package/schema/coercers/date.coercer.js +14 -38
  411. package/schema/coercers/index.js +6 -23
  412. package/schema/coercers/number.coercer.js +12 -36
  413. package/schema/coercers/regexp.coercer.js +18 -41
  414. package/schema/coercers/string.coercer.js +12 -36
  415. package/schema/coercers/uint8-array.coercer.js +20 -44
  416. package/schema/constraints/enumeration.js +27 -49
  417. package/schema/constraints/generic.js +21 -41
  418. package/schema/constraints/index.js +12 -29
  419. package/schema/constraints/integer.js +20 -44
  420. package/schema/constraints/length.js +14 -36
  421. package/schema/constraints/literal.js +22 -44
  422. package/schema/constraints/maximum-date.js +23 -46
  423. package/schema/constraints/maximum-length.js +22 -45
  424. package/schema/constraints/maximum.js +21 -44
  425. package/schema/constraints/minimum-date.js +23 -46
  426. package/schema/constraints/minimum-length.js +22 -45
  427. package/schema/constraints/minimum.js +21 -44
  428. package/schema/constraints/pattern.js +23 -46
  429. package/schema/decorators/class.js +4 -26
  430. package/schema/decorators/coerce.js +4 -26
  431. package/schema/decorators/constraint.js +6 -28
  432. package/schema/decorators/index.js +6 -23
  433. package/schema/decorators/property.js +16 -38
  434. package/schema/decorators/types.js +1 -16
  435. package/schema/decorators/utils.js +45 -73
  436. package/schema/index.js +10 -27
  437. package/schema/schema.error.js +59 -72
  438. package/schema/schema.js +256 -274
  439. package/schema/schemas/any.js +7 -30
  440. package/schema/schemas/array.js +21 -44
  441. package/schema/schemas/assign.js +23 -46
  442. package/schema/schemas/boolean.js +7 -30
  443. package/schema/schemas/constraint.js +6 -29
  444. package/schema/schemas/date.js +20 -43
  445. package/schema/schemas/defaulted.js +8 -31
  446. package/schema/schemas/enumeration.js +15 -38
  447. package/schema/schemas/index.js +26 -43
  448. package/schema/schemas/instance.js +4 -26
  449. package/schema/schemas/literal.js +15 -38
  450. package/schema/schemas/nullable.js +7 -30
  451. package/schema/schemas/number.js +25 -48
  452. package/schema/schemas/object.js +10 -34
  453. package/schema/schemas/omit.js +14 -37
  454. package/schema/schemas/one-or-many.js +13 -35
  455. package/schema/schemas/optional.js +6 -30
  456. package/schema/schemas/partial.js +16 -39
  457. package/schema/schemas/pick.js +14 -37
  458. package/schema/schemas/readable-stream.js +7 -30
  459. package/schema/schemas/record.js +9 -31
  460. package/schema/schemas/regexp.js +7 -30
  461. package/schema/schemas/string.js +36 -59
  462. package/schema/schemas/transform.js +6 -29
  463. package/schema/schemas/uint8-array.js +27 -50
  464. package/schema/schemas/union.js +11 -34
  465. package/schema/schemas/unknown.js +7 -30
  466. package/schema/transformers/generic.js +16 -39
  467. package/schema/transformers/index.js +4 -21
  468. package/schema/transformers/lowercase.js +10 -33
  469. package/schema/transformers/trim.js +10 -33
  470. package/schema/transformers/uppercase.js +10 -33
  471. package/schema/types/index.js +5 -22
  472. package/schema/types/schema-array-constraint.js +1 -24
  473. package/schema/types/schema-value-coercer.js +1 -24
  474. package/schema/types/schema-value-constraint.js +1 -24
  475. package/schema/types/schema-value-transformer.js +1 -24
  476. package/schema/types/types.js +161 -191
  477. package/schema/utils/index.js +2 -19
  478. package/schema/utils/schema.js +120 -142
  479. package/schema/utils/value-type.js +51 -74
  480. package/search-index/elastic/config.js +21 -50
  481. package/search-index/elastic/index.js +6 -23
  482. package/search-index/elastic/keyword-rewriter.js +17 -40
  483. package/search-index/elastic/model/elastic-query.js +1 -16
  484. package/search-index/elastic/model/index-mapping.js +4 -26
  485. package/search-index/elastic/model/index.js +3 -20
  486. package/search-index/elastic/model/sort.js +1 -16
  487. package/search-index/elastic/module.js +43 -68
  488. package/search-index/elastic/query-builder/boolean-query-builder.js +46 -69
  489. package/search-index/elastic/query-builder/index.js +1 -18
  490. package/search-index/elastic/query-converter.js +174 -192
  491. package/search-index/elastic/search-index.js +132 -153
  492. package/search-index/elastic/sort-converter.js +12 -34
  493. package/search-index/elastic/types.js +1 -16
  494. package/search-index/error.js +12 -35
  495. package/search-index/index.js +3 -20
  496. package/search-index/memory/index.js +1 -18
  497. package/search-index/memory/memory-search-index.js +130 -152
  498. package/search-index/search-index.js +30 -53
  499. package/search-index/search-result.js +1 -16
  500. package/serializer/handlers/binary.js +19 -47
  501. package/serializer/handlers/date.js +4 -28
  502. package/serializer/handlers/error.js +7 -31
  503. package/serializer/handlers/index.js +7 -24
  504. package/serializer/handlers/map.js +16 -40
  505. package/serializer/handlers/regex.js +7 -31
  506. package/serializer/handlers/register.js +36 -59
  507. package/serializer/handlers/set.js +13 -37
  508. package/serializer/index.js +3 -30
  509. package/serializer/serializable.js +43 -68
  510. package/serializer/serializer.js +244 -264
  511. package/serializer/types.js +6 -34
  512. package/signals/api.js +18 -46
  513. package/signals/computed-with-dependencies.js +8 -31
  514. package/signals/effect-with-dependencies.js +8 -31
  515. package/signals/implementation/api.js +25 -30
  516. package/signals/implementation/computed.js +77 -73
  517. package/signals/implementation/configure.js +18 -41
  518. package/signals/implementation/effect.js +49 -66
  519. package/signals/implementation/errors.js +5 -29
  520. package/signals/implementation/graph.js +232 -176
  521. package/signals/implementation/index.js +10 -27
  522. package/signals/implementation/signal.js +62 -76
  523. package/signals/implementation/to-observable.js +21 -38
  524. package/signals/implementation/to-signal.js +44 -60
  525. package/signals/implementation/untracked.js +15 -31
  526. package/signals/implementation/watch.js +41 -64
  527. package/signals/index.js +9 -26
  528. package/signals/lazylize.js +4 -27
  529. package/signals/pipe.js +9 -33
  530. package/signals/switch-map.js +4 -27
  531. package/signals/to-signal-2.js +38 -61
  532. package/signals/types.js +1 -16
  533. package/signals/untracked-operator.js +11 -33
  534. package/sse/index.d.ts +1 -0
  535. package/sse/index.js +3 -19
  536. package/sse/model.js +1 -16
  537. package/sse/server-sent-events-source.js +54 -76
  538. package/sse/server-sent-events.js +48 -72
  539. package/supports.js +5 -32
  540. package/templates/index.js +9 -26
  541. package/templates/module.js +27 -48
  542. package/templates/providers/file.template-provider.js +41 -82
  543. package/templates/providers/index.d.ts +2 -0
  544. package/templates/providers/index.js +2 -0
  545. package/templates/providers/memory.template-provider.js +28 -55
  546. package/templates/renderers/handlebars.template-renderer.js +85 -122
  547. package/templates/renderers/index.d.ts +4 -0
  548. package/templates/renderers/index.js +4 -0
  549. package/templates/renderers/jsx.template-renderer.js +29 -56
  550. package/templates/renderers/mjml.template-renderer.js +43 -82
  551. package/templates/renderers/string.template-renderer.js +25 -52
  552. package/templates/resolvers/file.template-resolver.js +47 -90
  553. package/templates/resolvers/index.d.ts +3 -0
  554. package/templates/resolvers/index.js +3 -0
  555. package/templates/resolvers/jsx.template-resolver.js +30 -59
  556. package/templates/resolvers/string.template-resolver.js +30 -59
  557. package/templates/template-renderer.provider.js +37 -66
  558. package/templates/template-resolver.provider.js +37 -66
  559. package/templates/template.model.js +40 -69
  560. package/templates/template.provider.js +1 -24
  561. package/templates/template.renderer.js +11 -34
  562. package/templates/template.resolver.js +1 -24
  563. package/templates/template.service.js +50 -82
  564. package/templates/tokens.js +3 -27
  565. package/templates/types/index.d.ts +1 -0
  566. package/templates/types/index.js +1 -0
  567. package/templates/types/jsx.intrinsic-elements.js +1 -16
  568. package/text/dynamic-text.model.js +40 -69
  569. package/text/index.js +3 -20
  570. package/text/localizable-text.model.js +1 -16
  571. package/text/localization.service.js +197 -229
  572. package/theme/adapters/css-adapter.js +23 -46
  573. package/theme/adapters/index.d.ts +2 -0
  574. package/theme/adapters/index.js +2 -0
  575. package/theme/adapters/tailwind-adapter.js +29 -52
  576. package/theme/index.js +1 -18
  577. package/theme/theme-service.js +109 -147
  578. package/threading/index.js +2 -19
  579. package/threading/thread-pool.js +48 -70
  580. package/threading/thread-worker.js +3 -26
  581. package/tokens.js +2 -25
  582. package/types/geo-json.js +1 -16
  583. package/types.js +2 -16
  584. package/utils/alphabet.js +12 -35
  585. package/utils/any-iterable-iterator.js +4 -27
  586. package/utils/array/array-backtracker.js +42 -65
  587. package/utils/array/array.js +76 -79
  588. package/utils/array/index.js +2 -19
  589. package/utils/async-iterable-helpers/all.js +25 -46
  590. package/utils/async-iterable-helpers/any.js +25 -46
  591. package/utils/async-iterable-helpers/assert.js +22 -43
  592. package/utils/async-iterable-helpers/batch.js +26 -46
  593. package/utils/async-iterable-helpers/buffer.js +47 -64
  594. package/utils/async-iterable-helpers/concat.js +5 -27
  595. package/utils/async-iterable-helpers/default-if-empty.js +9 -32
  596. package/utils/async-iterable-helpers/deferred.js +3 -26
  597. package/utils/async-iterable-helpers/difference.js +24 -48
  598. package/utils/async-iterable-helpers/distinct.js +23 -44
  599. package/utils/async-iterable-helpers/drain.js +4 -26
  600. package/utils/async-iterable-helpers/filter.js +23 -44
  601. package/utils/async-iterable-helpers/first-or-default.js +8 -30
  602. package/utils/async-iterable-helpers/first.js +8 -30
  603. package/utils/async-iterable-helpers/for-each.js +18 -38
  604. package/utils/async-iterable-helpers/group-single.js +3 -26
  605. package/utils/async-iterable-helpers/group-to-map.js +20 -41
  606. package/utils/async-iterable-helpers/group-to-single-map.js +23 -44
  607. package/utils/async-iterable-helpers/group.js +3 -26
  608. package/utils/async-iterable-helpers/includes.js +7 -28
  609. package/utils/async-iterable-helpers/index.js +48 -65
  610. package/utils/async-iterable-helpers/interrupt.js +19 -43
  611. package/utils/async-iterable-helpers/is-async-iterable.js +5 -29
  612. package/utils/async-iterable-helpers/last-or-default.js +13 -36
  613. package/utils/async-iterable-helpers/last.js +13 -36
  614. package/utils/async-iterable-helpers/map-many.js +19 -40
  615. package/utils/async-iterable-helpers/map.js +19 -40
  616. package/utils/async-iterable-helpers/materialize.js +21 -42
  617. package/utils/async-iterable-helpers/metadata.js +36 -54
  618. package/utils/async-iterable-helpers/multiplex.js +23 -44
  619. package/utils/async-iterable-helpers/observable-iterable.js +31 -53
  620. package/utils/async-iterable-helpers/pairwise.js +26 -44
  621. package/utils/async-iterable-helpers/parallel/feed.js +24 -45
  622. package/utils/async-iterable-helpers/parallel/filter.js +8 -31
  623. package/utils/async-iterable-helpers/parallel/for-each.js +21 -44
  624. package/utils/async-iterable-helpers/parallel/group.js +9 -32
  625. package/utils/async-iterable-helpers/parallel/index.js +7 -24
  626. package/utils/async-iterable-helpers/parallel/map.js +6 -29
  627. package/utils/async-iterable-helpers/parallel/tap.js +6 -29
  628. package/utils/async-iterable-helpers/parallel/types.js +1 -16
  629. package/utils/async-iterable-helpers/reduce.js +31 -46
  630. package/utils/async-iterable-helpers/retry.js +43 -58
  631. package/utils/async-iterable-helpers/single-or-default.js +17 -40
  632. package/utils/async-iterable-helpers/single.js +19 -42
  633. package/utils/async-iterable-helpers/skip.js +3 -26
  634. package/utils/async-iterable-helpers/sort.js +6 -29
  635. package/utils/async-iterable-helpers/take-until.js +32 -49
  636. package/utils/async-iterable-helpers/take-while.js +29 -46
  637. package/utils/async-iterable-helpers/take.js +23 -44
  638. package/utils/async-iterable-helpers/tap.js +19 -40
  639. package/utils/async-iterable-helpers/throttle.js +9 -30
  640. package/utils/async-iterable-helpers/to-array.js +10 -33
  641. package/utils/async-iterable-helpers/to-async-iterable-iterator.js +40 -59
  642. package/utils/async-iterable-helpers/to-async-iterator.js +32 -54
  643. package/utils/async-iterable-helpers/to-set.js +10 -33
  644. package/utils/async-iterable-helpers/to-sync-iterable.js +6 -27
  645. package/utils/async-iterable-helpers/types.js +1 -16
  646. package/utils/async-iterable-helpers/while.js +25 -46
  647. package/utils/async-iterator-iterable-iterator.js +41 -62
  648. package/utils/backoff.js +109 -109
  649. package/utils/base64.js +153 -140
  650. package/utils/benchmark.js +114 -107
  651. package/utils/binary-search.js +70 -87
  652. package/utils/binary.js +50 -61
  653. package/utils/clone.js +43 -64
  654. package/utils/comparison.js +76 -98
  655. package/utils/compression.js +107 -118
  656. package/utils/config-parser.js +21 -48
  657. package/utils/crc32.js +20 -42
  658. package/utils/cryptography.js +163 -121
  659. package/utils/date-time.js +102 -138
  660. package/utils/encoding.js +62 -60
  661. package/utils/enum.js +27 -53
  662. package/utils/equals.js +103 -119
  663. package/utils/event-loop.js +19 -39
  664. package/utils/factory-map.js +53 -75
  665. package/utils/feedable-async-iterable.js +47 -70
  666. package/utils/file-reader.js +15 -41
  667. package/utils/format-error.js +36 -57
  668. package/utils/format.js +32 -53
  669. package/utils/function/index.js +2 -19
  670. package/utils/function/memoize.js +38 -53
  671. package/utils/function/throttle.js +26 -48
  672. package/utils/helpers.js +93 -102
  673. package/utils/image.js +62 -88
  674. package/utils/index.js +47 -64
  675. package/utils/iterable-helpers/all.js +8 -31
  676. package/utils/iterable-helpers/any.js +8 -31
  677. package/utils/iterable-helpers/assert.js +7 -30
  678. package/utils/iterable-helpers/batch.js +11 -34
  679. package/utils/iterable-helpers/concat.js +4 -27
  680. package/utils/iterable-helpers/default-if-empty.js +9 -32
  681. package/utils/iterable-helpers/deferred.js +2 -25
  682. package/utils/iterable-helpers/difference.js +21 -45
  683. package/utils/iterable-helpers/distinct.js +9 -32
  684. package/utils/iterable-helpers/drain.js +4 -26
  685. package/utils/iterable-helpers/filter.js +7 -30
  686. package/utils/iterable-helpers/first-or-default.js +8 -30
  687. package/utils/iterable-helpers/first.js +8 -30
  688. package/utils/iterable-helpers/for-each.js +5 -28
  689. package/utils/iterable-helpers/group-single.js +3 -26
  690. package/utils/iterable-helpers/group-to-map.js +9 -32
  691. package/utils/iterable-helpers/group-to-single-map.js +10 -33
  692. package/utils/iterable-helpers/group.js +3 -26
  693. package/utils/iterable-helpers/includes.js +3 -26
  694. package/utils/iterable-helpers/index.js +39 -56
  695. package/utils/iterable-helpers/is-iterable.js +5 -29
  696. package/utils/iterable-helpers/last-or-default.js +13 -36
  697. package/utils/iterable-helpers/last.js +13 -36
  698. package/utils/iterable-helpers/map-many.js +6 -29
  699. package/utils/iterable-helpers/map.js +6 -29
  700. package/utils/iterable-helpers/materialize.js +2 -25
  701. package/utils/iterable-helpers/metadata.js +16 -38
  702. package/utils/iterable-helpers/pairwise.js +11 -33
  703. package/utils/iterable-helpers/range.js +4 -27
  704. package/utils/iterable-helpers/reduce.js +11 -33
  705. package/utils/iterable-helpers/single-or-default.js +14 -37
  706. package/utils/iterable-helpers/single.js +17 -40
  707. package/utils/iterable-helpers/skip.js +6 -29
  708. package/utils/iterable-helpers/sort.js +4 -27
  709. package/utils/iterable-helpers/take-until.js +8 -31
  710. package/utils/iterable-helpers/take-while.js +10 -33
  711. package/utils/iterable-helpers/take.js +10 -33
  712. package/utils/iterable-helpers/tap.js +6 -29
  713. package/utils/iterable-helpers/types.js +1 -16
  714. package/utils/iterable-helpers/while.js +8 -31
  715. package/utils/jwt.js +77 -100
  716. package/utils/map.js +35 -62
  717. package/utils/math.js +102 -64
  718. package/utils/merge.js +26 -45
  719. package/utils/middleware.js +36 -60
  720. package/utils/moving-metric.js +155 -188
  721. package/utils/noop.js +4 -27
  722. package/utils/object/decycle.js +57 -78
  723. package/utils/object/dereference.js +46 -44
  724. package/utils/object/forward-ref.js +59 -73
  725. package/utils/object/index.js +7 -24
  726. package/utils/object/lazy-property.js +81 -96
  727. package/utils/object/merge.js +48 -70
  728. package/utils/object/object.js +106 -136
  729. package/utils/object/property-name.js +69 -72
  730. package/utils/ordered-feedable-async-iterable.js +42 -65
  731. package/utils/patch-worker.js +69 -90
  732. package/utils/patterns.js +7 -29
  733. package/utils/periodic-reporter.js +60 -82
  734. package/utils/periodic-sampler.js +67 -91
  735. package/utils/provider-function-iterable.js +26 -48
  736. package/utils/proxy.js +17 -42
  737. package/utils/random.js +40 -50
  738. package/utils/reflection.js +13 -41
  739. package/utils/repl.js +14 -33
  740. package/utils/set.js +36 -62
  741. package/utils/singleton.js +18 -41
  742. package/utils/sort.js +53 -77
  743. package/utils/stream/finalize-stream.js +43 -62
  744. package/utils/stream/index.js +6 -23
  745. package/utils/stream/readable-stream-adapter.js +35 -57
  746. package/utils/stream/readable-stream-from-promise.js +7 -28
  747. package/utils/stream/size-limited-stream.js +12 -35
  748. package/utils/stream/stream-helper-types.js +1 -16
  749. package/utils/stream/stream-reader.js +30 -52
  750. package/utils/string/hypenate.js +2 -25
  751. package/utils/string/index.js +3 -20
  752. package/utils/string/title-case.js +6 -26
  753. package/utils/string/trim.js +9 -32
  754. package/utils/throw.js +7 -30
  755. package/utils/timer.js +70 -91
  756. package/utils/timing.js +52 -80
  757. package/utils/type-guards.js +253 -1076
  758. package/utils/type-of.js +25 -43
  759. package/utils/units.js +53 -124
  760. package/utils/url-builder.js +47 -68
  761. package/utils/value-or-provider.js +19 -44
  762. package/utils/z-base32.js +42 -63
  763. package/web-types.js +1 -16
  764. package/async-iterator-symbol.d.ts +0 -1
  765. package/async-iterator-symbol.js +0 -29
  766. package/mail/mail-log.repository.d.ts +0 -4
  767. package/mail/mail-log.repository.js +0 -26
  768. package/mail/repositories/mongo-mail-log.repository.js +0 -64
  769. package/notification/api.d.ts +0 -15
  770. package/notification/api.js +0 -56
  771. package/notification/models/index.d.ts +0 -2
  772. package/notification/models/index.js +0 -19
  773. package/notification/models/notification-channel-job.model.d.ts +0 -3
  774. package/notification/models/notification-channel-job.model.js +0 -16
  775. package/notification/models/notification.model.d.ts +0 -45
  776. package/notification/models/notification.model.js +0 -131
  777. package/notification/module.d.ts +0 -9
  778. package/notification/module.js +0 -30
  779. package/notification/notification-channel.service.d.ts +0 -5
  780. package/notification/notification-channel.service.js +0 -25
  781. package/notification/notification.repository.d.ts +0 -5
  782. package/notification/notification.repository.js +0 -25
  783. package/notification/notification.service.d.ts +0 -8
  784. package/notification/notification.service.js +0 -63
@@ -1,304 +1,278 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var mongo_entity_repository_exports = {};
20
- __export(mongo_entity_repository_exports, {
21
- MongoEntityRepository: () => MongoEntityRepository,
22
- getNoopTransformer: () => getNoopTransformer,
23
- mapTo: () => mapTo,
24
- noopTransformer: () => noopTransformer,
25
- noopTransformerFunction: () => noopTransformerFunction
26
- });
27
- module.exports = __toCommonJS(mongo_entity_repository_exports);
28
- var import_database = require("../../database/index.js");
29
- var import_injector = require("../../injector/index.js");
30
- var import_equals = require("../../utils/equals.js");
31
- var import_object = require("../../utils/object/object.js");
32
- var import_throw = require("../../utils/throw.js");
33
- var import_type_guards = require("../../utils/type-guards.js");
34
- var import_mongo_base_repository = require("./mongo-base.repository.js");
35
- var import_query_converter = require("./query-converter.js");
36
- function mapTo(key, transform) {
37
- return { key, transform };
1
+ import { EntityRepository } from '../../database/index.js';
2
+ import { afterResolve } from '../../injector/index.js';
3
+ import { equals } from '../../utils/equals.js';
4
+ import { filterUndefinedFromRecord, objectEntries, objectKeys } from '../../utils/object/object.js';
5
+ import { _throw } from '../../utils/throw.js';
6
+ import { isDefined, isUndefined } from '../../utils/type-guards.js';
7
+ import { MongoBaseRepository } from './mongo-base.repository.js';
8
+ import { convertQuery, convertSort } from './query-converter.js';
9
+ export function mapTo(key, transform) {
10
+ return { key, transform };
38
11
  }
39
- const noopTransformerFunction = (item) => item;
40
- const noopTransformer = {
41
- transform: noopTransformerFunction,
42
- untransform: noopTransformerFunction
12
+ export const noopTransformerFunction = (item) => item;
13
+ export const noopTransformer = {
14
+ transform: noopTransformerFunction,
15
+ untransform: noopTransformerFunction
43
16
  };
44
- function getNoopTransformer() {
45
- return noopTransformer;
17
+ export function getNoopTransformer() {
18
+ return noopTransformer;
46
19
  }
47
- class MongoEntityRepository extends import_database.EntityRepository {
48
- collection;
49
- transformer;
50
- logger;
51
- indexes;
52
- baseRepository;
53
- transformerMappingMap;
54
- constructor(collection, transformer, { logger, indexes }) {
55
- super();
56
- this.collection = collection;
57
- this.transformer = transformer;
58
- this.logger = logger.prefix(`${collection.collectionName}: `);
59
- this.indexes = indexes?.map(normalizeIndex);
60
- this.baseRepository = new import_mongo_base_repository.MongoBaseRepository(collection);
61
- this.transformerMappingMap = new Map((0, import_object.objectEntries)(transformer.mapping ?? {}));
62
- }
63
- async [import_injector.afterResolve]() {
64
- await this.initialize();
65
- }
66
- async initialize() {
67
- const indexes = this.indexes?.map((index) => ({ index, normalizedIndex: normalizeIndex(index) }));
68
- if ((0, import_type_guards.isUndefined)(indexes)) {
69
- return;
70
- }
71
- const existingRawIndexes = await this.collection.indexes();
72
- const existingIndexes = existingRawIndexes.map(normalizeIndex).filter((index) => index.name != "_id_");
73
- const unwantedIndexes = existingIndexes.filter((existingIndex) => !indexes.some(({ normalizedIndex }) => (0, import_equals.equals)(existingIndex, normalizedIndex, { deep: true, sortArray: false })));
74
- const requiredIndexes = indexes.filter(({ normalizedIndex: wantedNormalizedIndex }) => !existingIndexes.some((index) => (0, import_equals.equals)(wantedNormalizedIndex, index, { deep: true, sortArray: false })));
75
- for (const unwantedIndex of unwantedIndexes) {
76
- this.logger.warn(`dropping index ${unwantedIndex.name}`);
77
- await this.collection.dropIndex(unwantedIndex.name);
78
- }
79
- if (requiredIndexes.length > 0) {
80
- const indexexToCreate = requiredIndexes.map(({ index }) => index);
81
- const indexNames = indexexToCreate.map((index) => index.name ?? (0, import_throw._throw)(new Error("index name missing")));
82
- this.logger.warn(`creating indexes ${indexNames.join(", ")}`);
83
- await this.baseRepository.createIndexes(indexexToCreate);
84
- }
85
- }
86
- async load(id) {
87
- return this.loadByFilter({ id });
88
- }
89
- async tryLoad(id) {
90
- return this.tryLoadByFilter({ id });
91
- }
92
- async loadMany(ids, options) {
93
- return this.loadManyByFilter({ id: { $in: ids } }, options);
94
- }
95
- // eslint-disable-next-line @typescript-eslint/require-await
96
- async *loadManyCursor(ids, options) {
97
- yield* this.loadManyByFilterCursor({ id: { $in: ids } }, options);
98
- }
99
- async loadByFilter(filter, options) {
100
- const transformedFilter = this.transformFilter(filter);
101
- const entity = await this.baseRepository.loadByFilter(transformedFilter, convertOptions(options, this.transformerMappingMap));
102
- return this.transformer.untransform(entity);
103
- }
104
- async tryLoadByFilter(filter, options) {
105
- const transformedFilter = this.transformFilter(filter);
106
- const entity = await this.baseRepository.tryLoadByFilter(transformedFilter, convertOptions(options, this.transformerMappingMap));
107
- return entity == void 0 ? void 0 : this.transformer.untransform(entity);
108
- }
109
- async loadManyByFilter(filter, options) {
110
- const transformedFilter = this.transformFilter(filter);
111
- const entities = await this.baseRepository.loadManyByFilter(transformedFilter, convertOptions(options, this.transformerMappingMap));
112
- return entities.map(this.transformer.untransform);
113
- }
114
- async *loadManyByFilterCursor(filter, options) {
115
- const transformedFilter = this.transformFilter(filter);
116
- for await (const entity of this.baseRepository.loadManyByFilterWithCursor(transformedFilter, convertOptions(options, this.transformerMappingMap))) {
117
- yield this.transformer.untransform(entity);
118
- }
119
- }
120
- async loadAll(options) {
121
- const entities = await this.baseRepository.loadManyByFilter({}, convertOptions(options, this.transformerMappingMap));
122
- return entities.map((entity) => this.transformer.untransform(entity));
123
- }
124
- async *loadAllCursor(options) {
125
- for await (const entity of this.baseRepository.loadManyByFilterWithCursor({}, convertOptions(options, this.transformerMappingMap))) {
126
- yield this.transformer.untransform(entity);
127
- }
128
- }
129
- async loadAndDelete(id) {
130
- return this.loadByFilterAndDelete({ id });
131
- }
132
- async tryLoadAndDelete(id) {
133
- return this.tryLoadByFilterAndDelete({ id });
134
- }
135
- async loadByFilterAndDelete(filter, options) {
136
- const transformedFilter = this.transformFilter(filter);
137
- const entity = await this.baseRepository.loadByFilterAndDelete(transformedFilter, convertOptions(options, this.transformerMappingMap));
138
- return this.transformer.untransform(entity);
139
- }
140
- async tryLoadByFilterAndDelete(filter, options) {
141
- const transformedFilter = this.transformFilter(filter);
142
- const entity = await this.baseRepository.tryLoadByFilterAndDelete(transformedFilter, convertOptions(options, this.transformerMappingMap));
143
- return entity == void 0 ? void 0 : this.transformer.untransform(entity);
144
- }
145
- async loadAndPatch(id, patch, includePatch) {
146
- return this.loadByFilterAndPatch({ id }, patch, includePatch);
147
- }
148
- async tryLoadAndPatch(id, patch, includePatch) {
149
- return this.tryLoadByFilterAndPatch({ id }, patch, includePatch);
150
- }
151
- async loadByFilterAndPatch(filter, patch, includePatch, options) {
152
- const transformedFilter = this.transformFilter(filter);
153
- const update = this.transformPatch(patch);
154
- const loadOptions = convertOptions(options, this.transformerMappingMap) ?? {};
155
- const entity = await this.baseRepository.loadByFilterAndUpdate(transformedFilter, update, { ...loadOptions, returnDocument: includePatch ? "after" : "before" });
156
- return this.transformer.untransform(entity);
157
- }
158
- async tryLoadByFilterAndPatch(filter, patch, includePatch, options) {
159
- const transformedFilter = this.transformFilter(filter);
160
- const update = this.transformPatch(patch);
161
- const loadOptions = convertOptions(options, this.transformerMappingMap) ?? {};
162
- const entity = await this.baseRepository.tryLoadByFilterAndUpdate(transformedFilter, update, { ...loadOptions, returnDocument: includePatch ? "after" : "before" });
163
- return entity == void 0 ? void 0 : this.transformer.untransform(entity);
164
- }
165
- async has(id) {
166
- return this.hasByFilter({ id });
167
- }
168
- async hasByFilter(filter) {
169
- const transformedFilter = this.transformFilter(filter);
170
- return this.baseRepository.hasByFilter(transformedFilter);
171
- }
172
- async hasMany(ids) {
173
- const transformedFilter = this.transformFilter({ id: { $in: ids } });
174
- return this.baseRepository.getIdsByFilter(transformedFilter);
175
- }
176
- async hasAll(ids) {
177
- const transformedFilter = this.transformFilter({ id: { $in: ids } });
178
- const count = await this.baseRepository.countByFilter(transformedFilter);
179
- return count == ids.length;
180
- }
181
- async count(allowEstimation = false) {
182
- if (allowEstimation) {
183
- return this.baseRepository.countByFilterEstimated();
184
- }
185
- return this.baseRepository.countByFilter({});
186
- }
187
- async countByFilter(filter, _allowEstimation = false) {
188
- const transformedFilter = this.transformFilter(filter);
189
- return this.baseRepository.countByFilter(transformedFilter);
190
- }
191
- async patch(entity, patch) {
192
- return this.patchByFilter({ _id: entity.id }, patch);
193
- }
194
- async patchMany(entities, patch) {
195
- const ids = entities.map((entity) => entity.id);
196
- return this.patchManyByFilter({ _id: { $in: ids } }, patch);
197
- }
198
- async patchByFilter(filter, patch) {
199
- const transformedFilter = this.transformFilter(filter);
200
- const transformedPatch = this.transformPatch(patch);
201
- const { matchedCount } = await this.baseRepository.update(transformedFilter, transformedPatch);
202
- return matchedCount > 0;
203
- }
204
- async patchManyByFilter(filter, patch) {
205
- const transformedFilter = this.transformFilter(filter);
206
- const transformedPatch = this.transformPatch(patch);
207
- const { matchedCount } = await this.baseRepository.updateMany(transformedFilter, transformedPatch);
208
- return matchedCount;
209
- }
210
- async insert(entity) {
211
- const transformed = this.transformer.transform(entity);
212
- const insertedEntity = await this.baseRepository.insert(transformed);
213
- return this.transformer.untransform(insertedEntity);
214
- }
215
- async insertMany(entities) {
216
- const transformed = entities.map((entity) => this.transformer.transform(entity));
217
- const insertedEntities = await this.baseRepository.insertMany(transformed);
218
- return insertedEntities.map((insertedEntity) => this.transformer.untransform(insertedEntity));
219
- }
220
- async insertIfNotExists(entity) {
221
- const transformed = this.transformer.transform(entity);
222
- const insertedEntity = await this.baseRepository.insertIfNotExists(transformed);
223
- return (0, import_type_guards.isUndefined)(insertedEntity) ? void 0 : this.transformer.untransform(insertedEntity);
224
- }
225
- async insertManyIfNotExists(entities) {
226
- const transformed = entities.map((entity) => this.transformer.transform(entity));
227
- const insertedEntities = await this.baseRepository.insertManyIfNotExists(transformed);
228
- return insertedEntities.map((insertedEntity) => this.transformer.untransform(insertedEntity));
229
- }
230
- async insertIfNotExistsByFilter(query, entity) {
231
- const transformedFilter = this.transformFilter(query);
232
- const transformed = this.transformer.transform(entity);
233
- const document = await this.baseRepository.insertIfNotExistsByFilter(transformedFilter, transformed);
234
- return (0, import_type_guards.isUndefined)(document) ? void 0 : this.transformer.untransform(document);
235
- }
236
- async insertManyIfNotExistsByFilter(items) {
237
- const transformedItems = items.map((item) => ({
238
- filter: this.transformFilter(item.query),
239
- entity: this.transformer.transform(item.entity)
240
- }));
241
- const insertedEntities = await this.baseRepository.insertManyIfNotExistsByFilter(transformedItems);
242
- return insertedEntities.map((insertedEntity) => this.transformer.untransform(insertedEntity));
243
- }
244
- async update(entity, options) {
245
- const transformed = this.transformer.transform(entity);
246
- return this.baseRepository.replace(transformed, options);
247
- }
248
- async updateMany(entities, options) {
249
- const transformed = entities.map((entity) => this.transformer.transform(entity));
250
- return this.baseRepository.replaceMany(transformed, options);
251
- }
252
- async delete(entity) {
253
- return this.deleteById(entity.id);
254
- }
255
- async deleteMany(entities) {
256
- const ids = entities.map((entity) => entity.id);
257
- return this.deleteManyByFilter({ id: { $in: ids } });
258
- }
259
- async deleteById(id) {
260
- return this.deleteByFilter({ id });
261
- }
262
- async deleteManyById(ids) {
263
- return this.deleteManyByFilter({ id: { $in: ids } });
264
- }
265
- async deleteByFilter(filter) {
266
- const transformedFilter = this.transformFilter(filter);
267
- return this.baseRepository.deleteByFilter(transformedFilter);
268
- }
269
- async deleteManyByFilter(filter) {
270
- const transformedFilter = this.transformFilter(filter);
271
- return this.baseRepository.deleteManyByFilter(transformedFilter);
272
- }
273
- transformFilter(filter) {
274
- return (0, import_query_converter.convertQuery)(filter, this.transformerMappingMap);
275
- }
276
- transformPatch(patch) {
277
- const transformedPatch = {};
278
- for (const [property, value] of (0, import_object.objectEntries)(patch)) {
279
- const mapping = this.transformerMappingMap.get(property);
280
- if ((0, import_type_guards.isDefined)(mapping)) {
281
- transformedPatch[mapping.key] = mapping.transform(value);
282
- } else {
283
- transformedPatch[property] = value;
284
- }
285
- }
286
- return { $set: { ...transformedPatch } };
287
- }
20
+ export class MongoEntityRepository extends EntityRepository {
21
+ collection;
22
+ transformer;
23
+ logger;
24
+ indexes;
25
+ baseRepository;
26
+ transformerMappingMap;
27
+ constructor(collection, transformer, { logger, indexes }) {
28
+ super();
29
+ this.collection = collection;
30
+ this.transformer = transformer;
31
+ this.logger = logger.prefix(`${collection.collectionName}: `);
32
+ this.indexes = indexes?.map(normalizeIndex);
33
+ this.baseRepository = new MongoBaseRepository(collection);
34
+ this.transformerMappingMap = new Map(objectEntries(transformer.mapping ?? {}));
35
+ }
36
+ async [afterResolve]() {
37
+ await this.initialize();
38
+ }
39
+ async initialize() {
40
+ const indexes = this.indexes?.map((index) => ({ index, normalizedIndex: normalizeIndex(index) }));
41
+ if (isUndefined(indexes)) {
42
+ return;
43
+ }
44
+ const existingRawIndexes = await this.collection.indexes();
45
+ const existingIndexes = existingRawIndexes.map(normalizeIndex).filter((index) => index.name != '_id_');
46
+ const unwantedIndexes = existingIndexes.filter((existingIndex) => !indexes.some(({ normalizedIndex }) => equals(existingIndex, normalizedIndex, { deep: true, sortArray: false })));
47
+ const requiredIndexes = indexes.filter(({ normalizedIndex: wantedNormalizedIndex }) => !existingIndexes.some((index) => equals(wantedNormalizedIndex, index, { deep: true, sortArray: false })));
48
+ for (const unwantedIndex of unwantedIndexes) {
49
+ this.logger.warn(`dropping index ${unwantedIndex.name}`);
50
+ await this.collection.dropIndex(unwantedIndex.name);
51
+ }
52
+ if (requiredIndexes.length > 0) {
53
+ const indexexToCreate = requiredIndexes.map(({ index }) => index);
54
+ const indexNames = indexexToCreate.map((index) => index.name ?? _throw(new Error('index name missing')));
55
+ this.logger.warn(`creating indexes ${indexNames.join(', ')}`);
56
+ await this.baseRepository.createIndexes(indexexToCreate);
57
+ }
58
+ }
59
+ async load(id) {
60
+ return this.loadByFilter({ id });
61
+ }
62
+ async tryLoad(id) {
63
+ return this.tryLoadByFilter({ id });
64
+ }
65
+ async loadMany(ids, options) {
66
+ return this.loadManyByFilter({ id: { $in: ids } }, options);
67
+ }
68
+ // eslint-disable-next-line @typescript-eslint/require-await
69
+ async *loadManyCursor(ids, options) {
70
+ yield* this.loadManyByFilterCursor({ id: { $in: ids } }, options);
71
+ }
72
+ async loadByFilter(filter, options) {
73
+ const transformedFilter = this.transformFilter(filter);
74
+ const entity = await this.baseRepository.loadByFilter(transformedFilter, convertOptions(options, this.transformerMappingMap));
75
+ return this.transformer.untransform(entity);
76
+ }
77
+ async tryLoadByFilter(filter, options) {
78
+ const transformedFilter = this.transformFilter(filter);
79
+ const entity = await this.baseRepository.tryLoadByFilter(transformedFilter, convertOptions(options, this.transformerMappingMap));
80
+ return entity == undefined ? undefined : this.transformer.untransform(entity);
81
+ }
82
+ async loadManyByFilter(filter, options) {
83
+ const transformedFilter = this.transformFilter(filter);
84
+ const entities = await this.baseRepository.loadManyByFilter(transformedFilter, convertOptions(options, this.transformerMappingMap));
85
+ return entities.map(this.transformer.untransform);
86
+ }
87
+ async *loadManyByFilterCursor(filter, options) {
88
+ const transformedFilter = this.transformFilter(filter);
89
+ for await (const entity of this.baseRepository.loadManyByFilterWithCursor(transformedFilter, convertOptions(options, this.transformerMappingMap))) {
90
+ yield this.transformer.untransform(entity);
91
+ }
92
+ }
93
+ async loadAll(options) {
94
+ const entities = await this.baseRepository.loadManyByFilter({}, convertOptions(options, this.transformerMappingMap));
95
+ return entities.map((entity) => this.transformer.untransform(entity));
96
+ }
97
+ async *loadAllCursor(options) {
98
+ for await (const entity of this.baseRepository.loadManyByFilterWithCursor({}, convertOptions(options, this.transformerMappingMap))) {
99
+ yield this.transformer.untransform(entity);
100
+ }
101
+ }
102
+ async loadAndDelete(id) {
103
+ return this.loadByFilterAndDelete({ id });
104
+ }
105
+ async tryLoadAndDelete(id) {
106
+ return this.tryLoadByFilterAndDelete({ id });
107
+ }
108
+ async loadByFilterAndDelete(filter, options) {
109
+ const transformedFilter = this.transformFilter(filter);
110
+ const entity = await this.baseRepository.loadByFilterAndDelete(transformedFilter, convertOptions(options, this.transformerMappingMap));
111
+ return this.transformer.untransform(entity);
112
+ }
113
+ async tryLoadByFilterAndDelete(filter, options) {
114
+ const transformedFilter = this.transformFilter(filter);
115
+ const entity = await this.baseRepository.tryLoadByFilterAndDelete(transformedFilter, convertOptions(options, this.transformerMappingMap));
116
+ return entity == undefined ? undefined : this.transformer.untransform(entity);
117
+ }
118
+ async loadAndPatch(id, patch, includePatch) {
119
+ return this.loadByFilterAndPatch({ id }, patch, includePatch);
120
+ }
121
+ async tryLoadAndPatch(id, patch, includePatch) {
122
+ return this.tryLoadByFilterAndPatch({ id }, patch, includePatch);
123
+ }
124
+ async loadByFilterAndPatch(filter, patch, includePatch, options) {
125
+ const transformedFilter = this.transformFilter(filter);
126
+ const update = this.transformPatch(patch);
127
+ const loadOptions = convertOptions(options, this.transformerMappingMap) ?? {};
128
+ const entity = await this.baseRepository.loadByFilterAndUpdate(transformedFilter, update, { ...loadOptions, returnDocument: includePatch ? 'after' : 'before' });
129
+ return this.transformer.untransform(entity);
130
+ }
131
+ async tryLoadByFilterAndPatch(filter, patch, includePatch, options) {
132
+ const transformedFilter = this.transformFilter(filter);
133
+ const update = this.transformPatch(patch);
134
+ const loadOptions = convertOptions(options, this.transformerMappingMap) ?? {};
135
+ const entity = await this.baseRepository.tryLoadByFilterAndUpdate(transformedFilter, update, { ...loadOptions, returnDocument: includePatch ? 'after' : 'before' });
136
+ return entity == undefined ? undefined : this.transformer.untransform(entity);
137
+ }
138
+ async has(id) {
139
+ return this.hasByFilter({ id });
140
+ }
141
+ async hasByFilter(filter) {
142
+ const transformedFilter = this.transformFilter(filter);
143
+ return this.baseRepository.hasByFilter(transformedFilter);
144
+ }
145
+ async hasMany(ids) {
146
+ const transformedFilter = this.transformFilter({ id: { $in: ids } });
147
+ return this.baseRepository.getIdsByFilter(transformedFilter);
148
+ }
149
+ async hasAll(ids) {
150
+ const transformedFilter = this.transformFilter({ id: { $in: ids } });
151
+ const count = await this.baseRepository.countByFilter(transformedFilter);
152
+ return count == ids.length;
153
+ }
154
+ async count(allowEstimation = false) {
155
+ if (allowEstimation) {
156
+ return this.baseRepository.countByFilterEstimated();
157
+ }
158
+ return this.baseRepository.countByFilter({});
159
+ }
160
+ async countByFilter(filter, _allowEstimation = false) {
161
+ const transformedFilter = this.transformFilter(filter);
162
+ return this.baseRepository.countByFilter(transformedFilter);
163
+ }
164
+ async patch(entity, patch) {
165
+ return this.patchByFilter({ _id: entity.id }, patch);
166
+ }
167
+ async patchMany(entities, patch) {
168
+ const ids = entities.map((entity) => entity.id);
169
+ return this.patchManyByFilter({ _id: { $in: ids } }, patch);
170
+ }
171
+ async patchByFilter(filter, patch) {
172
+ const transformedFilter = this.transformFilter(filter);
173
+ const transformedPatch = this.transformPatch(patch);
174
+ const { matchedCount } = await this.baseRepository.update(transformedFilter, transformedPatch);
175
+ return matchedCount > 0;
176
+ }
177
+ async patchManyByFilter(filter, patch) {
178
+ const transformedFilter = this.transformFilter(filter);
179
+ const transformedPatch = this.transformPatch(patch);
180
+ const { matchedCount } = await this.baseRepository.updateMany(transformedFilter, transformedPatch);
181
+ return matchedCount;
182
+ }
183
+ async insert(entity) {
184
+ const transformed = this.transformer.transform(entity);
185
+ const insertedEntity = await this.baseRepository.insert(transformed);
186
+ return this.transformer.untransform(insertedEntity);
187
+ }
188
+ async insertMany(entities) {
189
+ const transformed = entities.map((entity) => this.transformer.transform(entity));
190
+ const insertedEntities = await this.baseRepository.insertMany(transformed);
191
+ return insertedEntities.map((insertedEntity) => this.transformer.untransform(insertedEntity));
192
+ }
193
+ async insertIfNotExists(entity) {
194
+ const transformed = this.transformer.transform(entity);
195
+ const insertedEntity = await this.baseRepository.insertIfNotExists(transformed);
196
+ return isUndefined(insertedEntity) ? undefined : this.transformer.untransform(insertedEntity);
197
+ }
198
+ async insertManyIfNotExists(entities) {
199
+ const transformed = entities.map((entity) => this.transformer.transform(entity));
200
+ const insertedEntities = await this.baseRepository.insertManyIfNotExists(transformed);
201
+ return insertedEntities.map((insertedEntity) => this.transformer.untransform(insertedEntity));
202
+ }
203
+ async insertIfNotExistsByFilter(query, entity) {
204
+ const transformedFilter = this.transformFilter(query);
205
+ const transformed = this.transformer.transform(entity);
206
+ const document = await this.baseRepository.insertIfNotExistsByFilter(transformedFilter, transformed);
207
+ return isUndefined(document) ? undefined : this.transformer.untransform(document);
208
+ }
209
+ async insertManyIfNotExistsByFilter(items) {
210
+ const transformedItems = items.map((item) => ({
211
+ filter: this.transformFilter(item.query),
212
+ entity: this.transformer.transform(item.entity)
213
+ }));
214
+ const insertedEntities = await this.baseRepository.insertManyIfNotExistsByFilter(transformedItems);
215
+ return insertedEntities.map((insertedEntity) => this.transformer.untransform(insertedEntity));
216
+ }
217
+ async update(entity, options) {
218
+ const transformed = this.transformer.transform(entity);
219
+ return this.baseRepository.replace(transformed, options);
220
+ }
221
+ async updateMany(entities, options) {
222
+ const transformed = entities.map((entity) => this.transformer.transform(entity));
223
+ return this.baseRepository.replaceMany(transformed, options);
224
+ }
225
+ async delete(entity) {
226
+ return this.deleteById(entity.id);
227
+ }
228
+ async deleteMany(entities) {
229
+ const ids = entities.map((entity) => entity.id);
230
+ return this.deleteManyByFilter({ id: { $in: ids } });
231
+ }
232
+ async deleteById(id) {
233
+ return this.deleteByFilter({ id });
234
+ }
235
+ async deleteManyById(ids) {
236
+ return this.deleteManyByFilter({ id: { $in: ids } });
237
+ }
238
+ async deleteByFilter(filter) {
239
+ const transformedFilter = this.transformFilter(filter);
240
+ return this.baseRepository.deleteByFilter(transformedFilter);
241
+ }
242
+ async deleteManyByFilter(filter) {
243
+ const transformedFilter = this.transformFilter(filter);
244
+ return this.baseRepository.deleteManyByFilter(transformedFilter);
245
+ }
246
+ transformFilter(filter) {
247
+ return convertQuery(filter, this.transformerMappingMap);
248
+ }
249
+ transformPatch(patch) {
250
+ const transformedPatch = {};
251
+ for (const [property, value] of objectEntries(patch)) {
252
+ const mapping = this.transformerMappingMap.get(property);
253
+ if (isDefined(mapping)) {
254
+ transformedPatch[mapping.key] = mapping.transform(value);
255
+ }
256
+ else {
257
+ transformedPatch[property] = value;
258
+ }
259
+ }
260
+ return { $set: { ...transformedPatch } };
261
+ }
288
262
  }
289
263
  function normalizeIndex(index) {
290
- const { name: providedName, unique, v, background, ns, ...indexRest } = index;
291
- const name = providedName ?? (0, import_object.objectKeys)(index.key).join("_");
292
- return (0, import_object.filterUndefinedFromRecord)({ name, unique: unique == true ? true : void 0, ...indexRest });
264
+ const { name: providedName, unique, v, background, ns, ...indexRest } = index; // eslint-disable-line @typescript-eslint/no-unused-vars
265
+ const name = providedName ?? objectKeys(index.key).join('_');
266
+ return filterUndefinedFromRecord({ name, unique: (unique == true) ? true : undefined, ...indexRest });
293
267
  }
294
268
  function convertOptions(options, mappingMap) {
295
- if (options == void 0) {
296
- return void 0;
297
- }
298
- const loadOptions = {
299
- skip: options.skip,
300
- limit: options.limit,
301
- sort: options.sort?.map((item) => (0, import_query_converter.convertSort)(item, mappingMap))
302
- };
303
- return loadOptions;
269
+ if (options == undefined) {
270
+ return undefined;
271
+ }
272
+ const loadOptions = {
273
+ skip: options.skip,
274
+ limit: options.limit,
275
+ sort: options.sort?.map((item) => convertSort(item, mappingMap))
276
+ };
277
+ return loadOptions;
304
278
  }