@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,527 +1,511 @@
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 injector_exports = {};
20
- __export(injector_exports, {
21
- Injector: () => Injector
22
- });
23
- module.exports = __toCommonJS(injector_exports);
24
- var import_cancellation = require("../cancellation/index.js");
25
- var import_circular_buffer = require("../data-structures/circular-buffer.js");
26
- var import_multi_key_map = require("../data-structures/multi-key-map.js");
27
- var import_disposable = require("../disposable/disposable.js");
28
- var import_deferred_promise = require("../promise/deferred-promise.js");
29
- var import_registry = require("../reflection/registry.js");
30
- var import_array = require("../utils/array/array.js");
31
- var import_factory_map = require("../utils/factory-map.js");
32
- var import_forward_ref = require("../utils/object/forward-ref.js");
33
- var import_object = require("../utils/object/object.js");
34
- var import_type_guards = require("../utils/type-guards.js");
35
- var import_inject = require("./inject.js");
36
- var import_interfaces = require("./interfaces.js");
37
- var import_provider = require("./provider.js");
38
- var import_resolve_chain = require("./resolve-chain.js");
39
- var import_resolve_error = require("./resolve.error.js");
40
- var import_symbols = require("./symbols.js");
41
- var import_token = require("./token.js");
42
- class Injector {
43
- static #globalRegistrations = /* @__PURE__ */ new Map();
44
- #parent;
45
- #children = [];
46
- #disposeToken = new import_cancellation.CancellationToken();
47
- #disposableStack = new AsyncDisposableStack();
48
- #registrations = /* @__PURE__ */ new Map();
49
- #injectorScopedResolutions = new import_multi_key_map.MultiKeyMap();
50
- #addDisposeHandler;
51
- name;
52
- get disposed() {
53
- return this.#disposableStack.disposed;
54
- }
55
- constructor(name, parent = null) {
56
- this.name = name;
57
- this.#parent = parent;
58
- this.register(Injector, { useValue: this });
59
- this.register(import_cancellation.CancellationSignal, { useValue: this.#disposeToken.signal });
60
- this.#addDisposeHandler = (handler) => {
61
- if ((0, import_disposable.isSyncOrAsyncDisposable)(handler)) {
62
- this.#disposableStack.use(handler);
63
- } else {
64
- this.#disposableStack.defer(handler);
65
- }
66
- };
67
- this.#disposableStack.defer(() => this.#registrations.clear());
68
- this.#disposableStack.defer(() => this.#injectorScopedResolutions.clear());
69
- }
70
- /**
71
- * Globally register a provider for a token
72
- * @param token token to register
73
- * @param provider provider used to resolve the token
74
- * @param options registration options
75
- */
76
- static register(token, providers, options = {}) {
77
- for (const provider of (0, import_array.toArray)(providers)) {
78
- const registration = {
79
- token,
80
- provider,
81
- options: { multi: (0, import_type_guards.isArray)(providers), ...options }
82
- };
83
- addRegistration(Injector.#globalRegistrations, registration);
84
- }
85
- }
86
- /**
87
- * Globally register a provider for a token as a singleton. Alias for {@link register} with `singleton` lifecycle
88
- * @param token token to register
89
- * @param provider provider used to resolve the token
90
- * @param options registration options
91
- */
92
- static registerSingleton(token, providers, options) {
93
- Injector.register(token, providers, { ...options, lifecycle: "singleton" });
94
- }
95
- async dispose() {
96
- this.#disposeToken.set();
97
- await this.#disposableStack.disposeAsync();
98
- }
99
- async [Symbol.asyncDispose]() {
100
- await this.dispose();
101
- }
102
- fork(name) {
103
- const child = new Injector(name, this);
104
- this.#children.push(child);
105
- this.#disposableStack.use(child);
106
- return child;
107
- }
108
- /**
109
- * Register a provider for a token
110
- * @param token token to register
111
- * @param provider provider used to resolve the token
112
- * @param options registration options
113
- */
114
- register(token, providers, options = {}) {
115
- this.assertNotDisposed();
116
- for (const provider of (0, import_array.toArray)(providers)) {
117
- const registration = {
118
- token,
119
- provider,
120
- options: { multi: (0, import_type_guards.isArray)(providers), ...options },
121
- resolutions: /* @__PURE__ */ new Map()
122
- };
123
- addRegistration(this.#registrations, registration);
124
- }
125
- }
126
- /**
127
- * Register a provider for a token as a singleton. Alias for {@link register} with `singleton` lifecycle
128
- * @param token token to register
129
- * @param provider provider used to resolve the token
130
- * @param options registration options
131
- */
132
- registerSingleton(token, providers, options) {
133
- this.register(token, providers, { ...options, lifecycle: "singleton" });
134
- }
135
- /**
136
- * Check if token has a registered provider
137
- * @param token token check
138
- */
139
- hasRegistration(token, options) {
140
- const registration = this.tryGetRegistration(token, options);
141
- return (0, import_type_guards.isDefined)(registration);
142
- }
143
- /**
144
- * Try to get registration
145
- * @param token token to get registration for
146
- */
147
- tryGetRegistration(token, options) {
148
- if ((0, import_type_guards.isNull)(this.#parent) && !this.#registrations.has(token) && Injector.#globalRegistrations.has(token)) {
149
- const globalRegistrations = (0, import_array.toArray)(Injector.#globalRegistrations.get(token));
150
- for (const globalRegistration of globalRegistrations) {
151
- this.register(globalRegistration.token, globalRegistration.provider, globalRegistration.options);
152
- }
153
- }
154
- const ownRegistration = options?.skipSelf != true ? this.#registrations.get(token) : void 0;
155
- if ((0, import_type_guards.isDefined)(ownRegistration)) {
156
- return ownRegistration;
157
- }
158
- if (options?.onlySelf == true) {
159
- return void 0;
160
- }
161
- return this.#parent?.tryGetRegistration(token);
162
- }
163
- /**
164
- * Get registration
165
- * @param token token to get registration for
166
- */
167
- getRegistration(token, options) {
168
- const registration = this.tryGetRegistration(token, options);
169
- if ((0, import_type_guards.isUndefined)(registration)) {
170
- const tokenName = (0, import_token.getTokenName)(token);
171
- throw new Error(`No provider for ${tokenName} registered.`);
172
- }
173
- return registration;
174
- }
175
- resolve(token, argument, options = {}) {
176
- const context = newInternalResolveContext();
177
- const value = this._resolve(token, argument, options, context, import_resolve_chain.ResolveChain.startWith(token));
178
- postProcess(context);
179
- context.$done.resolve();
180
- return value;
181
- }
182
- resolveAll(token, argument, options = {}) {
183
- const context = newInternalResolveContext();
184
- const values = this._resolveAll(token, argument, options, context, import_resolve_chain.ResolveChain.startWith(token));
185
- postProcess(context);
186
- context.$done.resolve();
187
- return values;
188
- }
189
- async resolveAsync(token, argument, options = {}) {
190
- const context = newInternalResolveContext();
191
- const value = this._resolve(token, argument, options, context, import_resolve_chain.ResolveChain.startWith(token));
192
- await postProcessAsync(context);
193
- context.$done.resolve();
194
- return value;
195
- }
196
- async resolveAllAsync(token, argument, options = {}) {
197
- const context = newInternalResolveContext();
198
- const values = this._resolveAll(token, argument, options, context, import_resolve_chain.ResolveChain.startWith(token));
199
- await postProcessAsync(context);
200
- context.$done.resolve();
201
- return values;
202
- }
203
- _resolve(token, argument, options, context, chain) {
204
- this.assertNotDisposed();
205
- if ((0, import_type_guards.isDefined)(options.forwardRef) && options.forwardRef != false) {
206
- (0, import_type_guards.assert)(options.optional != true, "ForwardRef does not support optional without resolveAll/injectAll as undefined is not forwardable.");
207
- const forwardRef = import_forward_ref.ForwardRef.create();
208
- const forwardToken = (0, import_type_guards.isFunction)(options.forwardRef) ? options.forwardRef() : token;
209
- context.forwardRefQueue.add(() => import_forward_ref.ForwardRef.setRef(forwardRef, this._resolve(forwardToken, argument, { ...options, forwardRef: false }, context, chain.markAsForwardRef(forwardToken))));
210
- context.forwardRefs.add(forwardRef);
211
- return forwardRef;
212
- }
213
- if ((0, import_type_guards.isUndefined)(token)) {
214
- throw new import_resolve_error.ResolveError("Token is undefined - this might be because of circular dependencies, use alias or forwardRef in this case.", chain);
215
- }
216
- const registration = options.skipSelf == true ? void 0 : this.tryGetRegistration(token);
217
- if ((0, import_type_guards.isUndefined)(registration)) {
218
- if ((0, import_type_guards.isNotNull)(this.#parent) && options.onlySelf != true) {
219
- return this.#parent._resolve(token, argument, { ...options, skipSelf: false }, context, chain);
220
- }
221
- if (options.optional == true) {
222
- return void 0;
223
- }
224
- throw new import_resolve_error.ResolveError(`No provider for ${(0, import_token.getTokenName)(token)} registered.`, chain);
225
- }
226
- const singleRegistration = (0, import_type_guards.isArray)(registration) ? registration[0] : registration;
227
- return this._resolveRegistration(singleRegistration, argument, options, context, chain);
228
- }
229
- _resolveAll(token, argument, options, context, chain) {
230
- this.assertNotDisposed();
231
- if ((0, import_type_guards.isDefined)(options.forwardRef) && options.forwardRef != false) {
232
- const forwardRef = import_forward_ref.ForwardRef.create({ typeHint: options.forwardRefTypeHint });
233
- const forwardToken = (0, import_type_guards.isFunction)(options.forwardRef) ? options.forwardRef() : token;
234
- context.forwardRefQueue.add(() => import_forward_ref.ForwardRef.setRef(forwardRef, this._resolveAll(forwardToken, argument, { ...options, forwardRef: false }, context, chain.markAsForwardRef(forwardToken))));
235
- context.forwardRefs.add(forwardRef);
236
- return forwardRef;
237
- }
238
- if ((0, import_type_guards.isUndefined)(token)) {
239
- throw new import_resolve_error.ResolveError("Token is undefined - this might be because of circular dependencies, use alias or forwardRef in this case.", chain);
240
- }
241
- const registration = options.skipSelf == true ? void 0 : this.tryGetRegistration(token);
242
- if ((0, import_type_guards.isUndefined)(registration)) {
243
- if ((0, import_type_guards.isNotNull)(this.#parent) && options.onlySelf != true) {
244
- return this.#parent._resolveAll(token, argument, { ...options, skipSelf: false }, context, chain);
245
- }
246
- if (options.optional == true) {
247
- return [];
248
- }
249
- throw new import_resolve_error.ResolveError(`No provider for ${(0, import_token.getTokenName)(token)} registered.`, chain);
250
- }
251
- const registrations = (0, import_type_guards.isArray)(registration) ? registration : [registration];
252
- return registrations.map((reg) => this._resolveRegistration(reg, argument, options, context, chain));
253
- }
254
- _resolveRegistration(registration, argument, options, context, chain) {
255
- checkOverflow(chain, context);
256
- const injectionContext = this.getInjectionContext(context, argument, chain);
257
- const previousInjectionContext = (0, import_inject.setCurrentInjectionContext)(injectionContext);
258
- const resolutionTag = Symbol();
259
- try {
260
- const token = registration.token;
261
- const resolutionScoped = registration.options.lifecycle == "resolution";
262
- const injectorScoped = registration.options.lifecycle == "injector";
263
- const singletonScoped = registration.options.lifecycle == "singleton";
264
- const resolveArgument = argument ?? registration.options.defaultArgument ?? registration.options.defaultArgumentProvider?.(this.getResolveContext(resolutionTag, context, chain));
265
- const argumentIdentity = resolveArgumentIdentity(registration, resolveArgument);
266
- if (resolutionScoped && context.resolutionScopedResolutions.hasFlat(token, argumentIdentity)) {
267
- return context.resolutionScopedResolutions.getFlat(token, argumentIdentity).value;
268
- } else if (injectorScoped && this.#injectorScopedResolutions.hasFlat(token, argumentIdentity)) {
269
- return this.#injectorScopedResolutions.getFlat(token, argumentIdentity).value;
270
- } else if (singletonScoped && registration.resolutions.has(argumentIdentity)) {
271
- return registration.resolutions.get(argumentIdentity);
272
- }
273
- const value = this._resolveProvider(resolutionTag, registration, resolveArgument, options, context, injectionContext, chain);
274
- const resolution = {
275
- tag: resolutionTag,
276
- registration,
277
- value,
278
- argument: injectionContext.argument,
279
- afterResolveContext: this.getAfterResolveContext(resolutionTag, context),
280
- chain
281
- };
282
- context.resolutions.push(resolution);
283
- if (resolutionScoped) {
284
- context.resolutionScopedResolutions.setFlat(token, argumentIdentity, resolution);
285
- }
286
- if (injectorScoped) {
287
- this.#injectorScopedResolutions.setFlat(token, argumentIdentity, resolution);
288
- }
289
- if (singletonScoped) {
290
- registration.resolutions.set(argumentIdentity, value);
291
- }
292
- return value;
293
- } finally {
294
- (0, import_inject.setCurrentInjectionContext)(previousInjectionContext);
295
- }
296
- }
297
- _resolveProvider(resolutionTag, registration, resolveArgument, options, context, injectionContext, chain) {
298
- try {
299
- setResolving(registration.token, context, chain);
300
- const provider = registration.provider;
301
- let result;
302
- if ((0, import_provider.isClassProvider)(provider)) {
303
- const typeMetadata = import_registry.reflectionRegistry.getMetadata(provider.useClass);
304
- const arg = resolveArgument ?? provider.defaultArgument ?? provider.defaultArgumentProvider?.();
305
- injectionContext.argument = arg;
306
- if (provider.useClass.length > 0 && ((0, import_type_guards.isUndefined)(typeMetadata) || !typeMetadata.data.has(import_symbols.injectableMetadataSymbol))) {
307
- throw new import_resolve_error.ResolveError(`${provider.useClass.name} has constructor parameters but is not injectable.`, chain);
1
+ import { CancellationSignal, CancellationToken } from '../cancellation/index.js';
2
+ import { CircularBuffer } from '../data-structures/circular-buffer.js';
3
+ import { MultiKeyMap } from '../data-structures/multi-key-map.js';
4
+ import { isAsyncDisposable, isDisposable, isSyncOrAsyncDisposable } from '../disposable/disposable.js';
5
+ import { DeferredPromise } from '../promise/deferred-promise.js';
6
+ import { reflectionRegistry } from '../reflection/registry.js';
7
+ import { toArray } from '../utils/array/array.js';
8
+ import { FactoryMap } from '../utils/factory-map.js';
9
+ import { ForwardRef } from '../utils/object/forward-ref.js';
10
+ import { objectEntries } from '../utils/object/object.js';
11
+ import { assert, isArray, isBoolean, isDefined, isFunction, isNotNull, isNull, isPromise, isUndefined } from '../utils/type-guards.js';
12
+ import { setCurrentInjectionContext } from './inject.js';
13
+ import { afterResolve } from './interfaces.js';
14
+ import { isClassProvider, isFactoryProvider, isProviderWithInitializer, isTokenProvider, isValueProvider } from './provider.js';
15
+ import { ResolveChain } from './resolve-chain.js';
16
+ import { ResolveError } from './resolve.error.js';
17
+ import { injectMetadataSymbol, injectableMetadataSymbol } from './symbols.js';
18
+ import { getTokenName } from './token.js';
19
+ export class Injector {
20
+ static #globalRegistrations = new Map();
21
+ #parent;
22
+ #children = [];
23
+ #disposeToken = new CancellationToken();
24
+ #disposableStack = new AsyncDisposableStack();
25
+ #registrations = new Map();
26
+ #injectorScopedResolutions = new MultiKeyMap();
27
+ #addDisposeHandler;
28
+ name;
29
+ get disposed() {
30
+ return this.#disposableStack.disposed;
31
+ }
32
+ constructor(name, parent = null) {
33
+ this.name = name;
34
+ this.#parent = parent;
35
+ this.register(Injector, { useValue: this });
36
+ this.register(CancellationSignal, { useValue: this.#disposeToken.signal });
37
+ this.#addDisposeHandler = (handler) => {
38
+ if (isSyncOrAsyncDisposable(handler)) {
39
+ this.#disposableStack.use(handler);
40
+ }
41
+ else {
42
+ this.#disposableStack.defer(handler);
43
+ }
44
+ };
45
+ this.#disposableStack.defer(() => this.#registrations.clear());
46
+ this.#disposableStack.defer(() => this.#injectorScopedResolutions.clear());
47
+ }
48
+ /**
49
+ * Globally register a provider for a token
50
+ * @param token token to register
51
+ * @param provider provider used to resolve the token
52
+ * @param options registration options
53
+ */
54
+ static register(token, providers, options = {}) {
55
+ for (const provider of toArray(providers)) {
56
+ const registration = {
57
+ token,
58
+ provider,
59
+ options: { multi: isArray(providers), ...options }
60
+ };
61
+ addRegistration(Injector.#globalRegistrations, registration);
62
+ }
63
+ }
64
+ /**
65
+ * Globally register a provider for a token as a singleton. Alias for {@link register} with `singleton` lifecycle
66
+ * @param token token to register
67
+ * @param provider provider used to resolve the token
68
+ * @param options registration options
69
+ */
70
+ static registerSingleton(token, providers, options) {
71
+ Injector.register(token, providers, { ...options, lifecycle: 'singleton' });
72
+ }
73
+ async dispose() {
74
+ this.#disposeToken.set();
75
+ await this.#disposableStack.disposeAsync();
76
+ }
77
+ async [Symbol.asyncDispose]() {
78
+ await this.dispose();
79
+ }
80
+ fork(name) {
81
+ const child = new Injector(name, this);
82
+ this.#children.push(child);
83
+ this.#disposableStack.use(child);
84
+ return child;
85
+ }
86
+ /**
87
+ * Register a provider for a token
88
+ * @param token token to register
89
+ * @param provider provider used to resolve the token
90
+ * @param options registration options
91
+ */
92
+ register(token, providers, options = {}) {
93
+ this.assertNotDisposed();
94
+ for (const provider of toArray(providers)) {
95
+ const registration = {
96
+ token,
97
+ provider,
98
+ options: { multi: isArray(providers), ...options },
99
+ resolutions: new Map()
100
+ };
101
+ addRegistration(this.#registrations, registration);
308
102
  }
309
- const parameters = (typeMetadata?.parameters ?? []).map((metadata) => this.resolveClassInjection(resolutionTag, context, provider.useClass, metadata, arg, chain));
310
- result = { value: new provider.useClass(...parameters) };
311
- }
312
- if ((0, import_provider.isValueProvider)(provider)) {
313
- result = { value: provider.useValue };
314
- }
315
- if ((0, import_provider.isTokenProvider)(provider)) {
316
- const innerToken = provider.useToken ?? provider.useTokenProvider();
317
- const arg = resolveArgument ?? provider.defaultArgument ?? provider.defaultArgumentProvider?.();
318
- injectionContext.argument = arg;
319
- if (provider.resolveAll == true) {
320
- return this._resolveAll(innerToken, arg, options, context, chain.addToken(innerToken));
103
+ }
104
+ /**
105
+ * Register a provider for a token as a singleton. Alias for {@link register} with `singleton` lifecycle
106
+ * @param token token to register
107
+ * @param provider provider used to resolve the token
108
+ * @param options registration options
109
+ */
110
+ registerSingleton(token, providers, options) {
111
+ this.register(token, providers, { ...options, lifecycle: 'singleton' });
112
+ }
113
+ /**
114
+ * Check if token has a registered provider
115
+ * @param token token check
116
+ */
117
+ hasRegistration(token, options) {
118
+ const registration = this.tryGetRegistration(token, options);
119
+ return isDefined(registration);
120
+ }
121
+ /**
122
+ * Try to get registration
123
+ * @param token token to get registration for
124
+ */
125
+ tryGetRegistration(token, options) {
126
+ if (isNull(this.#parent) && !this.#registrations.has(token) && Injector.#globalRegistrations.has(token)) {
127
+ const globalRegistrations = toArray(Injector.#globalRegistrations.get(token));
128
+ for (const globalRegistration of globalRegistrations) {
129
+ this.register(globalRegistration.token, globalRegistration.provider, globalRegistration.options);
130
+ }
131
+ }
132
+ const ownRegistration = (options?.skipSelf != true) ? this.#registrations.get(token) : undefined;
133
+ if (isDefined(ownRegistration)) {
134
+ return ownRegistration;
135
+ }
136
+ if (options?.onlySelf == true) {
137
+ return undefined;
321
138
  }
322
- result = { value: this._resolve(innerToken, arg, options, context, chain.addToken(innerToken)) };
323
- }
324
- if ((0, import_provider.isFactoryProvider)(provider)) {
325
- const arg = resolveArgument ?? provider.defaultArgument ?? provider.defaultArgumentProvider?.();
326
- injectionContext.argument = arg;
139
+ return this.#parent?.tryGetRegistration(token);
140
+ }
141
+ /**
142
+ * Get registration
143
+ * @param token token to get registration for
144
+ */
145
+ getRegistration(token, options) {
146
+ const registration = this.tryGetRegistration(token, options);
147
+ if (isUndefined(registration)) {
148
+ const tokenName = getTokenName(token);
149
+ throw new Error(`No provider for ${tokenName} registered.`);
150
+ }
151
+ return registration;
152
+ }
153
+ resolve(token, argument, options = {}) {
154
+ const context = newInternalResolveContext();
155
+ const value = this._resolve(token, argument, options, context, ResolveChain.startWith(token));
156
+ postProcess(context);
157
+ context.$done.resolve();
158
+ return value;
159
+ }
160
+ resolveAll(token, argument, options = {}) {
161
+ const context = newInternalResolveContext();
162
+ const values = this._resolveAll(token, argument, options, context, ResolveChain.startWith(token));
163
+ postProcess(context);
164
+ context.$done.resolve();
165
+ return values;
166
+ }
167
+ async resolveAsync(token, argument, options = {}) {
168
+ const context = newInternalResolveContext();
169
+ const value = this._resolve(token, argument, options, context, ResolveChain.startWith(token));
170
+ await postProcessAsync(context);
171
+ context.$done.resolve();
172
+ return value;
173
+ }
174
+ async resolveAllAsync(token, argument, options = {}) {
175
+ const context = newInternalResolveContext();
176
+ const values = this._resolveAll(token, argument, options, context, ResolveChain.startWith(token));
177
+ await postProcessAsync(context);
178
+ context.$done.resolve();
179
+ return values;
180
+ }
181
+ _resolve(token, argument, options, context, chain) {
182
+ this.assertNotDisposed();
183
+ if (isDefined(options.forwardRef) && (options.forwardRef != false)) {
184
+ assert(options.optional != true, 'ForwardRef does not support optional without resolveAll/injectAll as undefined is not forwardable.');
185
+ const forwardRef = ForwardRef.create();
186
+ const forwardToken = isFunction(options.forwardRef) ? options.forwardRef() : token;
187
+ context.forwardRefQueue.add(() => ForwardRef.setRef(forwardRef, this._resolve(forwardToken, argument, { ...options, forwardRef: false }, context, chain.markAsForwardRef(forwardToken))));
188
+ context.forwardRefs.add(forwardRef);
189
+ return forwardRef;
190
+ }
191
+ if (isUndefined(token)) {
192
+ throw new ResolveError('Token is undefined - this might be because of circular dependencies, use alias or forwardRef in this case.', chain);
193
+ }
194
+ const registration = (options.skipSelf == true) ? undefined : this.tryGetRegistration(token);
195
+ if (isUndefined(registration)) {
196
+ if (isNotNull(this.#parent) && (options.onlySelf != true)) {
197
+ return this.#parent._resolve(token, argument, { ...options, skipSelf: false }, context, chain);
198
+ }
199
+ if (options.optional == true) {
200
+ return undefined;
201
+ }
202
+ throw new ResolveError(`No provider for ${getTokenName(token)} registered.`, chain);
203
+ }
204
+ const singleRegistration = isArray(registration) ? registration[0] : registration;
205
+ return this._resolveRegistration(singleRegistration, argument, options, context, chain);
206
+ }
207
+ _resolveAll(token, argument, options, context, chain) {
208
+ this.assertNotDisposed();
209
+ if (isDefined(options.forwardRef) && (options.forwardRef != false)) {
210
+ const forwardRef = ForwardRef.create({ typeHint: options.forwardRefTypeHint });
211
+ const forwardToken = isFunction(options.forwardRef) ? options.forwardRef() : token;
212
+ context.forwardRefQueue.add(() => ForwardRef.setRef(forwardRef, this._resolveAll(forwardToken, argument, { ...options, forwardRef: false }, context, chain.markAsForwardRef(forwardToken))));
213
+ context.forwardRefs.add(forwardRef);
214
+ return forwardRef;
215
+ }
216
+ if (isUndefined(token)) {
217
+ throw new ResolveError('Token is undefined - this might be because of circular dependencies, use alias or forwardRef in this case.', chain);
218
+ }
219
+ const registration = (options.skipSelf == true) ? undefined : this.tryGetRegistration(token);
220
+ if (isUndefined(registration)) {
221
+ if (isNotNull(this.#parent) && (options.onlySelf != true)) {
222
+ return this.#parent._resolveAll(token, argument, { ...options, skipSelf: false }, context, chain);
223
+ }
224
+ if (options.optional == true) {
225
+ return [];
226
+ }
227
+ throw new ResolveError(`No provider for ${getTokenName(token)} registered.`, chain);
228
+ }
229
+ const registrations = isArray(registration) ? registration : [registration];
230
+ return registrations.map((reg) => this._resolveRegistration(reg, argument, options, context, chain));
231
+ }
232
+ _resolveRegistration(registration, argument, options, context, chain) {
233
+ checkOverflow(chain, context);
234
+ const injectionContext = this.getInjectionContext(context, argument, chain);
235
+ const previousInjectionContext = setCurrentInjectionContext(injectionContext);
236
+ const resolutionTag = Symbol(); // eslint-disable-line symbol-description
327
237
  try {
328
- result = { value: provider.useFactory(arg, this.getResolveContext(resolutionTag, context, chain)) };
329
- } catch (error) {
330
- throw new import_resolve_error.ResolveError("Error in provider factory.", chain, error);
238
+ const token = registration.token;
239
+ const resolutionScoped = registration.options.lifecycle == 'resolution';
240
+ const injectorScoped = registration.options.lifecycle == 'injector';
241
+ const singletonScoped = registration.options.lifecycle == 'singleton';
242
+ const resolveArgument = argument ?? registration.options.defaultArgument ?? (registration.options.defaultArgumentProvider?.(this.getResolveContext(resolutionTag, context, chain)));
243
+ const argumentIdentity = resolveArgumentIdentity(registration, resolveArgument);
244
+ if (resolutionScoped && context.resolutionScopedResolutions.hasFlat(token, argumentIdentity)) {
245
+ return context.resolutionScopedResolutions.getFlat(token, argumentIdentity).value;
246
+ }
247
+ else if (injectorScoped && this.#injectorScopedResolutions.hasFlat(token, argumentIdentity)) {
248
+ return this.#injectorScopedResolutions.getFlat(token, argumentIdentity).value;
249
+ }
250
+ else if (singletonScoped && registration.resolutions.has(argumentIdentity)) {
251
+ return registration.resolutions.get(argumentIdentity);
252
+ }
253
+ const value = this._resolveProvider(resolutionTag, registration, resolveArgument, options, context, injectionContext, chain);
254
+ const resolution = {
255
+ tag: resolutionTag,
256
+ registration,
257
+ value,
258
+ argument: injectionContext.argument,
259
+ afterResolveContext: this.getAfterResolveContext(resolutionTag, context),
260
+ chain
261
+ };
262
+ context.resolutions.push(resolution);
263
+ if (resolutionScoped) {
264
+ context.resolutionScopedResolutions.setFlat(token, argumentIdentity, resolution);
265
+ }
266
+ if (injectorScoped) {
267
+ this.#injectorScopedResolutions.setFlat(token, argumentIdentity, resolution);
268
+ }
269
+ if (singletonScoped) {
270
+ registration.resolutions.set(argumentIdentity, value);
271
+ }
272
+ return value;
331
273
  }
332
- }
333
- if ((0, import_type_guards.isUndefined)(result)) {
334
- throw new Error("Unsupported provider.");
335
- }
336
- if ((0, import_disposable.isDisposable)(result.value) || (0, import_disposable.isAsyncDisposable)(result.value)) {
337
- this.#disposableStack.use(result.value);
338
- }
339
- return result.value;
340
- } finally {
341
- deleteResolving(registration.token, context);
342
- }
343
- }
344
- resolveClassInjection(resolutionTag, context, constructor, metadata, resolveArgument, chain) {
345
- const getChain = (injectToken2) => chain.addParameter(constructor, metadata.index, injectToken2);
346
- const injectMetadata = metadata.data.tryGet(import_symbols.injectMetadataSymbol) ?? {};
347
- const injectToken = injectMetadata.injectToken ?? metadata.type;
348
- if ((0, import_type_guards.isDefined)(injectMetadata.injectArgumentMapper) && (!this.hasRegistration(injectToken) || (0, import_type_guards.isDefined)(resolveArgument) || (0, import_type_guards.isUndefined)(injectToken))) {
349
- return injectMetadata.injectArgumentMapper(resolveArgument);
350
- }
351
- const parameterResolveArgument = injectMetadata.forwardArgumentMapper?.(resolveArgument) ?? injectMetadata.resolveArgumentProvider?.(this.getResolveContext(resolutionTag, context, getChain(injectToken)));
352
- const forwardRef = injectMetadata.forwardRef;
353
- if ((0, import_type_guards.isDefined)(forwardRef)) {
354
- context.forwardRefQueue.add(() => {
355
- const forwardToken = (0, import_type_guards.isFunction)(forwardRef) ? forwardRef() : (0, import_type_guards.isBoolean)(forwardRef) ? injectToken : forwardRef;
356
- if ((0, import_type_guards.isDefined)(injectMetadata.mapper)) {
357
- throw new import_resolve_error.ResolveError("Cannot use inject mapper with forwardRef.", getChain(forwardToken));
274
+ finally {
275
+ setCurrentInjectionContext(previousInjectionContext);
276
+ }
277
+ }
278
+ _resolveProvider(resolutionTag, registration, resolveArgument, options, context, injectionContext, chain) {
279
+ try {
280
+ setResolving(registration.token, context, chain);
281
+ const provider = registration.provider;
282
+ let result;
283
+ if (isClassProvider(provider)) {
284
+ const typeMetadata = reflectionRegistry.getMetadata(provider.useClass);
285
+ const arg = resolveArgument ?? provider.defaultArgument ?? provider.defaultArgumentProvider?.();
286
+ injectionContext.argument = arg;
287
+ if ((provider.useClass.length > 0) && (isUndefined(typeMetadata) || !typeMetadata.data.has(injectableMetadataSymbol))) {
288
+ throw new ResolveError(`${provider.useClass.name} has constructor parameters but is not injectable.`, chain);
289
+ }
290
+ const parameters = (typeMetadata?.parameters ?? []).map((metadata) => this.resolveClassInjection(resolutionTag, context, provider.useClass, metadata, arg, chain));
291
+ result = { value: new provider.useClass(...parameters) };
292
+ }
293
+ if (isValueProvider(provider)) {
294
+ result = { value: provider.useValue };
295
+ }
296
+ if (isTokenProvider(provider)) {
297
+ const innerToken = (provider.useToken ?? provider.useTokenProvider());
298
+ const arg = resolveArgument ?? provider.defaultArgument ?? provider.defaultArgumentProvider?.();
299
+ injectionContext.argument = arg;
300
+ if (provider.resolveAll == true) {
301
+ return this._resolveAll(innerToken, arg, options, context, chain.addToken(innerToken));
302
+ }
303
+ result = { value: this._resolve(innerToken, arg, options, context, chain.addToken(innerToken)) };
304
+ }
305
+ if (isFactoryProvider(provider)) {
306
+ const arg = resolveArgument ?? provider.defaultArgument ?? provider.defaultArgumentProvider?.();
307
+ injectionContext.argument = arg;
308
+ try {
309
+ result = { value: provider.useFactory(arg, this.getResolveContext(resolutionTag, context, chain)) };
310
+ }
311
+ catch (error) {
312
+ throw new ResolveError('Error in provider factory.', chain, error);
313
+ }
314
+ }
315
+ if (isUndefined(result)) {
316
+ throw new Error('Unsupported provider.');
317
+ }
318
+ if (isDisposable(result.value) || isAsyncDisposable(result.value)) {
319
+ this.#disposableStack.use(result.value);
320
+ }
321
+ return result.value;
322
+ }
323
+ finally {
324
+ deleteResolving(registration.token, context);
325
+ }
326
+ }
327
+ resolveClassInjection(resolutionTag, context, constructor, metadata, resolveArgument, chain) {
328
+ const getChain = (injectToken) => chain.addParameter(constructor, metadata.index, injectToken);
329
+ const injectMetadata = metadata.data.tryGet(injectMetadataSymbol) ?? {};
330
+ const injectToken = (injectMetadata.injectToken ?? metadata.type);
331
+ if (isDefined(injectMetadata.injectArgumentMapper) && (!this.hasRegistration(injectToken) || isDefined(resolveArgument) || isUndefined(injectToken))) {
332
+ return injectMetadata.injectArgumentMapper(resolveArgument);
333
+ }
334
+ const parameterResolveArgument = injectMetadata.forwardArgumentMapper?.(resolveArgument) ?? injectMetadata.resolveArgumentProvider?.(this.getResolveContext(resolutionTag, context, getChain(injectToken)));
335
+ const forwardRef = injectMetadata.forwardRef;
336
+ if (isDefined(forwardRef)) {
337
+ context.forwardRefQueue.add(() => {
338
+ const forwardToken = isFunction(forwardRef) ? forwardRef() : isBoolean(forwardRef) ? injectToken : forwardRef;
339
+ if (isDefined(injectMetadata.mapper)) {
340
+ throw new ResolveError('Cannot use inject mapper with forwardRef.', getChain(forwardToken));
341
+ }
342
+ });
343
+ }
344
+ const resolveFn = (injectMetadata.resolveAll == true) ? '_resolveAll' : '_resolve';
345
+ const resolved = this[resolveFn](injectToken, parameterResolveArgument, { optional: injectMetadata.optional, forwardRef, forwardRefTypeHint: injectMetadata.forwardRefTypeHint }, context, getChain(injectToken));
346
+ return isDefined(injectMetadata.mapper) ? injectMetadata.mapper(resolved) : resolved;
347
+ }
348
+ resolveInjection(token, argument, options, context, injectIndex, chain) {
349
+ return this._resolve(token, argument, options, context, chain.addInject(token, injectIndex));
350
+ }
351
+ async resolveInjectionAsync(token, argument, options, context, injectIndex, chain) {
352
+ const value = this.resolveInjection(token, argument, options, context, injectIndex, chain);
353
+ await context.$done;
354
+ return value;
355
+ }
356
+ resolveInjectionAll(token, argument, options, context, injectIndex, chain) {
357
+ return this._resolveAll(token, argument, options, context, chain.addInject(token, injectIndex));
358
+ }
359
+ async resolveInjectionAllAsync(token, argument, options, context, injectIndex, chain) {
360
+ const values = this.resolveInjectionAll(token, argument, options, context, injectIndex, chain);
361
+ await context.$done;
362
+ return values;
363
+ }
364
+ getResolveContext(resolutionTag, resolveContext, chain) {
365
+ const context = {
366
+ resolve: (token, argument, options) => this._resolve(token, argument, options ?? {}, resolveContext, chain.addToken(token)),
367
+ resolveAll: (token, argument, options) => this._resolveAll(token, argument, options ?? {}, resolveContext, chain.addToken(token)),
368
+ cancellationSignal: this.#disposeToken,
369
+ addDisposeHandler: this.#addDisposeHandler,
370
+ get data() {
371
+ return resolveContext.resolutionContextData.get(resolutionTag);
372
+ }
373
+ };
374
+ return context;
375
+ }
376
+ getAfterResolveContext(resolutionTag, resolveContext) {
377
+ const context = {
378
+ cancellationSignal: this.#disposeToken,
379
+ addDisposeHandler: this.#addDisposeHandler,
380
+ get data() {
381
+ return resolveContext.resolutionContextData.get(resolutionTag);
382
+ }
383
+ };
384
+ return context;
385
+ }
386
+ getInjectionContext(resolveContext, resolveArgument, chain) {
387
+ let injectIndex = 0;
388
+ const context = {
389
+ injector: this,
390
+ argument: resolveArgument,
391
+ inject: (token, argument, options) => this.resolveInjection(token, argument, options ?? {}, resolveContext, injectIndex++, chain),
392
+ injectAll: (token, argument, options) => this.resolveInjectionAll(token, argument, options ?? {}, resolveContext, injectIndex++, chain),
393
+ injectAsync: async (token, argument, options) => this.resolveInjectionAsync(token, argument, options ?? {}, resolveContext, injectIndex++, chain),
394
+ injectAllAsync: async (token, argument, options) => this.resolveInjectionAllAsync(token, argument, options ?? {}, resolveContext, injectIndex++, chain)
395
+ };
396
+ return context;
397
+ }
398
+ assertNotDisposed() {
399
+ if (this.disposed) {
400
+ throw new Error('Injector is disposed.');
358
401
  }
359
- });
360
- }
361
- const resolveFn = injectMetadata.resolveAll == true ? "_resolveAll" : "_resolve";
362
- const resolved = this[resolveFn](injectToken, parameterResolveArgument, { optional: injectMetadata.optional, forwardRef, forwardRefTypeHint: injectMetadata.forwardRefTypeHint }, context, getChain(injectToken));
363
- return (0, import_type_guards.isDefined)(injectMetadata.mapper) ? injectMetadata.mapper(resolved) : resolved;
364
- }
365
- resolveInjection(token, argument, options, context, injectIndex, chain) {
366
- return this._resolve(token, argument, options, context, chain.addInject(token, injectIndex));
367
- }
368
- async resolveInjectionAsync(token, argument, options, context, injectIndex, chain) {
369
- const value = this.resolveInjection(token, argument, options, context, injectIndex, chain);
370
- await context.$done;
371
- return value;
372
- }
373
- resolveInjectionAll(token, argument, options, context, injectIndex, chain) {
374
- return this._resolveAll(token, argument, options, context, chain.addInject(token, injectIndex));
375
- }
376
- async resolveInjectionAllAsync(token, argument, options, context, injectIndex, chain) {
377
- const values = this.resolveInjectionAll(token, argument, options, context, injectIndex, chain);
378
- await context.$done;
379
- return values;
380
- }
381
- getResolveContext(resolutionTag, resolveContext, chain) {
382
- const context = {
383
- resolve: (token, argument, options) => this._resolve(token, argument, options ?? {}, resolveContext, chain.addToken(token)),
384
- resolveAll: (token, argument, options) => this._resolveAll(token, argument, options ?? {}, resolveContext, chain.addToken(token)),
385
- cancellationSignal: this.#disposeToken,
386
- addDisposeHandler: this.#addDisposeHandler,
387
- get data() {
388
- return resolveContext.resolutionContextData.get(resolutionTag);
389
- }
390
- };
391
- return context;
392
- }
393
- getAfterResolveContext(resolutionTag, resolveContext) {
394
- const context = {
395
- cancellationSignal: this.#disposeToken,
396
- addDisposeHandler: this.#addDisposeHandler,
397
- get data() {
398
- return resolveContext.resolutionContextData.get(resolutionTag);
399
- }
400
- };
401
- return context;
402
- }
403
- getInjectionContext(resolveContext, resolveArgument, chain) {
404
- let injectIndex = 0;
405
- const context = {
406
- injector: this,
407
- argument: resolveArgument,
408
- inject: (token, argument, options) => this.resolveInjection(token, argument, options ?? {}, resolveContext, injectIndex++, chain),
409
- injectAll: (token, argument, options) => this.resolveInjectionAll(token, argument, options ?? {}, resolveContext, injectIndex++, chain),
410
- injectAsync: async (token, argument, options) => this.resolveInjectionAsync(token, argument, options ?? {}, resolveContext, injectIndex++, chain),
411
- injectAllAsync: async (token, argument, options) => this.resolveInjectionAllAsync(token, argument, options ?? {}, resolveContext, injectIndex++, chain)
412
- };
413
- return context;
414
- }
415
- assertNotDisposed() {
416
- if (this.disposed) {
417
- throw new Error("Injector is disposed.");
418
402
  }
419
- }
420
403
  }
421
404
  function addRegistration(registrations, registration) {
422
- if ((0, import_provider.isClassProvider)(registration.provider)) {
423
- const injectable = import_registry.reflectionRegistry.getMetadata(registration.provider.useClass)?.data.has(import_symbols.injectableMetadataSymbol) ?? false;
424
- if (!injectable) {
425
- throw new Error(`${registration.provider.useClass.name} is not injectable.`);
426
- }
427
- }
428
- const multi = registration.options.multi ?? false;
429
- const existingRegistration = registrations.get(registration.token);
430
- const hasExistingRegistration = (0, import_type_guards.isDefined)(existingRegistration);
431
- const existingIsMulti = hasExistingRegistration && (0, import_type_guards.isArray)(existingRegistration);
432
- if (hasExistingRegistration && existingIsMulti != multi) {
433
- throw new Error("Cannot mix multi and non-multi registrations.");
434
- }
435
- if (multi && existingIsMulti) {
436
- existingRegistration.push(registration);
437
- } else {
438
- registrations.set(registration.token, multi ? [registration] : registration);
439
- }
405
+ if (isClassProvider(registration.provider)) {
406
+ const injectable = reflectionRegistry.getMetadata(registration.provider.useClass)?.data.has(injectableMetadataSymbol) ?? false;
407
+ if (!injectable) {
408
+ throw new Error(`${registration.provider.useClass.name} is not injectable.`);
409
+ }
410
+ }
411
+ const multi = registration.options.multi ?? false;
412
+ const existingRegistration = registrations.get(registration.token);
413
+ const hasExistingRegistration = isDefined(existingRegistration);
414
+ const existingIsMulti = hasExistingRegistration && isArray(existingRegistration);
415
+ if (hasExistingRegistration && (existingIsMulti != multi)) {
416
+ throw new Error('Cannot mix multi and non-multi registrations.');
417
+ }
418
+ if (multi && existingIsMulti) {
419
+ existingRegistration.push(registration);
420
+ }
421
+ else {
422
+ registrations.set(registration.token, multi ? [registration] : registration);
423
+ }
440
424
  }
441
425
  function newInternalResolveContext() {
442
- return {
443
- resolves: 0,
444
- resolving: /* @__PURE__ */ new Set(),
445
- resolutionScopedResolutions: new import_multi_key_map.MultiKeyMap(),
446
- resolutions: [],
447
- resolutionContextData: new import_factory_map.FactoryMap(() => ({})),
448
- forwardRefQueue: new import_circular_buffer.CircularBuffer(),
449
- forwardRefs: /* @__PURE__ */ new Set(),
450
- $done: new import_deferred_promise.DeferredPromise()
451
- };
426
+ return {
427
+ resolves: 0,
428
+ resolving: new Set(),
429
+ resolutionScopedResolutions: new MultiKeyMap(),
430
+ resolutions: [],
431
+ resolutionContextData: new FactoryMap(() => ({})),
432
+ forwardRefQueue: new CircularBuffer(),
433
+ forwardRefs: new Set(),
434
+ $done: new DeferredPromise()
435
+ };
452
436
  }
453
437
  function postProcess(context) {
454
- for (const fn of context.forwardRefQueue.consume()) {
455
- fn();
456
- }
457
- derefForwardRefs(context);
458
- for (const resolution of context.resolutions) {
459
- if ((0, import_type_guards.isFunction)(resolution.value?.[import_interfaces.afterResolve])) {
460
- const returnValue = resolution.value[import_interfaces.afterResolve](resolution.argument, resolution.afterResolveContext);
461
- throwOnPromise(returnValue, "[afterResolve]", resolution.chain);
462
- }
463
- if ((0, import_provider.isProviderWithInitializer)(resolution.registration.provider)) {
464
- const returnValue = resolution.registration.provider.afterResolve?.(resolution.value, resolution.argument, resolution.afterResolveContext);
465
- throwOnPromise(returnValue, "provider afterResolve handler", resolution.chain);
466
- }
467
- if ((0, import_type_guards.isDefined)(resolution.registration.options.afterResolve)) {
468
- const returnValue = resolution.registration.options.afterResolve(resolution.value, resolution.argument, resolution.afterResolveContext);
469
- throwOnPromise(returnValue, "registration afterResolve handler", resolution.chain);
470
- }
471
- }
438
+ for (const fn of context.forwardRefQueue.consume()) {
439
+ fn();
440
+ }
441
+ derefForwardRefs(context);
442
+ for (const resolution of context.resolutions) {
443
+ if (isFunction(resolution.value?.[afterResolve])) {
444
+ const returnValue = resolution.value[afterResolve](resolution.argument, resolution.afterResolveContext);
445
+ throwOnPromise(returnValue, '[afterResolve]', resolution.chain);
446
+ }
447
+ if (isProviderWithInitializer(resolution.registration.provider)) {
448
+ const returnValue = resolution.registration.provider.afterResolve?.(resolution.value, resolution.argument, resolution.afterResolveContext);
449
+ throwOnPromise(returnValue, 'provider afterResolve handler', resolution.chain);
450
+ }
451
+ if (isDefined(resolution.registration.options.afterResolve)) {
452
+ const returnValue = resolution.registration.options.afterResolve(resolution.value, resolution.argument, resolution.afterResolveContext);
453
+ throwOnPromise(returnValue, 'registration afterResolve handler', resolution.chain);
454
+ }
455
+ }
472
456
  }
473
457
  async function postProcessAsync(context) {
474
- for (const fn of context.forwardRefQueue.consume()) {
475
- fn();
476
- }
477
- derefForwardRefs(context);
478
- for (const resolution of context.resolutions) {
479
- if ((0, import_type_guards.isFunction)(resolution.value?.[import_interfaces.afterResolve])) {
480
- await resolution.value[import_interfaces.afterResolve](resolution.argument, resolution.afterResolveContext);
481
- }
482
- if ((0, import_provider.isProviderWithInitializer)(resolution.registration.provider)) {
483
- await resolution.registration.provider.afterResolve?.(resolution.value, resolution.argument, resolution.afterResolveContext);
458
+ for (const fn of context.forwardRefQueue.consume()) {
459
+ fn();
484
460
  }
485
- if ((0, import_type_guards.isDefined)(resolution.registration.options.afterResolve)) {
486
- await resolution.registration.options.afterResolve(resolution.value, resolution.argument, resolution.afterResolveContext);
461
+ derefForwardRefs(context);
462
+ for (const resolution of context.resolutions) {
463
+ if (isFunction(resolution.value?.[afterResolve])) {
464
+ await resolution.value[afterResolve](resolution.argument, resolution.afterResolveContext);
465
+ }
466
+ if (isProviderWithInitializer(resolution.registration.provider)) {
467
+ await resolution.registration.provider.afterResolve?.(resolution.value, resolution.argument, resolution.afterResolveContext);
468
+ }
469
+ if (isDefined(resolution.registration.options.afterResolve)) {
470
+ await resolution.registration.options.afterResolve(resolution.value, resolution.argument, resolution.afterResolveContext);
471
+ }
487
472
  }
488
- }
489
473
  }
490
474
  function resolveArgumentIdentity(registration, resolveArgument) {
491
- if ((0, import_type_guards.isDefined)(registration.options.argumentIdentityProvider) && (registration.options.lifecycle == "resolution" || registration.options.lifecycle == "singleton")) {
492
- return registration.options.argumentIdentityProvider(resolveArgument);
493
- }
494
- return resolveArgument;
475
+ if (isDefined(registration.options.argumentIdentityProvider) && ((registration.options.lifecycle == 'resolution') || (registration.options.lifecycle == 'singleton'))) {
476
+ return registration.options.argumentIdentityProvider(resolveArgument);
477
+ }
478
+ return resolveArgument;
495
479
  }
496
480
  function setResolving(token, context, chain) {
497
- if (context.resolving.has(token)) {
498
- throw new import_resolve_error.ResolveError("Circular dependency to itself detected. Please check your registrations and providers. ForwardRef might be a solution.", chain);
499
- }
500
- context.resolving.add(token);
481
+ if (context.resolving.has(token)) {
482
+ throw new ResolveError('Circular dependency to itself detected. Please check your registrations and providers. ForwardRef might be a solution.', chain);
483
+ }
484
+ context.resolving.add(token);
501
485
  }
502
486
  function deleteResolving(token, context) {
503
- context.resolving.delete(token);
487
+ context.resolving.delete(token);
504
488
  }
505
489
  function throwOnPromise(value, type, chain) {
506
- if ((0, import_type_guards.isPromise)(value)) {
507
- throw new import_resolve_error.ResolveError(`Cannot evaluate async ${type} in synchronous resolve, use resolveAsync() instead.`, chain);
508
- }
490
+ if (isPromise(value)) {
491
+ throw new ResolveError(`Cannot evaluate async ${type} in synchronous resolve, use resolveAsync() instead.`, chain);
492
+ }
509
493
  }
510
494
  function checkOverflow(chain, context) {
511
- if (chain.length > 100 || ++context.resolves > 7500) {
512
- throw new import_resolve_error.ResolveError("Resolve stack overflow. This can happen on circular dependencies with transient lifecycles and self reference. Use scoped or singleton lifecycle or forwardRef instead.", chain);
513
- }
495
+ if ((chain.length > 100) || (++context.resolves > 7500)) {
496
+ throw new ResolveError('Resolve stack overflow. This can happen on circular dependencies with transient lifecycles and self reference. Use scoped or singleton lifecycle or forwardRef instead.', chain);
497
+ }
514
498
  }
515
499
  function derefForwardRefs(context) {
516
- for (const resolution of context.resolutions.values()) {
517
- if (!(typeof resolution.value == "object")) {
518
- continue;
519
- }
520
- for (const [key, value] of (0, import_object.objectEntries)(resolution.value)) {
521
- if (!context.forwardRefs.has(value)) {
522
- continue;
523
- }
524
- resolution.value[key] = import_forward_ref.ForwardRef.deref(value);
500
+ for (const resolution of context.resolutions.values()) {
501
+ if (!(typeof resolution.value == 'object')) {
502
+ continue;
503
+ }
504
+ for (const [key, value] of objectEntries(resolution.value)) {
505
+ if (!context.forwardRefs.has(value)) {
506
+ continue;
507
+ }
508
+ resolution.value[key] = ForwardRef.deref(value);
509
+ }
525
510
  }
526
- }
527
511
  }