yieldkit 0.1.0

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 ADDED
@@ -0,0 +1,221 @@
1
+ # yieldkit
2
+
3
+ Composable synchronous and asynchronous generator helpers for working with iterable data structures in a **lazy**, **memory-efficient** way, without materializing entire datasets upfront.
4
+
5
+ ```ts
6
+ import { filter, map, take } from 'yieldkit/async'
7
+
8
+ async function* users() {
9
+ for (let page = 1; ; page++) {
10
+ const batch = await getPage(page)
11
+ if (!batch.length) return
12
+ yield* batch
13
+ }
14
+ }
15
+
16
+ for await (const email of map(
17
+ take(filter(users(), (user) => user.active), 50),
18
+ [(user) => ({ to: user.email, subject: `Welcome, ${user.name}!` })],
19
+ )) send(email)
20
+ ```
21
+
22
+ ```ts
23
+ import { enumerate, zip, filter, map } from 'yieldkit/sync'
24
+
25
+ const catalog = map(
26
+ filter(
27
+ zip(
28
+ enumerate(["shirts", "hats", "mugs"]),
29
+ zip([1999, 1299, 899], [12, 0, 44]),
30
+ ),
31
+ ([, [, quantity]]) => quantity > 0,
32
+ ),
33
+ [([[i, name], [price, quantity]]) => `#${i + 1} ${name} — $${price / 100} (${quantity})`],
34
+ );
35
+
36
+ [...catalog] // ['#1 shirts — $19.99 (12)', '#3 mugs — $8.99 (44)']
37
+ ```
38
+
39
+ ```ts
40
+ import { on, once } from 'yieldkit'
41
+ import { watch, filter, sequence, every, any, onlyEvent } from 'yieldkit/async'
42
+
43
+ const target = document.createElement('div')
44
+
45
+ const drags = watch(() =>
46
+ filter(
47
+ sequence(
48
+ once(target, 'mousedown'),
49
+ every(
50
+ any(on(window, 'mousemove'), on(window, 'mouseup')),
51
+ onlyEvent('mousemove'),
52
+ ),
53
+ ),
54
+ onlyEvent('mousemove'),
55
+ ),
56
+ )
57
+
58
+ for await (const event of drags) {
59
+ console.log(event.clientX, event.clientY)
60
+ }
61
+ ```
62
+
63
+ ### Lazy evaluation
64
+
65
+ `yieldkit` evaluates data **on demand** — one value at a time, as you pull it through the pipeline. That makes **streams** and **large datasets** practical to work with, synchronously or asynchronously, without holding everything in memory.
66
+
67
+ ### Functional purity
68
+
69
+ The helpers are small, stateless functions that take data in and yield data out. You chain transformations declaratively — filter, then map, then take — and get code that is more **predictable, testable, and maintainable**.
70
+
71
+ ### Unified composition
72
+
73
+ Whether you are chaining arrays, custom iterables, async generators, or event listeners, `yieldkit` offers a **single, consistent vocabulary** — `sequence`, `filter`, `take`, `map`, `zip`, and the rest work the same way across sync and async modules. One composition model for iterable data, instead of a different ad-hoc pattern for each source.
74
+
75
+ ## Installation
76
+
77
+ ```sh
78
+ npm install yieldkit
79
+ ```
80
+
81
+ This package is published as ESM and includes TypeScript declarations.
82
+
83
+ ## Synchronous Generators
84
+
85
+ The synchronous helpers compose regular `Iterable` values.
86
+
87
+ ```ts
88
+ import { sequence, take } from 'yieldkit/sync'
89
+
90
+ const values = sequence(
91
+ [1, 2],
92
+ take([3, 4, 5], 2),
93
+ )
94
+
95
+ console.log([...values])
96
+ // [1, 2, 3, 4]
97
+ ```
98
+
99
+ Available helpers:
100
+
101
+ - `watch(executor)` repeats an iterable-producing function forever.
102
+ - `sequence(...iterables)` yields each iterable in order.
103
+ - `filter(iterable, predicate)` yields values that pass a predicate. Supports type-predicate narrowing with `onlyEvent`.
104
+ - `every(iterable, predicate)` yields values until the predicate fails.
105
+ - `take(iterable, count)` yields a fixed number of values, stopping early if the source ends.
106
+ - `map(iterable, mappers)` applies a pipeline of mapper functions to each value.
107
+ - `slice(iterable, start, stop, step?)` yields a sliced range of values.
108
+ - `enumerate(iterable)` yields `[index, value]` pairs.
109
+ - `zip(a, b)` yields `[a, b]` pairs; `zip` with 3+ same-type iterables yields rows, stopping at the shortest one.
110
+ - `onlyEvent(eventType)` returns a type predicate for matching DOM event types.
111
+
112
+ ## Asynchronous Generators
113
+
114
+ The asynchronous helpers compose `AsyncIterable` values.
115
+
116
+ ```ts
117
+ import { sequence, take } from 'yieldkit/async'
118
+
119
+ async function* values(...items: number[]) {
120
+ yield* items
121
+ }
122
+
123
+ const generated = sequence(
124
+ values(1, 2),
125
+ take(values(3, 4), 1),
126
+ )
127
+
128
+ for await (const value of generated) {
129
+ console.log(value)
130
+ }
131
+ // 1
132
+ // 2
133
+ // 3
134
+ ```
135
+
136
+ Available helpers:
137
+
138
+ - `watch(executor)` repeats an async iterable-producing function forever.
139
+ - `sequence(...iterables)` yields each async iterable in order.
140
+ - `filter(iterable, predicate)` yields values that pass a predicate. Supports type-predicate narrowing with `onlyEvent`.
141
+ - `every(iterable, predicate)` yields values until the predicate fails.
142
+ - `any(...iterables)` yields whichever async iterable resolves first.
143
+ - `take(iterable, count)` yields a fixed number of values, stopping early if the source ends.
144
+ - `map(iterable, mappers)` applies a pipeline of mapper functions to each value.
145
+ - `slice(iterable, start, stop, step?)` yields a sliced range of values.
146
+ - `enumerate(iterable)` yields `[index, value]` pairs.
147
+ - `zip(a, b)` yields `[a, b]` pairs; `zip` with 3+ same-type iterables yields rows, stopping at the shortest one.
148
+ - `onlyEvent(eventType)` returns a type predicate for matching DOM event types.
149
+
150
+ ## DOM Events
151
+
152
+ `on` and `once` expose DOM events as async iterators. They accept a `Target` (`Window`, `Document`, or `HTMLElement`) and return iterators typed to the matching event for that target.
153
+
154
+ ```ts
155
+ import { on } from 'yieldkit'
156
+
157
+ const button = document.querySelector('button')!
158
+ const clicks = on(button, 'click')
159
+
160
+ for await (const event of clicks) {
161
+ console.log(event.type)
162
+ }
163
+ ```
164
+
165
+ Use `once` when you only want the first matching event:
166
+
167
+ ```ts
168
+ import { once } from 'yieldkit'
169
+
170
+ const button = document.querySelector('button')!
171
+ const firstClick = once(button, 'click')
172
+ const { value } = await firstClick.next()
173
+
174
+ console.log(value.type)
175
+ // click
176
+ ```
177
+
178
+ ## Drag And Drop
179
+
180
+ `dndWatcher` listens for a `mousedown` on a target element, then yields `window` `mousemove` events until a `mouseup` event occurs.
181
+
182
+ ```ts
183
+ import { dndWatcher } from 'yieldkit'
184
+
185
+ const handle = document.createElement('div')
186
+ const drags = dndWatcher(handle)
187
+
188
+ for await (const event of drags) {
189
+ console.log(event.clientX, event.clientY)
190
+ }
191
+ ```
192
+
193
+ ## Development
194
+
195
+ Install dependencies:
196
+
197
+ ```sh
198
+ npm install
199
+ ```
200
+
201
+ Run tests:
202
+
203
+ ```sh
204
+ npm test
205
+ ```
206
+
207
+ Run TypeScript checks:
208
+
209
+ ```sh
210
+ npm run check
211
+ ```
212
+
213
+ Build the package:
214
+
215
+ ```sh
216
+ npm run build
217
+ ```
218
+
219
+ ## License
220
+
221
+ MIT
@@ -0,0 +1,13 @@
1
+ export declare function sequence<T>(...asyncIterables: AsyncIterable<T>[]): AsyncGenerator<T>;
2
+ export declare function map<T>(asyncIterable: AsyncIterable<T>, mappers: Array<(value: T) => unknown>): AsyncGenerator<unknown>;
3
+ export declare function filter<T, S extends T>(asyncIterable: AsyncIterable<T>, onFilter: (value: T) => value is S): AsyncGenerator<S>;
4
+ export declare function filter<T>(asyncIterable: AsyncIterable<T>, onFilter: (value: T) => boolean): AsyncGenerator<T>;
5
+ export declare function every<T>(asyncIterable: AsyncIterable<T>, predicate: (value: T) => boolean): AsyncGenerator<T>;
6
+ export declare function any<T>(...asyncIterables: AsyncIterable<T>[]): AsyncGenerator<T>;
7
+ export declare function take<T>(asyncIterable: AsyncIterable<T>, count: number): AsyncGenerator<T>;
8
+ export declare function slice<T>(asyncIterable: AsyncIterable<T> | AsyncIterableIterator<T>, start: number, stop: number, step?: number): AsyncGenerator<T>;
9
+ export declare function enumerate<T>(asyncIterable: AsyncIterable<T> | AsyncIterableIterator<T>): AsyncGenerator<[number, T]>;
10
+ export declare function zip<T>(...asyncIterables: AsyncIterable<T>[]): AsyncGenerator<T[]>;
11
+ export declare function watch<T>(executor: () => AsyncIterable<T>): AsyncGenerator<T>;
12
+ export declare function onlyEvent<E extends keyof HTMLElementEventMap>(eventType: E): (event: Event) => event is HTMLElementEventMap[E];
13
+ //# sourceMappingURL=async-generators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-generators.d.ts","sourceRoot":"","sources":["../src/async-generators.ts"],"names":[],"mappings":"AAAA,wBAAuB,QAAQ,CAAC,CAAC,EAChC,GAAG,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,GACnC,cAAc,CAAC,CAAC,CAAC,CAMnB;AAED,wBAAuB,GAAG,CAAC,CAAC,EAC3B,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,EAC/B,OAAO,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,GACnC,cAAc,CAAC,OAAO,CAAC,CAazB;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EACpC,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,EAC/B,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,GAChC,cAAc,CAAC,CAAC,CAAC,CAAC;AAErB,wBAAgB,MAAM,CAAC,CAAC,EACvB,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,EAC/B,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,GAC7B,cAAc,CAAC,CAAC,CAAC,CAAC;AAerB,wBAAuB,KAAK,CAAC,CAAC,EAC7B,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,EAC/B,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,GAC9B,cAAc,CAAC,CAAC,CAAC,CAKnB;AAED,wBAAuB,GAAG,CAAC,CAAC,EAC3B,GAAG,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,GACnC,cAAc,CAAC,CAAC,CAAC,CA0BnB;AAED,wBAAuB,IAAI,CAAC,CAAC,EAC5B,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,EAC/B,KAAK,EAAE,MAAM,GACX,cAAc,CAAC,CAAC,CAAC,CAUnB;AAED,wBAAuB,KAAK,CAAC,CAAC,EAC7B,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,EAC1D,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,MAAU,GACd,cAAc,CAAC,CAAC,CAAC,CAwBnB;AAED,wBAAuB,SAAS,CAAC,CAAC,EACjC,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,GACxD,cAAc,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAU7B;AAED,wBAAuB,GAAG,CAAC,CAAC,EAC3B,GAAG,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,GACnC,cAAc,CAAC,CAAC,EAAE,CAAC,CAoBrB;AAED,wBAAuB,KAAK,CAAC,CAAC,EAC7B,QAAQ,EAAE,MAAM,aAAa,CAAC,CAAC,CAAC,GAC9B,cAAc,CAAC,CAAC,CAAC,CAMnB;AAED,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,mBAAmB,EAC5D,SAAS,EAAE,CAAC,GACV,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,IAAI,mBAAmB,CAAC,CAAC,CAAC,CAEnD"}
@@ -0,0 +1,124 @@
1
+ export async function* sequence(...asyncIterables) {
2
+ for (const iterable of asyncIterables) {
3
+ for await (const item of iterable) {
4
+ yield item;
5
+ }
6
+ }
7
+ }
8
+ export async function* map(asyncIterable, mappers) {
9
+ for await (const value of asyncIterable) {
10
+ const mapperIterator = mappers[Symbol.iterator]();
11
+ let mapper = mapperIterator.next();
12
+ let result = value;
13
+ while (!mapper.done) {
14
+ result = mapper.value(result);
15
+ mapper = mapperIterator.next();
16
+ }
17
+ yield result;
18
+ }
19
+ }
20
+ export async function* filter(asyncIterable, onFilter) {
21
+ const asyncIterator = asyncIterable[Symbol.asyncIterator]();
22
+ while (true) {
23
+ const { done, value } = await asyncIterator.next();
24
+ if (done)
25
+ return;
26
+ if (onFilter(value))
27
+ yield value;
28
+ }
29
+ }
30
+ export async function* every(asyncIterable, predicate) {
31
+ for await (const value of asyncIterable) {
32
+ if (!predicate(value))
33
+ break;
34
+ yield value;
35
+ }
36
+ }
37
+ export async function* any(...asyncIterables) {
38
+ const entries = asyncIterables.map((item) => ({
39
+ iterator: item[Symbol.asyncIterator](),
40
+ }));
41
+ const pendingResult = async (entry) => {
42
+ entry.pending ??= entry.iterator.next();
43
+ return { entry, result: await entry.pending };
44
+ };
45
+ while (entries.length > 0) {
46
+ const { entry, result } = await Promise.race(entries.map(pendingResult));
47
+ entry.pending = undefined;
48
+ if (result.done) {
49
+ entries.splice(entries.indexOf(entry), 1);
50
+ }
51
+ else {
52
+ yield result.value;
53
+ }
54
+ }
55
+ }
56
+ export async function* take(asyncIterable, count) {
57
+ const asyncIterator = asyncIterable[Symbol.asyncIterator]();
58
+ let cursor = 0;
59
+ while (cursor < count) {
60
+ const { done, value } = await asyncIterator.next();
61
+ if (done)
62
+ return;
63
+ yield value;
64
+ cursor++;
65
+ }
66
+ }
67
+ export async function* slice(asyncIterable, start, stop, step = 1) {
68
+ const iterator = asyncIterable[Symbol.asyncIterator]();
69
+ while (start > 0) {
70
+ const { done } = await iterator.next();
71
+ if (done)
72
+ return;
73
+ --start;
74
+ --stop;
75
+ }
76
+ while (stop > 0) {
77
+ const current = await iterator.next();
78
+ if (current.done)
79
+ return;
80
+ yield current.value;
81
+ --stop;
82
+ let n = step;
83
+ while (n > 1) {
84
+ const skipped = await iterator.next();
85
+ if (skipped.done)
86
+ return;
87
+ --n;
88
+ }
89
+ }
90
+ }
91
+ export async function* enumerate(asyncIterable) {
92
+ const iterator = asyncIterable[Symbol.asyncIterator]();
93
+ let cursor = 0;
94
+ while (true) {
95
+ const current = await iterator.next();
96
+ if (current.done)
97
+ return;
98
+ yield [cursor++, current.value];
99
+ }
100
+ }
101
+ export async function* zip(...asyncIterables) {
102
+ const iterators = asyncIterables.map((iterable) => iterable[Symbol.asyncIterator]());
103
+ if (iterators.length === 0) {
104
+ return;
105
+ }
106
+ while (true) {
107
+ const results = await Promise.all(iterators.map((iterator) => iterator.next()));
108
+ if (results.some((result) => result.done)) {
109
+ return;
110
+ }
111
+ yield results.map((result) => result.value);
112
+ }
113
+ }
114
+ export async function* watch(executor) {
115
+ while (true) {
116
+ for await (const value of executor()) {
117
+ yield value;
118
+ }
119
+ }
120
+ }
121
+ export function onlyEvent(eventType) {
122
+ return (event) => event.type === eventType;
123
+ }
124
+ //# sourceMappingURL=async-generators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-generators.js","sourceRoot":"","sources":["../src/async-generators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function dndWatcher(target: HTMLElement): AsyncGenerator<MouseEvent>;
2
+ //# sourceMappingURL=compositions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compositions.d.ts","sourceRoot":"","sources":["../src/compositions.ts"],"names":[],"mappings":"AAUA,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC,CAa1E"}
@@ -0,0 +1,6 @@
1
+ import { any, every, filter, onlyEvent, sequence, watch, } from "./async-generators.js";
2
+ import { on, once } from "./listeners.js";
3
+ export function dndWatcher(target) {
4
+ return watch(() => filter(sequence(once(target, "mousedown"), every(any(on(window, "mousemove"), on(window, "mouseup")), onlyEvent("mousemove"))), onlyEvent("mousemove")));
5
+ }
6
+ //# sourceMappingURL=compositions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compositions.js","sourceRoot":"","sources":["../src/compositions.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,GAAG,EACH,KAAK,EACL,MAAM,EACN,SAAS,EACT,QAAQ,EACR,KAAK,GACL,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,UAAU,UAAU,CAAC,MAAmB;IAC7C,OAAO,KAAK,CAAC,GAAG,EAAE,CACjB,MAAM,CACL,QAAQ,CACP,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EACzB,KAAK,CACJ,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,EACnD,SAAS,CAAC,WAAW,CAAC,CACtB,CACD,EACD,SAAS,CAAC,WAAW,CAAC,CACtB,CACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * as asyncGenerators from "./async-generators.js";
2
+ export { dndWatcher } from "./compositions.js";
3
+ export { on, once, type Target } from "./listeners.js";
4
+ export * as syncGenerators from "./sync-generators.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,eAAe,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export * as asyncGenerators from "./async-generators.js";
2
+ export { dndWatcher } from "./compositions.js";
3
+ export { on, once } from "./listeners.js";
4
+ export * as syncGenerators from "./sync-generators.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,eAAe,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAe,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,8 @@
1
+ export type Target = (Window & typeof globalThis) | Document | HTMLElement;
2
+ export declare function on<T extends HTMLElement, E extends keyof HTMLElementEventMap>(target: T, eventType: E): AsyncIterableIterator<HTMLElementEventMap[E]>;
3
+ export declare function on<T extends Document, E extends keyof DocumentEventMap>(target: T, eventType: E): AsyncIterableIterator<DocumentEventMap[E]>;
4
+ export declare function on<T extends Window & typeof globalThis, E extends keyof WindowEventMap>(target: T, eventType: E): AsyncIterableIterator<WindowEventMap[E]>;
5
+ export declare function once<T extends HTMLElement, E extends keyof HTMLElementEventMap>(target: T, eventType: E): AsyncIterableIterator<HTMLElementEventMap[E]>;
6
+ export declare function once<T extends Document, E extends keyof DocumentEventMap>(target: T, eventType: E): AsyncIterableIterator<DocumentEventMap[E]>;
7
+ export declare function once<T extends Window & typeof globalThis, E extends keyof WindowEventMap>(target: T, eventType: E): AsyncIterableIterator<WindowEventMap[E]>;
8
+ //# sourceMappingURL=listeners.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listeners.d.ts","sourceRoot":"","sources":["../src/listeners.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG,CAAC,MAAM,GAAG,OAAO,UAAU,CAAC,GAAG,QAAQ,GAAG,WAAW,CAAC;AAoC3E,wBAAgB,EAAE,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,SAAS,MAAM,mBAAmB,EAC5E,MAAM,EAAE,CAAC,EACT,SAAS,EAAE,CAAC,GACV,qBAAqB,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;AAEjD,wBAAgB,EAAE,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,MAAM,gBAAgB,EACtE,MAAM,EAAE,CAAC,EACT,SAAS,EAAE,CAAC,GACV,qBAAqB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9C,wBAAgB,EAAE,CACjB,CAAC,SAAS,MAAM,GAAG,OAAO,UAAU,EACpC,CAAC,SAAS,MAAM,cAAc,EAC7B,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,qBAAqB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AASrE,wBAAgB,IAAI,CACnB,CAAC,SAAS,WAAW,EACrB,CAAC,SAAS,MAAM,mBAAmB,EAClC,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,qBAAqB,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;AAE1E,wBAAgB,IAAI,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,MAAM,gBAAgB,EACxE,MAAM,EAAE,CAAC,EACT,SAAS,EAAE,CAAC,GACV,qBAAqB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9C,wBAAgB,IAAI,CACnB,CAAC,SAAS,MAAM,GAAG,OAAO,UAAU,EACpC,CAAC,SAAS,MAAM,cAAc,EAC7B,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,qBAAqB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,29 @@
1
+ function createAsyncListener(target, eventType, exhaustAfterFirst) {
2
+ let isEventFired = false;
3
+ return {
4
+ [Symbol.asyncIterator]() {
5
+ return this;
6
+ },
7
+ async next() {
8
+ return new Promise((resolve) => {
9
+ if (exhaustAfterFirst && isEventFired) {
10
+ resolve({ done: true, value: undefined });
11
+ return;
12
+ }
13
+ target.addEventListener(eventType, (event) => {
14
+ if (exhaustAfterFirst) {
15
+ isEventFired = true;
16
+ }
17
+ resolve({ done: false, value: event });
18
+ }, { once: true });
19
+ });
20
+ },
21
+ };
22
+ }
23
+ export function on(target, eventType) {
24
+ return createAsyncListener(target, eventType, false);
25
+ }
26
+ export function once(target, eventType) {
27
+ return createAsyncListener(target, eventType, true);
28
+ }
29
+ //# sourceMappingURL=listeners.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listeners.js","sourceRoot":"","sources":["../src/listeners.ts"],"names":[],"mappings":"AAEA,SAAS,mBAAmB,CAC3B,MAAc,EACd,SAAiB,EACjB,iBAA0B;IAE1B,IAAI,YAAY,GAAG,KAAK,CAAC;IAEzB,OAAO;QACN,CAAC,MAAM,CAAC,aAAa,CAAC;YACrB,OAAO,IAAI,CAAC;QACb,CAAC;QAED,KAAK,CAAC,IAAI;YACT,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC9B,IAAI,iBAAiB,IAAI,YAAY,EAAE,CAAC;oBACvC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;oBAC1C,OAAO;gBACR,CAAC;gBAED,MAAM,CAAC,gBAAgB,CACtB,SAAS,EACT,CAAC,KAAK,EAAE,EAAE;oBACT,IAAI,iBAAiB,EAAE,CAAC;wBACvB,YAAY,GAAG,IAAI,CAAC;oBACrB,CAAC;oBACD,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;gBACxC,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACd,CAAC;YACH,CAAC,CAAC,CAAC;QACJ,CAAC;KACD,CAAC;AACH,CAAC;AAiBD,MAAM,UAAU,EAAE,CACjB,MAAc,EACd,SAAiB;IAEjB,OAAO,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AACtD,CAAC;AAiBD,MAAM,UAAU,IAAI,CACnB,MAAc,EACd,SAAiB;IAEjB,OAAO,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AACrD,CAAC"}
@@ -0,0 +1,12 @@
1
+ export declare function sequence<T>(...iterables: Iterable<T>[]): Generator<T>;
2
+ export declare function map<T>(iterable: Iterable<T>, mappers: Array<(value: T) => unknown>): IterableIterator<unknown>;
3
+ export declare function filter<T, S extends T>(iterable: Iterable<T>, onFilter: (value: T) => value is S): Generator<S>;
4
+ export declare function filter<T>(iterable: Iterable<T>, onFilter: (value: T) => boolean): Generator<T>;
5
+ export declare function every<T>(iterable: Iterable<T>, predicate: (value: T) => boolean): Generator<T>;
6
+ export declare function take<T>(iterable: Iterable<T>, count: number): Generator<T>;
7
+ export declare function slice<T>(iterable: Iterable<T> | IterableIterator<T>, start: number, stop: number, step?: number): Generator<T>;
8
+ export declare function enumerate<T>(iterable: Iterable<T> | IterableIterator<T>): IterableIterator<[number, T]>;
9
+ export declare function zip<T>(...iterables: Iterable<T>[]): IterableIterator<T[]>;
10
+ export declare function watch<T>(executor: () => Iterable<T>): Generator<T>;
11
+ export declare function onlyEvent<E extends keyof HTMLElementEventMap>(eventType: E): (event: Event) => event is HTMLElementEventMap[E];
12
+ //# sourceMappingURL=sync-generators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-generators.d.ts","sourceRoot":"","sources":["../src/sync-generators.ts"],"names":[],"mappings":"AAAA,wBAAiB,QAAQ,CAAC,CAAC,EAAE,GAAG,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAMtE;AAED,wBAAgB,GAAG,CAAC,CAAC,EACpB,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EACrB,OAAO,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,GACnC,gBAAgB,CAAC,OAAO,CAAC,CA2B3B;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EACpC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,GAChC,SAAS,CAAC,CAAC,CAAC,CAAC;AAEhB,wBAAgB,MAAM,CAAC,CAAC,EACvB,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,GAC7B,SAAS,CAAC,CAAC,CAAC,CAAC;AAehB,wBAAiB,KAAK,CAAC,CAAC,EACvB,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EACrB,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,GAC9B,SAAS,CAAC,CAAC,CAAC,CAKd;AAED,wBAAiB,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAU3E;AAED,wBAAiB,KAAK,CAAC,CAAC,EACvB,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,EAC3C,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,MAAU,GACd,SAAS,CAAC,CAAC,CAAC,CAsBd;AAED,wBAAgB,SAAS,CAAC,CAAC,EAC1B,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,GACzC,gBAAgB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAsB/B;AAED,wBAAgB,GAAG,CAAC,CAAC,EAAE,GAAG,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAyBzE;AAED,wBAAiB,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAMnE;AAED,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,mBAAmB,EAC5D,SAAS,EAAE,CAAC,GACV,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,IAAI,mBAAmB,CAAC,CAAC,CAAC,CAEnD"}
@@ -0,0 +1,130 @@
1
+ export function* sequence(...iterables) {
2
+ for (const iterable of iterables) {
3
+ for (const item of iterable) {
4
+ yield item;
5
+ }
6
+ }
7
+ }
8
+ export function map(iterable, mappers) {
9
+ const collectionIterator = iterable[Symbol.iterator]();
10
+ return {
11
+ [Symbol.iterator]() {
12
+ return this;
13
+ },
14
+ next() {
15
+ const mapperIterator = mappers[Symbol.iterator]();
16
+ let mapper = mapperIterator.next();
17
+ const next = collectionIterator.next();
18
+ if (next.done) {
19
+ return { done: true, value: undefined };
20
+ }
21
+ let value = next.value;
22
+ while (!mapper.done) {
23
+ value = mapper.value(value);
24
+ mapper = mapperIterator.next();
25
+ }
26
+ return { done: false, value };
27
+ },
28
+ };
29
+ }
30
+ export function* filter(iterable, onFilter) {
31
+ const iterator = iterable[Symbol.iterator]();
32
+ while (true) {
33
+ const { done, value } = iterator.next();
34
+ if (done)
35
+ return;
36
+ if (onFilter(value))
37
+ yield value;
38
+ }
39
+ }
40
+ export function* every(iterable, predicate) {
41
+ for (const value of iterable) {
42
+ if (!predicate(value))
43
+ break;
44
+ yield value;
45
+ }
46
+ }
47
+ export function* take(iterable, count) {
48
+ const iterator = iterable[Symbol.iterator]();
49
+ let cursor = 0;
50
+ while (cursor < count) {
51
+ const { done, value } = iterator.next();
52
+ if (done)
53
+ return;
54
+ yield value;
55
+ cursor++;
56
+ }
57
+ }
58
+ export function* slice(iterable, start, stop, step = 1) {
59
+ const iterator = iterable[Symbol.iterator]();
60
+ while (start > 0) {
61
+ if (iterator.next().done)
62
+ return;
63
+ --start;
64
+ --stop;
65
+ }
66
+ while (stop > 0) {
67
+ const current = iterator.next();
68
+ if (current.done)
69
+ return;
70
+ yield current.value;
71
+ --stop;
72
+ let n = step;
73
+ while (n > 1) {
74
+ if (iterator.next().done)
75
+ return;
76
+ --n;
77
+ }
78
+ }
79
+ }
80
+ export function enumerate(iterable) {
81
+ const iterator = iterable[Symbol.iterator]();
82
+ let cursor = 0;
83
+ return {
84
+ [Symbol.iterator]() {
85
+ return this;
86
+ },
87
+ next() {
88
+ const current = iterator.next();
89
+ if (current.done) {
90
+ return { done: true, value: undefined };
91
+ }
92
+ return {
93
+ done: false,
94
+ value: [cursor++, current.value],
95
+ };
96
+ },
97
+ };
98
+ }
99
+ export function zip(...iterables) {
100
+ const iterators = iterables.map((iterable) => iterable[Symbol.iterator]());
101
+ return {
102
+ [Symbol.iterator]() {
103
+ return this;
104
+ },
105
+ next() {
106
+ if (iterators.length === 0) {
107
+ return { done: true, value: undefined };
108
+ }
109
+ const results = iterators.map((iterator) => iterator.next());
110
+ if (results.some((result) => result.done)) {
111
+ return { done: true, value: undefined };
112
+ }
113
+ return {
114
+ done: false,
115
+ value: results.map((result) => result.value),
116
+ };
117
+ },
118
+ };
119
+ }
120
+ export function* watch(executor) {
121
+ while (true) {
122
+ for (const value of executor()) {
123
+ yield value;
124
+ }
125
+ }
126
+ }
127
+ export function onlyEvent(eventType) {
128
+ return (event) => event.type === eventType;
129
+ }
130
+ //# sourceMappingURL=sync-generators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-generators.js","sourceRoot":"","sources":["../src/sync-generators.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "yieldkit",
3
+ "version": "0.1.0",
4
+ "license": "MIT",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js",
13
+ "default": "./dist/index.js"
14
+ },
15
+ "./async": {
16
+ "types": "./dist/async-generators.d.ts",
17
+ "import": "./dist/async-generators.js",
18
+ "default": "./dist/async-generators.js"
19
+ },
20
+ "./sync": {
21
+ "types": "./dist/sync-generators.d.ts",
22
+ "import": "./dist/sync-generators.js",
23
+ "default": "./dist/sync-generators.js"
24
+ },
25
+ "./package.json": "./package.json"
26
+ },
27
+ "files": [
28
+ "dist"
29
+ ],
30
+ "scripts": {
31
+ "build": "tsc -p tsconfig.json",
32
+ "test": "vitest run",
33
+ "check": "tsc -p tsconfig.json --noEmit"
34
+ },
35
+ "devDependencies": {
36
+ "@types/node": "^22.8.6",
37
+ "jsdom": "^25.0.1",
38
+ "typescript": "^5.6.3",
39
+ "vitest": "^2.1.9"
40
+ }
41
+ }