iter-fest 0.1.1-main.9193c0a → 0.1.1-main.cd25da6
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 +127 -2
- package/dist/chunk-EIIP7YWB.mjs +27 -0
- package/dist/chunk-EIIP7YWB.mjs.map +1 -0
- package/dist/chunk-EUVK4YM7.mjs +25 -0
- package/dist/chunk-EUVK4YM7.mjs.map +1 -0
- package/dist/chunk-FEOLYD5R.mjs +31 -0
- package/dist/chunk-FEOLYD5R.mjs.map +1 -0
- package/dist/chunk-MOBXUTO5.mjs +22 -0
- package/dist/chunk-MOBXUTO5.mjs.map +1 -0
- package/dist/chunk-O5SQJUKB.mjs +37 -0
- package/dist/chunk-O5SQJUKB.mjs.map +1 -0
- package/dist/chunk-OJMT4K3R.mjs +8 -0
- package/dist/chunk-OJMT4K3R.mjs.map +1 -0
- package/dist/chunk-VLF6DI2U.mjs +30 -0
- package/dist/chunk-VLF6DI2U.mjs.map +1 -0
- package/dist/iter-fest.d.mts +8 -0
- package/dist/iter-fest.d.ts +8 -0
- package/dist/iter-fest.iterableGetReadable.d.mts +3 -0
- package/dist/iter-fest.iterableGetReadable.d.ts +3 -0
- package/dist/iter-fest.iterableGetReadable.js +46 -0
- package/dist/iter-fest.iterableGetReadable.js.map +1 -0
- package/dist/iter-fest.iterableGetReadable.mjs +7 -0
- package/dist/iter-fest.iterableGetReadable.mjs.map +1 -0
- package/dist/iter-fest.js +172 -2
- package/dist/iter-fest.js.map +1 -1
- package/dist/iter-fest.mjs +32 -4
- package/dist/iter-fest.observable.d.mts +51 -0
- package/dist/iter-fest.observable.d.ts +51 -0
- package/dist/iter-fest.observable.js +66 -0
- package/dist/iter-fest.observable.js.map +1 -0
- package/dist/iter-fest.observable.mjs +8 -0
- package/dist/iter-fest.observable.mjs.map +1 -0
- package/dist/iter-fest.observableFromAsync.d.mts +7 -0
- package/dist/iter-fest.observableFromAsync.d.ts +7 -0
- package/dist/iter-fest.observableFromAsync.js +91 -0
- package/dist/iter-fest.observableFromAsync.js.map +1 -0
- package/dist/iter-fest.observableFromAsync.mjs +9 -0
- package/dist/iter-fest.observableFromAsync.mjs.map +1 -0
- package/dist/iter-fest.observableSubscribeAsReadable.d.mts +7 -0
- package/dist/iter-fest.observableSubscribeAsReadable.d.ts +7 -0
- package/dist/iter-fest.observableSubscribeAsReadable.js +51 -0
- package/dist/iter-fest.observableSubscribeAsReadable.js.map +1 -0
- package/dist/iter-fest.observableSubscribeAsReadable.mjs +7 -0
- package/dist/iter-fest.observableSubscribeAsReadable.mjs.map +1 -0
- package/dist/iter-fest.pushAsyncIterableIterator.d.mts +9 -0
- package/dist/iter-fest.pushAsyncIterableIterator.d.ts +9 -0
- package/dist/iter-fest.pushAsyncIterableIterator.js +73 -0
- package/dist/iter-fest.pushAsyncIterableIterator.js.map +1 -0
- package/dist/iter-fest.pushAsyncIterableIterator.mjs +7 -0
- package/dist/iter-fest.pushAsyncIterableIterator.mjs.map +1 -0
- package/dist/iter-fest.readerValues.d.mts +3 -0
- package/dist/iter-fest.readerValues.d.ts +3 -0
- package/dist/iter-fest.readerValues.js +49 -0
- package/dist/iter-fest.readerValues.js.map +1 -0
- package/dist/iter-fest.readerValues.mjs +7 -0
- package/dist/iter-fest.readerValues.mjs.map +1 -0
- package/dist/iter-fest.symbolObservable.d.mts +3 -0
- package/dist/iter-fest.symbolObservable.d.ts +3 -0
- package/dist/iter-fest.symbolObservable.js +42 -0
- package/dist/iter-fest.symbolObservable.js.map +1 -0
- package/dist/iter-fest.symbolObservable.mjs +7 -0
- package/dist/iter-fest.symbolObservable.mjs.map +1 -0
- package/package.json +86 -12
package/README.md
CHANGED
|
@@ -33,9 +33,21 @@ console.log(iterableSome(iterable, value => value % 2)); // Prints "true".
|
|
|
33
33
|
|
|
34
34
|
List of ported functions: [`at`](https://tc39.es/ecma262/#sec-array.prototype.at), [`concat`](https://tc39.es/ecma262/#sec-array.prototype.concat), [`entries`](https://tc39.es/ecma262/#sec-array.prototype.entries), [`every`](https://tc39.es/ecma262/#sec-array.prototype.every), [`filter`](https://tc39.es/ecma262/#sec-array.prototype.filter), [`find`](https://tc39.es/ecma262/#sec-array.prototype.find), [`findIndex`](https://tc39.es/ecma262/#sec-array.prototype.findindex), [`findLast`](https://tc39.es/ecma262/#sec-array.prototype.findlast), [`findLastIndex`](https://tc39.es/ecma262/#sec-array.prototype.findlastindex), [`forEach`](https://tc39.es/ecma262/#sec-array.prototype.foreach), [`includes`](https://tc39.es/ecma262/#sec-array.prototype.includes), [`indexOf`](https://tc39.es/ecma262/#sec-array.prototype.indexof), [`join`](https://tc39.es/ecma262/#sec-array.prototype.join), [`keys`](https://tc39.es/ecma262/#sec-array.prototype.keys), [`map`](https://tc39.es/ecma262/#sec-array.prototype.map), [`reduce`](https://tc39.es/ecma262/#sec-array.prototype.reduce), [`slice`](https://tc39.es/ecma262/#sec-array.prototype.slice), [`some`](https://tc39.es/ecma262/#sec-array.prototype.some), [`toSpliced`](https://tc39.es/ecma262/#sec-array.prototype.tospliced), and [`toString`](https://tc39.es/ecma262/#sec-array.prototype.tostring).
|
|
35
35
|
|
|
36
|
+
## Conversions
|
|
37
|
+
|
|
38
|
+
| From | To | Function signature |
|
|
39
|
+
| ----------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
40
|
+
| `Iterator` | `IterableIterator` | [`iteratorToIterable<T>(iterator: Iterator<T>): IterableIterator<T>`](#converting-an-iterator-to-iterable) |
|
|
41
|
+
| `Observable` | `ReadableStream` | [`observableSubscribeAsReadable<T>(observable: Observable<T>): ReadableStream<T>`](#converting-an-observable-to-readablestream) |
|
|
42
|
+
| `ReadableStreamDefaultReader` | `AsyncIterableIterator` | [`readerValues`<T>(reader: ReadableStreamDefaultReader<T>): AsyncIterableIterator<T>`](#iterating-readablestreamdefaultreader) |
|
|
43
|
+
| `AsyncIterable` | `Observable` | [`observableFromAsync<T>(iterable: AsyncIterable<T>): Observable<T>`](#converting-an-asynciterable-to-observable) |
|
|
44
|
+
| `AsyncIterable`/`Iterable` | `ReadableStream` | [`iterableGetReadable<T>(iterable: AsyncIterable<T> \| Iterable<T>): ReadableStream<T>`](#converting-an-asynciterableiterable-to-readablestream) |
|
|
45
|
+
|
|
46
|
+
To convert `Observable` to `AsyncIterableIterator`, [use `ReadableStream` as intermediate format](#converting-an-observable-to-asynciterableiterator).
|
|
47
|
+
|
|
36
48
|
### Converting an iterator to iterable
|
|
37
49
|
|
|
38
|
-
`iteratorToIterable`
|
|
50
|
+
`iteratorToIterable` enable a [pure iterator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Iterator) to be iterable using a for-loop statement.
|
|
39
51
|
|
|
40
52
|
```ts
|
|
41
53
|
const iterate = (): Iterator<number> => {
|
|
@@ -44,7 +56,7 @@ const iterate = (): Iterator<number> => {
|
|
|
44
56
|
return {
|
|
45
57
|
next: () => {
|
|
46
58
|
if (++value <= 3) {
|
|
47
|
-
return {
|
|
59
|
+
return { value };
|
|
48
60
|
}
|
|
49
61
|
|
|
50
62
|
return { done: true, value: undefined };
|
|
@@ -57,6 +69,119 @@ for (const value of iteratorToIterable(iterate())) {
|
|
|
57
69
|
}
|
|
58
70
|
```
|
|
59
71
|
|
|
72
|
+
### Converting an `Observable` to `AsyncIterableIterator`
|
|
73
|
+
|
|
74
|
+
`ReadableStream` can be used to when converting an `Observable` to `AsyncIterableIterator`.
|
|
75
|
+
|
|
76
|
+
Note: `Observable` is push-based and it does not support flow control. When converting to `AsyncIterableIteratorrr`, the internal buffer of `ReadableStream` could build up quickly.
|
|
77
|
+
|
|
78
|
+
```ts
|
|
79
|
+
const observable = Observable.from([1, 2, 3]);
|
|
80
|
+
const readable = observableSubscribeAsReadable(observable);
|
|
81
|
+
|
|
82
|
+
for await (const value of readerValues(readable.getReader())) {
|
|
83
|
+
console.log(value); // Prints "1", "2", "3".
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Converting an `AsyncIterable` to `Observable`
|
|
88
|
+
|
|
89
|
+
`Observable.from` converts `Iterable` into `Observable`. However, it does not convert `AsyncIterable`.
|
|
90
|
+
|
|
91
|
+
`observableFromAsync` will convert `AsyncIterable` into `Observable`.
|
|
92
|
+
|
|
93
|
+
```ts
|
|
94
|
+
async function* generate() {
|
|
95
|
+
yield 1;
|
|
96
|
+
yield 2;
|
|
97
|
+
yield 3;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
const observable = observableFromAsync(generate());
|
|
101
|
+
const next = value => console.log(value);
|
|
102
|
+
|
|
103
|
+
observable.subscribe({ next }); // Prints "1", "2", "3".
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Converting an `Observable` to `ReadableStream`
|
|
107
|
+
|
|
108
|
+
`ReadableStream` is powerful for transforming and piping stream of data. It can be formed using data from both push-based and pull-based source with backpressuree.
|
|
109
|
+
|
|
110
|
+
Note: `Observable` is push-based and it does not support flow control. When converting to `ReadableStream`, the internal buffer could build up quickly.
|
|
111
|
+
|
|
112
|
+
```ts
|
|
113
|
+
const observable = Observable.from([1, 2, 3]);
|
|
114
|
+
const readable = observableSubscribeAsReadable(observable);
|
|
115
|
+
const reader = readable.getReader();
|
|
116
|
+
|
|
117
|
+
readable.pipeTo(stream.writable); // Will write 1, 2, 3.
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Iterating `ReadableStreamDefaultReader`
|
|
121
|
+
|
|
122
|
+
`readerValues` will convert default reader of `ReadableStream` into an `AsyncIterableIterator` to use in for-loop.
|
|
123
|
+
|
|
124
|
+
```ts
|
|
125
|
+
const readableStream = new ReadableStream({
|
|
126
|
+
start(controller) {
|
|
127
|
+
controller.enqueue(1);
|
|
128
|
+
controller.enqueue(2);
|
|
129
|
+
},
|
|
130
|
+
pull(controller) {
|
|
131
|
+
controller.enqueue(3);
|
|
132
|
+
controller.close();
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
for await (const value of readerValues(readableStream.getReader())) {
|
|
137
|
+
console.log(value); // Prints "1", "2", "3".
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## Converting an `AsyncIterable`/`Iterable` to `ReadableStream`
|
|
142
|
+
|
|
143
|
+
```ts
|
|
144
|
+
const iterable = [1, 2, 3].values();
|
|
145
|
+
const readable = iterableGetReadable(iterable);
|
|
146
|
+
|
|
147
|
+
readable.pipeTo(stream.writable); // Will write 1, 2, 3.
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## Others
|
|
151
|
+
|
|
152
|
+
### Typed `Observable`
|
|
153
|
+
|
|
154
|
+
`Observable` and `Symbol.observable` is re-exported from `core-js-pure` with proper type definitions.
|
|
155
|
+
|
|
156
|
+
### Producer-consumer queue
|
|
157
|
+
|
|
158
|
+
`PushAsyncIterableIterator` is a simple push-based producer-consumer queue and designed to decouple the flow between a producer and consumer. The producer can push a new job at anytime. The consumer can pull a job at its own convenience.
|
|
159
|
+
|
|
160
|
+
Compare to pull-based queue, a push-based queue is easier to use. However, pull-based queue offers better flow control as it will produce a job only if there is a consumer ready to consume.
|
|
161
|
+
|
|
162
|
+
For a full-featured producer-consumer queue that supports flow control, use `ReadableStream` instead.
|
|
163
|
+
|
|
164
|
+
```ts
|
|
165
|
+
const iterable = new PushAsyncIterableIterator();
|
|
166
|
+
|
|
167
|
+
(async function consumer() {
|
|
168
|
+
for await (const value of iterable) {
|
|
169
|
+
console.log(value);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
console.log('Done');
|
|
173
|
+
})();
|
|
174
|
+
|
|
175
|
+
(async function producer() {
|
|
176
|
+
iterable.push(1);
|
|
177
|
+
iterable.push(2);
|
|
178
|
+
iterable.push(3);
|
|
179
|
+
iterable.close();
|
|
180
|
+
})();
|
|
181
|
+
|
|
182
|
+
// Prints "1", "2", "3", "Done".
|
|
183
|
+
```
|
|
184
|
+
|
|
60
185
|
## Behaviors
|
|
61
186
|
|
|
62
187
|
### How this compares to the TC39 proposals?
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// src/observableSubscribeAsReadable.ts
|
|
2
|
+
function observableSubscribeAsReadable(observable) {
|
|
3
|
+
let subscription;
|
|
4
|
+
return new ReadableStream({
|
|
5
|
+
cancel() {
|
|
6
|
+
subscription.unsubscribe();
|
|
7
|
+
},
|
|
8
|
+
start(controller) {
|
|
9
|
+
subscription = observable.subscribe({
|
|
10
|
+
complete() {
|
|
11
|
+
controller.close();
|
|
12
|
+
},
|
|
13
|
+
error(err) {
|
|
14
|
+
controller.error(err);
|
|
15
|
+
},
|
|
16
|
+
next(value) {
|
|
17
|
+
controller.enqueue(value);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export {
|
|
25
|
+
observableSubscribeAsReadable
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=chunk-EIIP7YWB.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/observableSubscribeAsReadable.ts"],"sourcesContent":["import type { Observable, Subscription } from './Observable';\n\nexport function observableSubscribeAsReadable<T>(observable: Observable<T>): ReadableStream<T> {\n let subscription: Subscription;\n\n return new ReadableStream<T>({\n cancel() {\n subscription.unsubscribe();\n },\n start(controller) {\n subscription = observable.subscribe({\n complete() {\n controller.close();\n },\n error(err: unknown) {\n controller.error(err);\n },\n next(value) {\n controller.enqueue(value);\n }\n });\n }\n });\n}\n"],"mappings":";AAEO,SAAS,8BAAiC,YAA8C;AAC7F,MAAI;AAEJ,SAAO,IAAI,eAAkB;AAAA,IAC3B,SAAS;AACP,mBAAa,YAAY;AAAA,IAC3B;AAAA,IACA,MAAM,YAAY;AAChB,qBAAe,WAAW,UAAU;AAAA,QAClC,WAAW;AACT,qBAAW,MAAM;AAAA,QACnB;AAAA,QACA,MAAM,KAAc;AAClB,qBAAW,MAAM,GAAG;AAAA,QACtB;AAAA,QACA,KAAK,OAAO;AACV,qBAAW,QAAQ,KAAK;AAAA,QAC1B;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;","names":[]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// src/readerValues.ts
|
|
2
|
+
function readerValues(reader) {
|
|
3
|
+
const iterable = {
|
|
4
|
+
[Symbol.asyncIterator]() {
|
|
5
|
+
return iterable;
|
|
6
|
+
},
|
|
7
|
+
async next() {
|
|
8
|
+
const result = await Promise.race([reader.read(), reader.closed]);
|
|
9
|
+
if (!result || result.done) {
|
|
10
|
+
return { done: true, value: void 0 };
|
|
11
|
+
}
|
|
12
|
+
return { value: result.value };
|
|
13
|
+
},
|
|
14
|
+
async return() {
|
|
15
|
+
reader.cancel();
|
|
16
|
+
return { done: true, value: void 0 };
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
return iterable;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export {
|
|
23
|
+
readerValues
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=chunk-EUVK4YM7.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/readerValues.ts"],"sourcesContent":["export function readerValues<T>(reader: ReadableStreamDefaultReader<T>): AsyncIterableIterator<T> {\n const iterable: AsyncIterableIterator<T> = {\n [Symbol.asyncIterator]() {\n return iterable;\n },\n async next(): Promise<IteratorResult<T>> {\n const result = await Promise.race([reader.read(), reader.closed]);\n\n if (!result || result.done) {\n return { done: true, value: undefined };\n }\n\n return { value: result.value };\n },\n async return() {\n // Throw inside for-loop is return().\n reader.cancel();\n\n return { done: true, value: undefined };\n }\n };\n\n return iterable;\n}\n"],"mappings":";AAAO,SAAS,aAAgB,QAAkE;AAChG,QAAM,WAAqC;AAAA,IACzC,CAAC,OAAO,aAAa,IAAI;AACvB,aAAO;AAAA,IACT;AAAA,IACA,MAAM,OAAmC;AACvC,YAAM,SAAS,MAAM,QAAQ,KAAK,CAAC,OAAO,KAAK,GAAG,OAAO,MAAM,CAAC;AAEhE,UAAI,CAAC,UAAU,OAAO,MAAM;AAC1B,eAAO,EAAE,MAAM,MAAM,OAAO,OAAU;AAAA,MACxC;AAEA,aAAO,EAAE,OAAO,OAAO,MAAM;AAAA,IAC/B;AAAA,IACA,MAAM,SAAS;AAEb,aAAO,OAAO;AAEd,aAAO,EAAE,MAAM,MAAM,OAAO,OAAU;AAAA,IACxC;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Observable
|
|
3
|
+
} from "./chunk-VLF6DI2U.mjs";
|
|
4
|
+
|
|
5
|
+
// src/observableFromAsync.ts
|
|
6
|
+
function observableFromAsync(iterable) {
|
|
7
|
+
return new Observable((subscriber) => {
|
|
8
|
+
let closed = false;
|
|
9
|
+
(async function() {
|
|
10
|
+
try {
|
|
11
|
+
for await (const value of iterable) {
|
|
12
|
+
if (closed) {
|
|
13
|
+
break;
|
|
14
|
+
}
|
|
15
|
+
subscriber.next(value);
|
|
16
|
+
}
|
|
17
|
+
subscriber.complete();
|
|
18
|
+
} catch (error) {
|
|
19
|
+
subscriber.error(error);
|
|
20
|
+
}
|
|
21
|
+
})();
|
|
22
|
+
return () => {
|
|
23
|
+
closed = true;
|
|
24
|
+
};
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export {
|
|
29
|
+
observableFromAsync
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=chunk-FEOLYD5R.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/observableFromAsync.ts"],"sourcesContent":["import { Observable } from './Observable';\n\nexport function observableFromAsync<T>(iterable: AsyncIterable<T>): Observable<T> {\n return new Observable(subscriber => {\n let closed = false;\n\n (async function () {\n try {\n for await (const value of iterable) {\n if (closed) {\n break;\n }\n\n subscriber.next(value);\n }\n\n subscriber.complete();\n } catch (error) {\n subscriber.error(error);\n }\n })();\n\n return () => {\n closed = true;\n };\n });\n}\n"],"mappings":";;;;;AAEO,SAAS,oBAAuB,UAA2C;AAChF,SAAO,IAAI,WAAW,gBAAc;AAClC,QAAI,SAAS;AAEb,KAAC,iBAAkB;AACjB,UAAI;AACF,yBAAiB,SAAS,UAAU;AAClC,cAAI,QAAQ;AACV;AAAA,UACF;AAEA,qBAAW,KAAK,KAAK;AAAA,QACvB;AAEA,mBAAW,SAAS;AAAA,MACtB,SAAS,OAAO;AACd,mBAAW,MAAM,KAAK;AAAA,MACxB;AAAA,IACF,GAAG;AAEH,WAAO,MAAM;AACX,eAAS;AAAA,IACX;AAAA,EACF,CAAC;AACH;","names":[]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// src/iterableGetReadable.ts
|
|
2
|
+
function isIterable(iterable) {
|
|
3
|
+
return !!(iterable && typeof iterable === "object" && Symbol.iterator in iterable);
|
|
4
|
+
}
|
|
5
|
+
function iterableGetReadable(iterable) {
|
|
6
|
+
const iterator = isIterable(iterable) ? iterable[Symbol.iterator]() : iterable[Symbol.asyncIterator]();
|
|
7
|
+
return new ReadableStream({
|
|
8
|
+
async pull(controller) {
|
|
9
|
+
const result = await iterator.next();
|
|
10
|
+
if (result.done) {
|
|
11
|
+
controller.close();
|
|
12
|
+
} else {
|
|
13
|
+
controller.enqueue(result.value);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export {
|
|
20
|
+
iterableGetReadable
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=chunk-MOBXUTO5.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/iterableGetReadable.ts"],"sourcesContent":["function isIterable(iterable: unknown): iterable is Iterable<unknown> {\n return !!(iterable && typeof iterable === 'object' && Symbol.iterator in iterable);\n}\n\nexport function iterableGetReadable<T>(iterable: AsyncIterable<T> | Iterable<T>): ReadableStream<T> {\n const iterator = isIterable(iterable) ? iterable[Symbol.iterator]() : iterable[Symbol.asyncIterator]();\n\n return new ReadableStream({\n async pull(controller) {\n const result = await iterator.next();\n\n if (result.done) {\n controller.close();\n } else {\n controller.enqueue(result.value);\n }\n }\n });\n}\n"],"mappings":";AAAA,SAAS,WAAW,UAAkD;AACpE,SAAO,CAAC,EAAE,YAAY,OAAO,aAAa,YAAY,OAAO,YAAY;AAC3E;AAEO,SAAS,oBAAuB,UAA6D;AAClG,QAAM,WAAW,WAAW,QAAQ,IAAI,SAAS,OAAO,QAAQ,EAAE,IAAI,SAAS,OAAO,aAAa,EAAE;AAErG,SAAO,IAAI,eAAe;AAAA,IACxB,MAAM,KAAK,YAAY;AACrB,YAAM,SAAS,MAAM,SAAS,KAAK;AAEnC,UAAI,OAAO,MAAM;AACf,mBAAW,MAAM;AAAA,MACnB,OAAO;AACL,mBAAW,QAAQ,OAAO,KAAK;AAAA,MACjC;AAAA,IACF;AAAA,EACF,CAAC;AACH;","names":[]}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// src/private/withResolvers.ts
|
|
2
|
+
import coreJSPromiseWithResolvers from "core-js-pure/full/promise/with-resolvers";
|
|
3
|
+
function withResolvers() {
|
|
4
|
+
return coreJSPromiseWithResolvers();
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
// src/PushAsyncIterableIterator.ts
|
|
8
|
+
var CLOSE = Symbol("close");
|
|
9
|
+
var PushAsyncIterableIterator = class {
|
|
10
|
+
#closed = false;
|
|
11
|
+
#pushResolvers = withResolvers();
|
|
12
|
+
[Symbol.asyncIterator]() {
|
|
13
|
+
return this;
|
|
14
|
+
}
|
|
15
|
+
close() {
|
|
16
|
+
this.#closed = true;
|
|
17
|
+
this.#pushResolvers.resolve(CLOSE);
|
|
18
|
+
}
|
|
19
|
+
async next() {
|
|
20
|
+
const value = await this.#pushResolvers.promise;
|
|
21
|
+
if (value === CLOSE) {
|
|
22
|
+
return { done: true, value: void 0 };
|
|
23
|
+
}
|
|
24
|
+
return { done: false, value };
|
|
25
|
+
}
|
|
26
|
+
push(value) {
|
|
27
|
+
if (!this.#closed) {
|
|
28
|
+
this.#pushResolvers.resolve(value);
|
|
29
|
+
this.#pushResolvers = withResolvers();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export {
|
|
35
|
+
PushAsyncIterableIterator
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=chunk-O5SQJUKB.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/private/withResolvers.ts","../src/PushAsyncIterableIterator.ts"],"sourcesContent":["// @ts-expect-error \"core-js\" is not typed.\nimport coreJSPromiseWithResolvers from 'core-js-pure/full/promise/with-resolvers';\n\nexport default function withResolvers<T>(): PromiseWithResolvers<T> {\n return coreJSPromiseWithResolvers();\n}\n","import withResolvers from './private/withResolvers';\n\nconst CLOSE = Symbol('close');\n\nexport class PushAsyncIterableIterator<T> implements AsyncIterableIterator<T> {\n #closed: boolean = false;\n #pushResolvers: PromiseWithResolvers<T | typeof CLOSE> = withResolvers();\n\n [Symbol.asyncIterator]() {\n return this;\n }\n\n close() {\n this.#closed = true;\n this.#pushResolvers.resolve(CLOSE);\n }\n\n async next(): Promise<IteratorResult<T>> {\n const value = await this.#pushResolvers.promise;\n\n if (value === CLOSE) {\n return { done: true, value: undefined };\n }\n\n return { done: false, value };\n }\n\n push(value: T) {\n if (!this.#closed) {\n this.#pushResolvers.resolve(value);\n this.#pushResolvers = withResolvers();\n }\n }\n}\n"],"mappings":";AACA,OAAO,gCAAgC;AAExB,SAAR,gBAA6D;AAClE,SAAO,2BAA2B;AACpC;;;ACHA,IAAM,QAAQ,OAAO,OAAO;AAErB,IAAM,4BAAN,MAAuE;AAAA,EAC5E,UAAmB;AAAA,EACnB,iBAAyD,cAAc;AAAA,EAEvE,CAAC,OAAO,aAAa,IAAI;AACvB,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ;AACN,SAAK,UAAU;AACf,SAAK,eAAe,QAAQ,KAAK;AAAA,EACnC;AAAA,EAEA,MAAM,OAAmC;AACvC,UAAM,QAAQ,MAAM,KAAK,eAAe;AAExC,QAAI,UAAU,OAAO;AACnB,aAAO,EAAE,MAAM,MAAM,OAAO,OAAU;AAAA,IACxC;AAEA,WAAO,EAAE,MAAM,OAAO,MAAM;AAAA,EAC9B;AAAA,EAEA,KAAK,OAAU;AACb,QAAI,CAAC,KAAK,SAAS;AACjB,WAAK,eAAe,QAAQ,KAAK;AACjC,WAAK,iBAAiB,cAAc;AAAA,IACtC;AAAA,EACF;AACF;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/SymbolObservable.ts"],"sourcesContent":["// @ts-expect-error core-js is not typed.\nimport CoreJSSymbolObservable from 'core-js-pure/features/symbol/observable';\n\nconst SymbolObservable: unique symbol = CoreJSSymbolObservable;\n\nexport { SymbolObservable };\n"],"mappings":";AACA,OAAO,4BAA4B;AAEnC,IAAM,mBAAkC;","names":[]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import {
|
|
2
|
+
SymbolObservable
|
|
3
|
+
} from "./chunk-OJMT4K3R.mjs";
|
|
4
|
+
|
|
5
|
+
// src/Observable.ts
|
|
6
|
+
import CoreJSObservable from "core-js-pure/full/observable";
|
|
7
|
+
var Observable = class extends CoreJSObservable {
|
|
8
|
+
constructor(subscriber) {
|
|
9
|
+
super(subscriber);
|
|
10
|
+
}
|
|
11
|
+
subscribe(observerOrOnNext, onError, onComplete) {
|
|
12
|
+
return super.subscribe(observerOrOnNext, onError, onComplete);
|
|
13
|
+
}
|
|
14
|
+
/** Returns itself */
|
|
15
|
+
[SymbolObservable]() {
|
|
16
|
+
return this;
|
|
17
|
+
}
|
|
18
|
+
/** Converts items to an Observable */
|
|
19
|
+
static of(...items) {
|
|
20
|
+
return CoreJSObservable.of(...items);
|
|
21
|
+
}
|
|
22
|
+
static from(iterableOrObservable) {
|
|
23
|
+
return CoreJSObservable.from(iterableOrObservable);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export {
|
|
28
|
+
Observable
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=chunk-VLF6DI2U.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/Observable.ts"],"sourcesContent":["// @ts-expect-error core-js is not typed.\nimport CoreJSObservable from 'core-js-pure/full/observable';\n\nimport { SymbolObservable } from './SymbolObservable';\n\nexport interface SubscriptionObserver<T> {\n /** Sends the next value in the sequence */\n next(value: T): void;\n\n /** Sends the sequence error */\n error(errorValue: unknown): void;\n\n /** Sends the completion notification */\n complete(): void;\n\n /** A boolean value indicating whether the subscription is closed */\n get closed(): boolean;\n}\n\nexport interface Subscription {\n /** Cancels the subscription */\n unsubscribe(): void;\n\n /** A boolean value indicating whether the subscription is closed */\n get closed(): boolean;\n}\n\nexport type SubscriberFunction<T> = (observer: SubscriptionObserver<T>) => (() => void) | Subscription | void;\n\nexport type CompleteFunction = () => void;\nexport type ErrorFunction = (errorValue: unknown) => void;\nexport type NextFunction<T> = (value: T) => void;\nexport type StartFunction = (subscription: Subscription) => void;\n\nexport interface Observer<T> {\n /** Receives a completion notification */\n complete?(): void;\n\n /** Receives the sequence error */\n error?(errorValue: unknown): void;\n\n /** Receives the next value in the sequence */\n next?(value: T): void;\n\n /** Receives the subscription object when `subscribe` is called */\n start?(subscription: Subscription): void;\n}\n\nexport class Observable<T> extends CoreJSObservable {\n constructor(subscriber: SubscriberFunction<T>) {\n super(subscriber);\n }\n\n /** Subscribes to the sequence with an observer */\n subscribe(observer: Observer<T>): Subscription;\n\n /** Subscribes to the sequence with callbacks */\n subscribe(\n onNext: NextFunction<T>,\n onError?: ErrorFunction | undefined,\n onComplete?: CompleteFunction | undefined\n ): Subscription;\n\n subscribe(\n observerOrOnNext: Observer<T> | NextFunction<T>,\n onError?: ErrorFunction | undefined,\n onComplete?: CompleteFunction | undefined\n ): Subscription {\n return super.subscribe(observerOrOnNext, onError, onComplete);\n }\n\n /** Returns itself */\n [SymbolObservable](): Observable<T> {\n return this;\n }\n\n /** Converts items to an Observable */\n static of<T>(...items: T[]): Observable<T> {\n return CoreJSObservable.of(...items);\n }\n\n /** Converts an iterable to an Observable */\n static from<T>(iterable: Iterable<T>): Observable<T>;\n\n /** Converts an observable to an Observable */\n static from<T>(observable: Observable<T>): Observable<T>;\n\n static from<T>(iterableOrObservable: Iterable<T> | Observable<T>): Observable<T> {\n return CoreJSObservable.from(iterableOrObservable);\n }\n}\n"],"mappings":";;;;;AACA,OAAO,sBAAsB;AA+CtB,IAAM,aAAN,cAA4B,iBAAiB;AAAA,EAClD,YAAY,YAAmC;AAC7C,UAAM,UAAU;AAAA,EAClB;AAAA,EAYA,UACE,kBACA,SACA,YACc;AACd,WAAO,MAAM,UAAU,kBAAkB,SAAS,UAAU;AAAA,EAC9D;AAAA;AAAA,EAGA,CAAC,gBAAgB,IAAmB;AAClC,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,OAAO,MAAS,OAA2B;AACzC,WAAO,iBAAiB,GAAG,GAAG,KAAK;AAAA,EACrC;AAAA,EAQA,OAAO,KAAQ,sBAAkE;AAC/E,WAAO,iBAAiB,KAAK,oBAAoB;AAAA,EACnD;AACF;","names":[]}
|
package/dist/iter-fest.d.mts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
export { CompleteFunction, ErrorFunction, NextFunction, Observable, Observer, StartFunction, SubscriberFunction, Subscription, SubscriptionObserver } from './iter-fest.observable.mjs';
|
|
2
|
+
export { PushAsyncIterableIterator } from './iter-fest.pushAsyncIterableIterator.mjs';
|
|
3
|
+
export { SymbolObservable } from './iter-fest.symbolObservable.mjs';
|
|
1
4
|
export { iterableAt } from './iter-fest.iterableAt.mjs';
|
|
2
5
|
export { iterableConcat } from './iter-fest.iterableConcat.mjs';
|
|
3
6
|
export { iterableEntries } from './iter-fest.iterableEntries.mjs';
|
|
@@ -8,6 +11,7 @@ export { iterableFindIndex } from './iter-fest.iterableFindIndex.mjs';
|
|
|
8
11
|
export { iterableFindLast } from './iter-fest.iterableFindLast.mjs';
|
|
9
12
|
export { iterableFindLastIndex } from './iter-fest.iterableFindLastIndex.mjs';
|
|
10
13
|
export { iterableForEach } from './iter-fest.iterableForEach.mjs';
|
|
14
|
+
export { iterableGetReadable } from './iter-fest.iterableGetReadable.mjs';
|
|
11
15
|
export { iterableIncludes } from './iter-fest.iterableIncludes.mjs';
|
|
12
16
|
export { iterableIndexOf } from './iter-fest.iterableIndexOf.mjs';
|
|
13
17
|
export { iterableJoin } from './iter-fest.iterableJoin.mjs';
|
|
@@ -19,3 +23,7 @@ export { iterableSome } from './iter-fest.iterableSome.mjs';
|
|
|
19
23
|
export { iterableToSpliced } from './iter-fest.iterableToSpliced.mjs';
|
|
20
24
|
export { iterableToString } from './iter-fest.iterableToString.mjs';
|
|
21
25
|
export { iteratorToIterable } from './iter-fest.iteratorToIterable.mjs';
|
|
26
|
+
export { observableFromAsync } from './iter-fest.observableFromAsync.mjs';
|
|
27
|
+
export { observableSubscribeAsReadable } from './iter-fest.observableSubscribeAsReadable.mjs';
|
|
28
|
+
export { readerValues } from './iter-fest.readerValues.mjs';
|
|
29
|
+
import 'core-js-pure/full/observable';
|
package/dist/iter-fest.d.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
export { CompleteFunction, ErrorFunction, NextFunction, Observable, Observer, StartFunction, SubscriberFunction, Subscription, SubscriptionObserver } from './iter-fest.observable.js';
|
|
2
|
+
export { PushAsyncIterableIterator } from './iter-fest.pushAsyncIterableIterator.js';
|
|
3
|
+
export { SymbolObservable } from './iter-fest.symbolObservable.js';
|
|
1
4
|
export { iterableAt } from './iter-fest.iterableAt.js';
|
|
2
5
|
export { iterableConcat } from './iter-fest.iterableConcat.js';
|
|
3
6
|
export { iterableEntries } from './iter-fest.iterableEntries.js';
|
|
@@ -8,6 +11,7 @@ export { iterableFindIndex } from './iter-fest.iterableFindIndex.js';
|
|
|
8
11
|
export { iterableFindLast } from './iter-fest.iterableFindLast.js';
|
|
9
12
|
export { iterableFindLastIndex } from './iter-fest.iterableFindLastIndex.js';
|
|
10
13
|
export { iterableForEach } from './iter-fest.iterableForEach.js';
|
|
14
|
+
export { iterableGetReadable } from './iter-fest.iterableGetReadable.js';
|
|
11
15
|
export { iterableIncludes } from './iter-fest.iterableIncludes.js';
|
|
12
16
|
export { iterableIndexOf } from './iter-fest.iterableIndexOf.js';
|
|
13
17
|
export { iterableJoin } from './iter-fest.iterableJoin.js';
|
|
@@ -19,3 +23,7 @@ export { iterableSome } from './iter-fest.iterableSome.js';
|
|
|
19
23
|
export { iterableToSpliced } from './iter-fest.iterableToSpliced.js';
|
|
20
24
|
export { iterableToString } from './iter-fest.iterableToString.js';
|
|
21
25
|
export { iteratorToIterable } from './iter-fest.iteratorToIterable.js';
|
|
26
|
+
export { observableFromAsync } from './iter-fest.observableFromAsync.js';
|
|
27
|
+
export { observableSubscribeAsReadable } from './iter-fest.observableSubscribeAsReadable.js';
|
|
28
|
+
export { readerValues } from './iter-fest.readerValues.js';
|
|
29
|
+
import 'core-js-pure/full/observable';
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/iterableGetReadable.ts
|
|
21
|
+
var iterableGetReadable_exports = {};
|
|
22
|
+
__export(iterableGetReadable_exports, {
|
|
23
|
+
iterableGetReadable: () => iterableGetReadable
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(iterableGetReadable_exports);
|
|
26
|
+
function isIterable(iterable) {
|
|
27
|
+
return !!(iterable && typeof iterable === "object" && Symbol.iterator in iterable);
|
|
28
|
+
}
|
|
29
|
+
function iterableGetReadable(iterable) {
|
|
30
|
+
const iterator = isIterable(iterable) ? iterable[Symbol.iterator]() : iterable[Symbol.asyncIterator]();
|
|
31
|
+
return new ReadableStream({
|
|
32
|
+
async pull(controller) {
|
|
33
|
+
const result = await iterator.next();
|
|
34
|
+
if (result.done) {
|
|
35
|
+
controller.close();
|
|
36
|
+
} else {
|
|
37
|
+
controller.enqueue(result.value);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
43
|
+
0 && (module.exports = {
|
|
44
|
+
iterableGetReadable
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=iter-fest.iterableGetReadable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/iterableGetReadable.ts"],"sourcesContent":["function isIterable(iterable: unknown): iterable is Iterable<unknown> {\n return !!(iterable && typeof iterable === 'object' && Symbol.iterator in iterable);\n}\n\nexport function iterableGetReadable<T>(iterable: AsyncIterable<T> | Iterable<T>): ReadableStream<T> {\n const iterator = isIterable(iterable) ? iterable[Symbol.iterator]() : iterable[Symbol.asyncIterator]();\n\n return new ReadableStream({\n async pull(controller) {\n const result = await iterator.next();\n\n if (result.done) {\n controller.close();\n } else {\n controller.enqueue(result.value);\n }\n }\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAS,WAAW,UAAkD;AACpE,SAAO,CAAC,EAAE,YAAY,OAAO,aAAa,YAAY,OAAO,YAAY;AAC3E;AAEO,SAAS,oBAAuB,UAA6D;AAClG,QAAM,WAAW,WAAW,QAAQ,IAAI,SAAS,OAAO,QAAQ,EAAE,IAAI,SAAS,OAAO,aAAa,EAAE;AAErG,SAAO,IAAI,eAAe;AAAA,IACxB,MAAM,KAAK,YAAY;AACrB,YAAM,SAAS,MAAM,SAAS,KAAK;AAEnC,UAAI,OAAO,MAAM;AACf,mBAAW,MAAM;AAAA,MACnB,OAAO;AACL,mBAAW,QAAQ,OAAO,KAAK;AAAA,MACjC;AAAA,IACF;AAAA,EACF,CAAC;AACH;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|