@soffinal/stream 0.1.0 → 0.1.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.
package/README.md CHANGED
@@ -670,12 +670,46 @@ setTimeout(cleanup, 5000);
670
670
 
671
671
  ## Installation
672
672
 
673
+ # bun
674
+
673
675
  ```bash
674
676
  bun add @soffinal/stream
677
+ # or from JSR
678
+ bunx jsr add @soffinal/stream
675
679
  ```
676
680
 
681
+ # Deno
682
+
683
+ ```bash
684
+ deno add npm:@soffinal/stream
685
+ # or from JSR
686
+ deno add jsr:@soffinal/stream
687
+
688
+ ```
689
+
690
+ # npm
691
+
677
692
  ```bash
678
693
  npm install @soffinal/stream
694
+ # or from JSR
695
+ npx jsr add @soffinal/stream
696
+ ```
697
+
698
+ # pnpm
699
+
700
+ ```bash
701
+ pnpm install @soffinal/stream
702
+ # or from JSR
703
+ pnpm install jsr:@soffinal/stream
704
+
705
+ ```
706
+
707
+ # yarn
708
+
709
+ ```bash
710
+ yarn add @soffinal/stream
711
+ yarn add jsr:@soffinal/stream
712
+
679
713
  ```
680
714
 
681
715
  ## API Reference
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- export * from "./stream";
2
- export * from "./state";
3
- export * from "./list";
4
- export * from "./map";
5
- export * from "./set";
1
+ export * from "./stream.ts";
2
+ export * from "./state.ts";
3
+ export * from "./list.ts";
4
+ export * from "./map.ts";
5
+ export * from "./set.ts";
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AACtB,cAAc,OAAO,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,4 @@
1
- export * from "./stream";
2
- export * from "./state";
3
- export * from "./list";
4
- export * from "./map";
5
- export * from "./set";
6
- //# sourceMappingURL=index.js.map
1
+ class K{_listeners=new Set;_generatorFn;_generator;_listenerAdded;_listenerRemoved;constructor(G){this._generatorFn=G}get hasListeners(){return this._listeners.size>0}get listenerAdded(){if(!this._listenerAdded)this._listenerAdded=new K;return this._listenerAdded}get listenerRemoved(){if(!this._listenerRemoved)this._listenerRemoved=new K;return this._listenerRemoved}async*[Symbol.asyncIterator](){let G=[],j,B=this.listen((D)=>{G.push(D),j?.()});try{while(!0)if(G.length)yield G.shift();else await new Promise((D)=>j=D)}finally{B(),G.length=0,j=void 0;return}}push(G,...j){j.unshift(G);for(let B of j)for(let D of this._listeners)D(B)}listen(G,j){if(j?.aborted)return()=>{};let B=this;if(j?.addEventListener("abort",D),B._listeners.add(G),B._listenerAdded?.push(),B._generatorFn&&B._listeners.size===1)B._generator=B._generatorFn(),(async()=>{for await(let H of B._generator)B.push(H)})();return D;function D(){if(B._listeners.delete(G),B._listenerRemoved?.push(),B._listeners.size===0)B._generator?.return(),B._generator=void 0;j?.removeEventListener("abort",D)}}then(G){return new Promise((j)=>{let B=this.listen((D)=>{j(D),B()})}).then(G)}filter(G,j){let B=this;if(typeof G==="function")return new K(async function*(){for await(let D of B)if(await G(D))yield D});else return new K(async function*(){let D=G;for await(let H of B){let[J,Q]=await j(D,H);if(D=Q,J)yield H}})}map(G,j){let B=this;if(typeof G==="function")return new K(async function*(){for await(let D of B)yield await G(D)});else return new K(async function*(){let D=G;for await(let H of B){let[J,Q]=await j(D,H);D=Q,yield J}})}group(G,j){let B=this;if(typeof G==="function")return new K(async function*(){let D=[];for await(let H of B)if(D.push(H),await G([...D],H))yield[...D],D.length=0});else return new K(async function*(){let D=G;for await(let H of B){let[J,Q]=await j(D,H);if(J)yield D,D=G;else D=Q}})}merge(...G){let j=this;return new K(async function*(){let B=[],D,H=G.length+1;async function J(R){try{for await(let X of R)B.push(X),D?.()}finally{H--,D?.()}}let Q=[j,...G].map((R)=>{let X=R[Symbol.asyncIterator]();return J(X),X});try{while(H>0||B.length>0)if(B.length>0)yield B.shift();else await new Promise((R)=>D=R)}finally{for(let R of Q)await R.return()}})}flat(G=0){let j=this;return new K(async function*(){for await(let B of j)if(Array.isArray(B)){let D=B.flat(G);for(let H=0;H<D.length;H++)yield D[H]}else yield B})}pipe(G){return G(this)}}var T=(G,j)=>(B)=>{if(j)return B.map(G,j);else return B.map(G)},U=(G,j)=>(B)=>{if(j)return B.filter(G,j);else return B.filter(G)},V=(G,j)=>(B)=>{if(j)return B.group(G,j);else return B.group(G)},W=(...G)=>(j)=>j.merge(...G),A=(G)=>(j)=>G!==void 0?j.flat(G):j.flat();class Y extends K{_value;constructor(G){super();this._value=G}push(...G){for(let j of G)this.value=j}get value(){return this._value}set value(G){this._value=G,super.push(G)}}class Z{_items=[];_insertStream;_deleteStream;_clearStream;constructor(G){if(G)this._items=[...G];let j=this;function B(H,J){if(J===0)return 0;return H<0?(H%J+J)%J:H%J}this.insert=new Proxy((H,J)=>{let Q=H<0?Math.max(0,j._items.length+H+1):Math.min(H,j._items.length);return j._items.splice(Q,0,J),j._insertStream?.push([Q,J]),D},{get(H,J){if(J in H)return H[J];if(!j._insertStream)j._insertStream=new K;return j._insertStream[J]}}),this.delete=new Proxy((H)=>{if(H<0||H>=j._items.length)return;let J=j._items.splice(H,1)[0];return j._deleteStream?.push([H,J]),J},{get(H,J){if(J in H)return H[J];if(!j._deleteStream)j._deleteStream=new K;return j._deleteStream[J]}}),this.clear=new Proxy(()=>{if(j._items.length>0)j._items.length=0,j._clearStream?.push()},{get(H,J){if(J in H)return H[J];if(!j._clearStream)j._clearStream=new K;return j._clearStream[J]}});let D=new Proxy(this,{get(H,J){if(typeof J==="string"&&/^-?\d+$/.test(J)){let Q=parseInt(J);if(H._items.length===0)return;let R=B(Q,H._items.length);return H._items[R]}return H[J]},set(H,J,Q){if(typeof J==="string"&&/^-?\d+$/.test(J)){let R=parseInt(J);if(H._items.length===0)return H._items.push(Q),H._insertStream?.push([0,Q]),!0;let X=B(R,H._items.length);if(H._items[X]!==Q)H._items[X]=Q,H._insertStream?.push([X,Q]);return!0}return H[J]=Q,!0}});return D}get(G){return this._items[G]}get length(){return this._items.length}values(){return this._items[Symbol.iterator]()}[Symbol.iterator](){return this._items[Symbol.iterator]()}}class $ extends globalThis.Map{_setStream;_deleteStream;_clearStream;constructor(G){super(G);let j=this;this.set=new Proxy((B,D)=>{if(globalThis.Map.prototype.has.call(j,B)&&globalThis.Map.prototype.get.call(j,B)===D)return j;return globalThis.Map.prototype.set.call(j,B,D),j._setStream?.push([B,D]),j},{get(B,D){if(D in B)return B[D];if(!j._setStream)j._setStream=new K;return j._setStream[D]}}),this.delete=new Proxy((B)=>{if(!globalThis.Map.prototype.has.call(j,B))return!1;let D=globalThis.Map.prototype.get.call(j,B);return globalThis.Map.prototype.delete.call(j,B),j._deleteStream?.push([B,D]),!0},{get(B,D){if(D in B)return B[D];if(!j._deleteStream)j._deleteStream=new K;return j._deleteStream[D]}}),this.clear=new Proxy(()=>{if(j.size>0)globalThis.Map.prototype.clear.call(j),j._clearStream?.push()},{get(B,D){if(D in B)return B[D];if(!j._clearStream)j._clearStream=new K;return j._clearStream[D]}})}}class P extends globalThis.Set{_addStream;_deleteStream;_clearStream;constructor(G){super(G);let j=this;this.add=new Proxy((B)=>{if(globalThis.Set.prototype.has.call(j,B))return j;return globalThis.Set.prototype.add.call(j,B),j._addStream?.push(B),j},{get(B,D){if(D in B)return B[D];if(!j._addStream)j._addStream=new K;return j._addStream[D]}}),this.delete=new Proxy((B)=>{if(!globalThis.Set.prototype.has.call(j,B))return!1;return globalThis.Set.prototype.delete.call(j,B),j._deleteStream?.push(B),!0},{get(B,D){if(D in B)return B[D];if(!j._deleteStream)j._deleteStream=new K;return j._deleteStream[D]}}),this.clear=new Proxy(()=>{if(j.size>0)globalThis.Set.prototype.clear.call(j),j._clearStream?.push()},{get(B,D){if(D in B)return B[D];if(!j._clearStream)j._clearStream=new K;return j._clearStream[D]}})}}export{W as merge,T as map,V as group,A as flat,U as filter,K as Stream,Y as State,P as Set,$ as Map,Z as List};
2
+
3
+ //# debugId=D224AD377526AD1664756E2164756E21
4
+ //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1,14 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AACtB,cAAc,OAAO,CAAC"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/stream.ts", "../src/state.ts", "../src/list.ts", "../src/map.ts", "../src/set.ts"],
4
+ "sourcesContent": [
5
+ "export type ValueOf<STREAM> = STREAM extends Stream<infer VALUE> ? VALUE : never;\n\n// FlatArray type for flattening operations\nexport type FlatArray<Arr, Depth extends number> = {\n \"done\": Arr,\n \"recur\": Arr extends ReadonlyArray<infer InnerArr>\n ? FlatArray<InnerArr, [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][Depth]>\n : Arr\n}[Depth extends -1 ? \"done\" : \"recur\"];\n\n/**\n * A reactive streaming library that provides async-first data structures with built-in event streams.\n *\n * @template VALUE - The type of values that flow through the stream\n *\n * @example\n * ```typescript\n * // Basic usage\n * const stream = new Stream<number>();\n * stream.listen(value => console.log(value));\n * stream.push(1, 2, 3);\n *\n * // With async generator\n * const timerStream = new Stream(async function* () {\n * let count = 0;\n * while (count < 5) {\n * yield count++;\n * await new Promise(resolve => setTimeout(resolve, 1000));\n * }\n * });\n *\n * // Async iteration\n * for await (const value of stream) {\n * console.log(value);\n * if (value === 10) break;\n * }\n * ```\n */\nexport class Stream<VALUE = unknown> implements AsyncIterable<VALUE> {\n protected _listeners: Set<(value: VALUE) => void> = new Set<(value: VALUE) => void>();\n protected _generatorFn: (() => AsyncGenerator<VALUE, void>) | undefined;\n protected _generator: AsyncGenerator<VALUE, void> | undefined;\n protected _listenerAdded: Stream<void> | undefined;\n protected _listenerRemoved: Stream<void> | undefined;\n /**\n * Creates a new Stream instance.\n *\n * @param generatorFn - Optional async generator function to produce values you can use it for creating stream with custom transformation\n *\n * @example\n * ```typescript\n * // Empty stream\n * const stream = new Stream<string>();\n *\n * // Stream with generator\n * const countdown = new Stream(async function* () {\n * for (let i = 5; i > 0; i--) {\n * yield i;\n * await new Promise(resolve => setTimeout(resolve, 1000));\n * }\n * });\n *\n * // Stream with custom transformer\n * function filter<VALUE>(source:Stream<VALUE>,predicate:(value:VALUE) => boolean):Stream<VALUE>{\n * return new Stream<VALUE>(async function* () {\n * for await (const value of source) {\n * if (predicate(value)) yield value ;\n * }\n * });\n * }\n * const source = new Stream<number>();\n * const even = filter(source,v=> v % 2 === 0)\n * even.listen(console.log);\n * source.push(1, 2, 3, 4); // 2,4\n * ```\n */\n constructor();\n constructor(generatorFn: () => AsyncGenerator<VALUE, void>);\n constructor(generatorFn?: () => AsyncGenerator<VALUE, void>) {\n this._generatorFn = generatorFn;\n }\n /**\n * Returns true if the stream has active listeners.\n *\n * @example\n * ```typescript\n * const stream = new Stream<number>();\n * console.log(stream.hasListeners); // false\n *\n * const cleanup = stream.listen(value => console.log(value));\n * console.log(stream.hasListeners); // true\n *\n * cleanup();\n * console.log(stream.hasListeners); // false\n * ```\n */\n get hasListeners(): boolean {\n return this._listeners.size > 0;\n }\n /**\n * Stream that emits when a listener is added.\n *\n * @example\n * ```typescript\n * const stream = new Stream<number>();\n * stream.listenerAdded.listen(() => console.log('Listener added'));\n *\n * stream.listen(value => console.log(value)); // Triggers 'Listener added'\n * ```\n */\n get listenerAdded(): Stream<void> {\n if (!this._listenerAdded) this._listenerAdded = new Stream<void>();\n return this._listenerAdded;\n }\n /**\n * Stream that emits when a listener is removed.\n *\n * @example\n * ```typescript\n * const stream = new Stream<number>();\n * stream.listenerRemoved.listen(() => console.log('Listener removed'));\n *\n * const cleanup = stream.listen(value => console.log(value));\n * cleanup(); // Triggers 'Listener removed'\n * ```\n */\n get listenerRemoved(): Stream<void> {\n if (!this._listenerRemoved) this._listenerRemoved = new Stream<void>();\n return this._listenerRemoved;\n }\n async *[Symbol.asyncIterator](): AsyncGenerator<VALUE, void> {\n const queue: VALUE[] = [];\n let resolver: Function | undefined;\n\n const abort = this.listen((value) => {\n queue.push(value);\n resolver?.();\n });\n\n try {\n while (true) {\n if (queue.length) yield queue.shift()!;\n else await new Promise<void>((resolve) => (resolver = resolve));\n }\n } finally {\n abort();\n queue.length = 0;\n resolver = undefined;\n return;\n }\n }\n /**\n * Pushes one or more values to all listeners.\n *\n * @param value - The first value to push\n * @param values - Additional values to push\n *\n * @example\n * ```typescript\n * const stream = new Stream<number>();\n * stream.listen(value => console.log('Received:', value));\n *\n * stream.push(1); // Received: 1\n * stream.push(2, 3, 4); // Received: 2, Received: 3, Received: 4\n * ```\n */\n push(value: VALUE, ...values: VALUE[]): void {\n values.unshift(value);\n for (const value of values) {\n for (const listener of this._listeners) {\n listener(value);\n }\n }\n }\n /**\n * Adds a listener to the stream.\n *\n * @param listener - Function to call when values are pushed\n * @param signal - Optional AbortSignal for cleanup\n * @returns Cleanup function to remove the listener\n *\n * @example\n * ```typescript\n * const stream = new Stream<string>();\n *\n * // Basic listener\n * const cleanup = stream.listen(value => console.log(value));\n *\n * // With AbortSignal\n * const controller = new AbortController();\n * stream.listen(value => console.log(value), controller.signal);\n * controller.abort(); // Removes listener\n *\n * // Manual cleanup\n * cleanup();\n * ```\n */\n listen(listener: (value: VALUE) => void, signal?: AbortSignal): () => void {\n if (signal?.aborted) return () => {};\n const self = this;\n\n signal?.addEventListener(\"abort\", abort);\n\n self._listeners.add(listener);\n\n self._listenerAdded?.push();\n\n if (self._generatorFn && self._listeners.size === 1) {\n self._generator = self._generatorFn();\n (async () => {\n for await (const value of self._generator!) {\n self.push(value);\n }\n })();\n }\n return abort;\n function abort(): void {\n self._listeners.delete(listener);\n self._listenerRemoved?.push();\n if (self._listeners.size === 0) {\n self._generator?.return();\n self._generator = undefined;\n }\n signal?.removeEventListener(\"abort\", abort);\n }\n }\n /**\n * Promise-like interface that resolves with the next value.\n *\n * @param onfulfilled - Optional transformation function\n * @returns Promise that resolves with the first value\n *\n * @example\n * ```typescript\n * const stream = new Stream<number>();\n *\n * setTimeout(()=>{\n * stream.push(5);\n * })\n * // Wait for first value\n * const firstValue = await stream; // Resolves promises with 5\n *\n *\n * ```\n */\n then(onfulfilled?: ((value: VALUE) => VALUE | PromiseLike<VALUE>) | null): Promise<VALUE> {\n return new Promise<VALUE>((resolve) => {\n const abort = this.listen((value) => {\n resolve(value);\n abort();\n });\n }).then(onfulfilled);\n }\n /**\n * Filters values based on a predicate function.\n *\n * @param predicate - Function to test each value\n * @returns New stream with filtered values\n *\n * @example\n * ```typescript\n * const numbers = new Stream<number>();\n * const evens = numbers.filter(n => n % 2 === 0);\n *\n * evens.listen(n => console.log('Even:', n));\n * numbers.push(1, 2, 3, 4); // Even: 2, Even: 4\n *\n * // With accumulator\n * const increasing = numbers.filter(0, (prev, curr) =>\n * [curr > prev, Math.max(prev, curr)]\n * );\n * ```\n */\n filter<FILTERED extends VALUE>(predicate: (value: VALUE) => value is FILTERED): Stream<FILTERED>;\n filter<FILTERED extends VALUE>(predicate: (value: VALUE) => boolean | Promise<boolean>): Stream<FILTERED>;\n filter<FILTERED extends VALUE, ACC>(\n initialValue: ACC,\n predicate: (accumulator: ACC, value: VALUE) => [boolean, ACC] | Promise<[boolean, ACC]>\n ): Stream<FILTERED>;\n filter(predicateOrInitial: any, predicate?: any): Stream<VALUE> {\n const source = this;\n if (typeof predicateOrInitial === \"function\") {\n return new Stream<VALUE>(async function* () {\n for await (const value of source) {\n if (await predicateOrInitial(value)) yield value;\n }\n });\n } else {\n return new Stream<VALUE>(async function* () {\n let accumulator = predicateOrInitial;\n for await (const value of source) {\n const [shouldPass, newAcc] = await predicate(accumulator, value);\n accumulator = newAcc;\n if (shouldPass) yield value;\n }\n });\n }\n }\n /**\n * Transforms values using a mapper function.\n *\n * @param mapper - Function to transform each value\n * @returns New stream with transformed values\n *\n * @example\n * ```typescript\n * const numbers = new Stream<number>();\n * const doubled = numbers.map(n => n * 2);\n *\n * doubled.listen(n => console.log('Doubled:', n));\n * numbers.push(1, 2, 3); // Doubled: 2, Doubled: 4, Doubled: 6\n *\n * // With accumulator (running sum)\n * const sums = numbers.map(0, (sum, n) => [sum + n, sum + n]);\n * ```\n */\n map<MAPPED>(mapper: (value: VALUE) => MAPPED | Promise<MAPPED>): Stream<MAPPED>;\n map<MAPPED, ACC>(\n initialValue: ACC,\n mapper: (accumulator: ACC, value: VALUE) => [MAPPED, ACC] | Promise<[MAPPED, ACC]>\n ): Stream<MAPPED>;\n map(mapperOrInitial: any, mapper?: any): Stream<any> {\n const source = this;\n if (typeof mapperOrInitial === \"function\") {\n return new Stream(async function* () {\n for await (const value of source) {\n yield await mapperOrInitial(value);\n }\n });\n } else {\n return new Stream(async function* () {\n let accumulator = mapperOrInitial;\n for await (const value of source) {\n const [mapped, newAcc] = await mapper(accumulator, value);\n accumulator = newAcc;\n yield mapped;\n }\n });\n }\n }\n /**\n * Groups values into batches based on a predicate.\n *\n * @param predicate - Function to determine when to emit a group\n * @returns New stream with grouped values\n *\n * @example\n * ```typescript\n * const numbers = new Stream<number>();\n * const batches = numbers.group(batch => batch.length === 3);\n *\n * batches.listen(batch => console.log('Batch:', batch));\n * numbers.push(1, 2, 3, 4, 5, 6); // Batch: [1,2,3], Batch: [4,5,6]\n *\n * // With accumulator (sum-based grouping)\n * const sumGroups = numbers.group(0, (sum, n) =>\n * sum + n >= 10 ? [true, 0] : [false, sum + n]\n * );\n * ```\n */\n group(predicate: (accumulator: VALUE[], value: VALUE) => boolean | Promise<boolean>): Stream<VALUE[]>;\n group<ACC>(\n initialValue: ACC,\n predicate: (accumulator: ACC, value: VALUE) => [boolean, ACC] | Promise<[boolean, ACC]>\n ): Stream<ACC>;\n group(predicateOrInitial: any, predicate?: any): Stream<any> {\n const source = this;\n if (typeof predicateOrInitial === \"function\") {\n return new Stream(async function* () {\n const accumulator: VALUE[] = [];\n for await (const value of source) {\n accumulator.push(value);\n if (await predicateOrInitial([...accumulator], value)) {\n yield [...accumulator];\n accumulator.length = 0;\n }\n }\n });\n } else {\n return new Stream(async function* () {\n let accumulator = predicateOrInitial;\n for await (const value of source) {\n const [shouldEmit, newAcc] = await predicate(accumulator, value);\n if (shouldEmit) {\n yield accumulator;\n accumulator = predicateOrInitial; // Reset to initial\n } else {\n accumulator = newAcc;\n }\n }\n });\n }\n }\n /**\n * Merges this stream with other streams.\n *\n * @param streams - Other streams to merge with\n * @returns New stream with values from all streams\n *\n * @example\n * ```typescript\n * const stream1 = new Stream<string>();\n * const stream2 = new Stream<number>();\n * const merged = stream1.merge(stream2);\n *\n * merged.listen(msg => console.log('Merged:', msg));\n *\n * stream1.push('from stream1');\n * stream2.push(42);\n * // Output: Merged: from stream1, Merged: 42\n * ```\n */\n merge<STREAMS extends [Stream<any>, ...Stream<any>[]]>(\n ...streams: STREAMS\n ): Stream<VALUE | ValueOf<STREAMS[number]>> {\n const source = this;\n return new Stream(async function* () {\n const queue: any[] = [];\n let resolver: Function;\n let activeStreams = streams.length + 1;\n\n async function consume(_generator: AsyncGenerator<any, void>): Promise<void> {\n try {\n for await (const value of _generator) {\n queue.push(value);\n resolver?.();\n }\n } finally {\n activeStreams--;\n resolver?.();\n }\n }\n\n const generators = [source, ...streams].map((stream) => {\n const _generator = stream[Symbol.asyncIterator]();\n consume(_generator);\n return _generator;\n });\n try {\n while (activeStreams > 0 || queue.length > 0) {\n if (queue.length > 0) {\n yield queue.shift()!;\n } else {\n await new Promise<void>((resolve) => (resolver = resolve));\n }\n }\n } finally {\n for (const _generator of generators) {\n await _generator.return();\n }\n }\n });\n }\n /**\n * Flattens array values in the stream.\n *\n * @param depth - Depth to flatten (default: 0)\n * @returns New stream with flattened values\n *\n * @example\n * ```typescript\n * const arrays = new Stream<number[]>();\n * const flattened = arrays.flat();\n *\n * flattened.listen(n => console.log('Flat:', n));\n * arrays.push([1, 2], [3, 4]); // Flat: 1, Flat: 2, Flat: 3, Flat: 4\n *\n * // Deep flattening\n * const nested = new Stream<number[][][]>();\n * const deepFlat = nested.flat(2);\n * ```\n */\n flat<DEPTH extends number = 0>(depth: DEPTH = 0 as DEPTH): Stream<FlatArray<VALUE, DEPTH>> {\n const source = this;\n return new Stream<FlatArray<VALUE, DEPTH>>(async function* () {\n for await (const value of source) {\n if (Array.isArray(value)) {\n const values = value.flat(depth);\n for (let i = 0; i < values.length; i++) {\n yield values[i]!;\n }\n } else {\n yield value as FlatArray<VALUE, DEPTH>;\n }\n }\n });\n }\n\n /**\n * Applies a transformer function to this stream, enabling functional composition.\n *\n * @param transformer - Function that takes a stream and returns a transformed stream\n * @returns New stream with the transformation applied\n *\n * @example\n * ```typescript\n * const numbers = new Stream<number>();\n *\n * // Using built-in transformers\n * const result = numbers\n * .pipe(filter(n => n > 0))\n * .pipe(map(n => n * 2))\n * .pipe(group(batch => batch.length >= 3));\n *\n * // Custom transformer\n * const throttle = <T>(ms: number) => (stream: Stream<T>) =>\n * new Stream<T>(async function* () {\n * let lastEmit = 0;\n * for await (const value of stream) {\n * const now = Date.now();\n * if (now - lastEmit >= ms) {\n * yield value;\n * lastEmit = now;\n * }\n * }\n * });\n *\n * numbers.pipe(throttle(1000));\n * ```\n */\n pipe<OUTPUT>(transformer: (stream: Stream<VALUE>) => Stream<OUTPUT>): Stream<OUTPUT> {\n return transformer(this);\n }\n}\n\n/**\n * Transformer function interface for mapping stream values.\n * Supports both simple mapping and stateful mapping with accumulators.\n */\nexport interface MapFunction {\n <VALUE, MAPPED>(mapper: (value: VALUE) => MAPPED | Promise<MAPPED>): (stream: Stream<VALUE>) => Stream<MAPPED>;\n <VALUE, MAPPED, ACC>(\n initialValue: ACC,\n mapper: (accumulator: ACC, value: VALUE) => [MAPPED, ACC] | Promise<[MAPPED, ACC]>\n ): (stream: Stream<VALUE>) => Stream<MAPPED>;\n}\n\n/**\n * Creates a map transformer for use with pipe().\n *\n * @param mapper - Function to transform each value, or initial accumulator value\n * @param mapper - Optional mapper function when using accumulator\n * @returns Transformer function for pipe()\n *\n * @example\n * ```typescript\n * const numbers = new Stream<number>();\n *\n * // Simple mapping\n * const doubled = numbers.pipe(map(n => n * 2));\n *\n * // Stateful mapping (running sum)\n * const sums = numbers.pipe(map(0, (sum, n) => [sum + n, sum + n]));\n *\n * // Async mapping\n * const enriched = numbers.pipe(map(async n => {\n * const data = await fetchData(n);\n * return { value: n, data };\n * }));\n * ```\n */\nexport const map: MapFunction =\n <VALUE>(mapperOrInitial: any, mapper?: any): ((stream: Stream<VALUE>) => Stream<any>) =>\n (stream: Stream<VALUE>): Stream<any> => {\n if (mapper) {\n return stream.map(mapperOrInitial, mapper);\n } else {\n return stream.map(mapperOrInitial);\n }\n };\n\n/**\n * Transformer function interface for filtering stream values.\n * Supports type guards, boolean predicates, and stateful filtering.\n */\nexport interface FilterFunction {\n <VALUE, FILTERED extends VALUE>(predicate: (value: VALUE) => value is FILTERED): (\n stream: Stream<VALUE>\n ) => Stream<FILTERED>;\n <VALUE>(predicate: (value: VALUE) => boolean | Promise<boolean>): (stream: Stream<VALUE>) => Stream<VALUE>;\n <VALUE, ACC>(\n initialValue: ACC,\n predicate: (accumulator: ACC, value: VALUE) => [boolean, ACC] | Promise<[boolean, ACC]>\n ): (stream: Stream<VALUE>) => Stream<VALUE>;\n}\n\n/**\n * Creates a filter transformer for use with pipe().\n *\n * @param predicate - Function to test each value, or initial accumulator value\n * @param predicate - Optional predicate function when using accumulator\n * @returns Transformer function for pipe()\n *\n * @example\n * ```typescript\n * const numbers = new Stream<number>();\n *\n * // Simple filtering\n * const positives = numbers.pipe(filter(n => n > 0));\n *\n * // Type guard filtering\n * const strings = mixed.pipe(filter((x): x is string => typeof x === 'string'));\n *\n * // Stateful filtering (only increasing values)\n * const increasing = numbers.pipe(filter(0, (prev, curr) =>\n * [curr > prev, Math.max(prev, curr)]\n * ));\n * ```\n */\nexport const filter: FilterFunction =\n <VALUE>(predicateOrInitial: any, predicate?: any): ((stream: Stream<VALUE>) => Stream<any>) =>\n (stream: Stream<VALUE>): Stream<any> => {\n if (predicate) {\n return stream.filter(predicateOrInitial, predicate);\n } else {\n return stream.filter(predicateOrInitial);\n }\n };\n\n/**\n * Transformer function interface for grouping stream values into batches.\n * Supports both simple batching and stateful grouping with accumulators.\n */\nexport interface GroupFunction {\n <VALUE>(predicate: (accumulator: VALUE[], value: VALUE) => boolean | Promise<boolean>): (\n stream: Stream<VALUE>\n ) => Stream<VALUE[]>;\n <VALUE, ACC>(\n initialValue: ACC,\n predicate: (accumulator: ACC, value: VALUE) => [boolean, ACC] | Promise<[boolean, ACC]>\n ): (stream: Stream<VALUE>) => Stream<ACC>;\n}\n\n/**\n * Creates a group transformer for use with pipe().\n *\n * @param predicate - Function to determine when to emit a group, or initial accumulator value\n * @param predicate - Optional predicate function when using accumulator\n * @returns Transformer function for pipe()\n *\n * @example\n * ```typescript\n * const numbers = new Stream<number>();\n *\n * // Group by count\n * const batches = numbers.pipe(group(batch => batch.length >= 5));\n *\n * // Group by sum\n * const sumGroups = numbers.pipe(group(0, (sum, n) =>\n * sum + n >= 100 ? [true, 0] : [false, sum + n]\n * ));\n *\n * // Time-based grouping\n * const timeGroups = events.pipe(group([], (window, event) => {\n * const now = Date.now();\n * const recent = window.filter(e => now - e.timestamp < 5000);\n * return [recent.length >= 10, [...recent, event]];\n * }));\n * ```\n */\nexport const group: GroupFunction =\n <VALUE>(predicateOrInitial: any, predicate?: any): ((stream: Stream<VALUE>) => Stream<any>) =>\n (stream: Stream<VALUE>): Stream<any> => {\n if (predicate) {\n return stream.group(predicateOrInitial, predicate);\n } else {\n return stream.group(predicateOrInitial);\n }\n };\n\n/**\n * Transformer function interface for merging multiple streams.\n * Combines values from all streams into a single output stream.\n */\nexport interface MergeFunction {\n <STREAMS extends [Stream<any>, ...Stream<any>[]]>(...streams: STREAMS): <VALUE>(\n stream: Stream<VALUE>\n ) => Stream<VALUE | ValueOf<STREAMS[number]>>;\n}\n\n/**\n * Creates a merge transformer for use with pipe().\n *\n * @param streams - Additional streams to merge with the source stream\n * @returns Transformer function for pipe()\n *\n * @example\n * ```typescript\n * const stream1 = new Stream<string>();\n * const stream2 = new Stream<number>();\n * const stream3 = new Stream<boolean>();\n *\n * // Merge multiple streams\n * const merged = stream1.pipe(merge(stream2, stream3));\n * // Type: Stream<string | number | boolean>\n *\n * merged.listen(value => {\n * console.log('Received:', value); // Could be string, number, or boolean\n * });\n *\n * stream1.push('hello');\n * stream2.push(42);\n * stream3.push(true);\n * ```\n */\nexport const merge: MergeFunction =\n <STREAMS extends [Stream<any>, ...Stream<any>[]]>(...streams: STREAMS): (<VALUE>(stream: Stream<VALUE>) => Stream<VALUE | ValueOf<STREAMS[number]>>) =>\n <VALUE>(stream: Stream<VALUE>): Stream<VALUE | ValueOf<STREAMS[number]>> =>\n stream.merge(...streams);\n\n/**\n * Transformer function interface for flattening array values in streams.\n * Supports configurable depth for nested array flattening.\n */\nexport interface FlatFunction {\n (): <VALUE>(stream: Stream<VALUE>) => Stream<FlatArray<VALUE, 0>>;\n <DEPTH extends number>(depth: DEPTH): <VALUE>(stream: Stream<VALUE>) => Stream<FlatArray<VALUE, DEPTH>>;\n}\n\n/**\n * Creates a flat transformer for use with pipe().\n *\n * @param depth - Optional depth to flatten (default: 0 for single level)\n * @returns Transformer function for pipe()\n *\n * @example\n * ```typescript\n * const arrays = new Stream<number[]>();\n *\n * // Flatten single level\n * const flattened = arrays.pipe(flat());\n * arrays.push([1, 2], [3, 4]); // Emits: 1, 2, 3, 4\n *\n * // Flatten multiple levels\n * const nested = new Stream<number[][][]>();\n * const deepFlat = nested.pipe(flat(2));\n * nested.push([[[1, 2]], [[3, 4]]]); // Emits: 1, 2, 3, 4\n *\n * // Mixed content (non-arrays pass through)\n * const mixed = new Stream<number | number[]>();\n * const result = mixed.pipe(flat());\n * mixed.push(1, [2, 3], 4); // Emits: 1, 2, 3, 4\n * ```\n */\nexport const flat: FlatFunction = ((depth?: any): (<VALUE>(stream: Stream<VALUE>) => Stream<any>) => (stream: Stream<any>): Stream<any> =>\n depth !== undefined ? stream.flat(depth) : stream.flat()) as FlatFunction;",
6
+ "import { Stream } from \"./stream.ts\";\n\n/**\n * A reactive state container that extends Stream to provide stateful value management.\n *\n * @template VALUE - The type of the state value\n *\n * @example\n * ```typescript\n * // Basic state\n * const counter = new State(0);\n * counter.listen(value => console.log('Counter:', value));\n * counter.value = 5; // Counter: 5\n *\n * // Complex state\n * interface User { id: string; name: string; }\n * const user = new State<User | null>(null);\n *\n * user.listen(u => console.log('User:', u?.name || 'None'));\n * user.value = { id: '1', name: 'Alice' }; // User: Alice\n * ```\n */\nexport class State<VALUE> extends Stream<VALUE> {\n protected _value: VALUE;\n\n /**\n * Creates a new State with an initial value.\n *\n * @param initialValue - The initial state value\n *\n * @example\n * ```typescript\n * const count = new State(0);\n * const theme = new State<'light' | 'dark'>('light');\n * const user = new State<User | null>(null);\n * ```\n */\n constructor(initialValue: VALUE) {\n super();\n this._value = initialValue;\n }\n /**\n * Updates the state with one or more values sequentially.\n * Each value triggers listeners and updates the current state.\n *\n * @param values - Values to set as state\n *\n * @example\n * ```typescript\n * const state = new State(0);\n * state.listen(v => console.log(v));\n *\n * state.push(1, 2, 3); // Logs: 1, 2, 3\n * console.log(state.value); // 3\n * ```\n */\n override push(...values: VALUE[]): void {\n for (const value of values) {\n this.value = value;\n }\n }\n /**\n * Gets the current state value.\n *\n * @example\n * ```typescript\n * const state = new State('hello');\n * console.log(state.value); // 'hello'\n * ```\n */\n get value(): VALUE {\n return this._value;\n }\n /**\n * Sets the current state value and notifies all listeners.\n *\n * @param value - The new state value\n *\n * @example\n * ```typescript\n * const state = new State(0);\n * state.listen(v => console.log('New value:', v));\n *\n * state.value = 42; // New value: 42\n * state.value = 100; // New value: 100\n * ```\n */\n set value(value: VALUE) {\n this._value = value;\n super.push(value);\n }\n}",
7
+ "import { Stream } from \"./stream.ts\";\n\n/**\n * A reactive List that provides array-like functionality with stream-based mutation events.\n * Emits events when items are inserted, deleted, or the list is cleared.\n * Supports negative indexing with modulo wrapping.\n * @template VALUE - The type of values stored in the list\n *\n * @example\n * ```typescript\n * const todos = new List<string>();\n *\n * // Listen to insertions\n * todos.insert.listen(([index, item]) => {\n * console.log(`Added \"${item}\" at index ${index}`);\n * });\n *\n * // Listen to deletions\n * todos.delete.listen(([index, item]) => {\n * console.log(`Removed \"${item}\" from index ${index}`);\n * });\n *\n * todos.insert(0, \"Buy milk\"); //Added \"Buy milk\" at index 0\n * todos.insert(1, \"Walk dog\"); //Added \"Walk dog\" at index 1\n * todos.insert(-1, \"kechma haja\"); //Added \"kechma haja\" at index 2\n * todos[0] = \"Buy organic milk\"; // Added \"Buy organic milk\" at index 0\n * ```\n */\nexport class List<VALUE> implements Iterable<VALUE> {\n private _items: VALUE[] = [];\n private _insertStream?: Stream<[number, VALUE]>;\n private _deleteStream?: Stream<[number, VALUE]>;\n private _clearStream?: Stream<void>;\n\n [index: number]: VALUE | undefined;\n\n /**\n * Inserts a value at the specified index and emits the insertion event.\n * Negative indices are handled specially for insertion positioning.\n *\n * @example\n * ```typescript\n * const list = new List([1, 2, 3]);\n * list.insert.listen(([index, value]) => console.log(`Inserted ${value} at ${index}`));\n *\n * list.insert(1, 99); // Inserted 99 at 1 → [1, 99, 2, 3]\n * list.insert(-1, 88); // Insert at end → [1, 99, 2, 3, 88]\n * ```\n */\n declare insert: ((index: number, value: VALUE) => this) & Stream<[number, VALUE]>;\n\n /**\n * Deletes a value at the specified index and emits the deletion event.\n * Returns the deleted value or undefined if index is invalid.\n *\n * @example\n * ```typescript\n * const list = new List(['a', 'b', 'c']);\n * list.delete.listen(([index, value]) => console.log(`Deleted ${value} from ${index}`));\n *\n * const deleted = list.delete(1); // Deleted b from 1\n * console.log(deleted); // 'b'\n * ```\n */\n declare delete: ((index: number) => VALUE | undefined) & Stream<[number, VALUE]>;\n\n /**\n * Clears all items from the list and emits the clear event.\n * Only emits if the list was not already empty.\n *\n * @example\n * ```typescript\n * const list = new List([1, 2, 3]);\n * list.clear.listen(() => console.log('List cleared'));\n *\n * list.clear(); // List cleared\n * list.clear(); // No emission (already empty)\n * ```\n */\n declare clear: (() => void) & Stream<void>;\n\n /**\n * Creates a new reactive List.\n *\n * @param items - Optional iterable of initial items\n *\n * @example\n * ```typescript\n * // Empty list\n * const list = new List<number>();\n *\n * // With initial items\n * const todos = new List(['Buy milk', 'Walk dog']);\n *\n * // Listen to changes\n * todos.insert.listen(([index, item]) => updateUI(index, item));\n * todos.delete.listen(([index, item]) => removeFromUI(index));\n *\n * // Index access with modulo wrapping\n * console.log(todos[0]); // 'Buy milk'\n * console.log(todos[-1]); // 'Walk dog' (last item)\n * ```\n */\n constructor(items?: Iterable<VALUE>) {\n if (items) this._items = [...items];\n\n const self = this;\n\n function normalizeIndex(index: number, length: number): number {\n if (length === 0) return 0;\n return index < 0 ? ((index % length) + length) % length : index % length;\n }\n\n this.insert = new Proxy(\n (index: number, value: VALUE): this => {\n const actualIndex =\n index < 0 ? Math.max(0, self._items.length + index + 1) : Math.min(index, self._items.length);\n self._items.splice(actualIndex, 0, value);\n self._insertStream?.push([actualIndex, value]);\n return proxy;\n },\n {\n get(target, prop) {\n if (prop in target) return (target as any)[prop];\n if (!self._insertStream) self._insertStream = new Stream();\n return (self._insertStream as any)[prop];\n },\n }\n ) as any;\n this.delete = new Proxy(\n (index: number): VALUE | undefined => {\n if (index < 0 || index >= self._items.length) return undefined;\n const value = self._items.splice(index, 1)[0]!;\n self._deleteStream?.push([index, value]);\n return value;\n },\n {\n get(target, prop) {\n if (prop in target) return (target as any)[prop];\n if (!self._deleteStream) self._deleteStream = new Stream();\n return (self._deleteStream as any)[prop];\n },\n }\n ) as any;\n\n this.clear = new Proxy(\n (): void => {\n if (self._items.length > 0) {\n self._items.length = 0;\n self._clearStream?.push();\n }\n },\n {\n get(target, prop) {\n if (prop in target) return (target as any)[prop];\n if (!self._clearStream) self._clearStream = new Stream();\n return (self._clearStream as any)[prop];\n },\n }\n ) as any;\n\n const proxy = new Proxy(this, {\n get(target, prop) {\n if (typeof prop === \"string\" && /^-?\\d+$/.test(prop)) {\n const index = parseInt(prop);\n if (target._items.length === 0) return undefined;\n const actualIndex = normalizeIndex(index, target._items.length);\n return target._items[actualIndex];\n }\n return (target as any)[prop];\n },\n\n set(target, prop, value) {\n if (typeof prop === \"string\" && /^-?\\d+$/.test(prop)) {\n const index = parseInt(prop);\n\n if (target._items.length === 0) {\n // Empty array: any index mutation adds first element at index 0\n target._items.push(value);\n target._insertStream?.push([0, value]);\n return true;\n }\n\n const actualIndex = normalizeIndex(index, target._items.length);\n const oldValue = target._items[actualIndex];\n\n if (oldValue !== value) {\n target._items[actualIndex] = value;\n target._insertStream?.push([actualIndex, value]);\n }\n return true;\n }\n (target as any)[prop] = value;\n return true;\n },\n });\n\n return proxy;\n }\n\n /**\n * Gets the value at the specified index without modulo wrapping.\n *\n * @param index - The index to access\n * @returns The value at the index or undefined\n *\n * @example\n * ```typescript\n * const list = new List([10, 20, 30]);\n * console.log(list.get(1)); // 20\n * console.log(list.get(5)); // undefined\n * ```\n */\n get(index: number): VALUE | undefined {\n return this._items[index];\n }\n\n /**\n * Gets the current length of the list.\n *\n * @example\n * ```typescript\n * const list = new List([1, 2, 3]);\n * console.log(list.length); // 3\n *\n * list.insert(0, 0);\n * console.log(list.length); // 4\n * ```\n */\n get length(): number {\n return this._items.length;\n }\n /**\n * Returns an iterator for the list values.\n *\n * @example\n * ```typescript\n * const list = new List([1, 2, 3]);\n * for (const value of list.values()) {\n * console.log(value); // 1, 2, 3\n * }\n * ```\n */\n values(): IterableIterator<VALUE> {\n return this._items[Symbol.iterator]();\n }\n /**\n * Makes the list iterable.\n *\n * @example\n * ```typescript\n * const list = new List(['a', 'b', 'c']);\n * for (const item of list) {\n * console.log(item); // 'a', 'b', 'c'\n * }\n *\n * const array = [...list]; // ['a', 'b', 'c']\n * ```\n */\n [Symbol.iterator](): IterableIterator<VALUE> {\n return this._items[Symbol.iterator]();\n }\n}",
8
+ "import { Stream } from \"./stream.ts\";\n\n/**\n * A reactive Map that extends the native Map with stream-based mutation events.\n * Emits events when entries are set, deleted, or the map is cleared.\n *\n * @template KEY - The type of keys in the map\n * @template VALUE - The type of values in the map\n *\n * @example\n * ```typescript\n * const cache = new Map<string, any>();\n *\n * // Listen to cache updates\n * cache.set.listen(([key, value]) => {\n * console.log(`Cache updated: ${key} = ${value}`);\n * });\n *\n * // Listen to cache evictions\n * cache.delete.listen(([key, value]) => {\n * console.log(`Cache evicted: ${key}`);\n * });\n *\n * cache.set('user:123', { name: 'John' });\n * cache.delete('user:123');\n * ```\n */\nexport class Map<KEY, VALUE> extends globalThis.Map<KEY, VALUE> {\n protected _setStream?: Stream<[KEY, VALUE]>;\n protected _deleteStream?: Stream<[KEY, VALUE]>;\n protected _clearStream?: Stream<void>;\n\n /**\n * Sets a key-value pair in the map and emits the entry to listeners.\n * Only emits if the value actually changes (not same key-value pair).\n *\n * @example\n * ```typescript\n * const config = new Map<string, string>();\n * config.set.listen(([key, value]) => console.log(`Set: ${key}=${value}`));\n *\n * config.set('theme', 'dark'); // Set: theme=dark\n * config.set('theme', 'dark'); // No emission (same value)\n * config.set('theme', 'light'); // Set: theme=light\n * ```\n */\n declare set: ((key: KEY, value: VALUE) => this) & Stream<[KEY, VALUE]>;\n\n /**\n * Deletes a key from the map and emits the deleted entry to listeners.\n * Only emits if the key was actually deleted (existed in map).\n *\n * @example\n * ```typescript\n * const users = new Map([['alice', { age: 30 }], ['bob', { age: 25 }]]);\n * users.delete.listen(([key, value]) => console.log(`Removed: ${key}`));\n *\n * users.delete('alice'); // Removed: alice\n * users.delete('charlie'); // No emission (didn't exist)\n * ```\n */\n declare delete: ((key: KEY) => boolean) & Stream<[KEY, VALUE]>;\n\n /**\n * Clears all entries from the map and emits to listeners.\n * Only emits if the map was not already empty.\n *\n * @example\n * ```typescript\n * const store = new Map([['a', 1], ['b', 2]]);\n * store.clear.listen(() => console.log('Store cleared'));\n *\n * store.clear(); // Store cleared\n * store.clear(); // No emission (already empty)\n * ```\n */\n declare clear: (() => void) & Stream<void>;\n\n /**\n * Creates a new reactive Map.\n *\n * @param entries - Optional iterable of initial key-value pairs\n *\n * @example\n * ```typescript\n * // Empty map\n * const cache = new Map<string, any>();\n *\n * // With initial entries\n * const config = new Map([\n * ['theme', 'dark'],\n * ['lang', 'en']\n * ]);\n *\n * // Listen to changes\n * config.set.listen(([key, value]) => saveConfig(key, value));\n * config.delete.listen(([key]) => removeConfig(key));\n * ```\n */\n constructor(entries?: Iterable<[KEY, VALUE]>) {\n super(entries);\n\n const self = this;\n\n this.set = new Proxy(\n (key: KEY, value: VALUE): this => {\n if (globalThis.Map.prototype.has.call(self, key) && globalThis.Map.prototype.get.call(self, key) === value)\n return self;\n globalThis.Map.prototype.set.call(self, key, value);\n self._setStream?.push([key, value]);\n return self;\n },\n {\n get(target, prop) {\n if (prop in target) return (target as any)[prop];\n if (!self._setStream) self._setStream = new Stream();\n return (self._setStream as any)[prop];\n },\n }\n ) as any;\n\n this.delete = new Proxy(\n (key: KEY): boolean => {\n if (!globalThis.Map.prototype.has.call(self, key)) return false;\n const value = globalThis.Map.prototype.get.call(self, key);\n globalThis.Map.prototype.delete.call(self, key);\n self._deleteStream?.push([key, value]);\n return true;\n },\n {\n get(target, prop) {\n if (prop in target) return (target as any)[prop];\n if (!self._deleteStream) self._deleteStream = new Stream();\n return (self._deleteStream as any)[prop];\n },\n }\n ) as any;\n\n this.clear = new Proxy(\n (): void => {\n if (self.size > 0) {\n globalThis.Map.prototype.clear.call(self);\n self._clearStream?.push();\n }\n },\n {\n get(target, prop) {\n if (prop in target) return (target as any)[prop];\n if (!self._clearStream) self._clearStream = new Stream();\n return (self._clearStream as any)[prop];\n },\n }\n ) as any;\n }\n}",
9
+ "import { Stream } from \"./stream.ts\";\n\n/**\n * A reactive Set that extends the native Set with stream-based mutation events.\n * Emits events when items are added, deleted, or the set is cleared.\n *\n * @template VALUE - The type of values stored in the set\n *\n * @example\n * ```typescript\n * const activeUsers = new Set<string>();\n *\n * // Listen to additions\n * activeUsers.add.listen(userId => {\n * console.log(`User ${userId} came online`);\n * });\n *\n * // Listen to deletions\n * activeUsers.delete.listen(userId => {\n * console.log(`User ${userId} went offline`);\n * });\n *\n * activeUsers.add('alice'); // User alice came online\n * activeUsers.delete('alice'); // User alice went offline\n * ```\n */\nexport class Set<VALUE> extends globalThis.Set<VALUE> {\n protected _addStream?: Stream<VALUE>;\n protected _deleteStream?: Stream<VALUE>;\n protected _clearStream?: Stream<void>;\n\n /**\n * Adds a value to the set and emits the value to listeners.\n * Only emits if the value is actually added (not a duplicate).\n *\n * @example\n * ```typescript\n * const tags = new Set<string>();\n * tags.add.listen(tag => console.log('Added:', tag));\n *\n * tags.add('javascript'); // Added: javascript\n * tags.add('javascript'); // No emission (duplicate)\n * ```\n */\n declare add: ((value: VALUE) => this) & Stream<VALUE>;\n\n /**\n * Deletes a value from the set and emits the value to listeners.\n * Only emits if the value was actually deleted (existed in set).\n *\n * @example\n * ```typescript\n * const items = new Set(['a', 'b', 'c']);\n * items.delete.listen(item => console.log('Removed:', item));\n *\n * items.delete('b'); // Removed: b\n * items.delete('x'); // No emission (didn't exist)\n * ```\n */\n declare delete: ((value: VALUE) => boolean) & Stream<VALUE>;\n\n /**\n * Clears all values from the set and emits to listeners.\n * Only emits if the set was not already empty.\n *\n * @example\n * ```typescript\n * const cache = new Set([1, 2, 3]);\n * cache.clear.listen(() => console.log('Cache cleared'));\n *\n * cache.clear(); // Cache cleared\n * cache.clear(); // No emission (already empty)\n * ```\n */\n declare clear: (() => void) & Stream<void>;\n\n /**\n * Creates a new reactive Set.\n *\n * @param values - Optional iterable of initial values\n *\n * @example\n * ```typescript\n * // Empty set\n * const tags = new Set<string>();\n *\n * // With initial values\n * const colors = new Set(['red', 'green', 'blue']);\n *\n * // Listen to changes\n * colors.add.listen(color => updateUI(color));\n * colors.delete.listen(color => removeFromUI(color));\n * ```\n */\n constructor(values?: Iterable<VALUE>) {\n super(values);\n\n const self = this;\n\n this.add = new Proxy(\n (value: VALUE): this => {\n if (globalThis.Set.prototype.has.call(self, value)) return self;\n globalThis.Set.prototype.add.call(self, value);\n self._addStream?.push(value);\n return self;\n },\n {\n get(target, prop) {\n if (prop in target) return (target as any)[prop];\n if (!self._addStream) self._addStream = new Stream<VALUE>();\n return (self._addStream as any)[prop];\n },\n }\n ) as any;\n\n this.delete = new Proxy(\n (value: VALUE): boolean => {\n if (!globalThis.Set.prototype.has.call(self, value)) return false;\n globalThis.Set.prototype.delete.call(self, value);\n self._deleteStream?.push(value);\n return true;\n },\n {\n get(target, prop) {\n if (prop in target) return (target as any)[prop];\n if (!self._deleteStream) self._deleteStream = new Stream<VALUE>();\n return (self._deleteStream as any)[prop];\n },\n }\n ) as any;\n\n this.clear = new Proxy(\n (): void => {\n if (self.size > 0) {\n globalThis.Set.prototype.clear.call(self);\n self._clearStream?.push();\n }\n },\n {\n get(target, prop) {\n if (prop in target) return (target as any)[prop];\n if (!self._clearStream) self._clearStream = new Stream<void>();\n return (self._clearStream as any)[prop];\n },\n }\n ) as any;\n }\n}"
10
+ ],
11
+ "mappings": "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",
12
+ "debugId": "D224AD377526AD1664756E2164756E21",
13
+ "names": []
14
+ }
package/dist/list.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Stream } from "./stream";
1
+ import { Stream } from "./stream.ts";
2
2
  /**
3
3
  * A reactive List that provides array-like functionality with stream-based mutation events.
4
4
  * Emits events when items are inserted, deleted, or the list is cleared.
@@ -134,7 +134,7 @@ export declare class List<VALUE> implements Iterable<VALUE> {
134
134
  * }
135
135
  * ```
136
136
  */
137
- values(): ArrayIterator<VALUE>;
137
+ values(): IterableIterator<VALUE>;
138
138
  /**
139
139
  * Makes the list iterable.
140
140
  *
@@ -148,6 +148,6 @@ export declare class List<VALUE> implements Iterable<VALUE> {
148
148
  * const array = [...list]; // ['a', 'b', 'c']
149
149
  * ```
150
150
  */
151
- [Symbol.iterator](): ArrayIterator<VALUE>;
151
+ [Symbol.iterator](): IterableIterator<VALUE>;
152
152
  }
153
153
  //# sourceMappingURL=list.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../src/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,IAAI,CAAC,KAAK,CAAE,YAAW,QAAQ,CAAC,KAAK,CAAC;IACjD,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,aAAa,CAAC,CAA0B;IAChD,OAAO,CAAC,aAAa,CAAC,CAA0B;IAChD,OAAO,CAAC,YAAY,CAAC,CAAe;IAEpC,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;IAEnC;;;;;;;;;;;;OAYG;IACK,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAElF;;;;;;;;;;;;OAYG;IACK,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,GAAG,SAAS,CAAC,GAAG,MAAM,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAEjF;;;;;;;;;;;;OAYG;IACK,KAAK,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAE3C;;;;;;;;;;;;;;;;;;;;;OAqBG;gBACS,KAAK,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;IAiGnC;;;;;;;;;;;;OAYG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAIrC;;;;;;;;;;;OAWG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IACD;;;;;;;;;;OAUG;IACH,MAAM;IAGN;;;;;;;;;;;;OAYG;IACH,CAAC,MAAM,CAAC,QAAQ,CAAC;CAGlB"}
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../src/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,IAAI,CAAC,KAAK,CAAE,YAAW,QAAQ,CAAC,KAAK,CAAC;IACjD,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,aAAa,CAAC,CAA0B;IAChD,OAAO,CAAC,aAAa,CAAC,CAA0B;IAChD,OAAO,CAAC,YAAY,CAAC,CAAe;IAEpC,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;IAEnC;;;;;;;;;;;;OAYG;IACK,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAElF;;;;;;;;;;;;OAYG;IACK,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,GAAG,SAAS,CAAC,GAAG,MAAM,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAEjF;;;;;;;;;;;;OAYG;IACK,KAAK,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAE3C;;;;;;;;;;;;;;;;;;;;;OAqBG;gBACS,KAAK,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;IAiGnC;;;;;;;;;;;;OAYG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAIrC;;;;;;;;;;;OAWG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IACD;;;;;;;;;;OAUG;IACH,MAAM,IAAI,gBAAgB,CAAC,KAAK,CAAC;IAGjC;;;;;;;;;;;;OAYG;IACH,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC;CAG7C"}
package/dist/map.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Stream } from "./stream";
1
+ import { Stream } from "./stream.ts";
2
2
  /**
3
3
  * A reactive Map that extends the native Map with stream-based mutation events.
4
4
  * Emits events when entries are set, deleted, or the map is cleared.
package/dist/map.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../src/map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,GAAG,CAAC,GAAG,EAAE,KAAK,CAAE,SAAQ,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;IAC7D,SAAS,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAC5C,SAAS,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAC/C,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAEtC;;;;;;;;;;;;;OAaG;IACK,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAEvE;;;;;;;;;;;;OAYG;IACK,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAE/D;;;;;;;;;;;;OAYG;IACK,KAAK,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAE3C;;;;;;;;;;;;;;;;;;;;OAoBG;gBACS,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;CAuD7C"}
1
+ {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../src/map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,GAAG,CAAC,GAAG,EAAE,KAAK,CAAE,SAAQ,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;IAC7D,SAAS,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAC5C,SAAS,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAC/C,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAEtC;;;;;;;;;;;;;OAaG;IACK,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAEvE;;;;;;;;;;;;OAYG;IACK,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAE/D;;;;;;;;;;;;OAYG;IACK,KAAK,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAE3C;;;;;;;;;;;;;;;;;;;;OAoBG;gBACS,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;CAuD7C"}
package/dist/set.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Stream } from "./stream";
1
+ import { Stream } from "./stream.ts";
2
2
  /**
3
3
  * A reactive Set that extends the native Set with stream-based mutation events.
4
4
  * Emits events when items are added, deleted, or the set is cleared.
package/dist/set.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../src/set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,GAAG,CAAC,KAAK,CAAE,SAAQ,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;IACnD,SAAS,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACrC,SAAS,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACxC,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAEtC;;;;;;;;;;;;OAYG;IACK,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEtD;;;;;;;;;;;;OAYG;IACK,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAE5D;;;;;;;;;;;;OAYG;IACK,KAAK,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAE3C;;;;;;;;;;;;;;;;;OAiBG;gBACS,MAAM,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;CAqDrC"}
1
+ {"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../src/set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,GAAG,CAAC,KAAK,CAAE,SAAQ,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;IACnD,SAAS,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACrC,SAAS,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACxC,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAEtC;;;;;;;;;;;;OAYG;IACK,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEtD;;;;;;;;;;;;OAYG;IACK,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAE5D;;;;;;;;;;;;OAYG;IACK,KAAK,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAE3C;;;;;;;;;;;;;;;;;OAiBG;gBACS,MAAM,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;CAqDrC"}
package/dist/state.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Stream } from "./stream";
1
+ import { Stream } from "./stream.ts";
2
2
  /**
3
3
  * A reactive state container that extends Stream to provide stateful value management.
4
4
  *
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,KAAK,CAAC,KAAK,CAAE,SAAQ,MAAM,CAAC,KAAK,CAAC;IAC7C,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC;IAExB;;;;;;;;;;;OAWG;gBACS,YAAY,EAAE,KAAK;IAI/B;;;;;;;;;;;;;;OAcG;IACM,IAAI,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI;IAKvC;;;;;;;;OAQG;IACH,IAAI,KAAK,UAER;IACD;;;;;;;;;;;;;OAaG;IACH,IAAI,KAAK,CAAC,KAAK,OAAA,EAGd;CACF"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,KAAK,CAAC,KAAK,CAAE,SAAQ,MAAM,CAAC,KAAK,CAAC;IAC7C,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC;IAExB;;;;;;;;;;;OAWG;gBACS,YAAY,EAAE,KAAK;IAI/B;;;;;;;;;;;;;;OAcG;IACM,IAAI,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI;IAKvC;;;;;;;;OAQG;IACH,IAAI,KAAK,IAAI,KAAK,CAEjB;IACD;;;;;;;;;;;;;OAaG;IACH,IAAI,KAAK,CAAC,KAAK,EAAE,KAAK,EAGrB;CACF"}
package/dist/stream.d.ts CHANGED
@@ -1,4 +1,8 @@
1
1
  export type ValueOf<STREAM> = STREAM extends Stream<infer VALUE> ? VALUE : never;
2
+ export type FlatArray<Arr, Depth extends number> = {
3
+ "done": Arr;
4
+ "recur": Arr extends ReadonlyArray<infer InnerArr> ? FlatArray<InnerArr, [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][Depth]> : Arr;
5
+ }[Depth extends -1 ? "done" : "recur"];
2
6
  /**
3
7
  * A reactive streaming library that provides async-first data structures with built-in event streams.
4
8
  *
@@ -1 +1 @@
1
- {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@soffinal/stream",
3
3
  "module": "./dist/index.js",
4
- "version": "0.1.0",
4
+ "version": "0.1.2",
5
5
  "description": "A reactive event streaming library for TypeScript/JavaScript",
6
6
  "type": "module",
7
7
  "devDependencies": {
@@ -11,10 +11,10 @@
11
11
  "typescript": "^5.9.2"
12
12
  },
13
13
  "scripts": {
14
- "build": "tsc",
15
14
  "clean": "rm -rf dist",
16
- "prepublishOnly": "bun run clean && bun run build",
17
- "test": "bun test"
15
+ "build": "bun run clean && bun build src/index.ts --outdir dist --target node --format esm --sourcemap --minify && bun run build:types",
16
+ "build:types": "tsc --emitDeclarationOnly --allowImportingTsExtensions --noEmit false",
17
+ "release": " git add . && git commit -m \"Release v$(node -p 'require(\"./package.json\").version')\" && git tag v$(node -p 'require(\"./package.json\").version')"
18
18
  },
19
19
  "exports": {
20
20
  ".": {
package/dist/benchmark.js DELETED
@@ -1,151 +0,0 @@
1
- import { Stream, State, map, filter } from ".";
2
- class Benchmark {
3
- constructor() {
4
- this.results = [];
5
- }
6
- async run(name, operations, fn) {
7
- // Force garbage collection if available
8
- if (global.gc)
9
- global.gc();
10
- const memBefore = process.memoryUsage().heapUsed;
11
- const start = performance.now();
12
- await fn();
13
- const end = performance.now();
14
- const memAfter = process.memoryUsage().heapUsed;
15
- const duration = end - start;
16
- const opsPerSecond = Math.round((operations / duration) * 1000);
17
- const memoryUsage = memAfter - memBefore;
18
- const result = {
19
- name,
20
- operations,
21
- duration: Math.round(duration * 100) / 100,
22
- opsPerSecond,
23
- memoryUsage,
24
- };
25
- this.results.push(result);
26
- console.log(`${name}: ${opsPerSecond.toLocaleString()} ops/sec (${duration}ms, ${Math.round(memoryUsage / 1024)}KB)`);
27
- return result;
28
- }
29
- getResults() {
30
- return [...this.results];
31
- }
32
- printSummary() {
33
- console.log("\n=== BENCHMARK SUMMARY ===");
34
- this.results.forEach((result) => {
35
- console.log(`${result.name.padEnd(40)} ${result.opsPerSecond.toLocaleString().padStart(10)} ops/sec`);
36
- });
37
- }
38
- }
39
- async function runBenchmarks() {
40
- const bench = new Benchmark();
41
- const OPERATIONS = 100000;
42
- const LISTENERS = 10;
43
- console.log("šŸš€ Starting Stream Library Benchmarks...\n");
44
- // Basic Stream Operations
45
- await bench.run("Basic Push/Listen", OPERATIONS, async () => {
46
- const stream = new Stream();
47
- let received = 0;
48
- for (let i = 0; i < LISTENERS; i++) {
49
- stream.listen(() => received++);
50
- }
51
- for (let i = 0; i < OPERATIONS; i++) {
52
- stream.push(i);
53
- }
54
- await new Promise((resolve) => setTimeout(resolve, 10));
55
- });
56
- // Multiple Listeners Performance
57
- await bench.run("100 Listeners", OPERATIONS, async () => {
58
- const stream = new Stream();
59
- let received = 0;
60
- for (let i = 0; i < 100; i++) {
61
- stream.listen(() => received++);
62
- }
63
- for (let i = 0; i < OPERATIONS; i++) {
64
- stream.push(i);
65
- }
66
- await new Promise((resolve) => setTimeout(resolve, 10));
67
- });
68
- // Extreme Scalability Test
69
- await bench.run("100,000 Listeners", OPERATIONS / 10, async () => {
70
- const stream = new Stream();
71
- let received = 0;
72
- for (let i = 0; i < 100000; i++) {
73
- stream.listen(() => received++);
74
- }
75
- for (let i = 0; i < OPERATIONS / 10; i++) {
76
- stream.push(i);
77
- }
78
- await new Promise((resolve) => setTimeout(resolve, 50));
79
- });
80
- // Complex Pipeline Performance
81
- await bench.run("Complex Pipeline", OPERATIONS, async () => {
82
- const stream = new Stream();
83
- const result = stream
84
- .filter((x) => x > 0)
85
- .map((x) => x * 2)
86
- .filter((x) => x < 1000)
87
- .map((x) => x.toString())
88
- .filter((x) => x.length < 4);
89
- let received = 0;
90
- for (let i = 0; i < LISTENERS; i++) {
91
- result.listen(() => received++);
92
- }
93
- for (let i = 0; i < OPERATIONS; i++) {
94
- stream.push(i);
95
- }
96
- await new Promise((resolve) => setTimeout(resolve, 10));
97
- });
98
- // Functional Style Performance
99
- await bench.run("Functional Pipeline", OPERATIONS, async () => {
100
- const stream = new Stream();
101
- const result = stream
102
- .pipe(filter((x) => x > 0))
103
- .pipe(map((x) => x * 2))
104
- .pipe(filter((x) => x < 1000))
105
- .pipe(map((x) => x.toString()));
106
- let received = 0;
107
- for (let i = 0; i < LISTENERS; i++) {
108
- result.listen(() => received++);
109
- }
110
- for (let i = 0; i < OPERATIONS; i++) {
111
- stream.push(i);
112
- }
113
- await new Promise((resolve) => setTimeout(resolve, 10));
114
- });
115
- // State Performance
116
- await bench.run("State Updates", OPERATIONS, async () => {
117
- const state = new State(0);
118
- let received = 0;
119
- for (let i = 0; i < LISTENERS; i++) {
120
- state.listen(() => received++);
121
- }
122
- for (let i = 0; i < OPERATIONS; i++) {
123
- state.value = i;
124
- }
125
- await new Promise((resolve) => setTimeout(resolve, 10));
126
- });
127
- // Memory Stress Test
128
- await bench.run("Memory Stress Test", OPERATIONS * 10, async () => {
129
- const streams = [];
130
- // Create many streams with listeners
131
- for (let i = 0; i < 100; i++) {
132
- const stream = new Stream();
133
- stream.listen(() => { });
134
- streams.push(stream);
135
- }
136
- // Push lots of data
137
- for (let i = 0; i < OPERATIONS * 10; i++) {
138
- const stream = streams[i % streams.length];
139
- stream.push(i);
140
- }
141
- await new Promise((resolve) => setTimeout(resolve, 10));
142
- });
143
- bench.printSummary();
144
- console.log("\nšŸŽÆ Benchmark Complete!");
145
- }
146
- // Run: bun run src/benchmark.ts
147
- if (require.main === module) {
148
- runBenchmarks().catch(console.error);
149
- }
150
- export { runBenchmarks, Benchmark };
151
- //# sourceMappingURL=benchmark.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"benchmark.js","sourceRoot":"","sources":["../src/benchmark.ts"],"names":[],"mappings":"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"}