reactor-core-ts 2.1.6 → 3.2.2

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 (272) hide show
  1. package/README.md +927 -658
  2. package/dist/_virtual/_@oxc-project_runtime@0.139.0/helpers/esm/defineProperty.js +12 -0
  3. package/dist/_virtual/_@oxc-project_runtime@0.139.0/helpers/esm/toPrimitive.js +14 -0
  4. package/dist/_virtual/_@oxc-project_runtime@0.139.0/helpers/esm/toPropertyKey.js +9 -0
  5. package/dist/_virtual/_@oxc-project_runtime@0.139.0/helpers/esm/typeof.js +11 -0
  6. package/dist/context/context-view.d.ts +31 -0
  7. package/dist/context/context-view.d.ts.map +1 -0
  8. package/dist/context/context-view.js +58 -0
  9. package/dist/context/context-view.js.map +1 -0
  10. package/dist/context/context.d.ts +46 -0
  11. package/dist/context/context.d.ts.map +1 -0
  12. package/dist/context/context.js +125 -0
  13. package/dist/context/context.js.map +1 -0
  14. package/dist/context/types.d.ts +7 -0
  15. package/dist/context/types.d.ts.map +1 -0
  16. package/dist/core/boolean-disposable.d.ts +19 -0
  17. package/dist/core/boolean-disposable.d.ts.map +1 -0
  18. package/dist/core/boolean-disposable.js +37 -0
  19. package/dist/core/boolean-disposable.js.map +1 -0
  20. package/dist/core/composite-disposable.d.ts +21 -0
  21. package/dist/core/composite-disposable.d.ts.map +1 -0
  22. package/dist/core/composite-disposable.js +64 -0
  23. package/dist/core/composite-disposable.js.map +1 -0
  24. package/dist/core/demand.d.ts +9 -0
  25. package/dist/core/demand.d.ts.map +1 -0
  26. package/dist/core/demand.js +21 -0
  27. package/dist/core/demand.js.map +1 -0
  28. package/dist/core/disposables.d.ts +12 -0
  29. package/dist/core/disposables.d.ts.map +1 -0
  30. package/dist/core/disposables.js +37 -0
  31. package/dist/core/disposables.js.map +1 -0
  32. package/dist/core/teardown.d.ts +4 -0
  33. package/dist/core/teardown.d.ts.map +1 -0
  34. package/dist/core/types.d.ts +14 -0
  35. package/dist/core/types.d.ts.map +1 -0
  36. package/dist/errors/classes.d.ts +37 -0
  37. package/dist/errors/classes.d.ts.map +1 -0
  38. package/dist/errors/classes.js +53 -0
  39. package/dist/errors/classes.js.map +1 -0
  40. package/dist/errors/exceptions.d.ts +15 -0
  41. package/dist/errors/exceptions.d.ts.map +1 -0
  42. package/dist/errors/helpers.d.ts +9 -0
  43. package/dist/errors/helpers.d.ts.map +1 -0
  44. package/dist/errors/helpers.js +18 -0
  45. package/dist/errors/helpers.js.map +1 -0
  46. package/dist/index.d.ts +17 -2556
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +8 -2
  49. package/dist/internal/abort.d.ts +5 -0
  50. package/dist/internal/abort.d.ts.map +1 -0
  51. package/dist/internal/abort.js +36 -0
  52. package/dist/internal/abort.js.map +1 -0
  53. package/dist/internal/async-queue.d.ts +48 -0
  54. package/dist/internal/async-queue.d.ts.map +1 -0
  55. package/dist/internal/async-queue.js +187 -0
  56. package/dist/internal/async-queue.js.map +1 -0
  57. package/dist/internal/iterable-terminal.d.ts +12 -0
  58. package/dist/internal/iterable-terminal.d.ts.map +1 -0
  59. package/dist/internal/iterable-terminal.js +49 -0
  60. package/dist/internal/iterable-terminal.js.map +1 -0
  61. package/dist/internal/iterable-transform.d.ts +24 -0
  62. package/dist/internal/iterable-transform.d.ts.map +1 -0
  63. package/dist/internal/iterable-transform.js +159 -0
  64. package/dist/internal/iterable-transform.js.map +1 -0
  65. package/dist/internal/iterable.d.ts +23 -0
  66. package/dist/internal/iterable.d.ts.map +1 -0
  67. package/dist/internal/iterable.js +81 -0
  68. package/dist/internal/iterable.js.map +1 -0
  69. package/dist/internal/microtask.d.ts +7 -0
  70. package/dist/internal/microtask.d.ts.map +1 -0
  71. package/dist/internal/microtask.js +19 -0
  72. package/dist/internal/microtask.js.map +1 -0
  73. package/dist/publisher/browser-sources.d.ts +15 -0
  74. package/dist/publisher/browser-sources.d.ts.map +1 -0
  75. package/dist/publisher/browser-sources.js +92 -0
  76. package/dist/publisher/browser-sources.js.map +1 -0
  77. package/dist/publisher/flux-entrypoint.d.ts +7 -0
  78. package/dist/publisher/flux-entrypoint.d.ts.map +1 -0
  79. package/dist/publisher/flux-entrypoint.js +11 -0
  80. package/dist/publisher/flux-entrypoint.js.map +1 -0
  81. package/dist/publisher/flux.d.ts +121 -0
  82. package/dist/publisher/flux.d.ts.map +1 -0
  83. package/dist/publisher/flux.js +767 -0
  84. package/dist/publisher/flux.js.map +1 -0
  85. package/dist/publisher/helpers.d.ts +19 -0
  86. package/dist/publisher/helpers.d.ts.map +1 -0
  87. package/dist/publisher/helpers.js +84 -0
  88. package/dist/publisher/helpers.js.map +1 -0
  89. package/dist/publisher/mono-entrypoint.d.ts +7 -0
  90. package/dist/publisher/mono-entrypoint.d.ts.map +1 -0
  91. package/dist/publisher/mono-entrypoint.js +11 -0
  92. package/dist/publisher/mono-entrypoint.js.map +1 -0
  93. package/dist/publisher/mono.d.ts +72 -0
  94. package/dist/publisher/mono.d.ts.map +1 -0
  95. package/dist/publisher/mono.js +373 -0
  96. package/dist/publisher/mono.js.map +1 -0
  97. package/dist/publisher/operators/aggregate.d.ts +35 -0
  98. package/dist/publisher/operators/aggregate.d.ts.map +1 -0
  99. package/dist/publisher/operators/aggregate.js +217 -0
  100. package/dist/publisher/operators/aggregate.js.map +1 -0
  101. package/dist/publisher/operators/compat/flux.d.ts +56 -0
  102. package/dist/publisher/operators/compat/flux.d.ts.map +1 -0
  103. package/dist/publisher/operators/compat/flux.js +156 -0
  104. package/dist/publisher/operators/compat/flux.js.map +1 -0
  105. package/dist/publisher/operators/compat/mono.d.ts +82 -0
  106. package/dist/publisher/operators/compat/mono.d.ts.map +1 -0
  107. package/dist/publisher/operators/compat/mono.js +125 -0
  108. package/dist/publisher/operators/compat/mono.js.map +1 -0
  109. package/dist/publisher/operators/coordination.d.ts +82 -0
  110. package/dist/publisher/operators/coordination.d.ts.map +1 -0
  111. package/dist/publisher/operators/coordination.js +345 -0
  112. package/dist/publisher/operators/coordination.js.map +1 -0
  113. package/dist/publisher/operators/error.d.ts +17 -0
  114. package/dist/publisher/operators/error.d.ts.map +1 -0
  115. package/dist/publisher/operators/error.js +48 -0
  116. package/dist/publisher/operators/error.js.map +1 -0
  117. package/dist/publisher/operators/flatten.d.ts +19 -0
  118. package/dist/publisher/operators/flatten.d.ts.map +1 -0
  119. package/dist/publisher/operators/flatten.js +127 -0
  120. package/dist/publisher/operators/flatten.js.map +1 -0
  121. package/dist/publisher/operators/lifecycle.d.ts +103 -0
  122. package/dist/publisher/operators/lifecycle.d.ts.map +1 -0
  123. package/dist/publisher/operators/lifecycle.js +263 -0
  124. package/dist/publisher/operators/lifecycle.js.map +1 -0
  125. package/dist/publisher/operators/lift.d.ts +42 -0
  126. package/dist/publisher/operators/lift.d.ts.map +1 -0
  127. package/dist/publisher/operators/lift.js +343 -0
  128. package/dist/publisher/operators/lift.js.map +1 -0
  129. package/dist/publisher/operators/mono-parity.d.ts +109 -0
  130. package/dist/publisher/operators/mono-parity.d.ts.map +1 -0
  131. package/dist/publisher/operators/mono-parity.js +144 -0
  132. package/dist/publisher/operators/mono-parity.js.map +1 -0
  133. package/dist/publisher/operators/mono.d.ts +30 -0
  134. package/dist/publisher/operators/mono.d.ts.map +1 -0
  135. package/dist/publisher/operators/mono.js +37 -0
  136. package/dist/publisher/operators/mono.js.map +1 -0
  137. package/dist/publisher/operators/register.d.ts +20 -0
  138. package/dist/publisher/operators/register.d.ts.map +1 -0
  139. package/dist/publisher/operators/register.js +23 -0
  140. package/dist/publisher/operators/register.js.map +1 -0
  141. package/dist/publisher/operators/selection.d.ts +25 -0
  142. package/dist/publisher/operators/selection.d.ts.map +1 -0
  143. package/dist/publisher/operators/selection.js +108 -0
  144. package/dist/publisher/operators/selection.js.map +1 -0
  145. package/dist/publisher/operators/side-effect.d.ts +15 -0
  146. package/dist/publisher/operators/side-effect.d.ts.map +1 -0
  147. package/dist/publisher/operators/side-effect.js +81 -0
  148. package/dist/publisher/operators/side-effect.js.map +1 -0
  149. package/dist/publisher/operators/terminal.d.ts +16 -0
  150. package/dist/publisher/operators/terminal.d.ts.map +1 -0
  151. package/dist/publisher/operators/terminal.js +47 -0
  152. package/dist/publisher/operators/terminal.js.map +1 -0
  153. package/dist/publisher/operators/time.d.ts +20 -0
  154. package/dist/publisher/operators/time.d.ts.map +1 -0
  155. package/dist/publisher/operators/time.js +92 -0
  156. package/dist/publisher/operators/time.js.map +1 -0
  157. package/dist/publisher/operators/transform.d.ts +31 -0
  158. package/dist/publisher/operators/transform.d.ts.map +1 -0
  159. package/dist/publisher/operators/transform.js +75 -0
  160. package/dist/publisher/operators/transform.js.map +1 -0
  161. package/dist/publisher/operators/windowing.d.ts +28 -0
  162. package/dist/publisher/operators/windowing.d.ts.map +1 -0
  163. package/dist/publisher/operators/windowing.js +148 -0
  164. package/dist/publisher/operators/windowing.js.map +1 -0
  165. package/dist/publisher/publisher.d.ts +11 -0
  166. package/dist/publisher/publisher.d.ts.map +1 -0
  167. package/dist/publisher/types.d.ts +51 -0
  168. package/dist/publisher/types.d.ts.map +1 -0
  169. package/dist/schedulers/animation-frame-scheduler.d.ts +11 -0
  170. package/dist/schedulers/animation-frame-scheduler.d.ts.map +1 -0
  171. package/dist/schedulers/animation-frame-scheduler.js +30 -0
  172. package/dist/schedulers/animation-frame-scheduler.js.map +1 -0
  173. package/dist/schedulers/base-scheduler.d.ts +28 -0
  174. package/dist/schedulers/base-scheduler.d.ts.map +1 -0
  175. package/dist/schedulers/base-scheduler.js +77 -0
  176. package/dist/schedulers/base-scheduler.js.map +1 -0
  177. package/dist/schedulers/basic-worker.d.ts +22 -0
  178. package/dist/schedulers/basic-worker.d.ts.map +1 -0
  179. package/dist/schedulers/basic-worker.js +71 -0
  180. package/dist/schedulers/basic-worker.js.map +1 -0
  181. package/dist/schedulers/delay-scheduler.d.ts +12 -0
  182. package/dist/schedulers/delay-scheduler.d.ts.map +1 -0
  183. package/dist/schedulers/delay-scheduler.js +17 -0
  184. package/dist/schedulers/delay-scheduler.js.map +1 -0
  185. package/dist/schedulers/disposed.d.ts +4 -0
  186. package/dist/schedulers/disposed.d.ts.map +1 -0
  187. package/dist/schedulers/disposed.js +14 -0
  188. package/dist/schedulers/disposed.js.map +1 -0
  189. package/dist/schedulers/duration.d.ts +8 -0
  190. package/dist/schedulers/duration.d.ts.map +1 -0
  191. package/dist/schedulers/duration.js +11 -0
  192. package/dist/schedulers/duration.js.map +1 -0
  193. package/dist/schedulers/executor-scheduler.d.ts +13 -0
  194. package/dist/schedulers/executor-scheduler.d.ts.map +1 -0
  195. package/dist/schedulers/executor-scheduler.js +43 -0
  196. package/dist/schedulers/executor-scheduler.js.map +1 -0
  197. package/dist/schedulers/immediate-scheduler.d.ts +15 -0
  198. package/dist/schedulers/immediate-scheduler.d.ts.map +1 -0
  199. package/dist/schedulers/immediate-scheduler.js +24 -0
  200. package/dist/schedulers/immediate-scheduler.js.map +1 -0
  201. package/dist/schedulers/index.d.ts +7 -0
  202. package/dist/schedulers/index.d.ts.map +1 -0
  203. package/dist/schedulers/index.js +2 -0
  204. package/dist/schedulers/interval-scheduler.d.ts +12 -0
  205. package/dist/schedulers/interval-scheduler.d.ts.map +1 -0
  206. package/dist/schedulers/interval-scheduler.js +17 -0
  207. package/dist/schedulers/interval-scheduler.js.map +1 -0
  208. package/dist/schedulers/macro-scheduler.d.ts +19 -0
  209. package/dist/schedulers/macro-scheduler.d.ts.map +1 -0
  210. package/dist/schedulers/macro-scheduler.js +30 -0
  211. package/dist/schedulers/macro-scheduler.js.map +1 -0
  212. package/dist/schedulers/microtask-scheduler.d.ts +11 -0
  213. package/dist/schedulers/microtask-scheduler.d.ts.map +1 -0
  214. package/dist/schedulers/microtask-scheduler.js +34 -0
  215. package/dist/schedulers/microtask-scheduler.js.map +1 -0
  216. package/dist/schedulers/schedulers.d.ts +39 -0
  217. package/dist/schedulers/schedulers.d.ts.map +1 -0
  218. package/dist/schedulers/schedulers.js +83 -0
  219. package/dist/schedulers/schedulers.js.map +1 -0
  220. package/dist/schedulers/timeout-scheduler.d.ts +11 -0
  221. package/dist/schedulers/timeout-scheduler.d.ts.map +1 -0
  222. package/dist/schedulers/types.d.ts +35 -0
  223. package/dist/schedulers/types.d.ts.map +1 -0
  224. package/dist/signal/signal-type.d.ts +26 -0
  225. package/dist/signal/signal-type.d.ts.map +1 -0
  226. package/dist/signal/signal-type.js +31 -0
  227. package/dist/signal/signal-type.js.map +1 -0
  228. package/dist/signal/signal.d.ts +33 -0
  229. package/dist/signal/signal.d.ts.map +1 -0
  230. package/dist/signal/signal.js +70 -0
  231. package/dist/signal/signal.js.map +1 -0
  232. package/dist/sinks/index.d.ts +7 -0
  233. package/dist/sinks/index.d.ts.map +1 -0
  234. package/dist/sinks/index.js +2 -0
  235. package/dist/sinks/many.d.ts +66 -0
  236. package/dist/sinks/many.d.ts.map +1 -0
  237. package/dist/sinks/many.js +193 -0
  238. package/dist/sinks/many.js.map +1 -0
  239. package/dist/sinks/one.d.ts +41 -0
  240. package/dist/sinks/one.d.ts.map +1 -0
  241. package/dist/sinks/one.js +144 -0
  242. package/dist/sinks/one.js.map +1 -0
  243. package/dist/sinks/specs.d.ts +25 -0
  244. package/dist/sinks/specs.d.ts.map +1 -0
  245. package/dist/sinks/specs.js +126 -0
  246. package/dist/sinks/specs.js.map +1 -0
  247. package/dist/sinks/subscribers.d.ts +16 -0
  248. package/dist/sinks/subscribers.d.ts.map +1 -0
  249. package/dist/sinks/subscribers.js +32 -0
  250. package/dist/sinks/subscribers.js.map +1 -0
  251. package/dist/sinks/types.d.ts +137 -0
  252. package/dist/sinks/types.d.ts.map +1 -0
  253. package/dist/sinks/types.js +58 -0
  254. package/dist/sinks/types.js.map +1 -0
  255. package/dist/subscription/core-subscriber.d.ts +12 -0
  256. package/dist/subscription/core-subscriber.d.ts.map +1 -0
  257. package/dist/subscription/iterable-subscription.d.ts +64 -0
  258. package/dist/subscription/iterable-subscription.d.ts.map +1 -0
  259. package/dist/subscription/iterable-subscription.js +281 -0
  260. package/dist/subscription/iterable-subscription.js.map +1 -0
  261. package/dist/subscription/reactive-streams.d.ts +8 -0
  262. package/dist/subscription/reactive-streams.d.ts.map +1 -0
  263. package/dist/subscription/reactive-streams.js +0 -0
  264. package/dist/subscription/subscriber.d.ts +17 -0
  265. package/dist/subscription/subscriber.d.ts.map +1 -0
  266. package/dist/subscription/subscription.d.ts +12 -0
  267. package/dist/subscription/subscription.d.ts.map +1 -0
  268. package/package.json +100 -33
  269. package/dist/index.d.mts +0 -2557
  270. package/dist/index.js.map +0 -1
  271. package/dist/index.mjs +0 -2
  272. package/dist/index.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iterable-subscription.js","names":[],"sources":["../../src/subscription/iterable-subscription.ts"],"sourcesContent":["/**\n * @packageDocumentation\n * Reactive Streams subscription and subscriber contracts.\n */\nimport {addCap, normalizeRequest} from \"@/core/demand.js\";\nimport type {Context} from \"@/context/context.js\";\nimport {doneResult, isAsyncIterable, resolvedDoneResult} from \"@/internal/iterable.js\";\nimport {scheduleMicrotask} from \"@/internal/microtask.js\";\nimport type {Flux} from \"@/publisher/flux.js\";\nimport type {Subscriber} from \"@/subscription/subscriber.js\";\nimport type {Subscription} from \"@/subscription/subscription.js\";\n\n/** Subscription implementation that drains a Flux only when demand is requested. */\nexport class IterableSubscription<T> implements Subscription {\n /** Abort controller used to cancel the active source iterator. */\n private readonly controller = new AbortController();\n /** Lazily created async iterator over the backing Flux. */\n private asyncIterator: AsyncIterator<T> | undefined;\n /** Lazily created synchronous iterator over the backing Flux. */\n private syncIterator: Iterator<T> | undefined;\n /** Tracks whether the source iterator has been assembled. */\n private started = false;\n /** Stores a synchronous source assembly failure until it can be signalled. */\n private startFailure: unknown;\n /** Tracks whether source assembly failed synchronously. */\n private hasStartFailure = false;\n /** Prefetched async result used to detect completion with zero demand. */\n private pendingAsyncNext: Promise<IteratorResult<T>> | undefined;\n /** Prefetched sync result used to detect completion with zero demand. */\n private pendingSyncNext: IteratorResult<T> | undefined;\n /** Outstanding downstream demand. */\n private requested = 0;\n /** Guards against concurrent drain loops. */\n private draining = false;\n /** Tracks downstream cancellation. */\n private cancelled = false;\n /** Tracks terminal completion or failure delivery. */\n private terminated = false;\n /** Source Flux drained by this subscription. */\n private readonly flux: Flux<T>;\n /** Downstream subscriber receiving signals. */\n private readonly subscriber: Subscriber<T>;\n /** Context used for the source iteration. */\n private readonly context: Context;\n\n /** Creates a subscription for the provided Flux and subscriber. */\n public constructor(flux: Flux<T>, subscriber: Subscriber<T>, context: Context) {\n this.flux = flux;\n this.subscriber = subscriber;\n this.context = context;\n }\n\n /** Starts source assembly without pulling any values from it. */\n public start(): void {\n if (this.started || this.cancelled || this.terminated) {\n return;\n }\n this.started = true;\n try {\n const source = this.flux.iterate(this.controller.signal, this.context);\n if (isAsyncIterable<T>(source)) {\n this.asyncIterator = source[Symbol.asyncIterator]();\n } else {\n this.syncIterator = source[Symbol.iterator]();\n }\n } catch (error) {\n this.startFailure = error;\n this.hasStartFailure = true;\n }\n }\n\n /** Delivers a synchronous source assembly failure after `onSubscribe`. */\n public deliverStartFailure(): void {\n if (!this.hasStartFailure || this.cancelled || this.terminated) {\n return;\n }\n this.hasStartFailure = false;\n this.terminated = true;\n this.subscriber.onError(this.startFailure);\n }\n\n /** Requests more values from the backing iterator. */\n public request(n: number): void {\n if (this.cancelled || this.terminated) {\n return;\n }\n let request: number;\n try {\n request = normalizeRequest(n);\n } catch (error) {\n this.cancel();\n this.subscriber.onError(error);\n return;\n }\n this.requested = addCap(this.requested, request);\n if (this.hasStartFailure) {\n this.deliverStartFailure();\n return;\n }\n void this.drain();\n }\n\n /** Cancels iteration and closes upstream resources. */\n public cancel(): void {\n if (this.cancelled || this.terminated) {\n return;\n }\n this.cancelled = true;\n this.controller.abort();\n this.closeIterators();\n }\n\n /** Drains the source while there is outstanding demand. */\n private async drain(): Promise<void> {\n if (this.draining) {\n return;\n }\n this.draining = true;\n try {\n this.start();\n if (this.hasStartFailure) {\n this.deliverStartFailure();\n return;\n }\n if (this.syncIterator) {\n this.drainSync();\n return;\n }\n while (!this.cancelled && !this.terminated && this.requested > 0) {\n const result = await this.nextAsyncResult();\n if (this.cancelled || this.terminated) {\n return;\n }\n if (this.deliverResult(result)) {\n return;\n }\n }\n } catch (error) {\n if (!this.cancelled && !this.terminated) {\n this.terminated = true;\n this.subscriber.onError(error);\n }\n } finally {\n this.draining = false;\n if (!this.cancelled && !this.terminated && this.requested > 0) {\n scheduleMicrotask(() => {\n void this.drain();\n });\n } else if (!this.cancelled && !this.terminated && this.requested === 0) {\n this.lookAheadForTermination();\n }\n }\n }\n\n /** Drains a synchronous source without per-item promise allocation. */\n private drainSync(): void {\n while (!this.cancelled && !this.terminated && this.requested > 0) {\n const result = this.nextSyncResult();\n if (this.cancelled || this.terminated) {\n return;\n }\n if (this.deliverResult(result)) {\n return;\n }\n }\n }\n\n /** Returns true after delivering a terminal result. */\n private deliverResult(result: IteratorResult<T>): boolean {\n if (result.done) {\n this.terminated = true;\n this.subscriber.onComplete();\n return true;\n }\n if (this.requested !== Number.POSITIVE_INFINITY) {\n this.requested -= 1;\n }\n try {\n this.subscriber.onNext(result.value);\n } catch (error) {\n this.cancel();\n this.subscriber.onError(error);\n return true;\n }\n return false;\n }\n\n /** Returns the pending prefetched async result or asks the async iterator for the next item. */\n private nextAsyncResult(): Promise<IteratorResult<T>> {\n if (this.pendingAsyncNext) {\n const pending = this.pendingAsyncNext;\n this.pendingAsyncNext = undefined;\n return pending;\n }\n return this.asyncIterator?.next() ?? resolvedDoneResult<T>();\n }\n\n /** Returns the pending prefetched sync result or asks the sync iterator for the next item. */\n private nextSyncResult(): IteratorResult<T> {\n if (this.pendingSyncNext) {\n const pending = this.pendingSyncNext;\n this.pendingSyncNext = undefined;\n return pending;\n }\n return this.syncIterator?.next() ?? doneResult<T>();\n }\n\n /** Prefetches one item to discover terminal completion without extra demand. */\n private lookAheadForTermination(): void {\n if (this.syncIterator) {\n this.lookAheadForSyncTermination();\n return;\n }\n if (!this.asyncIterator || this.pendingAsyncNext) {\n return;\n }\n const pending = this.asyncIterator.next();\n this.pendingAsyncNext = pending;\n pending.then(\n result => {\n if (this.pendingAsyncNext !== pending || this.cancelled || this.terminated) {\n return;\n }\n if (result.done) {\n this.pendingAsyncNext = undefined;\n this.terminated = true;\n this.subscriber.onComplete();\n }\n },\n error => {\n if (this.pendingAsyncNext !== pending || this.cancelled || this.terminated) {\n return;\n }\n this.pendingAsyncNext = undefined;\n this.terminated = true;\n this.subscriber.onError(error);\n }\n );\n }\n\n /** Prefetches one synchronous item to discover terminal completion without extra demand. */\n private lookAheadForSyncTermination(): void {\n if (!this.syncIterator || this.pendingSyncNext) {\n return;\n }\n try {\n const result = this.syncIterator.next();\n if (this.cancelled || this.terminated) {\n return;\n }\n if (result.done) {\n this.terminated = true;\n this.subscriber.onComplete();\n } else {\n this.pendingSyncNext = result;\n }\n } catch (error) {\n if (!this.cancelled && !this.terminated) {\n this.terminated = true;\n this.subscriber.onError(error);\n }\n }\n }\n\n /** Closes active iterators and ignores cleanup failures after cancellation. */\n private closeIterators(): void {\n try {\n void this.asyncIterator?.return?.();\n } catch {\n // cancellation best-effort cleanup\n }\n try {\n this.syncIterator?.return?.();\n } catch {\n // cancellation best-effort cleanup\n }\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Reactive Streams type-only public entrypoint.
4
+ */
5
+ export type { Publisher } from "../publisher/publisher.js";
6
+ export type { Subscriber } from "./subscriber.js";
7
+ export type { Subscription } from "./subscription.js";
8
+ //# sourceMappingURL=reactive-streams.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactive-streams.d.ts","sourceRoot":"","sources":["../../src/subscription/reactive-streams.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,YAAY,EAAC,SAAS,EAAC,MAAM,0BAA0B,CAAC;AACxD,YAAY,EAAC,UAAU,EAAC,MAAM,8BAA8B,CAAC;AAC7D,YAAY,EAAC,YAAY,EAAC,MAAM,gCAAgC,CAAC"}
File without changes
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Reactive Streams subscriber contract.
4
+ */
5
+ import type { Subscription } from "./subscription.js";
6
+ /** Reactive Streams subscriber receiving subscription, data and terminal signals. */
7
+ export interface Subscriber<T> {
8
+ /** Called once with the upstream subscription before any other signal. */
9
+ onSubscribe(subscription: Subscription): void;
10
+ /** Called for each emitted item while demand is available. */
11
+ onNext(value: T): void;
12
+ /** Called once when the sequence fails. */
13
+ onError(error: unknown): void;
14
+ /** Called once when the sequence completes successfully. */
15
+ onComplete(): void;
16
+ }
17
+ //# sourceMappingURL=subscriber.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscriber.d.ts","sourceRoot":"","sources":["../../src/subscription/subscriber.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,gCAAgC,CAAC;AAEjE,qFAAqF;AACrF,MAAM,WAAW,UAAU,CAAC,CAAC;IACzB,0EAA0E;IAC1E,WAAW,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAE9C,8DAA8D;IAC9D,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAEvB,2CAA2C;IAC3C,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAE9B,4DAA4D;IAC5D,UAAU,IAAI,IAAI,CAAC;CACtB"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Reactive Streams subscription contract.
4
+ */
5
+ /** Reactive Streams subscription used to signal demand and cancellation. */
6
+ export interface Subscription {
7
+ /** Requests a strictly positive amount of items from the upstream publisher. */
8
+ request(n: number): void;
9
+ /** Cancels the subscription and releases upstream resources. */
10
+ cancel(): void;
11
+ }
12
+ //# sourceMappingURL=subscription.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscription.d.ts","sourceRoot":"","sources":["../../src/subscription/subscription.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,4EAA4E;AAC5E,MAAM,WAAW,YAAY;IACzB,gFAAgF;IAChF,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEzB,gEAAgE;IAChE,MAAM,IAAI,IAAI,CAAC;CAClB"}
package/package.json CHANGED
@@ -1,24 +1,9 @@
1
1
  {
2
2
  "name": "reactor-core-ts",
3
- "version": "2.1.6",
4
- "description": "A TypeScript implementation of Reactive Streams, inspired by Project Reactor. Provides Flux and Mono publishers with full backpressure support, a suite of composable operators, programmable Sinks, and pluggable Schedulers.",
5
- "main": "./dist/index.js",
6
- "module": "./dist/index.mjs",
7
- "types": "./dist/index.d.ts",
8
- "exports": {
9
- ".": {
10
- "types": "./dist/index.d.ts",
11
- "import": "./dist/index.mjs",
12
- "require": "./dist/index.js"
13
- }
14
- },
15
- "scripts": {
16
- "build": "npm run test && tsup src/index.ts",
17
- "start": "tsx src/start.ts",
18
- "start:watch": "tsx watch src/start.ts",
19
- "test": "jest --config jest.config.ts",
20
- "test:watch": "jest --config jest.config.ts --watch"
21
- },
3
+ "version": "3.2.2",
4
+ "description": "Browser-first TypeScript implementation inspired by Project Reactor Core.",
5
+ "license": "LGPL-3.0-only",
6
+ "author": "CKATEPTb",
22
7
  "repository": {
23
8
  "type": "git",
24
9
  "url": "https://github.com/CKATEPTb/reactor-core-ts.git"
@@ -32,21 +17,103 @@
32
17
  "spring",
33
18
  "java",
34
19
  "typescript",
35
- "backpressure"
20
+ "backpressure",
21
+ "reactor",
22
+ "flux",
23
+ "mono",
24
+ "browser"
36
25
  ],
37
- "author": "CKATEPTb",
38
- "license": "LGPL-3.0-only",
39
- "devDependencies": {
40
- "@types/jest": "^29.5.14",
41
- "@types/node": "^22.15.17",
42
- "jest": "^29.7.0",
43
- "ts-jest": "^29.3.2",
44
- "ts-node": "^10.9.2",
45
- "tsup": "^8.4.0",
46
- "tsx": "^4.19.4",
47
- "typescript": "^5.8.3"
26
+ "type": "module",
27
+ "main": "./dist/index.js",
28
+ "module": "./dist/index.js",
29
+ "browser": "./dist/index.js",
30
+ "types": "./dist/index.d.ts",
31
+ "exports": {
32
+ ".": {
33
+ "types": "./dist/index.d.ts",
34
+ "browser": "./dist/index.js",
35
+ "import": "./dist/index.js",
36
+ "default": "./dist/index.js"
37
+ },
38
+ "./flux": {
39
+ "types": "./dist/publisher/flux-entrypoint.d.ts",
40
+ "browser": "./dist/publisher/flux-entrypoint.js",
41
+ "import": "./dist/publisher/flux-entrypoint.js",
42
+ "default": "./dist/publisher/flux-entrypoint.js"
43
+ },
44
+ "./mono": {
45
+ "types": "./dist/publisher/mono-entrypoint.d.ts",
46
+ "browser": "./dist/publisher/mono-entrypoint.js",
47
+ "import": "./dist/publisher/mono-entrypoint.js",
48
+ "default": "./dist/publisher/mono-entrypoint.js"
49
+ },
50
+ "./sinks": {
51
+ "types": "./dist/sinks/index.d.ts",
52
+ "browser": "./dist/sinks/index.js",
53
+ "import": "./dist/sinks/index.js",
54
+ "default": "./dist/sinks/index.js"
55
+ },
56
+ "./schedulers": {
57
+ "types": "./dist/schedulers/index.d.ts",
58
+ "browser": "./dist/schedulers/index.js",
59
+ "import": "./dist/schedulers/index.js",
60
+ "default": "./dist/schedulers/index.js"
61
+ },
62
+ "./reactive-streams": {
63
+ "types": "./dist/subscription/reactive-streams.d.ts",
64
+ "browser": "./dist/subscription/reactive-streams.js",
65
+ "import": "./dist/subscription/reactive-streams.js",
66
+ "default": "./dist/subscription/reactive-streams.js"
67
+ },
68
+ "./package.json": "./package.json"
69
+ },
70
+ "typesVersions": {
71
+ "*": {
72
+ "flux": [
73
+ "dist/publisher/flux-entrypoint.d.ts"
74
+ ],
75
+ "mono": [
76
+ "dist/publisher/mono-entrypoint.d.ts"
77
+ ],
78
+ "schedulers": [
79
+ "dist/schedulers/index.d.ts"
80
+ ],
81
+ "sinks": [
82
+ "dist/sinks/index.d.ts"
83
+ ],
84
+ "reactive-streams": [
85
+ "dist/subscription/reactive-streams.d.ts"
86
+ ]
87
+ }
48
88
  },
49
89
  "files": [
50
- "dist"
51
- ]
90
+ "dist",
91
+ "LICENSE.md",
92
+ "README.md"
93
+ ],
94
+ "sideEffects": [
95
+ "./src/publisher/flux-entrypoint.ts",
96
+ "./src/publisher/mono-entrypoint.ts",
97
+ "./src/publisher/operators/register.ts",
98
+ "./src/publisher/operators/**/*.ts",
99
+ "./dist/index.js",
100
+ "./dist/publisher/flux-entrypoint.js",
101
+ "./dist/publisher/mono-entrypoint.js",
102
+ "./dist/publisher/operators/register.js",
103
+ "./dist/publisher/operators/**/*.js"
104
+ ],
105
+ "publishConfig": {
106
+ "access": "public"
107
+ },
108
+ "scripts": {
109
+ "build": "node scripts/clean-dist.mjs && vite build && tsc -p tsconfig.build.json --emitDeclarationOnly && node scripts/rewrite-dist-aliases.mjs && node scripts/check-browser-package.mjs",
110
+ "test": "tsc -p tsconfig.json && npm run build && vitest run && node scripts/java-oracle-matrix.mjs && node scripts/check-api-parity.mjs --fail && npm pack --dry-run --json",
111
+ "generate-fixtures": "npm run build && node scripts/java-oracle-matrix.mjs --refresh"
112
+ },
113
+ "devDependencies": {
114
+ "@types/node": "^26.1.1",
115
+ "typescript": "^7.0.2",
116
+ "vite": "^8.1.4",
117
+ "vitest": "^4.1.10"
118
+ }
52
119
  }