@tstdl/base 0.85.13 → 0.86.0-beta1

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