asygen 0.2.30 → 0.3.1

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
@@ -10,9 +10,61 @@ Supports ESM and CommonJS modules.
10
10
  [![Coverage Status][codecov-image]][codecov-url]
11
11
  [![Maintainability][codeclimate-image]][codeclimate-url]
12
12
 
13
+ ## Installation
14
+
15
+ Npm installation
16
+
17
+ ```bash
18
+ npm install asygen
19
+ ```
20
+
21
+ Yarn installation
22
+
23
+ ```bash
24
+ yarn add asygen
25
+ ```
26
+
27
+ ## Utilities
28
+
29
+ #### Deferred
30
+
31
+ - Represents a deferred operation.
32
+ - Provides methods resolve and reject to control the wrapped promise.
33
+ - Exposes properties promise and status to get the underlying promise and its current status.
34
+
35
+ #### Queue
36
+
37
+ - A queue system for handling asynchronous tasks.
38
+ - Offers methods `push`, `pull`, and `done` to manage tasks.
39
+
40
+ #### Generatorify
41
+
42
+ - Convert a task into an asynchronous iterable.
43
+ - The iterable can be used in `for await...of` loops to process values as they're produced.
44
+
45
+ #### Combine
46
+
47
+ - Combine multiple asynchronous iterables into a single iterable.
48
+ - The resulting iterable will yield values from all input iterables and complete when all of them are done.
49
+
13
50
  ## Usage
14
51
 
15
- #### Create deferred token
52
+ #### Create deferred operation
53
+
54
+ ```typescript
55
+ import { defer, Status } from 'asygen';
56
+
57
+ const deferred = defer<number>();
58
+ console.log(deferred.status); // Status.PENDING
59
+
60
+ deferred.resolve(42);
61
+ deferred.promise.then((value) => {
62
+ console.log(value); // 42
63
+ console.log(deferred.status); // Status.RESOLVED
64
+ });
65
+ ```
66
+
67
+ #### Create a deferred operation from events
16
68
 
17
69
  ```typescript
18
70
  import { defer } from 'asygen';
@@ -28,7 +80,43 @@ await result.promise;
28
80
  console.log(result.status); // resolved or rejected
29
81
  ```
30
82
 
83
+ #### Task queue
84
+
85
+ ```typescript
86
+ import { createQueue } from 'asygen';
87
+
88
+ const queue = createQueue<number>();
89
+
90
+ queue.push(1);
91
+ queue.push(2);
92
+ queue.push(3);
93
+
94
+ queue.pull().promise.then((value) => console.log(value)); // 1
95
+ queue.pull().promise.then((value) => console.log(value)); // 2
96
+ ```
97
+
98
+ #### Generatorify
99
+
100
+ ```typescript
101
+ import { generatorify } from 'asygen';
102
+
103
+ const task = async (callback) => {
104
+ await callback('Hello');
105
+ await callback('World');
106
+ return 'Done!';
107
+ };
108
+
109
+ const iterable = generatorify(task);
110
+
111
+ (async () => {
112
+ for await (const value of iterable) {
113
+ console.log(value); // "Hello", then "World"
114
+ }
115
+ })();
116
+ ```
117
+
31
118
  #### Convert events to asyncGenerator
119
+
32
120
  ```typescript
33
121
  import { once } from 'node:events';
34
122
  import { generatorify, Task } from 'asygen';
@@ -44,11 +132,40 @@ for await (const data of generatorify(task)) {
44
132
  }
45
133
  ```
46
134
 
135
+ #### Combine tasks
136
+
137
+ ```typescript
138
+ import { generatorify, combine } from 'asygen';
139
+
140
+ const task1 = async (callback) => {
141
+ await callback('Task1 - Hello');
142
+ await callback('Task1 - World');
143
+ };
144
+
145
+ const task2 = async (callback) => {
146
+ await callback('Task2 - Foo');
147
+ await callback('Task2 - Bar');
148
+ };
149
+
150
+ const iterable1 = generatorify(task1);
151
+ const iterable2 = generatorify(task2);
152
+
153
+ const combined = combine(iterable1, iterable2);
154
+
155
+ (async () => {
156
+ for await (const value of combined) {
157
+ console.log(value); // Logs values from both task1 and task2
158
+ }
159
+ })();
160
+ ```
161
+
47
162
  #### Combine generators
163
+
48
164
  ```typescript
49
165
  import { combine } from 'asygen';
50
166
 
51
- const sleep = (timeout: number) => new Promise(resolve => setTimeout(resolve, timeout));
167
+ const sleep = (timeout: number) =>
168
+ new Promise((resolve) => setTimeout(resolve, timeout));
52
169
 
53
170
  async function* generate(timeout: number, count: number) {
54
171
  for (let index = 0; index < count; index++) {
@@ -70,7 +187,6 @@ for await (const data of combine(generate(100, 5), generate(500, 2))) {
70
187
  License [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0)
71
188
  Copyright (c) 2023-present Ivan Zakharchanka
72
189
 
73
-
74
190
  [npm-url]: https://www.npmjs.com/package/asygen
75
191
  [downloads-image]: https://img.shields.io/npm/dw/asygen.svg?maxAge=43200
76
192
  [npm-image]: https://img.shields.io/npm/v/asygen.svg?maxAge=43200
package/build/combine.cjs CHANGED
@@ -8,17 +8,17 @@ Object.defineProperty(exports, "combine", {
8
8
  return combine;
9
9
  }
10
10
  });
11
- const _deferredPollcjs = require("./deferredPoll.cjs");
11
+ const _queuecjs = require("./queue.cjs");
12
12
  const combine = (...iterables)=>{
13
- const poll = (0, _deferredPollcjs.createPoll)();
13
+ const queue = (0, _queuecjs.createQueue)();
14
14
  Promise.all(iterables.map(async (iterable)=>{
15
15
  for await (const value of iterable){
16
- await poll.push({
16
+ await queue.push({
17
17
  value,
18
18
  done: false
19
19
  }).promise;
20
20
  }
21
- })).then(async ()=>poll.done({
21
+ })).then(async ()=>queue.done({
22
22
  value: null,
23
23
  done: true
24
24
  }));
@@ -26,7 +26,7 @@ const combine = (...iterables)=>{
26
26
  [Symbol.asyncIterator] () {
27
27
  return {
28
28
  next () {
29
- return poll.pull().promise;
29
+ return queue.pull().promise;
30
30
  }
31
31
  };
32
32
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/combine.ts"],"sourcesContent":["import { createPoll } from './deferredPoll.js';\n\nexport const combine = <T, R = unknown>(...iterables: AsyncIterable<T>[]) => {\n const poll = createPoll<IteratorResult<T, R>>();\n\n Promise.all(\n iterables.map(async (iterable) => {\n for await (const value of iterable) {\n await poll.push({ value, done: false }).promise;\n }\n })\n ).then(async () => poll.done({ value: null, done: true }));\n\n return {\n [Symbol.asyncIterator]() {\n return {\n next() {\n return poll.pull().promise;\n },\n };\n },\n };\n};\n"],"names":["combine","iterables","poll","createPoll","Promise","all","map","iterable","value","push","done","promise","then","Symbol","asyncIterator","next","pull"],"mappings":";;;;+BAEaA;;;eAAAA;;;iCAFc;AAEpB,MAAMA,UAAU,CAAiB,GAAGC;IACzC,MAAMC,OAAOC,IAAAA,2BAAU;IAEvBC,QAAQC,GAAG,CACTJ,UAAUK,GAAG,CAAC,OAAOC;QACnB,WAAW,MAAMC,SAASD,SAAU;YAClC,MAAML,KAAKO,IAAI,CAAC;gBAAED;gBAAOE,MAAM;YAAM,GAAGC,OAAO;QACjD;IACF,IACAC,IAAI,CAAC,UAAYV,KAAKQ,IAAI,CAAC;YAAEF,OAAO;YAAME,MAAM;QAAK;IAEvD,OAAO;QACL,CAACG,OAAOC,aAAa,CAAC;YACpB,OAAO;gBACLC;oBACE,OAAOb,KAAKc,IAAI,GAAGL,OAAO;gBAC5B;YACF;QACF;IACF;AACF"}
1
+ {"version":3,"sources":["../src/combine.ts"],"sourcesContent":["import { createQueue } from './queue.js';\n\nexport const combine = <T, R = unknown>(...iterables: AsyncIterable<T>[]) => {\n const queue = createQueue<IteratorResult<T, R>>();\n\n Promise.all(\n iterables.map(async (iterable) => {\n for await (const value of iterable) {\n await queue.push({ value, done: false }).promise;\n }\n })\n ).then(async () => queue.done({ value: null, done: true }));\n\n return {\n [Symbol.asyncIterator]() {\n return {\n next() {\n return queue.pull().promise;\n },\n };\n },\n };\n};\n"],"names":["combine","iterables","queue","createQueue","Promise","all","map","iterable","value","push","done","promise","then","Symbol","asyncIterator","next","pull"],"mappings":";;;;+BAEaA;;;eAAAA;;;0BAFe;AAErB,MAAMA,UAAU,CAAiB,GAAGC;IACzC,MAAMC,QAAQC,IAAAA,qBAAW;IAEzBC,QAAQC,GAAG,CACTJ,UAAUK,GAAG,CAAC,OAAOC;QACnB,WAAW,MAAMC,SAASD,SAAU;YAClC,MAAML,MAAMO,IAAI,CAAC;gBAAED;gBAAOE,MAAM;YAAM,GAAGC,OAAO;QAClD;IACF,IACAC,IAAI,CAAC,UAAYV,MAAMQ,IAAI,CAAC;YAAEF,OAAO;YAAME,MAAM;QAAK;IAExD,OAAO;QACL,CAACG,OAAOC,aAAa,CAAC;YACpB,OAAO;gBACLC;oBACE,OAAOb,MAAMc,IAAI,GAAGL,OAAO;gBAC7B;YACF;QACF;IACF;AACF"}
package/build/combine.js CHANGED
@@ -1,14 +1,14 @@
1
- import { createPoll } from "./deferredPoll.js";
1
+ import { createQueue } from "./queue.js";
2
2
  export const combine = (...iterables)=>{
3
- const poll = createPoll();
3
+ const queue = createQueue();
4
4
  Promise.all(iterables.map(async (iterable)=>{
5
5
  for await (const value of iterable){
6
- await poll.push({
6
+ await queue.push({
7
7
  value,
8
8
  done: false
9
9
  }).promise;
10
10
  }
11
- })).then(async ()=>poll.done({
11
+ })).then(async ()=>queue.done({
12
12
  value: null,
13
13
  done: true
14
14
  }));
@@ -16,7 +16,7 @@ export const combine = (...iterables)=>{
16
16
  [Symbol.asyncIterator] () {
17
17
  return {
18
18
  next () {
19
- return poll.pull().promise;
19
+ return queue.pull().promise;
20
20
  }
21
21
  };
22
22
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/combine.ts"],"sourcesContent":["import { createPoll } from './deferredPoll.js';\n\nexport const combine = <T, R = unknown>(...iterables: AsyncIterable<T>[]) => {\n const poll = createPoll<IteratorResult<T, R>>();\n\n Promise.all(\n iterables.map(async (iterable) => {\n for await (const value of iterable) {\n await poll.push({ value, done: false }).promise;\n }\n })\n ).then(async () => poll.done({ value: null, done: true }));\n\n return {\n [Symbol.asyncIterator]() {\n return {\n next() {\n return poll.pull().promise;\n },\n };\n },\n };\n};\n"],"names":["createPoll","combine","iterables","poll","Promise","all","map","iterable","value","push","done","promise","then","Symbol","asyncIterator","next","pull"],"mappings":"AAAA,SAASA,UAAU,QAAQ,oBAAoB;AAE/C,OAAO,MAAMC,UAAU,CAAiB,GAAGC;IACzC,MAAMC,OAAOH;IAEbI,QAAQC,GAAG,CACTH,UAAUI,GAAG,CAAC,OAAOC;QACnB,WAAW,MAAMC,SAASD,SAAU;YAClC,MAAMJ,KAAKM,IAAI,CAAC;gBAAED;gBAAOE,MAAM;YAAM,GAAGC,OAAO;QACjD;IACF,IACAC,IAAI,CAAC,UAAYT,KAAKO,IAAI,CAAC;YAAEF,OAAO;YAAME,MAAM;QAAK;IAEvD,OAAO;QACL,CAACG,OAAOC,aAAa,CAAC;YACpB,OAAO;gBACLC;oBACE,OAAOZ,KAAKa,IAAI,GAAGL,OAAO;gBAC5B;YACF;QACF;IACF;AACF,EAAE"}
1
+ {"version":3,"sources":["../src/combine.ts"],"sourcesContent":["import { createQueue } from './queue.js';\n\nexport const combine = <T, R = unknown>(...iterables: AsyncIterable<T>[]) => {\n const queue = createQueue<IteratorResult<T, R>>();\n\n Promise.all(\n iterables.map(async (iterable) => {\n for await (const value of iterable) {\n await queue.push({ value, done: false }).promise;\n }\n })\n ).then(async () => queue.done({ value: null, done: true }));\n\n return {\n [Symbol.asyncIterator]() {\n return {\n next() {\n return queue.pull().promise;\n },\n };\n },\n };\n};\n"],"names":["createQueue","combine","iterables","queue","Promise","all","map","iterable","value","push","done","promise","then","Symbol","asyncIterator","next","pull"],"mappings":"AAAA,SAASA,WAAW,QAAQ,aAAa;AAEzC,OAAO,MAAMC,UAAU,CAAiB,GAAGC;IACzC,MAAMC,QAAQH;IAEdI,QAAQC,GAAG,CACTH,UAAUI,GAAG,CAAC,OAAOC;QACnB,WAAW,MAAMC,SAASD,SAAU;YAClC,MAAMJ,MAAMM,IAAI,CAAC;gBAAED;gBAAOE,MAAM;YAAM,GAAGC,OAAO;QAClD;IACF,IACAC,IAAI,CAAC,UAAYT,MAAMO,IAAI,CAAC;YAAEF,OAAO;YAAME,MAAM;QAAK;IAExD,OAAO;QACL,CAACG,OAAOC,aAAa,CAAC;YACpB,OAAO;gBACLC;oBACE,OAAOZ,MAAMa,IAAI,GAAGL,OAAO;gBAC7B;YACF;QACF;IACF;AACF,EAAE"}
package/build/defer.cjs CHANGED
@@ -46,14 +46,24 @@ class Deferred {
46
46
  _resolve;
47
47
  _reject;
48
48
  _status = Status.PENDING;
49
+ state;
49
50
  constructor(){
50
51
  this._promise = new Promise((resolve, reject)=>{
51
52
  this._resolve = resolve;
52
53
  this._reject = reject;
54
+ }).catch((error)=>{
55
+ this._status = Status.REJECTED;
56
+ throw error;
57
+ }).then((value)=>{
58
+ this._status = Status.RESOLVED;
59
+ return value;
53
60
  });
54
61
  this.resolve = this.resolve.bind(this);
55
62
  this.reject = this.reject.bind(this);
56
63
  }
64
+ get id() {
65
+ return this.txts;
66
+ }
57
67
  get [Symbol.toStringTag]() {
58
68
  return `Deferred ${this.txts} ${this._status}`;
59
69
  }
@@ -64,17 +74,11 @@ class Deferred {
64
74
  return this._status;
65
75
  }
66
76
  resolve(value) {
67
- if (this._status === Status.PENDING) {
68
- this._status = Status.RESOLVED;
69
- this._resolve(value);
70
- }
77
+ this._resolve(value);
71
78
  return this;
72
79
  }
73
80
  reject(error) {
74
- if (this._status === Status.PENDING) {
75
- this._status = Status.REJECTED;
76
- this._reject(error);
77
- }
81
+ this._reject(error);
78
82
  return this;
79
83
  }
80
84
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/defer.ts"],"sourcesContent":["export enum Status {\n PENDING = 'pending',\n RESOLVED = 'resolved',\n REJECTED = 'rejected',\n}\n\nconst counter: [number, number] = [0, 0];\nexport const getId = () => {\n const result = Date.now() * 100;\n if (counter[0] !== result) {\n counter[0] = result;\n counter[1] = 0;\n }\n return (counter[0] + counter[1]++).toString(16);\n};\n\nexport class Deferred<T = void, E = unknown> {\n private txts = getId();\n private _promise: Promise<T>;\n private _resolve?: (value: T) => void;\n private _reject?: (error: E) => void;\n private _status: Status = Status.PENDING;\n\n constructor() {\n this._promise = new Promise<T>((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n this.resolve = this.resolve.bind(this);\n this.reject = this.reject.bind(this);\n }\n\n get [Symbol.toStringTag]() {\n return `Deferred ${this.txts} ${this._status}`;\n }\n\n get promise() {\n return this._promise;\n }\n\n get status() {\n return this._status;\n }\n\n resolve(value: T) {\n if (this._status === Status.PENDING) {\n this._status = Status.RESOLVED;\n this._resolve(value);\n }\n\n return this;\n }\n\n reject(error: E) {\n if (this._status === Status.PENDING) {\n this._status = Status.REJECTED;\n this._reject(error);\n }\n return this;\n }\n}\n\nexport const defer = <T = void, E = unknown>() => {\n return new Deferred<T, E>();\n};\n"],"names":["getId","Deferred","defer","Status","PENDING","RESOLVED","REJECTED","counter","result","Date","now","toString","txts","_promise","_resolve","_reject","_status","constructor","Promise","resolve","reject","bind","Symbol","toStringTag","promise","status","value","error"],"mappings":";;;;;;;;;;;;;;IAOaA,KAAK;eAALA;;IASAC,QAAQ;eAARA;;IA8CAC,KAAK;eAALA;;;IA9DN;UAAKC,MAAM;IAANA,OACVC,aAAU;IADAD,OAEVE,cAAW;IAFDF,OAGVG,cAAW;GAHDH,WAAAA;AAMZ,MAAMI,UAA4B;IAAC;IAAG;CAAE;AACjC,MAAMP,QAAQ;IACnB,MAAMQ,SAASC,KAAKC,GAAG,KAAK;IAC5B,IAAIH,OAAO,CAAC,EAAE,KAAKC,QAAQ;QACzBD,OAAO,CAAC,EAAE,GAAGC;QACbD,OAAO,CAAC,EAAE,GAAG;IACf;IACA,OAAO,AAACA,CAAAA,OAAO,CAAC,EAAE,GAAGA,OAAO,CAAC,EAAE,EAAC,EAAGI,QAAQ,CAAC;AAC9C;AAEO,MAAMV;IACHW,OAAOZ,QAAQ;IACfa,SAAqB;IACrBC,SAA8B;IAC9BC,QAA6B;IAC7BC,UAAkBb,OAAOC,OAAO,CAAC;IAEzCa,aAAc;QACZ,IAAI,CAACJ,QAAQ,GAAG,IAAIK,QAAW,CAACC,SAASC;YACvC,IAAI,CAACN,QAAQ,GAAGK;YAChB,IAAI,CAACJ,OAAO,GAAGK;QACjB;QACA,IAAI,CAACD,OAAO,GAAG,IAAI,CAACA,OAAO,CAACE,IAAI,CAAC,IAAI;QACrC,IAAI,CAACD,MAAM,GAAG,IAAI,CAACA,MAAM,CAACC,IAAI,CAAC,IAAI;IACrC;IAEA,IAAI,CAACC,OAAOC,WAAW,CAAC,GAAG;QACzB,OAAO,CAAC,SAAS,EAAE,IAAI,CAACX,IAAI,CAAC,CAAC,EAAE,IAAI,CAACI,OAAO,CAAC,CAAC;IAChD;IAEA,IAAIQ,UAAU;QACZ,OAAO,IAAI,CAACX,QAAQ;IACtB;IAEA,IAAIY,SAAS;QACX,OAAO,IAAI,CAACT,OAAO;IACrB;IAEAG,QAAQO,KAAQ,EAAE;QAChB,IAAI,IAAI,CAACV,OAAO,KAAKb,OAAOC,OAAO,EAAE;YACnC,IAAI,CAACY,OAAO,GAAGb,OAAOE,QAAQ;YAC9B,IAAI,CAACS,QAAQ,CAACY;QAChB;QAEA,OAAO,IAAI;IACb;IAEAN,OAAOO,KAAQ,EAAE;QACf,IAAI,IAAI,CAACX,OAAO,KAAKb,OAAOC,OAAO,EAAE;YACnC,IAAI,CAACY,OAAO,GAAGb,OAAOG,QAAQ;YAC9B,IAAI,CAACS,OAAO,CAACY;QACf;QACA,OAAO,IAAI;IACb;AACF;AAEO,MAAMzB,QAAQ;IACnB,OAAO,IAAID;AACb"}
1
+ {"version":3,"sources":["../src/defer.ts"],"sourcesContent":["export enum Status {\n PENDING = 'pending',\n RESOLVED = 'resolved',\n REJECTED = 'rejected',\n}\n\nconst counter: [number, number] = [0, 0];\nexport const getId = () => {\n const result = Date.now() * 100;\n if (counter[0] !== result) {\n counter[0] = result;\n counter[1] = 0;\n }\n return (counter[0] + counter[1]++).toString(16);\n};\n\nexport class Deferred<T = void, S = unknown, E = unknown> {\n private txts = getId();\n private _promise: Promise<T>;\n private _resolve?: (value: T | PromiseLike<T>) => void;\n private _reject?: (error: E) => void;\n private _status: Status = Status.PENDING;\n\n public state: S;\n\n constructor() {\n this._promise = new Promise<T>((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n })\n .catch((error) => {\n this._status = Status.REJECTED;\n throw error;\n })\n .then((value) => {\n this._status = Status.RESOLVED;\n return value;\n });\n this.resolve = this.resolve.bind(this);\n this.reject = this.reject.bind(this);\n }\n\n get id() {\n return this.txts;\n }\n\n get [Symbol.toStringTag]() {\n return `Deferred ${this.txts} ${this._status}`;\n }\n\n get promise() {\n return this._promise;\n }\n\n get status() {\n return this._status;\n }\n\n resolve(value: T | PromiseLike<T>) {\n this._resolve(value);\n\n return this;\n }\n\n reject(error: E) {\n this._reject(error);\n\n return this;\n }\n}\n\nexport const defer = <T = void, E = unknown>() => {\n return new Deferred<T, E>();\n};\n"],"names":["getId","Deferred","defer","Status","PENDING","RESOLVED","REJECTED","counter","result","Date","now","toString","txts","_promise","_resolve","_reject","_status","state","constructor","Promise","resolve","reject","catch","error","then","value","bind","id","Symbol","toStringTag","promise","status"],"mappings":";;;;;;;;;;;;;;IAOaA,KAAK;eAALA;;IASAC,QAAQ;eAARA;;IAuDAC,KAAK;eAALA;;;IAvEN;UAAKC,MAAM;IAANA,OACVC,aAAU;IADAD,OAEVE,cAAW;IAFDF,OAGVG,cAAW;GAHDH,WAAAA;AAMZ,MAAMI,UAA4B;IAAC;IAAG;CAAE;AACjC,MAAMP,QAAQ;IACnB,MAAMQ,SAASC,KAAKC,GAAG,KAAK;IAC5B,IAAIH,OAAO,CAAC,EAAE,KAAKC,QAAQ;QACzBD,OAAO,CAAC,EAAE,GAAGC;QACbD,OAAO,CAAC,EAAE,GAAG;IACf;IACA,OAAO,AAACA,CAAAA,OAAO,CAAC,EAAE,GAAGA,OAAO,CAAC,EAAE,EAAC,EAAGI,QAAQ,CAAC;AAC9C;AAEO,MAAMV;IACHW,OAAOZ,QAAQ;IACfa,SAAqB;IACrBC,SAA+C;IAC/CC,QAA6B;IAC7BC,UAAkBb,OAAOC,OAAO,CAAC;IAElCa,MAAS;IAEhBC,aAAc;QACZ,IAAI,CAACL,QAAQ,GAAG,IAAIM,QAAW,CAACC,SAASC;YACvC,IAAI,CAACP,QAAQ,GAAGM;YAChB,IAAI,CAACL,OAAO,GAAGM;QACjB,GACGC,KAAK,CAAC,CAACC;YACN,IAAI,CAACP,OAAO,GAAGb,OAAOG,QAAQ;YAC9B,MAAMiB;QACR,GACCC,IAAI,CAAC,CAACC;YACL,IAAI,CAACT,OAAO,GAAGb,OAAOE,QAAQ;YAC9B,OAAOoB;QACT;QACF,IAAI,CAACL,OAAO,GAAG,IAAI,CAACA,OAAO,CAACM,IAAI,CAAC,IAAI;QACrC,IAAI,CAACL,MAAM,GAAG,IAAI,CAACA,MAAM,CAACK,IAAI,CAAC,IAAI;IACrC;IAEA,IAAIC,KAAK;QACP,OAAO,IAAI,CAACf,IAAI;IAClB;IAEA,IAAI,CAACgB,OAAOC,WAAW,CAAC,GAAG;QACzB,OAAO,CAAC,SAAS,EAAE,IAAI,CAACjB,IAAI,CAAC,CAAC,EAAE,IAAI,CAACI,OAAO,CAAC,CAAC;IAChD;IAEA,IAAIc,UAAU;QACZ,OAAO,IAAI,CAACjB,QAAQ;IACtB;IAEA,IAAIkB,SAAS;QACX,OAAO,IAAI,CAACf,OAAO;IACrB;IAEAI,QAAQK,KAAyB,EAAE;QACjC,IAAI,CAACX,QAAQ,CAACW;QAEd,OAAO,IAAI;IACb;IAEAJ,OAAOE,KAAQ,EAAE;QACf,IAAI,CAACR,OAAO,CAACQ;QAEb,OAAO,IAAI;IACb;AACF;AAEO,MAAMrB,QAAQ;IACnB,OAAO,IAAID;AACb"}
package/build/defer.d.ts CHANGED
@@ -4,17 +4,19 @@ export declare enum Status {
4
4
  REJECTED = "rejected"
5
5
  }
6
6
  export declare const getId: () => string;
7
- export declare class Deferred<T = void, E = unknown> {
7
+ export declare class Deferred<T = void, S = unknown, E = unknown> {
8
8
  private txts;
9
9
  private _promise;
10
10
  private _resolve?;
11
11
  private _reject?;
12
12
  private _status;
13
+ state: S;
13
14
  constructor();
15
+ get id(): string;
14
16
  get [Symbol.toStringTag](): string;
15
17
  get promise(): Promise<T>;
16
18
  get status(): Status;
17
- resolve(value: T): this;
19
+ resolve(value: T | PromiseLike<T>): this;
18
20
  reject(error: E): this;
19
21
  }
20
- export declare const defer: <T = void, E = unknown>() => Deferred<T, E>;
22
+ export declare const defer: <T = void, E = unknown>() => Deferred<T, E, unknown>;
package/build/defer.js CHANGED
@@ -22,14 +22,24 @@ export class Deferred {
22
22
  _resolve;
23
23
  _reject;
24
24
  _status = Status.PENDING;
25
+ state;
25
26
  constructor(){
26
27
  this._promise = new Promise((resolve, reject)=>{
27
28
  this._resolve = resolve;
28
29
  this._reject = reject;
30
+ }).catch((error)=>{
31
+ this._status = Status.REJECTED;
32
+ throw error;
33
+ }).then((value)=>{
34
+ this._status = Status.RESOLVED;
35
+ return value;
29
36
  });
30
37
  this.resolve = this.resolve.bind(this);
31
38
  this.reject = this.reject.bind(this);
32
39
  }
40
+ get id() {
41
+ return this.txts;
42
+ }
33
43
  get [Symbol.toStringTag]() {
34
44
  return `Deferred ${this.txts} ${this._status}`;
35
45
  }
@@ -40,17 +50,11 @@ export class Deferred {
40
50
  return this._status;
41
51
  }
42
52
  resolve(value) {
43
- if (this._status === Status.PENDING) {
44
- this._status = Status.RESOLVED;
45
- this._resolve(value);
46
- }
53
+ this._resolve(value);
47
54
  return this;
48
55
  }
49
56
  reject(error) {
50
- if (this._status === Status.PENDING) {
51
- this._status = Status.REJECTED;
52
- this._reject(error);
53
- }
57
+ this._reject(error);
54
58
  return this;
55
59
  }
56
60
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/defer.ts"],"sourcesContent":["export enum Status {\n PENDING = 'pending',\n RESOLVED = 'resolved',\n REJECTED = 'rejected',\n}\n\nconst counter: [number, number] = [0, 0];\nexport const getId = () => {\n const result = Date.now() * 100;\n if (counter[0] !== result) {\n counter[0] = result;\n counter[1] = 0;\n }\n return (counter[0] + counter[1]++).toString(16);\n};\n\nexport class Deferred<T = void, E = unknown> {\n private txts = getId();\n private _promise: Promise<T>;\n private _resolve?: (value: T) => void;\n private _reject?: (error: E) => void;\n private _status: Status = Status.PENDING;\n\n constructor() {\n this._promise = new Promise<T>((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n this.resolve = this.resolve.bind(this);\n this.reject = this.reject.bind(this);\n }\n\n get [Symbol.toStringTag]() {\n return `Deferred ${this.txts} ${this._status}`;\n }\n\n get promise() {\n return this._promise;\n }\n\n get status() {\n return this._status;\n }\n\n resolve(value: T) {\n if (this._status === Status.PENDING) {\n this._status = Status.RESOLVED;\n this._resolve(value);\n }\n\n return this;\n }\n\n reject(error: E) {\n if (this._status === Status.PENDING) {\n this._status = Status.REJECTED;\n this._reject(error);\n }\n return this;\n }\n}\n\nexport const defer = <T = void, E = unknown>() => {\n return new Deferred<T, E>();\n};\n"],"names":["Status","PENDING","RESOLVED","REJECTED","counter","getId","result","Date","now","toString","Deferred","txts","_promise","_resolve","_reject","_status","constructor","Promise","resolve","reject","bind","Symbol","toStringTag","promise","status","value","error","defer"],"mappings":"WAAO;UAAKA,MAAM;IAANA,OACVC,aAAU;IADAD,OAEVE,cAAW;IAFDF,OAGVG,cAAW;GAHDH,WAAAA;AAMZ,MAAMI,UAA4B;IAAC;IAAG;CAAE;AACxC,OAAO,MAAMC,QAAQ;IACnB,MAAMC,SAASC,KAAKC,GAAG,KAAK;IAC5B,IAAIJ,OAAO,CAAC,EAAE,KAAKE,QAAQ;QACzBF,OAAO,CAAC,EAAE,GAAGE;QACbF,OAAO,CAAC,EAAE,GAAG;IACf;IACA,OAAO,AAACA,CAAAA,OAAO,CAAC,EAAE,GAAGA,OAAO,CAAC,EAAE,EAAC,EAAGK,QAAQ,CAAC;AAC9C,EAAE;AAEF,OAAO,MAAMC;IACHC,OAAON,QAAQ;IACfO,SAAqB;IACrBC,SAA8B;IAC9BC,QAA6B;IAC7BC,UAAkBf,OAAOC,OAAO,CAAC;IAEzCe,aAAc;QACZ,IAAI,CAACJ,QAAQ,GAAG,IAAIK,QAAW,CAACC,SAASC;YACvC,IAAI,CAACN,QAAQ,GAAGK;YAChB,IAAI,CAACJ,OAAO,GAAGK;QACjB;QACA,IAAI,CAACD,OAAO,GAAG,IAAI,CAACA,OAAO,CAACE,IAAI,CAAC,IAAI;QACrC,IAAI,CAACD,MAAM,GAAG,IAAI,CAACA,MAAM,CAACC,IAAI,CAAC,IAAI;IACrC;IAEA,IAAI,CAACC,OAAOC,WAAW,CAAC,GAAG;QACzB,OAAO,CAAC,SAAS,EAAE,IAAI,CAACX,IAAI,CAAC,CAAC,EAAE,IAAI,CAACI,OAAO,CAAC,CAAC;IAChD;IAEA,IAAIQ,UAAU;QACZ,OAAO,IAAI,CAACX,QAAQ;IACtB;IAEA,IAAIY,SAAS;QACX,OAAO,IAAI,CAACT,OAAO;IACrB;IAEAG,QAAQO,KAAQ,EAAE;QAChB,IAAI,IAAI,CAACV,OAAO,KAAKf,OAAOC,OAAO,EAAE;YACnC,IAAI,CAACc,OAAO,GAAGf,OAAOE,QAAQ;YAC9B,IAAI,CAACW,QAAQ,CAACY;QAChB;QAEA,OAAO,IAAI;IACb;IAEAN,OAAOO,KAAQ,EAAE;QACf,IAAI,IAAI,CAACX,OAAO,KAAKf,OAAOC,OAAO,EAAE;YACnC,IAAI,CAACc,OAAO,GAAGf,OAAOG,QAAQ;YAC9B,IAAI,CAACW,OAAO,CAACY;QACf;QACA,OAAO,IAAI;IACb;AACF;AAEA,OAAO,MAAMC,QAAQ;IACnB,OAAO,IAAIjB;AACb,EAAE"}
1
+ {"version":3,"sources":["../src/defer.ts"],"sourcesContent":["export enum Status {\n PENDING = 'pending',\n RESOLVED = 'resolved',\n REJECTED = 'rejected',\n}\n\nconst counter: [number, number] = [0, 0];\nexport const getId = () => {\n const result = Date.now() * 100;\n if (counter[0] !== result) {\n counter[0] = result;\n counter[1] = 0;\n }\n return (counter[0] + counter[1]++).toString(16);\n};\n\nexport class Deferred<T = void, S = unknown, E = unknown> {\n private txts = getId();\n private _promise: Promise<T>;\n private _resolve?: (value: T | PromiseLike<T>) => void;\n private _reject?: (error: E) => void;\n private _status: Status = Status.PENDING;\n\n public state: S;\n\n constructor() {\n this._promise = new Promise<T>((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n })\n .catch((error) => {\n this._status = Status.REJECTED;\n throw error;\n })\n .then((value) => {\n this._status = Status.RESOLVED;\n return value;\n });\n this.resolve = this.resolve.bind(this);\n this.reject = this.reject.bind(this);\n }\n\n get id() {\n return this.txts;\n }\n\n get [Symbol.toStringTag]() {\n return `Deferred ${this.txts} ${this._status}`;\n }\n\n get promise() {\n return this._promise;\n }\n\n get status() {\n return this._status;\n }\n\n resolve(value: T | PromiseLike<T>) {\n this._resolve(value);\n\n return this;\n }\n\n reject(error: E) {\n this._reject(error);\n\n return this;\n }\n}\n\nexport const defer = <T = void, E = unknown>() => {\n return new Deferred<T, E>();\n};\n"],"names":["Status","PENDING","RESOLVED","REJECTED","counter","getId","result","Date","now","toString","Deferred","txts","_promise","_resolve","_reject","_status","state","constructor","Promise","resolve","reject","catch","error","then","value","bind","id","Symbol","toStringTag","promise","status","defer"],"mappings":"WAAO;UAAKA,MAAM;IAANA,OACVC,aAAU;IADAD,OAEVE,cAAW;IAFDF,OAGVG,cAAW;GAHDH,WAAAA;AAMZ,MAAMI,UAA4B;IAAC;IAAG;CAAE;AACxC,OAAO,MAAMC,QAAQ;IACnB,MAAMC,SAASC,KAAKC,GAAG,KAAK;IAC5B,IAAIJ,OAAO,CAAC,EAAE,KAAKE,QAAQ;QACzBF,OAAO,CAAC,EAAE,GAAGE;QACbF,OAAO,CAAC,EAAE,GAAG;IACf;IACA,OAAO,AAACA,CAAAA,OAAO,CAAC,EAAE,GAAGA,OAAO,CAAC,EAAE,EAAC,EAAGK,QAAQ,CAAC;AAC9C,EAAE;AAEF,OAAO,MAAMC;IACHC,OAAON,QAAQ;IACfO,SAAqB;IACrBC,SAA+C;IAC/CC,QAA6B;IAC7BC,UAAkBf,OAAOC,OAAO,CAAC;IAElCe,MAAS;IAEhBC,aAAc;QACZ,IAAI,CAACL,QAAQ,GAAG,IAAIM,QAAW,CAACC,SAASC;YACvC,IAAI,CAACP,QAAQ,GAAGM;YAChB,IAAI,CAACL,OAAO,GAAGM;QACjB,GACGC,KAAK,CAAC,CAACC;YACN,IAAI,CAACP,OAAO,GAAGf,OAAOG,QAAQ;YAC9B,MAAMmB;QACR,GACCC,IAAI,CAAC,CAACC;YACL,IAAI,CAACT,OAAO,GAAGf,OAAOE,QAAQ;YAC9B,OAAOsB;QACT;QACF,IAAI,CAACL,OAAO,GAAG,IAAI,CAACA,OAAO,CAACM,IAAI,CAAC,IAAI;QACrC,IAAI,CAACL,MAAM,GAAG,IAAI,CAACA,MAAM,CAACK,IAAI,CAAC,IAAI;IACrC;IAEA,IAAIC,KAAK;QACP,OAAO,IAAI,CAACf,IAAI;IAClB;IAEA,IAAI,CAACgB,OAAOC,WAAW,CAAC,GAAG;QACzB,OAAO,CAAC,SAAS,EAAE,IAAI,CAACjB,IAAI,CAAC,CAAC,EAAE,IAAI,CAACI,OAAO,CAAC,CAAC;IAChD;IAEA,IAAIc,UAAU;QACZ,OAAO,IAAI,CAACjB,QAAQ;IACtB;IAEA,IAAIkB,SAAS;QACX,OAAO,IAAI,CAACf,OAAO;IACrB;IAEAI,QAAQK,KAAyB,EAAE;QACjC,IAAI,CAACX,QAAQ,CAACW;QAEd,OAAO,IAAI;IACb;IAEAJ,OAAOE,KAAQ,EAAE;QACf,IAAI,CAACR,OAAO,CAACQ;QAEb,OAAO,IAAI;IACb;AACF;AAEA,OAAO,MAAMS,QAAQ;IACnB,OAAO,IAAIrB;AACb,EAAE"}
@@ -8,15 +8,15 @@ Object.defineProperty(exports, "generatorify", {
8
8
  return generatorify;
9
9
  }
10
10
  });
11
- const _deferredPollcjs = require("./deferredPoll.cjs");
11
+ const _queuecjs = require("./queue.cjs");
12
12
  const generatorify = (task)=>{
13
- const poll = (0, _deferredPollcjs.createPoll)();
13
+ const queue = (0, _queuecjs.createQueue)();
14
14
  Promise.resolve(task(async (value)=>{
15
- await poll.push({
15
+ await queue.push({
16
16
  value,
17
17
  done: false
18
18
  }).promise;
19
- })).then(async (value)=>poll.done({
19
+ })).then(async (value)=>queue.done({
20
20
  value,
21
21
  done: true
22
22
  }));
@@ -24,7 +24,7 @@ const generatorify = (task)=>{
24
24
  [Symbol.asyncIterator] () {
25
25
  return {
26
26
  next () {
27
- return poll.pull().promise;
27
+ return queue.pull().promise;
28
28
  }
29
29
  };
30
30
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/generatorify.ts"],"sourcesContent":["import { createPoll } from './deferredPoll.js';\n\nexport interface TaskCallback<T> {\n (value: T): Promise<void>;\n}\n\nexport interface Task<T, R = unknown> {\n (callback: TaskCallback<T>): R;\n}\n\nexport const generatorify = <T, R>(task: Task<T, R>): AsyncIterable<T> => {\n const poll = createPoll<IteratorResult<T, R>>();\n\n Promise.resolve(\n task(async (value) => {\n await poll.push({ value, done: false }).promise;\n })\n ).then(async (value) => poll.done({ value, done: true }));\n\n return {\n [Symbol.asyncIterator]() {\n return {\n next() {\n return poll.pull().promise;\n },\n };\n },\n };\n};\n"],"names":["generatorify","task","poll","createPoll","Promise","resolve","value","push","done","promise","then","Symbol","asyncIterator","next","pull"],"mappings":";;;;+BAUaA;;;eAAAA;;;iCAVc;AAUpB,MAAMA,eAAe,CAAOC;IACjC,MAAMC,OAAOC,IAAAA,2BAAU;IAEvBC,QAAQC,OAAO,CACbJ,KAAK,OAAOK;QACV,MAAMJ,KAAKK,IAAI,CAAC;YAAED;YAAOE,MAAM;QAAM,GAAGC,OAAO;IACjD,IACAC,IAAI,CAAC,OAAOJ,QAAUJ,KAAKM,IAAI,CAAC;YAAEF;YAAOE,MAAM;QAAK;IAEtD,OAAO;QACL,CAACG,OAAOC,aAAa,CAAC;YACpB,OAAO;gBACLC;oBACE,OAAOX,KAAKY,IAAI,GAAGL,OAAO;gBAC5B;YACF;QACF;IACF;AACF"}
1
+ {"version":3,"sources":["../src/generatorify.ts"],"sourcesContent":["import { createQueue } from './queue.js';\n\nexport interface TaskCallback<T> {\n (value: T): Promise<void>;\n}\n\nexport interface Task<T, R = unknown> {\n (callback: TaskCallback<T>): R;\n}\n\nexport const generatorify = <T, R>(task: Task<T, R>): AsyncIterable<T> => {\n const queue = createQueue<IteratorResult<T, R>>();\n\n Promise.resolve(\n task(async (value) => {\n await queue.push({ value, done: false }).promise;\n })\n ).then(async (value) => queue.done({ value, done: true }));\n\n return {\n [Symbol.asyncIterator]() {\n return {\n next() {\n return queue.pull().promise;\n },\n };\n },\n };\n};\n"],"names":["generatorify","task","queue","createQueue","Promise","resolve","value","push","done","promise","then","Symbol","asyncIterator","next","pull"],"mappings":";;;;+BAUaA;;;eAAAA;;;0BAVe;AAUrB,MAAMA,eAAe,CAAOC;IACjC,MAAMC,QAAQC,IAAAA,qBAAW;IAEzBC,QAAQC,OAAO,CACbJ,KAAK,OAAOK;QACV,MAAMJ,MAAMK,IAAI,CAAC;YAAED;YAAOE,MAAM;QAAM,GAAGC,OAAO;IAClD,IACAC,IAAI,CAAC,OAAOJ,QAAUJ,MAAMM,IAAI,CAAC;YAAEF;YAAOE,MAAM;QAAK;IAEvD,OAAO;QACL,CAACG,OAAOC,aAAa,CAAC;YACpB,OAAO;gBACLC;oBACE,OAAOX,MAAMY,IAAI,GAAGL,OAAO;gBAC7B;YACF;QACF;IACF;AACF"}
@@ -1,12 +1,12 @@
1
- import { createPoll } from "./deferredPoll.js";
1
+ import { createQueue } from "./queue.js";
2
2
  export const generatorify = (task)=>{
3
- const poll = createPoll();
3
+ const queue = createQueue();
4
4
  Promise.resolve(task(async (value)=>{
5
- await poll.push({
5
+ await queue.push({
6
6
  value,
7
7
  done: false
8
8
  }).promise;
9
- })).then(async (value)=>poll.done({
9
+ })).then(async (value)=>queue.done({
10
10
  value,
11
11
  done: true
12
12
  }));
@@ -14,7 +14,7 @@ export const generatorify = (task)=>{
14
14
  [Symbol.asyncIterator] () {
15
15
  return {
16
16
  next () {
17
- return poll.pull().promise;
17
+ return queue.pull().promise;
18
18
  }
19
19
  };
20
20
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/generatorify.ts"],"sourcesContent":["import { createPoll } from './deferredPoll.js';\n\nexport interface TaskCallback<T> {\n (value: T): Promise<void>;\n}\n\nexport interface Task<T, R = unknown> {\n (callback: TaskCallback<T>): R;\n}\n\nexport const generatorify = <T, R>(task: Task<T, R>): AsyncIterable<T> => {\n const poll = createPoll<IteratorResult<T, R>>();\n\n Promise.resolve(\n task(async (value) => {\n await poll.push({ value, done: false }).promise;\n })\n ).then(async (value) => poll.done({ value, done: true }));\n\n return {\n [Symbol.asyncIterator]() {\n return {\n next() {\n return poll.pull().promise;\n },\n };\n },\n };\n};\n"],"names":["createPoll","generatorify","task","poll","Promise","resolve","value","push","done","promise","then","Symbol","asyncIterator","next","pull"],"mappings":"AAAA,SAASA,UAAU,QAAQ,oBAAoB;AAU/C,OAAO,MAAMC,eAAe,CAAOC;IACjC,MAAMC,OAAOH;IAEbI,QAAQC,OAAO,CACbH,KAAK,OAAOI;QACV,MAAMH,KAAKI,IAAI,CAAC;YAAED;YAAOE,MAAM;QAAM,GAAGC,OAAO;IACjD,IACAC,IAAI,CAAC,OAAOJ,QAAUH,KAAKK,IAAI,CAAC;YAAEF;YAAOE,MAAM;QAAK;IAEtD,OAAO;QACL,CAACG,OAAOC,aAAa,CAAC;YACpB,OAAO;gBACLC;oBACE,OAAOV,KAAKW,IAAI,GAAGL,OAAO;gBAC5B;YACF;QACF;IACF;AACF,EAAE"}
1
+ {"version":3,"sources":["../src/generatorify.ts"],"sourcesContent":["import { createQueue } from './queue.js';\n\nexport interface TaskCallback<T> {\n (value: T): Promise<void>;\n}\n\nexport interface Task<T, R = unknown> {\n (callback: TaskCallback<T>): R;\n}\n\nexport const generatorify = <T, R>(task: Task<T, R>): AsyncIterable<T> => {\n const queue = createQueue<IteratorResult<T, R>>();\n\n Promise.resolve(\n task(async (value) => {\n await queue.push({ value, done: false }).promise;\n })\n ).then(async (value) => queue.done({ value, done: true }));\n\n return {\n [Symbol.asyncIterator]() {\n return {\n next() {\n return queue.pull().promise;\n },\n };\n },\n };\n};\n"],"names":["createQueue","generatorify","task","queue","Promise","resolve","value","push","done","promise","then","Symbol","asyncIterator","next","pull"],"mappings":"AAAA,SAASA,WAAW,QAAQ,aAAa;AAUzC,OAAO,MAAMC,eAAe,CAAOC;IACjC,MAAMC,QAAQH;IAEdI,QAAQC,OAAO,CACbH,KAAK,OAAOI;QACV,MAAMH,MAAMI,IAAI,CAAC;YAAED;YAAOE,MAAM;QAAM,GAAGC,OAAO;IAClD,IACAC,IAAI,CAAC,OAAOJ,QAAUH,MAAMK,IAAI,CAAC;YAAEF;YAAOE,MAAM;QAAK;IAEvD,OAAO;QACL,CAACG,OAAOC,aAAa,CAAC;YACpB,OAAO;gBACLC;oBACE,OAAOV,MAAMW,IAAI,GAAGL,OAAO;gBAC7B;YACF;QACF;IACF;AACF,EAAE"}
package/build/index.cjs CHANGED
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  });
5
5
  _export_star(require("./defer.cjs"), exports);
6
6
  _export_star(require("./generatorify.cjs"), exports);
7
- _export_star(require("./deferredPoll.cjs"), exports);
7
+ _export_star(require("./queue.cjs"), exports);
8
8
  _export_star(require("./combine.cjs"), exports);
9
9
  function _export_star(from, to) {
10
10
  Object.keys(from).forEach(function(k) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from './defer.js';\nexport * from './generatorify.js';\nexport * from './deferredPoll.js';\nexport * from './combine.js';\n"],"names":[],"mappings":";;;;qBAAc;qBACA;qBACA;qBACA"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from './defer.js';\nexport * from './generatorify.js';\nexport * from './queue.js';\nexport * from './combine.js';\n"],"names":[],"mappings":";;;;qBAAc;qBACA;qBACA;qBACA"}
package/build/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  export * from './defer.js';
2
2
  export * from './generatorify.js';
3
- export * from './deferredPoll.js';
3
+ export * from './queue.js';
4
4
  export * from './combine.js';
package/build/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export * from "./defer.js";
2
2
  export * from "./generatorify.js";
3
- export * from "./deferredPoll.js";
3
+ export * from "./queue.js";
4
4
  export * from "./combine.js";
5
5
 
6
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from './defer.js';\nexport * from './generatorify.js';\nexport * from './deferredPoll.js';\nexport * from './combine.js';\n"],"names":[],"mappings":"AAAA,cAAc,aAAa;AAC3B,cAAc,oBAAoB;AAClC,cAAc,oBAAoB;AAClC,cAAc,eAAe"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from './defer.js';\nexport * from './generatorify.js';\nexport * from './queue.js';\nexport * from './combine.js';\n"],"names":[],"mappings":"AAAA,cAAc,aAAa;AAC3B,cAAc,oBAAoB;AAClC,cAAc,aAAa;AAC3B,cAAc,eAAe"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "createQueue", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return createQueue;
9
+ }
10
+ });
11
+ const _defercjs = require("./defer.cjs");
12
+ const createQueue = ()=>{
13
+ const pendingQueue = [];
14
+ const resolvedQueue = [];
15
+ const requestQueue = [];
16
+ const push = (value)=>{
17
+ const task = (0, _defercjs.defer)();
18
+ pendingQueue.push(task);
19
+ Promise.resolve(value).then(task.resolve).catch(task.reject).finally(()=>{
20
+ pendingQueue.splice(pendingQueue.indexOf(task), 1);
21
+ if (requestQueue.length > 0) {
22
+ const request = requestQueue.shift();
23
+ request.resolve(task.promise);
24
+ } else {
25
+ resolvedQueue.push(task);
26
+ }
27
+ });
28
+ return task;
29
+ };
30
+ const pull = ()=>{
31
+ if (resolvedQueue.length > 0) {
32
+ return resolvedQueue.shift();
33
+ }
34
+ const task = (0, _defercjs.defer)();
35
+ requestQueue.push(task);
36
+ return task;
37
+ };
38
+ return {
39
+ push,
40
+ pull,
41
+ done (value) {
42
+ push(value);
43
+ return Promise.all([
44
+ ...pendingQueue,
45
+ ...resolvedQueue,
46
+ ...requestQueue
47
+ ].map((d)=>d.promise));
48
+ },
49
+ get size () {
50
+ return pendingQueue.length + resolvedQueue.length + requestQueue.length;
51
+ }
52
+ };
53
+ };
54
+
55
+ //# sourceMappingURL=queue.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/queue.ts"],"sourcesContent":["import { defer, Deferred, Status } from './defer.js';\n\nexport const createQueue = <T, E = Error>() => {\n const pendingQueue: Deferred<T, E>[] = [];\n const resolvedQueue: Deferred<T, E>[] = [];\n const requestQueue: Deferred<T, E>[] = [];\n\n const push = (value: T): Deferred<T, E> => {\n const task = defer<T, E>();\n pendingQueue.push(task);\n\n Promise.resolve(value)\n .then(task.resolve)\n .catch(task.reject)\n .finally(() => {\n pendingQueue.splice(pendingQueue.indexOf(task), 1);\n if (requestQueue.length > 0) {\n const request = requestQueue.shift();\n request.resolve(task.promise);\n } else {\n resolvedQueue.push(task);\n }\n });\n\n return task;\n };\n\n const pull = (): Deferred<T, E> => {\n if (resolvedQueue.length > 0) {\n return resolvedQueue.shift();\n }\n const task = defer<T, E>();\n requestQueue.push(task);\n\n return task;\n };\n\n return {\n push,\n pull,\n done(value: T) {\n push(value);\n return Promise.all(\n [...pendingQueue, ...resolvedQueue, ...requestQueue].map(\n (d) => d.promise\n )\n );\n },\n get size() {\n return pendingQueue.length + resolvedQueue.length + requestQueue.length;\n },\n };\n};\n"],"names":["createQueue","pendingQueue","resolvedQueue","requestQueue","push","value","task","defer","Promise","resolve","then","catch","reject","finally","splice","indexOf","length","request","shift","promise","pull","done","all","map","d","size"],"mappings":";;;;+BAEaA;;;eAAAA;;;0BAF2B;AAEjC,MAAMA,cAAc;IACzB,MAAMC,eAAiC,EAAE;IACzC,MAAMC,gBAAkC,EAAE;IAC1C,MAAMC,eAAiC,EAAE;IAEzC,MAAMC,OAAO,CAACC;QACZ,MAAMC,OAAOC,IAAAA,eAAK;QAClBN,aAAaG,IAAI,CAACE;QAElBE,QAAQC,OAAO,CAACJ,OACbK,IAAI,CAACJ,KAAKG,OAAO,EACjBE,KAAK,CAACL,KAAKM,MAAM,EACjBC,OAAO,CAAC;YACPZ,aAAaa,MAAM,CAACb,aAAac,OAAO,CAACT,OAAO;YAChD,IAAIH,aAAaa,MAAM,GAAG,GAAG;gBAC3B,MAAMC,UAAUd,aAAae,KAAK;gBAClCD,QAAQR,OAAO,CAACH,KAAKa,OAAO;YAC9B,OAAO;gBACLjB,cAAcE,IAAI,CAACE;YACrB;QACF;QAEF,OAAOA;IACT;IAEA,MAAMc,OAAO;QACX,IAAIlB,cAAcc,MAAM,GAAG,GAAG;YAC5B,OAAOd,cAAcgB,KAAK;QAC5B;QACA,MAAMZ,OAAOC,IAAAA,eAAK;QAClBJ,aAAaC,IAAI,CAACE;QAElB,OAAOA;IACT;IAEA,OAAO;QACLF;QACAgB;QACAC,MAAKhB,KAAQ;YACXD,KAAKC;YACL,OAAOG,QAAQc,GAAG,CAChB;mBAAIrB;mBAAiBC;mBAAkBC;aAAa,CAACoB,GAAG,CACtD,CAACC,IAAMA,EAAEL,OAAO;QAGtB;QACA,IAAIM,QAAO;YACT,OAAOxB,aAAae,MAAM,GAAGd,cAAcc,MAAM,GAAGb,aAAaa,MAAM;QACzE;IACF;AACF"}
@@ -0,0 +1,7 @@
1
+ import { Deferred } from './defer.js';
2
+ export declare const createQueue: <T, E = Error>() => {
3
+ push: (value: T) => Deferred<T, E, unknown>;
4
+ pull: () => Deferred<T, E, unknown>;
5
+ done(value: T): Promise<Awaited<T>[]>;
6
+ readonly size: number;
7
+ };
package/build/queue.js ADDED
@@ -0,0 +1,45 @@
1
+ import { defer } from "./defer.js";
2
+ export const createQueue = ()=>{
3
+ const pendingQueue = [];
4
+ const resolvedQueue = [];
5
+ const requestQueue = [];
6
+ const push = (value)=>{
7
+ const task = defer();
8
+ pendingQueue.push(task);
9
+ Promise.resolve(value).then(task.resolve).catch(task.reject).finally(()=>{
10
+ pendingQueue.splice(pendingQueue.indexOf(task), 1);
11
+ if (requestQueue.length > 0) {
12
+ const request = requestQueue.shift();
13
+ request.resolve(task.promise);
14
+ } else {
15
+ resolvedQueue.push(task);
16
+ }
17
+ });
18
+ return task;
19
+ };
20
+ const pull = ()=>{
21
+ if (resolvedQueue.length > 0) {
22
+ return resolvedQueue.shift();
23
+ }
24
+ const task = defer();
25
+ requestQueue.push(task);
26
+ return task;
27
+ };
28
+ return {
29
+ push,
30
+ pull,
31
+ done (value) {
32
+ push(value);
33
+ return Promise.all([
34
+ ...pendingQueue,
35
+ ...resolvedQueue,
36
+ ...requestQueue
37
+ ].map((d)=>d.promise));
38
+ },
39
+ get size () {
40
+ return pendingQueue.length + resolvedQueue.length + requestQueue.length;
41
+ }
42
+ };
43
+ };
44
+
45
+ //# sourceMappingURL=queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/queue.ts"],"sourcesContent":["import { defer, Deferred, Status } from './defer.js';\n\nexport const createQueue = <T, E = Error>() => {\n const pendingQueue: Deferred<T, E>[] = [];\n const resolvedQueue: Deferred<T, E>[] = [];\n const requestQueue: Deferred<T, E>[] = [];\n\n const push = (value: T): Deferred<T, E> => {\n const task = defer<T, E>();\n pendingQueue.push(task);\n\n Promise.resolve(value)\n .then(task.resolve)\n .catch(task.reject)\n .finally(() => {\n pendingQueue.splice(pendingQueue.indexOf(task), 1);\n if (requestQueue.length > 0) {\n const request = requestQueue.shift();\n request.resolve(task.promise);\n } else {\n resolvedQueue.push(task);\n }\n });\n\n return task;\n };\n\n const pull = (): Deferred<T, E> => {\n if (resolvedQueue.length > 0) {\n return resolvedQueue.shift();\n }\n const task = defer<T, E>();\n requestQueue.push(task);\n\n return task;\n };\n\n return {\n push,\n pull,\n done(value: T) {\n push(value);\n return Promise.all(\n [...pendingQueue, ...resolvedQueue, ...requestQueue].map(\n (d) => d.promise\n )\n );\n },\n get size() {\n return pendingQueue.length + resolvedQueue.length + requestQueue.length;\n },\n };\n};\n"],"names":["defer","createQueue","pendingQueue","resolvedQueue","requestQueue","push","value","task","Promise","resolve","then","catch","reject","finally","splice","indexOf","length","request","shift","promise","pull","done","all","map","d","size"],"mappings":"AAAA,SAASA,KAAK,QAA0B,aAAa;AAErD,OAAO,MAAMC,cAAc;IACzB,MAAMC,eAAiC,EAAE;IACzC,MAAMC,gBAAkC,EAAE;IAC1C,MAAMC,eAAiC,EAAE;IAEzC,MAAMC,OAAO,CAACC;QACZ,MAAMC,OAAOP;QACbE,aAAaG,IAAI,CAACE;QAElBC,QAAQC,OAAO,CAACH,OACbI,IAAI,CAACH,KAAKE,OAAO,EACjBE,KAAK,CAACJ,KAAKK,MAAM,EACjBC,OAAO,CAAC;YACPX,aAAaY,MAAM,CAACZ,aAAaa,OAAO,CAACR,OAAO;YAChD,IAAIH,aAAaY,MAAM,GAAG,GAAG;gBAC3B,MAAMC,UAAUb,aAAac,KAAK;gBAClCD,QAAQR,OAAO,CAACF,KAAKY,OAAO;YAC9B,OAAO;gBACLhB,cAAcE,IAAI,CAACE;YACrB;QACF;QAEF,OAAOA;IACT;IAEA,MAAMa,OAAO;QACX,IAAIjB,cAAca,MAAM,GAAG,GAAG;YAC5B,OAAOb,cAAce,KAAK;QAC5B;QACA,MAAMX,OAAOP;QACbI,aAAaC,IAAI,CAACE;QAElB,OAAOA;IACT;IAEA,OAAO;QACLF;QACAe;QACAC,MAAKf,KAAQ;YACXD,KAAKC;YACL,OAAOE,QAAQc,GAAG,CAChB;mBAAIpB;mBAAiBC;mBAAkBC;aAAa,CAACmB,GAAG,CACtD,CAACC,IAAMA,EAAEL,OAAO;QAGtB;QACA,IAAIM,QAAO;YACT,OAAOvB,aAAac,MAAM,GAAGb,cAAca,MAAM,GAAGZ,aAAaY,MAAM;QACzE;IACF;AACF,EAAE"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "asygen",
3
3
  "description": "0-Deps, simple and fast async generator library for browser and NodeJS",
4
- "version": "0.2.30",
4
+ "version": "0.3.1",
5
5
  "type": "module",
6
6
  "types": "build/index.d.ts",
7
7
  "main": "build/index.cjs",
@@ -14,7 +14,7 @@
14
14
  "build",
15
15
  "src/combine.ts",
16
16
  "src/defer.ts",
17
- "src/deferredPoll.ts",
17
+ "src/queue.ts",
18
18
  "src/generatorify.ts",
19
19
  "src/index.ts"
20
20
  ],
@@ -42,6 +42,7 @@
42
42
  "defer",
43
43
  "deferred",
44
44
  "generator",
45
+ "generatorify",
45
46
  "asyncgenerator",
46
47
  "iterate",
47
48
  "promise",
@@ -49,7 +50,9 @@
49
50
  "await",
50
51
  "yield",
51
52
  "flow",
52
- "control"
53
+ "control",
54
+ "queue",
55
+ "task"
53
56
  ],
54
57
  "license": "Apache-2.0",
55
58
  "bugs": {
package/src/combine.ts CHANGED
@@ -1,21 +1,21 @@
1
- import { createPoll } from './deferredPoll.js';
1
+ import { createQueue } from './queue.js';
2
2
 
3
3
  export const combine = <T, R = unknown>(...iterables: AsyncIterable<T>[]) => {
4
- const poll = createPoll<IteratorResult<T, R>>();
4
+ const queue = createQueue<IteratorResult<T, R>>();
5
5
 
6
6
  Promise.all(
7
7
  iterables.map(async (iterable) => {
8
8
  for await (const value of iterable) {
9
- await poll.push({ value, done: false }).promise;
9
+ await queue.push({ value, done: false }).promise;
10
10
  }
11
11
  })
12
- ).then(async () => poll.done({ value: null, done: true }));
12
+ ).then(async () => queue.done({ value: null, done: true }));
13
13
 
14
14
  return {
15
15
  [Symbol.asyncIterator]() {
16
16
  return {
17
17
  next() {
18
- return poll.pull().promise;
18
+ return queue.pull().promise;
19
19
  },
20
20
  };
21
21
  },
package/src/defer.ts CHANGED
@@ -14,22 +14,36 @@ export const getId = () => {
14
14
  return (counter[0] + counter[1]++).toString(16);
15
15
  };
16
16
 
17
- export class Deferred<T = void, E = unknown> {
17
+ export class Deferred<T = void, S = unknown, E = unknown> {
18
18
  private txts = getId();
19
19
  private _promise: Promise<T>;
20
- private _resolve?: (value: T) => void;
20
+ private _resolve?: (value: T | PromiseLike<T>) => void;
21
21
  private _reject?: (error: E) => void;
22
22
  private _status: Status = Status.PENDING;
23
23
 
24
+ public state: S;
25
+
24
26
  constructor() {
25
27
  this._promise = new Promise<T>((resolve, reject) => {
26
28
  this._resolve = resolve;
27
29
  this._reject = reject;
28
- });
30
+ })
31
+ .catch((error) => {
32
+ this._status = Status.REJECTED;
33
+ throw error;
34
+ })
35
+ .then((value) => {
36
+ this._status = Status.RESOLVED;
37
+ return value;
38
+ });
29
39
  this.resolve = this.resolve.bind(this);
30
40
  this.reject = this.reject.bind(this);
31
41
  }
32
42
 
43
+ get id() {
44
+ return this.txts;
45
+ }
46
+
33
47
  get [Symbol.toStringTag]() {
34
48
  return `Deferred ${this.txts} ${this._status}`;
35
49
  }
@@ -42,20 +56,15 @@ export class Deferred<T = void, E = unknown> {
42
56
  return this._status;
43
57
  }
44
58
 
45
- resolve(value: T) {
46
- if (this._status === Status.PENDING) {
47
- this._status = Status.RESOLVED;
48
- this._resolve(value);
49
- }
59
+ resolve(value: T | PromiseLike<T>) {
60
+ this._resolve(value);
50
61
 
51
62
  return this;
52
63
  }
53
64
 
54
65
  reject(error: E) {
55
- if (this._status === Status.PENDING) {
56
- this._status = Status.REJECTED;
57
- this._reject(error);
58
- }
66
+ this._reject(error);
67
+
59
68
  return this;
60
69
  }
61
70
  }
@@ -1,4 +1,4 @@
1
- import { createPoll } from './deferredPoll.js';
1
+ import { createQueue } from './queue.js';
2
2
 
3
3
  export interface TaskCallback<T> {
4
4
  (value: T): Promise<void>;
@@ -9,19 +9,19 @@ export interface Task<T, R = unknown> {
9
9
  }
10
10
 
11
11
  export const generatorify = <T, R>(task: Task<T, R>): AsyncIterable<T> => {
12
- const poll = createPoll<IteratorResult<T, R>>();
12
+ const queue = createQueue<IteratorResult<T, R>>();
13
13
 
14
14
  Promise.resolve(
15
15
  task(async (value) => {
16
- await poll.push({ value, done: false }).promise;
16
+ await queue.push({ value, done: false }).promise;
17
17
  })
18
- ).then(async (value) => poll.done({ value, done: true }));
18
+ ).then(async (value) => queue.done({ value, done: true }));
19
19
 
20
20
  return {
21
21
  [Symbol.asyncIterator]() {
22
22
  return {
23
23
  next() {
24
- return poll.pull().promise;
24
+ return queue.pull().promise;
25
25
  },
26
26
  };
27
27
  },
package/src/index.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  export * from './defer.js';
2
2
  export * from './generatorify.js';
3
- export * from './deferredPoll.js';
3
+ export * from './queue.js';
4
4
  export * from './combine.js';
package/src/queue.ts ADDED
@@ -0,0 +1,53 @@
1
+ import { defer, Deferred, Status } from './defer.js';
2
+
3
+ export const createQueue = <T, E = Error>() => {
4
+ const pendingQueue: Deferred<T, E>[] = [];
5
+ const resolvedQueue: Deferred<T, E>[] = [];
6
+ const requestQueue: Deferred<T, E>[] = [];
7
+
8
+ const push = (value: T): Deferred<T, E> => {
9
+ const task = defer<T, E>();
10
+ pendingQueue.push(task);
11
+
12
+ Promise.resolve(value)
13
+ .then(task.resolve)
14
+ .catch(task.reject)
15
+ .finally(() => {
16
+ pendingQueue.splice(pendingQueue.indexOf(task), 1);
17
+ if (requestQueue.length > 0) {
18
+ const request = requestQueue.shift();
19
+ request.resolve(task.promise);
20
+ } else {
21
+ resolvedQueue.push(task);
22
+ }
23
+ });
24
+
25
+ return task;
26
+ };
27
+
28
+ const pull = (): Deferred<T, E> => {
29
+ if (resolvedQueue.length > 0) {
30
+ return resolvedQueue.shift();
31
+ }
32
+ const task = defer<T, E>();
33
+ requestQueue.push(task);
34
+
35
+ return task;
36
+ };
37
+
38
+ return {
39
+ push,
40
+ pull,
41
+ done(value: T) {
42
+ push(value);
43
+ return Promise.all(
44
+ [...pendingQueue, ...resolvedQueue, ...requestQueue].map(
45
+ (d) => d.promise
46
+ )
47
+ );
48
+ },
49
+ get size() {
50
+ return pendingQueue.length + resolvedQueue.length + requestQueue.length;
51
+ },
52
+ };
53
+ };
@@ -1,36 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "createPoll", {
6
- enumerable: true,
7
- get: function() {
8
- return createPoll;
9
- }
10
- });
11
- const _defercjs = require("./defer.cjs");
12
- const createPoll = ()=>{
13
- const dPoll = [
14
- (0, _defercjs.defer)()
15
- ];
16
- return {
17
- push (value) {
18
- const next = (0, _defercjs.defer)();
19
- const prev = dPoll.push(next) - 2;
20
- const prevDeferred = dPoll[prev];
21
- prevDeferred.resolve(value);
22
- return prevDeferred;
23
- },
24
- pull () {
25
- const current = dPoll[0];
26
- current.promise.then(()=>dPoll.shift());
27
- return current;
28
- },
29
- done (value) {
30
- dPoll[dPoll.length - 1].resolve(value);
31
- return Promise.all(dPoll.map((d)=>d.promise));
32
- }
33
- };
34
- };
35
-
36
- //# sourceMappingURL=deferredPoll.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/deferredPoll.ts"],"sourcesContent":["import { defer, Deferred } from './defer.js';\n\nexport const createPoll = <T>() => {\n const dPoll: Deferred<T>[] = [defer<T>()];\n\n return {\n push(value: T) {\n const next = defer<T>();\n const prev = dPoll.push(next) - 2;\n const prevDeferred = dPoll[prev] as Deferred<T>;\n prevDeferred.resolve(value);\n\n return prevDeferred;\n },\n pull() {\n const current = dPoll[0];\n current.promise.then(() => dPoll.shift());\n return current;\n },\n done(value: T) {\n dPoll[dPoll.length - 1].resolve(value);\n return Promise.all(dPoll.map((d) => d.promise));\n },\n };\n};\n"],"names":["createPoll","dPoll","defer","push","value","next","prev","prevDeferred","resolve","pull","current","promise","then","shift","done","length","Promise","all","map","d"],"mappings":";;;;+BAEaA;;;eAAAA;;;0BAFmB;AAEzB,MAAMA,aAAa;IACxB,MAAMC,QAAuB;QAACC,IAAAA,eAAK;KAAM;IAEzC,OAAO;QACLC,MAAKC,KAAQ;YACX,MAAMC,OAAOH,IAAAA,eAAK;YAClB,MAAMI,OAAOL,MAAME,IAAI,CAACE,QAAQ;YAChC,MAAME,eAAeN,KAAK,CAACK,KAAK;YAChCC,aAAaC,OAAO,CAACJ;YAErB,OAAOG;QACT;QACAE;YACE,MAAMC,UAAUT,KAAK,CAAC,EAAE;YACxBS,QAAQC,OAAO,CAACC,IAAI,CAAC,IAAMX,MAAMY,KAAK;YACtC,OAAOH;QACT;QACAI,MAAKV,KAAQ;YACXH,KAAK,CAACA,MAAMc,MAAM,GAAG,EAAE,CAACP,OAAO,CAACJ;YAChC,OAAOY,QAAQC,GAAG,CAAChB,MAAMiB,GAAG,CAAC,CAACC,IAAMA,EAAER,OAAO;QAC/C;IACF;AACF"}
@@ -1,6 +0,0 @@
1
- import { Deferred } from './defer.js';
2
- export declare const createPoll: <T>() => {
3
- push(value: T): Deferred<T, unknown>;
4
- pull(): Deferred<T, unknown>;
5
- done(value: T): Promise<Awaited<T>[]>;
6
- };
@@ -1,26 +0,0 @@
1
- import { defer } from "./defer.js";
2
- export const createPoll = ()=>{
3
- const dPoll = [
4
- defer()
5
- ];
6
- return {
7
- push (value) {
8
- const next = defer();
9
- const prev = dPoll.push(next) - 2;
10
- const prevDeferred = dPoll[prev];
11
- prevDeferred.resolve(value);
12
- return prevDeferred;
13
- },
14
- pull () {
15
- const current = dPoll[0];
16
- current.promise.then(()=>dPoll.shift());
17
- return current;
18
- },
19
- done (value) {
20
- dPoll[dPoll.length - 1].resolve(value);
21
- return Promise.all(dPoll.map((d)=>d.promise));
22
- }
23
- };
24
- };
25
-
26
- //# sourceMappingURL=deferredPoll.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/deferredPoll.ts"],"sourcesContent":["import { defer, Deferred } from './defer.js';\n\nexport const createPoll = <T>() => {\n const dPoll: Deferred<T>[] = [defer<T>()];\n\n return {\n push(value: T) {\n const next = defer<T>();\n const prev = dPoll.push(next) - 2;\n const prevDeferred = dPoll[prev] as Deferred<T>;\n prevDeferred.resolve(value);\n\n return prevDeferred;\n },\n pull() {\n const current = dPoll[0];\n current.promise.then(() => dPoll.shift());\n return current;\n },\n done(value: T) {\n dPoll[dPoll.length - 1].resolve(value);\n return Promise.all(dPoll.map((d) => d.promise));\n },\n };\n};\n"],"names":["defer","createPoll","dPoll","push","value","next","prev","prevDeferred","resolve","pull","current","promise","then","shift","done","length","Promise","all","map","d"],"mappings":"AAAA,SAASA,KAAK,QAAkB,aAAa;AAE7C,OAAO,MAAMC,aAAa;IACxB,MAAMC,QAAuB;QAACF;KAAW;IAEzC,OAAO;QACLG,MAAKC,KAAQ;YACX,MAAMC,OAAOL;YACb,MAAMM,OAAOJ,MAAMC,IAAI,CAACE,QAAQ;YAChC,MAAME,eAAeL,KAAK,CAACI,KAAK;YAChCC,aAAaC,OAAO,CAACJ;YAErB,OAAOG;QACT;QACAE;YACE,MAAMC,UAAUR,KAAK,CAAC,EAAE;YACxBQ,QAAQC,OAAO,CAACC,IAAI,CAAC,IAAMV,MAAMW,KAAK;YACtC,OAAOH;QACT;QACAI,MAAKV,KAAQ;YACXF,KAAK,CAACA,MAAMa,MAAM,GAAG,EAAE,CAACP,OAAO,CAACJ;YAChC,OAAOY,QAAQC,GAAG,CAACf,MAAMgB,GAAG,CAAC,CAACC,IAAMA,EAAER,OAAO;QAC/C;IACF;AACF,EAAE"}
@@ -1,25 +0,0 @@
1
- import { defer, Deferred } from './defer.js';
2
-
3
- export const createPoll = <T>() => {
4
- const dPoll: Deferred<T>[] = [defer<T>()];
5
-
6
- return {
7
- push(value: T) {
8
- const next = defer<T>();
9
- const prev = dPoll.push(next) - 2;
10
- const prevDeferred = dPoll[prev] as Deferred<T>;
11
- prevDeferred.resolve(value);
12
-
13
- return prevDeferred;
14
- },
15
- pull() {
16
- const current = dPoll[0];
17
- current.promise.then(() => dPoll.shift());
18
- return current;
19
- },
20
- done(value: T) {
21
- dPoll[dPoll.length - 1].resolve(value);
22
- return Promise.all(dPoll.map((d) => d.promise));
23
- },
24
- };
25
- };