@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,36 +1,3 @@
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 graph_exports = {};
20
- __export(graph_exports, {
21
- REACTIVE_NODE: () => REACTIVE_NODE,
22
- consumerAfterComputation: () => consumerAfterComputation,
23
- consumerBeforeComputation: () => consumerBeforeComputation,
24
- consumerDestroy: () => consumerDestroy,
25
- consumerMarkDirty: () => consumerMarkDirty,
26
- consumerPollProducersForChange: () => consumerPollProducersForChange,
27
- producerAccessed: () => producerAccessed,
28
- producerNotifyConsumers: () => producerNotifyConsumers,
29
- producerUpdateValueVersion: () => producerUpdateValueVersion,
30
- producerUpdatesAllowed: () => producerUpdatesAllowed,
31
- setActiveConsumer: () => setActiveConsumer
32
- });
33
- module.exports = __toCommonJS(graph_exports);
34
1
  /**
35
2
  * @license
36
3
  * Copyright Google LLC All Rights Reserved.
@@ -38,173 +5,262 @@ module.exports = __toCommonJS(graph_exports);
38
5
  * Use of this source code is governed by an MIT-style license that can be
39
6
  * found in the LICENSE file at https://angular.io/license
40
7
  */
8
+ /**
9
+ * The currently active consumer `ReactiveNode`, if running code in a reactive context.
10
+ *
11
+ * Change this via `setActiveConsumer`.
12
+ */
41
13
  let activeConsumer = null;
42
14
  let inNotificationPhase = false;
43
- function setActiveConsumer(consumer) {
44
- const prev = activeConsumer;
45
- activeConsumer = consumer;
46
- return prev;
15
+ export function setActiveConsumer(consumer) {
16
+ const prev = activeConsumer;
17
+ activeConsumer = consumer;
18
+ return prev;
47
19
  }
48
- const REACTIVE_NODE = {
49
- version: 0,
50
- dirty: false,
51
- producerNode: void 0,
52
- producerLastReadVersion: void 0,
53
- producerIndexOfThis: void 0,
54
- nextProducerIndex: 0,
55
- liveConsumerNode: void 0,
56
- liveConsumerIndexOfThis: void 0,
57
- consumerAllowSignalWrites: false,
58
- consumerIsAlwaysLive: false,
59
- producerMustRecompute: () => false,
60
- producerRecomputeValue: () => {
61
- },
62
- consumerMarkedDirty: () => {
63
- }
20
+ export const REACTIVE_NODE = {
21
+ version: 0,
22
+ dirty: false,
23
+ producerNode: undefined,
24
+ producerLastReadVersion: undefined,
25
+ producerIndexOfThis: undefined,
26
+ nextProducerIndex: 0,
27
+ liveConsumerNode: undefined,
28
+ liveConsumerIndexOfThis: undefined,
29
+ consumerAllowSignalWrites: false,
30
+ consumerIsAlwaysLive: false,
31
+ producerMustRecompute: () => false,
32
+ producerRecomputeValue: () => { },
33
+ consumerMarkedDirty: () => { },
64
34
  };
65
- function producerAccessed(node) {
66
- if (inNotificationPhase) {
67
- throw new Error("Assertion error: signal read during notification phase");
68
- }
69
- if (activeConsumer === null) {
70
- return;
71
- }
72
- const idx = activeConsumer.nextProducerIndex++;
73
- assertConsumerNode(activeConsumer);
74
- if (idx < activeConsumer.producerNode.length && activeConsumer.producerNode[idx] !== node) {
75
- if (consumerIsLive(activeConsumer)) {
76
- const staleProducer = activeConsumer.producerNode[idx];
77
- producerRemoveLiveConsumerAtIndex(staleProducer, activeConsumer.producerIndexOfThis[idx]);
78
- }
79
- }
80
- if (activeConsumer.producerNode[idx] !== node) {
81
- activeConsumer.producerNode[idx] = node;
82
- activeConsumer.producerIndexOfThis[idx] = consumerIsLive(activeConsumer) ? producerAddLiveConsumer(node, activeConsumer, idx) : 0;
83
- }
84
- activeConsumer.producerLastReadVersion[idx] = node.version;
35
+ /**
36
+ * Called by implementations when a producer's signal is read.
37
+ */
38
+ export function producerAccessed(node) {
39
+ if (inNotificationPhase) {
40
+ throw new Error('Assertion error: signal read during notification phase');
41
+ }
42
+ if (activeConsumer === null) {
43
+ // Accessed outside of a reactive context, so nothing to record.
44
+ return;
45
+ }
46
+ // This producer is the `idx`th dependency of `activeConsumer`.
47
+ const idx = activeConsumer.nextProducerIndex++;
48
+ assertConsumerNode(activeConsumer);
49
+ if (idx < activeConsumer.producerNode.length && activeConsumer.producerNode[idx] !== node) {
50
+ // There's been a change in producers since the last execution of `activeConsumer`.
51
+ // `activeConsumer.producerNode[idx]` holds a stale dependency which will be be removed and
52
+ // replaced with `this`.
53
+ //
54
+ // If `activeConsumer` isn't live, then this is a no-op, since we can replace the producer in
55
+ // `activeConsumer.producerNode` directly. However, if `activeConsumer` is live, then we need
56
+ // to remove it from the stale producer's `liveConsumer`s.
57
+ if (consumerIsLive(activeConsumer)) {
58
+ const staleProducer = activeConsumer.producerNode[idx];
59
+ producerRemoveLiveConsumerAtIndex(staleProducer, activeConsumer.producerIndexOfThis[idx]);
60
+ // At this point, the only record of `staleProducer` is the reference at
61
+ // `activeConsumer.producerNode[idx]` which will be overwritten below.
62
+ }
63
+ }
64
+ if (activeConsumer.producerNode[idx] !== node) {
65
+ // We're a new dependency of the consumer (at `idx`).
66
+ activeConsumer.producerNode[idx] = node;
67
+ // If the active consumer is live, then add it as a live consumer. If not, then use 0 as a
68
+ // placeholder value.
69
+ activeConsumer.producerIndexOfThis[idx] =
70
+ consumerIsLive(activeConsumer) ? producerAddLiveConsumer(node, activeConsumer, idx) : 0;
71
+ }
72
+ activeConsumer.producerLastReadVersion[idx] = node.version;
85
73
  }
86
- function producerUpdateValueVersion(node) {
87
- if (consumerIsLive(node) && !node.dirty) {
88
- return;
89
- }
90
- if (!node.producerMustRecompute(node) && !consumerPollProducersForChange(node)) {
74
+ /**
75
+ * Ensure this producer's `version` is up-to-date.
76
+ */
77
+ export function producerUpdateValueVersion(node) {
78
+ if (consumerIsLive(node) && !node.dirty) {
79
+ // A live consumer will be marked dirty by producers, so a clean state means that its version
80
+ // is guaranteed to be up-to-date.
81
+ return;
82
+ }
83
+ if (!node.producerMustRecompute(node) && !consumerPollProducersForChange(node)) {
84
+ // None of our producers report a change since the last time they were read, so no
85
+ // recomputation of our value is necessary, and we can consider ourselves clean.
86
+ node.dirty = false;
87
+ return;
88
+ }
89
+ node.producerRecomputeValue(node);
90
+ // After recomputing the value, we're no longer dirty.
91
91
  node.dirty = false;
92
- return;
93
- }
94
- node.producerRecomputeValue(node);
95
- node.dirty = false;
96
92
  }
97
- function producerNotifyConsumers(node) {
98
- if (node.liveConsumerNode === void 0) {
99
- return;
100
- }
101
- const prev = inNotificationPhase;
102
- inNotificationPhase = true;
103
- try {
104
- for (const consumer of node.liveConsumerNode) {
105
- if (!consumer.dirty) {
106
- consumerMarkDirty(consumer);
107
- }
108
- }
109
- } finally {
110
- inNotificationPhase = prev;
111
- }
93
+ /**
94
+ * Propagate a dirty notification to live consumers of this producer.
95
+ */
96
+ export function producerNotifyConsumers(node) {
97
+ if (node.liveConsumerNode === undefined) {
98
+ return;
99
+ }
100
+ // Prevent signal reads when we're updating the graph
101
+ const prev = inNotificationPhase;
102
+ inNotificationPhase = true;
103
+ try {
104
+ for (const consumer of node.liveConsumerNode) {
105
+ if (!consumer.dirty) {
106
+ consumerMarkDirty(consumer);
107
+ }
108
+ }
109
+ }
110
+ finally {
111
+ inNotificationPhase = prev;
112
+ }
112
113
  }
113
- function producerUpdatesAllowed() {
114
- return activeConsumer?.consumerAllowSignalWrites !== false;
114
+ /**
115
+ * Whether this `ReactiveNode` in its producer capacity is currently allowed to initiate updates,
116
+ * based on the current consumer context.
117
+ */
118
+ export function producerUpdatesAllowed() {
119
+ return activeConsumer?.consumerAllowSignalWrites !== false;
115
120
  }
116
- function consumerMarkDirty(node) {
117
- node.dirty = true;
118
- producerNotifyConsumers(node);
119
- node.consumerMarkedDirty?.(node);
121
+ export function consumerMarkDirty(node) {
122
+ node.dirty = true;
123
+ producerNotifyConsumers(node);
124
+ node.consumerMarkedDirty?.(node);
120
125
  }
121
- function consumerBeforeComputation(node) {
122
- node && (node.nextProducerIndex = 0);
123
- return setActiveConsumer(node);
126
+ /**
127
+ * Prepare this consumer to run a computation in its reactive context.
128
+ *
129
+ * Must be called by subclasses which represent reactive computations, before those computations
130
+ * begin.
131
+ */
132
+ export function consumerBeforeComputation(node) {
133
+ node && (node.nextProducerIndex = 0);
134
+ return setActiveConsumer(node);
124
135
  }
125
- function consumerAfterComputation(node, prevConsumer) {
126
- setActiveConsumer(prevConsumer);
127
- if (!node || node.producerNode === void 0 || node.producerIndexOfThis === void 0 || node.producerLastReadVersion === void 0) {
128
- return;
129
- }
130
- if (consumerIsLive(node)) {
136
+ /**
137
+ * Finalize this consumer's state after a reactive computation has run.
138
+ *
139
+ * Must be called by subclasses which represent reactive computations, after those computations
140
+ * have finished.
141
+ */
142
+ export function consumerAfterComputation(node, prevConsumer) {
143
+ setActiveConsumer(prevConsumer);
144
+ if (!node || node.producerNode === undefined || node.producerIndexOfThis === undefined ||
145
+ node.producerLastReadVersion === undefined) {
146
+ return;
147
+ }
148
+ if (consumerIsLive(node)) {
149
+ // For live consumers, we need to remove the producer -> consumer edge for any stale producers
150
+ // which weren't dependencies after the recomputation.
151
+ for (let i = node.nextProducerIndex; i < node.producerNode.length; i++) {
152
+ producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);
153
+ }
154
+ }
155
+ // Truncate the producer tracking arrays.
131
156
  for (let i = node.nextProducerIndex; i < node.producerNode.length; i++) {
132
- producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);
133
- }
134
- }
135
- for (let i = node.nextProducerIndex; i < node.producerNode.length; i++) {
136
- node.producerNode.pop();
137
- node.producerLastReadVersion.pop();
138
- node.producerIndexOfThis.pop();
139
- }
140
- }
141
- function consumerPollProducersForChange(node) {
142
- assertConsumerNode(node);
143
- for (let i = 0; i < node.producerNode.length; i++) {
144
- const producer = node.producerNode[i];
145
- const seenVersion = node.producerLastReadVersion[i];
146
- if (seenVersion !== producer.version) {
147
- return true;
148
- }
149
- producerUpdateValueVersion(producer);
150
- if (seenVersion !== producer.version) {
151
- return true;
152
- }
153
- }
154
- return false;
157
+ node.producerNode.pop();
158
+ node.producerLastReadVersion.pop();
159
+ node.producerIndexOfThis.pop();
160
+ }
155
161
  }
156
- function consumerDestroy(node) {
157
- assertConsumerNode(node);
158
- if (consumerIsLive(node)) {
162
+ /**
163
+ * Determine whether this consumer has any dependencies which have changed since the last time
164
+ * they were read.
165
+ */
166
+ export function consumerPollProducersForChange(node) {
167
+ assertConsumerNode(node);
168
+ // Poll producers for change.
159
169
  for (let i = 0; i < node.producerNode.length; i++) {
160
- producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);
170
+ const producer = node.producerNode[i];
171
+ const seenVersion = node.producerLastReadVersion[i];
172
+ // First check the versions. A mismatch means that the producer's value is known to have
173
+ // changed since the last time we read it.
174
+ if (seenVersion !== producer.version) {
175
+ return true;
176
+ }
177
+ // The producer's version is the same as the last time we read it, but it might itself be
178
+ // stale. Force the producer to recompute its version (calculating a new value if necessary).
179
+ producerUpdateValueVersion(producer);
180
+ // Now when we do this check, `producer.version` is guaranteed to be up to date, so if the
181
+ // versions still match then it has not changed since the last time we read it.
182
+ if (seenVersion !== producer.version) {
183
+ return true;
184
+ }
185
+ }
186
+ return false;
187
+ }
188
+ /**
189
+ * Disconnect this consumer from the graph.
190
+ */
191
+ export function consumerDestroy(node) {
192
+ assertConsumerNode(node);
193
+ if (consumerIsLive(node)) {
194
+ // Drop all connections from the graph to this node.
195
+ for (let i = 0; i < node.producerNode.length; i++) {
196
+ producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);
197
+ }
198
+ }
199
+ // Truncate all the arrays to drop all connection from this node to the graph.
200
+ node.producerNode.length = node.producerLastReadVersion.length = node.producerIndexOfThis.length =
201
+ 0;
202
+ if (node.liveConsumerNode) {
203
+ node.liveConsumerNode.length = node.liveConsumerIndexOfThis.length = 0;
161
204
  }
162
- }
163
- node.producerNode.length = node.producerLastReadVersion.length = node.producerIndexOfThis.length = 0;
164
- if (node.liveConsumerNode) {
165
- node.liveConsumerNode.length = node.liveConsumerIndexOfThis.length = 0;
166
- }
167
205
  }
206
+ /**
207
+ * Add `consumer` as a live consumer of this node.
208
+ *
209
+ * Note that this operation is potentially transitive. If this node becomes live, then it becomes
210
+ * a live consumer of all of its current producers.
211
+ */
168
212
  function producerAddLiveConsumer(node, consumer, indexOfThis) {
169
- assertProducerNode(node);
170
- assertConsumerNode(node);
171
- if (node.liveConsumerNode.length === 0) {
172
- for (let i = 0; i < node.producerNode.length; i++) {
173
- node.producerIndexOfThis[i] = producerAddLiveConsumer(node.producerNode[i], node, i);
213
+ assertProducerNode(node);
214
+ assertConsumerNode(node);
215
+ if (node.liveConsumerNode.length === 0) {
216
+ // When going from 0 to 1 live consumers, we become a live consumer to our producers.
217
+ for (let i = 0; i < node.producerNode.length; i++) {
218
+ node.producerIndexOfThis[i] = producerAddLiveConsumer(node.producerNode[i], node, i);
219
+ }
174
220
  }
175
- }
176
- node.liveConsumerIndexOfThis.push(indexOfThis);
177
- return node.liveConsumerNode.push(consumer) - 1;
221
+ node.liveConsumerIndexOfThis.push(indexOfThis);
222
+ return node.liveConsumerNode.push(consumer) - 1;
178
223
  }
224
+ /**
225
+ * Remove the live consumer at `idx`.
226
+ */
179
227
  function producerRemoveLiveConsumerAtIndex(node, idx) {
180
- assertProducerNode(node);
181
- assertConsumerNode(node);
182
- if (node.liveConsumerNode.length === 1) {
183
- for (let i = 0; i < node.producerNode.length; i++) {
184
- producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);
185
- }
186
- }
187
- const lastIdx = node.liveConsumerNode.length - 1;
188
- node.liveConsumerNode[idx] = node.liveConsumerNode[lastIdx];
189
- node.liveConsumerIndexOfThis[idx] = node.liveConsumerIndexOfThis[lastIdx];
190
- node.liveConsumerNode.length--;
191
- node.liveConsumerIndexOfThis.length--;
192
- if (idx < node.liveConsumerNode.length) {
193
- const idxProducer = node.liveConsumerIndexOfThis[idx];
194
- const consumer = node.liveConsumerNode[idx];
195
- assertConsumerNode(consumer);
196
- consumer.producerIndexOfThis[idxProducer] = idx;
197
- }
228
+ assertProducerNode(node);
229
+ assertConsumerNode(node);
230
+ if (node.liveConsumerNode.length === 1) {
231
+ // When removing the last live consumer, we will no longer be live. We need to remove
232
+ // ourselves from our producers' tracking (which may cause consumer-producers to lose
233
+ // liveness as well).
234
+ for (let i = 0; i < node.producerNode.length; i++) {
235
+ producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);
236
+ }
237
+ }
238
+ // Move the last value of `liveConsumers` into `idx`. Note that if there's only a single
239
+ // live consumer, this is a no-op.
240
+ const lastIdx = node.liveConsumerNode.length - 1;
241
+ node.liveConsumerNode[idx] = node.liveConsumerNode[lastIdx];
242
+ node.liveConsumerIndexOfThis[idx] = node.liveConsumerIndexOfThis[lastIdx];
243
+ // Truncate the array.
244
+ node.liveConsumerNode.length--;
245
+ node.liveConsumerIndexOfThis.length--;
246
+ // If the index is still valid, then we need to fix the index pointer from the producer to this
247
+ // consumer, and update it from `lastIdx` to `idx` (accounting for the move above).
248
+ if (idx < node.liveConsumerNode.length) {
249
+ const idxProducer = node.liveConsumerIndexOfThis[idx];
250
+ const consumer = node.liveConsumerNode[idx];
251
+ assertConsumerNode(consumer);
252
+ consumer.producerIndexOfThis[idxProducer] = idx;
253
+ }
198
254
  }
199
255
  function consumerIsLive(node) {
200
- return node.consumerIsAlwaysLive || (node?.liveConsumerNode?.length ?? 0) > 0;
256
+ return node.consumerIsAlwaysLive || (node?.liveConsumerNode?.length ?? 0) > 0;
201
257
  }
202
258
  function assertConsumerNode(node) {
203
- node.producerNode ??= [];
204
- node.producerIndexOfThis ??= [];
205
- node.producerLastReadVersion ??= [];
259
+ node.producerNode ??= [];
260
+ node.producerIndexOfThis ??= [];
261
+ node.producerLastReadVersion ??= [];
206
262
  }
207
263
  function assertProducerNode(node) {
208
- node.liveConsumerNode ??= [];
209
- node.liveConsumerIndexOfThis ??= [];
264
+ node.liveConsumerNode ??= [];
265
+ node.liveConsumerIndexOfThis ??= [];
210
266
  }
@@ -1,27 +1,10 @@
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 __copyProps = (to, from, except, desc) => {
7
- if (from && typeof from === "object" || typeof from === "function") {
8
- for (let key of __getOwnPropNames(from))
9
- if (!__hasOwnProp.call(to, key) && key !== except)
10
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
- }
12
- return to;
13
- };
14
- var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
15
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
16
- var implementation_exports = {};
17
- module.exports = __toCommonJS(implementation_exports);
18
- __reExport(implementation_exports, require("./api.js"), module.exports);
19
- __reExport(implementation_exports, require("./computed.js"), module.exports);
20
- __reExport(implementation_exports, require("./configure.js"), module.exports);
21
- __reExport(implementation_exports, require("./effect.js"), module.exports);
22
- __reExport(implementation_exports, require("./graph.js"), module.exports);
23
- __reExport(implementation_exports, require("./signal.js"), module.exports);
24
- __reExport(implementation_exports, require("./to-observable.js"), module.exports);
25
- __reExport(implementation_exports, require("./to-signal.js"), module.exports);
26
- __reExport(implementation_exports, require("./untracked.js"), module.exports);
27
- __reExport(implementation_exports, require("./watch.js"), module.exports);
1
+ export * from './api.js';
2
+ export * from './computed.js';
3
+ export * from './configure.js';
4
+ export * from './effect.js';
5
+ export * from './graph.js';
6
+ export * from './signal.js';
7
+ export * from './to-observable.js';
8
+ export * from './to-signal.js';
9
+ export * from './untracked.js';
10
+ export * from './watch.js';
@@ -1,30 +1,3 @@
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 signal_exports = {};
20
- __export(signal_exports, {
21
- setPostSignalSetFn: () => setPostSignalSetFn,
22
- signal: () => signal
23
- });
24
- module.exports = __toCommonJS(signal_exports);
25
- var import_api = require("./api.js");
26
- var import_errors = require("./errors.js");
27
- var import_graph = require("./graph.js");
28
1
  /**
29
2
  * @license
30
3
  * Copyright Google LLC All Rights Reserved.
@@ -32,67 +5,80 @@ var import_graph = require("./graph.js");
32
5
  * Use of this source code is governed by an MIT-style license that can be
33
6
  * found in the LICENSE file at https://angular.io/license
34
7
  */
8
+ import { SIGNAL, defaultEquals } from './api.js';
9
+ import { throwInvalidWriteToSignalError } from './errors.js';
10
+ import { REACTIVE_NODE, producerAccessed, producerNotifyConsumers, producerUpdatesAllowed } from './graph.js';
11
+ /**
12
+ * If set, called after `WritableSignal`s are updated.
13
+ *
14
+ * This hook can be used to achieve various effects, such as running effects synchronously as part
15
+ * of setting a signal.
16
+ */
35
17
  let postSignalSetFn = null;
36
- function signal(initialValue, options) {
37
- const node = Object.create(SIGNAL_NODE);
38
- node.value = initialValue;
39
- options?.equal && (node.equal = options.equal);
40
- function signalFn() {
41
- (0, import_graph.producerAccessed)(node);
42
- return node.value;
43
- }
44
- signalFn.set = signalSetFn;
45
- signalFn.update = signalUpdateFn;
46
- signalFn.mutate = signalMutateFn;
47
- signalFn.asReadonly = signalAsReadonlyFn;
48
- signalFn[import_api.SIGNAL] = node;
49
- return signalFn;
18
+ /**
19
+ * Create a `Signal` that can be set or updated directly.
20
+ */
21
+ export function signal(initialValue, options) {
22
+ const node = Object.create(SIGNAL_NODE);
23
+ node.value = initialValue;
24
+ options?.equal && (node.equal = options.equal);
25
+ function signalFn() {
26
+ producerAccessed(node);
27
+ return node.value;
28
+ }
29
+ signalFn.set = signalSetFn;
30
+ signalFn.update = signalUpdateFn;
31
+ signalFn.mutate = signalMutateFn;
32
+ signalFn.asReadonly = signalAsReadonlyFn;
33
+ signalFn[SIGNAL] = node;
34
+ return signalFn;
50
35
  }
51
- function setPostSignalSetFn(fn) {
52
- const prev = postSignalSetFn;
53
- postSignalSetFn = fn;
54
- return prev;
36
+ export function setPostSignalSetFn(fn) {
37
+ const prev = postSignalSetFn;
38
+ postSignalSetFn = fn;
39
+ return prev;
55
40
  }
56
41
  const SIGNAL_NODE = {
57
- ...import_graph.REACTIVE_NODE,
58
- equal: import_api.defaultEquals,
59
- readonlyFn: void 0
42
+ ...REACTIVE_NODE,
43
+ equal: defaultEquals,
44
+ readonlyFn: undefined,
60
45
  };
61
46
  function signalValueChanged(node) {
62
- node.version++;
63
- (0, import_graph.producerNotifyConsumers)(node);
64
- postSignalSetFn?.();
47
+ node.version++;
48
+ producerNotifyConsumers(node);
49
+ postSignalSetFn?.();
65
50
  }
66
51
  function signalSetFn(newValue) {
67
- const node = this[import_api.SIGNAL];
68
- if (!(0, import_graph.producerUpdatesAllowed)()) {
69
- (0, import_errors.throwInvalidWriteToSignalError)();
70
- }
71
- if (!node.equal(node.value, newValue)) {
72
- node.value = newValue;
73
- signalValueChanged(node);
74
- }
52
+ const node = this[SIGNAL];
53
+ if (!producerUpdatesAllowed()) {
54
+ throwInvalidWriteToSignalError();
55
+ }
56
+ if (!node.equal(node.value, newValue)) {
57
+ node.value = newValue;
58
+ signalValueChanged(node);
59
+ }
75
60
  }
76
61
  function signalUpdateFn(updater) {
77
- if (!(0, import_graph.producerUpdatesAllowed)()) {
78
- (0, import_errors.throwInvalidWriteToSignalError)();
79
- }
80
- signalSetFn.call(this, updater(this[import_api.SIGNAL].value));
62
+ if (!producerUpdatesAllowed()) {
63
+ throwInvalidWriteToSignalError();
64
+ }
65
+ signalSetFn.call(this, updater(this[SIGNAL].value));
81
66
  }
82
67
  function signalMutateFn(mutator) {
83
- const node = this[import_api.SIGNAL];
84
- if (!(0, import_graph.producerUpdatesAllowed)()) {
85
- (0, import_errors.throwInvalidWriteToSignalError)();
86
- }
87
- mutator(node.value);
88
- signalValueChanged(node);
68
+ const node = this[SIGNAL];
69
+ if (!producerUpdatesAllowed()) {
70
+ throwInvalidWriteToSignalError();
71
+ }
72
+ // Mutate bypasses equality checks as it's by definition changing the value.
73
+ mutator(node.value);
74
+ signalValueChanged(node);
89
75
  }
90
76
  function signalAsReadonlyFn() {
91
- const node = this[import_api.SIGNAL];
92
- if (node.readonlyFn === void 0) {
93
- const readonlyFn = () => this();
94
- readonlyFn[import_api.SIGNAL] = node;
95
- node.readonlyFn = readonlyFn;
96
- }
97
- return node.readonlyFn;
77
+ const node = this[SIGNAL];
78
+ if (node.readonlyFn === undefined) {
79
+ const readonlyFn = () => this();
80
+ readonlyFn[SIGNAL] = node;
81
+ node.readonlyFn = readonlyFn;
82
+ }
83
+ return node.readonlyFn;
98
84
  }