@tstdl/base 0.87.13 → 0.88.0-alpha1

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