asygen 0.0.13 → 0.1.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
@@ -44,6 +44,27 @@ for await (const data of generatorify(task)) {
44
44
  }
45
45
  ```
46
46
 
47
+ #### Combine generators
48
+ ```typescript
49
+ import { combine } from 'asygen';
50
+
51
+ const sleep = (timeout: number) => new Promise(resolve => setTimeout(resolve, timeout));
52
+
53
+ async function* generate(timeout: number, count: number) {
54
+ for (let index = 0; index < count; index++) {
55
+ yield index;
56
+ await sleep(timeout);
57
+ }
58
+ }
59
+
60
+ for await (const data of combine(generate(100, 5), generate(500, 2))) {
61
+ // handle data
62
+ }
63
+ // First: 0 1 2 3 4 -
64
+ // Second: 0 . . . . 1
65
+ // Combined: 0 0 1 2 3 4 1
66
+ ```
67
+
47
68
  ## License
48
69
 
49
70
  License [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0)
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "combine", {
6
+ enumerable: true,
7
+ get: ()=>combine
8
+ });
9
+ const _deferredPoll = require("./deferredPoll.js");
10
+ const combine = (...iterables)=>{
11
+ const poll = (0, _deferredPoll.createPoll)();
12
+ Promise.all(iterables.map(async (iterable)=>{
13
+ for await (const value of iterable){
14
+ await poll.push({
15
+ value,
16
+ done: false
17
+ }).promise;
18
+ }
19
+ })).then(async ()=>poll.done({
20
+ value: null,
21
+ done: true
22
+ }));
23
+ return {
24
+ [Symbol.asyncIterator] () {
25
+ return {
26
+ next () {
27
+ return poll.pull().promise;
28
+ }
29
+ };
30
+ }
31
+ };
32
+ };
33
+
34
+ //# sourceMappingURL=combine.cjs.map
@@ -0,0 +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;;aAAAA;;8BAFc;AAEpB,MAAMA,UAAU,CAAiB,GAAGC,YAAkC;IAC3E,MAAMC,OAAOC,IAAAA,wBAAU;IAEvBC,QAAQC,GAAG,CACTJ,UAAUK,GAAG,CAAC,OAAOC,WAAa;QAChC,WAAW,MAAMC,SAASD,SAAU;YAClC,MAAML,KAAKO,IAAI,CAAC;gBAAED;gBAAOE,MAAM,KAAK;YAAC,GAAGC,OAAO;QACjD;IACF,IACAC,IAAI,CAAC,UAAYV,KAAKQ,IAAI,CAAC;YAAEF,OAAO,IAAI;YAAEE,MAAM,IAAI;QAAC;IAEvD,OAAO;QACL,CAACG,OAAOC,aAAa,CAAC,IAAG;YACvB,OAAO;gBACLC,QAAO;oBACL,OAAOb,KAAKc,IAAI,GAAGL,OAAO;gBAC5B;YACF;QACF;IACF;AACF"}
@@ -0,0 +1,5 @@
1
+ export declare const combine: <T, R = unknown>(...iterables: AsyncIterable<T>[]) => {
2
+ [Symbol.asyncIterator](): {
3
+ next(): Promise<IteratorResult<T, R>>;
4
+ };
5
+ };
@@ -0,0 +1,26 @@
1
+ import { createPoll } from './deferredPoll.js';
2
+ export const combine = (...iterables)=>{
3
+ const poll = createPoll();
4
+ Promise.all(iterables.map(async (iterable)=>{
5
+ for await (const value of iterable){
6
+ await poll.push({
7
+ value,
8
+ done: false
9
+ }).promise;
10
+ }
11
+ })).then(async ()=>poll.done({
12
+ value: null,
13
+ done: true
14
+ }));
15
+ return {
16
+ [Symbol.asyncIterator] () {
17
+ return {
18
+ next () {
19
+ return poll.pull().promise;
20
+ }
21
+ };
22
+ }
23
+ };
24
+ };
25
+
26
+ //# sourceMappingURL=combine.js.map
@@ -0,0 +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,YAAkC;IAC3E,MAAMC,OAAOH;IAEbI,QAAQC,GAAG,CACTH,UAAUI,GAAG,CAAC,OAAOC,WAAa;QAChC,WAAW,MAAMC,SAASD,SAAU;YAClC,MAAMJ,KAAKM,IAAI,CAAC;gBAAED;gBAAOE,MAAM,KAAK;YAAC,GAAGC,OAAO;QACjD;IACF,IACAC,IAAI,CAAC,UAAYT,KAAKO,IAAI,CAAC;YAAEF,OAAO,IAAI;YAAEE,MAAM,IAAI;QAAC;IAEvD,OAAO;QACL,CAACG,OAAOC,aAAa,CAAC,IAAG;YACvB,OAAO;gBACLC,QAAO;oBACL,OAAOZ,KAAKa,IAAI,GAAGL,OAAO;gBAC5B;YACF;QACF;IACF;AACF,EAAE"}
@@ -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,MAALA;IASAC,QAAQ,MAARA;IA8CAC,KAAK,MAALA;;IA9DN;UAAKC,MAAM;IAANA,OACVC,aAAU;IADAD,OAEVE,cAAW;IAFDF,OAGVG,cAAW;GAHDH,WAAAA;AAMZ,MAAMI,UAA4B;IAAC;IAAE;CAAE;AAChC,MAAMP,QAAQ,IAAM;IACzB,MAAMQ,SAASC,KAAKC,GAAG,KAAK;IAC5B,IAAIH,OAAO,CAAC,EAAE,KAAKC,QAAQ;QACzBD,OAAO,CAAC,EAAE,GAAGC;QACbD,OAAO,CAAC,EAAE,GAAG;IACf,CAAC;IACD,OAAO,AAACA,CAAAA,OAAO,CAAC,EAAE,GAAIA,OAAO,CAAC,EAAE,EAAE,EAAGI,QAAQ,CAAC;AAChD;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,SAAW;YAClD,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,CAAC;QAED,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,CAAC;QACD,OAAO,IAAI;IACb;AACF;AAEO,MAAMzB,QAAQ,IAA6B;IAChD,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, 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,MAALA;IASAC,QAAQ,MAARA;IA8CAC,KAAK,MAALA;;IA9DN;UAAKC,MAAM;IAANA,OACVC,aAAU;IADAD,OAEVE,cAAW;IAFDF,OAGVG,cAAW;GAHDH,WAAAA;AAMZ,MAAMI,UAA4B;IAAC;IAAG;CAAE;AACjC,MAAMP,QAAQ,IAAM;IACzB,MAAMQ,SAASC,KAAKC,GAAG,KAAK;IAC5B,IAAIH,OAAO,CAAC,EAAE,KAAKC,QAAQ;QACzBD,OAAO,CAAC,EAAE,GAAGC;QACbD,OAAO,CAAC,EAAE,GAAG;IACf,CAAC;IACD,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,SAAW;YAClD,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,CAAC;QAED,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,CAAC;QACD,OAAO,IAAI;IACb;AACF;AAEO,MAAMzB,QAAQ,IAA6B;IAChD,OAAO,IAAID;AACb"}
@@ -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;IAAE;CAAE;AACvC,OAAO,MAAMC,QAAQ,IAAM;IACzB,MAAMC,SAASC,KAAKC,GAAG,KAAK;IAC5B,IAAIJ,OAAO,CAAC,EAAE,KAAKE,QAAQ;QACzBF,OAAO,CAAC,EAAE,GAAGE;QACbF,OAAO,CAAC,EAAE,GAAG;IACf,CAAC;IACD,OAAO,AAACA,CAAAA,OAAO,CAAC,EAAE,GAAIA,OAAO,CAAC,EAAE,EAAE,EAAGK,QAAQ,CAAC;AAChD,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,SAAW;YAClD,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,CAAC;QAED,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,CAAC;QACD,OAAO,IAAI;IACb;AACF,CAAC;AAED,OAAO,MAAMC,QAAQ,IAA6B;IAChD,OAAO,IAAIjB;AACb,EAAC"}
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,IAAM;IACzB,MAAMC,SAASC,KAAKC,GAAG,KAAK;IAC5B,IAAIJ,OAAO,CAAC,EAAE,KAAKE,QAAQ;QACzBF,OAAO,CAAC,EAAE,GAAGE;QACbF,OAAO,CAAC,EAAE,GAAG;IACf,CAAC;IACD,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,SAAW;YAClD,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,CAAC;QAED,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,CAAC;QACD,OAAO,IAAI;IACb;AACF,CAAC;AAED,OAAO,MAAMC,QAAQ,IAA6B;IAChD,OAAO,IAAIjB;AACb,EAAE"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "createPoll", {
6
+ enumerable: true,
7
+ get: ()=>createPoll
8
+ });
9
+ const _defer = require("./defer.js");
10
+ const createPoll = ()=>{
11
+ const dPoll = [
12
+ (0, _defer.defer)()
13
+ ];
14
+ return {
15
+ push (value) {
16
+ const next = (0, _defer.defer)();
17
+ const prev = dPoll.push(next) - 2;
18
+ const prevDeferred = dPoll[prev];
19
+ prevDeferred.resolve(value);
20
+ return prevDeferred;
21
+ },
22
+ pull () {
23
+ const current = dPoll[0];
24
+ current.promise.then(()=>dPoll.shift());
25
+ return current;
26
+ },
27
+ done (value) {
28
+ dPoll[dPoll.length - 1].resolve(value);
29
+ return Promise.all(dPoll.map((d)=>d.promise));
30
+ }
31
+ };
32
+ };
33
+
34
+ //# sourceMappingURL=deferredPoll.cjs.map
@@ -0,0 +1 @@
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;;aAAAA;;uBAFmB;AAEzB,MAAMA,aAAa,IAAS;IACjC,MAAMC,QAAuB;QAACC,IAAAA,YAAK;KAAM;IAEzC,OAAO;QACLC,MAAKC,KAAQ,EAAE;YACb,MAAMC,OAAOH,IAAAA,YAAK;YAClB,MAAMI,OAAOL,MAAME,IAAI,CAACE,QAAQ;YAChC,MAAME,eAAeN,KAAK,CAACK,KAAK;YAChCC,aAAaC,OAAO,CAACJ;YAErB,OAAOG;QACT;QACAE,QAAO;YACL,MAAMC,UAAUT,KAAK,CAAC,EAAE;YACxBS,QAAQC,OAAO,CAACC,IAAI,CAAC,IAAMX,MAAMY,KAAK;YACtC,OAAOH;QACT;QACAI,MAAKV,KAAQ,EAAE;YACbH,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"}
@@ -0,0 +1,6 @@
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
+ };
@@ -0,0 +1,26 @@
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
@@ -0,0 +1 @@
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,IAAS;IACjC,MAAMC,QAAuB;QAACF;KAAW;IAEzC,OAAO;QACLG,MAAKC,KAAQ,EAAE;YACb,MAAMC,OAAOL;YACb,MAAMM,OAAOJ,MAAMC,IAAI,CAACE,QAAQ;YAChC,MAAME,eAAeL,KAAK,CAACI,KAAK;YAChCC,aAAaC,OAAO,CAACJ;YAErB,OAAOG;QACT;QACAE,QAAO;YACL,MAAMC,UAAUR,KAAK,CAAC,EAAE;YACxBQ,QAAQC,OAAO,CAACC,IAAI,CAAC,IAAMV,MAAMW,KAAK;YACtC,OAAOH;QACT;QACAI,MAAKV,KAAQ,EAAE;YACbF,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"}
@@ -6,38 +6,23 @@ Object.defineProperty(exports, "generatorify", {
6
6
  enumerable: true,
7
7
  get: ()=>generatorify
8
8
  });
9
- const _deferCjs = require("./defer.cjs");
9
+ const _deferredPoll = require("./deferredPoll.js");
10
10
  const generatorify = (task)=>{
11
- const dPoll = [
12
- (0, _deferCjs.defer)()
13
- ];
14
- Promise.resolve(task((value)=>{
15
- const next = (0, _deferCjs.defer)();
16
- const prev = dPoll.push(next) - 2;
17
- const prevDeferred = dPoll[prev];
18
- prevDeferred.resolve({
11
+ const poll = (0, _deferredPoll.createPoll)();
12
+ Promise.resolve(task(async (value)=>{
13
+ await poll.push({
19
14
  value,
20
15
  done: false
21
- });
22
- return prevDeferred.promise.then((v)=>v.value);
23
- })).then(async (value)=>{
24
- dPoll[dPoll.length - 1].resolve({
16
+ }).promise;
17
+ })).then(async (value)=>poll.done({
25
18
  value,
26
19
  done: true
27
- });
28
- await Promise.all(dPoll.map((d)=>d.promise));
29
- return {
30
- value,
31
- done: true
32
- };
33
- });
20
+ }));
34
21
  return {
35
22
  [Symbol.asyncIterator] () {
36
23
  return {
37
24
  next () {
38
- const current = dPoll[0];
39
- current.promise.then(()=>dPoll.shift());
40
- return current.promise;
25
+ return poll.pull().promise;
41
26
  }
42
27
  };
43
28
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/generatorify.ts"],"sourcesContent":["import { defer, Deferred } from './defer';\n\nexport interface TaskCallback<T> {\n (value: T): Promise<T>;\n}\n\nexport interface Task<T, R = unknown> {\n (callback: TaskCallback<T>): R;\n}\n\nexport const generatorify = <T, R = unknown>(task: Task<T, R>): AsyncIterable<T> => {\n const dPoll: Deferred<IteratorResult<T, R>>[] = [defer<IteratorYieldResult<T>>()];\n\n Promise.resolve(task(value => {\n const next = defer<IteratorYieldResult<T>>();\n const prev = dPoll.push(next) - 2;\n const prevDeferred = dPoll[prev] as Deferred<IteratorYieldResult<T>>;\n prevDeferred.resolve({ value, done: false });\n return prevDeferred.promise.then(v => v.value);\n })).then(async (value) => {\n dPoll[dPoll.length - 1].resolve({ value, done: true });\n await Promise.all(dPoll.map(d => d.promise));\n return { value, done: true };\n });\n\n return {\n [Symbol.asyncIterator]() {\n return {\n next() {\n const current = dPoll[0];\n current.promise.then(() => dPoll.shift());\n return current.promise;\n },\n };\n }\n };\n}\n"],"names":["generatorify","task","dPoll","defer","Promise","resolve","value","next","prev","push","prevDeferred","done","promise","then","v","length","all","map","d","Symbol","asyncIterator","current","shift"],"mappings":";;;;+BAUaA;;aAAAA;;0BAVmB;AAUzB,MAAMA,eAAe,CAAiBC,OAAuC;IAClF,MAAMC,QAA0C;QAACC,IAAAA,eAAK;KAA2B;IAEjFC,QAAQC,OAAO,CAACJ,KAAKK,CAAAA,QAAS;QAC5B,MAAMC,OAAOJ,IAAAA,eAAK;QAClB,MAAMK,OAAON,MAAMO,IAAI,CAACF,QAAQ;QAChC,MAAMG,eAAeR,KAAK,CAACM,KAAK;QAChCE,aAAaL,OAAO,CAAC;YAAEC;YAAOK,MAAM,KAAK;QAAC;QAC1C,OAAOD,aAAaE,OAAO,CAACC,IAAI,CAACC,CAAAA,IAAKA,EAAER,KAAK;IAC/C,IAAIO,IAAI,CAAC,OAAOP,QAAU;QACxBJ,KAAK,CAACA,MAAMa,MAAM,GAAG,EAAE,CAACV,OAAO,CAAC;YAAEC;YAAOK,MAAM,IAAI;QAAC;QACpD,MAAMP,QAAQY,GAAG,CAACd,MAAMe,GAAG,CAACC,CAAAA,IAAKA,EAAEN,OAAO;QAC1C,OAAO;YAAEN;YAAOK,MAAM,IAAI;QAAC;IAC7B;IAEA,OAAO;QACL,CAACQ,OAAOC,aAAa,CAAC,IAAG;YACvB,OAAO;gBACLb,QAAO;oBACL,MAAMc,UAAUnB,KAAK,CAAC,EAAE;oBACxBmB,QAAQT,OAAO,CAACC,IAAI,CAAC,IAAMX,MAAMoB,KAAK;oBACtC,OAAOD,QAAQT,OAAO;gBACxB;YACF;QACF;IACF;AACF"}
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;;aAAAA;;8BAVc;AAUpB,MAAMA,eAAe,CAAOC,OAAuC;IACxE,MAAMC,OAAOC,IAAAA,wBAAU;IAEvBC,QAAQC,OAAO,CACbJ,KAAK,OAAOK,QAAU;QACpB,MAAMJ,KAAKK,IAAI,CAAC;YAAED;YAAOE,MAAM,KAAK;QAAC,GAAGC,OAAO;IACjD,IACAC,IAAI,CAAC,OAAOJ,QAAUJ,KAAKM,IAAI,CAAC;YAAEF;YAAOE,MAAM,IAAI;QAAC;IAEtD,OAAO;QACL,CAACG,OAAOC,aAAa,CAAC,IAAG;YACvB,OAAO;gBACLC,QAAO;oBACL,OAAOX,KAAKY,IAAI,GAAGL,OAAO;gBAC5B;YACF;QACF;IACF;AACF"}
@@ -1,7 +1,7 @@
1
1
  export interface TaskCallback<T> {
2
- (value: T): Promise<T>;
2
+ (value: T): Promise<void>;
3
3
  }
4
4
  export interface Task<T, R = unknown> {
5
5
  (callback: TaskCallback<T>): R;
6
6
  }
7
- export declare const generatorify: <T, R = unknown>(task: Task<T, R>) => AsyncIterable<T>;
7
+ export declare const generatorify: <T, R>(task: Task<T, R>) => AsyncIterable<T>;
@@ -1,35 +1,20 @@
1
- import { defer } from "./defer.js";
1
+ import { createPoll } from './deferredPoll.js';
2
2
  export const generatorify = (task)=>{
3
- const dPoll = [
4
- defer()
5
- ];
6
- Promise.resolve(task((value)=>{
7
- const next = defer();
8
- const prev = dPoll.push(next) - 2;
9
- const prevDeferred = dPoll[prev];
10
- prevDeferred.resolve({
3
+ const poll = createPoll();
4
+ Promise.resolve(task(async (value)=>{
5
+ await poll.push({
11
6
  value,
12
7
  done: false
13
- });
14
- return prevDeferred.promise.then((v)=>v.value);
15
- })).then(async (value)=>{
16
- dPoll[dPoll.length - 1].resolve({
8
+ }).promise;
9
+ })).then(async (value)=>poll.done({
17
10
  value,
18
11
  done: true
19
- });
20
- await Promise.all(dPoll.map((d)=>d.promise));
21
- return {
22
- value,
23
- done: true
24
- };
25
- });
12
+ }));
26
13
  return {
27
14
  [Symbol.asyncIterator] () {
28
15
  return {
29
16
  next () {
30
- const current = dPoll[0];
31
- current.promise.then(()=>dPoll.shift());
32
- return current.promise;
17
+ return poll.pull().promise;
33
18
  }
34
19
  };
35
20
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/generatorify.ts"],"sourcesContent":["import { defer, Deferred } from './defer';\n\nexport interface TaskCallback<T> {\n (value: T): Promise<T>;\n}\n\nexport interface Task<T, R = unknown> {\n (callback: TaskCallback<T>): R;\n}\n\nexport const generatorify = <T, R = unknown>(task: Task<T, R>): AsyncIterable<T> => {\n const dPoll: Deferred<IteratorResult<T, R>>[] = [defer<IteratorYieldResult<T>>()];\n\n Promise.resolve(task(value => {\n const next = defer<IteratorYieldResult<T>>();\n const prev = dPoll.push(next) - 2;\n const prevDeferred = dPoll[prev] as Deferred<IteratorYieldResult<T>>;\n prevDeferred.resolve({ value, done: false });\n return prevDeferred.promise.then(v => v.value);\n })).then(async (value) => {\n dPoll[dPoll.length - 1].resolve({ value, done: true });\n await Promise.all(dPoll.map(d => d.promise));\n return { value, done: true };\n });\n\n return {\n [Symbol.asyncIterator]() {\n return {\n next() {\n const current = dPoll[0];\n current.promise.then(() => dPoll.shift());\n return current.promise;\n },\n };\n }\n };\n}\n"],"names":["defer","generatorify","task","dPoll","Promise","resolve","value","next","prev","push","prevDeferred","done","promise","then","v","length","all","map","d","Symbol","asyncIterator","current","shift"],"mappings":"AAAA,SAASA,KAAK,QAAkB,aAAU;AAU1C,OAAO,MAAMC,eAAe,CAAiBC,OAAuC;IAClF,MAAMC,QAA0C;QAACH;KAAgC;IAEjFI,QAAQC,OAAO,CAACH,KAAKI,CAAAA,QAAS;QAC5B,MAAMC,OAAOP;QACb,MAAMQ,OAAOL,MAAMM,IAAI,CAACF,QAAQ;QAChC,MAAMG,eAAeP,KAAK,CAACK,KAAK;QAChCE,aAAaL,OAAO,CAAC;YAAEC;YAAOK,MAAM,KAAK;QAAC;QAC1C,OAAOD,aAAaE,OAAO,CAACC,IAAI,CAACC,CAAAA,IAAKA,EAAER,KAAK;IAC/C,IAAIO,IAAI,CAAC,OAAOP,QAAU;QACxBH,KAAK,CAACA,MAAMY,MAAM,GAAG,EAAE,CAACV,OAAO,CAAC;YAAEC;YAAOK,MAAM,IAAI;QAAC;QACpD,MAAMP,QAAQY,GAAG,CAACb,MAAMc,GAAG,CAACC,CAAAA,IAAKA,EAAEN,OAAO;QAC1C,OAAO;YAAEN;YAAOK,MAAM,IAAI;QAAC;IAC7B;IAEA,OAAO;QACL,CAACQ,OAAOC,aAAa,CAAC,IAAG;YACvB,OAAO;gBACLb,QAAO;oBACL,MAAMc,UAAUlB,KAAK,CAAC,EAAE;oBACxBkB,QAAQT,OAAO,CAACC,IAAI,CAAC,IAAMV,MAAMmB,KAAK;oBACtC,OAAOD,QAAQT,OAAO;gBACxB;YACF;QACF;IACF;AACF,EAAC"}
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,OAAuC;IACxE,MAAMC,OAAOH;IAEbI,QAAQC,OAAO,CACbH,KAAK,OAAOI,QAAU;QACpB,MAAMH,KAAKI,IAAI,CAAC;YAAED;YAAOE,MAAM,KAAK;QAAC,GAAGC,OAAO;IACjD,IACAC,IAAI,CAAC,OAAOJ,QAAUH,KAAKK,IAAI,CAAC;YAAEF;YAAOE,MAAM,IAAI;QAAC;IAEtD,OAAO;QACL,CAACG,OAAOC,aAAa,CAAC,IAAG;YACvB,OAAO;gBACLC,QAAO;oBACL,OAAOV,KAAKW,IAAI,GAAGL,OAAO;gBAC5B;YACF;QACF;IACF;AACF,EAAE"}
package/build/index.cjs CHANGED
@@ -2,16 +2,20 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- _exportStar(require("./defer.cjs"), exports);
6
- _exportStar(require("./generatorify.cjs"), exports);
7
- function _exportStar(from, to) {
5
+ _export_star(require("./defer.js"), exports);
6
+ _export_star(require("./generatorify.js"), exports);
7
+ _export_star(require("./deferredPoll.js"), exports);
8
+ _export_star(require("./combine.js"), exports);
9
+ function _export_star(from, to) {
8
10
  Object.keys(from).forEach(function(k) {
9
- if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) Object.defineProperty(to, k, {
10
- enumerable: true,
11
- get: function() {
12
- return from[k];
13
- }
14
- });
11
+ if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
12
+ Object.defineProperty(to, k, {
13
+ enumerable: true,
14
+ get: function() {
15
+ return from[k];
16
+ }
17
+ });
18
+ }
15
19
  });
16
20
  return from;
17
21
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from './defer';\nexport * from './generatorify';\n"],"names":[],"mappings":";;;;oBAAc;oBACA"}
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"}
package/build/index.d.ts CHANGED
@@ -1,2 +1,4 @@
1
- export * from './defer';
2
- export * from './generatorify';
1
+ export * from './defer.js';
2
+ export * from './generatorify.js';
3
+ export * from './deferredPoll.js';
4
+ export * from './combine.js';
package/build/index.js CHANGED
@@ -1,4 +1,6 @@
1
- export * from "./defer.js";
2
- export * from "./generatorify.js";
1
+ export * from './defer.js';
2
+ export * from './generatorify.js';
3
+ export * from './deferredPoll.js';
4
+ export * from './combine.js';
3
5
 
4
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from './defer';\nexport * from './generatorify';\n"],"names":[],"mappings":"AAAA,cAAc,aAAU;AACxB,cAAc,oBAAiB"}
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"}
package/package.json CHANGED
@@ -1,22 +1,29 @@
1
1
  {
2
2
  "name": "asygen",
3
3
  "description": "0-Deps, simple and fast async generator library for browser and NodeJS",
4
- "version": "0.0.13",
4
+ "version": "0.1.1",
5
5
  "type": "module",
6
+ "types": "build/index.d.ts",
6
7
  "main": "build/index.cjs",
7
8
  "module": "build/index.js",
8
- "types": "build/index.d.ts",
9
+ "exports": {
10
+ "require": "./build/index.cjs",
11
+ "import": "./build/index.js"
12
+ },
9
13
  "files": [
10
14
  "build",
11
- "src/index.ts",
15
+ "src/combine.ts",
12
16
  "src/defer.ts",
13
- "src/generatorify.ts"
17
+ "src/deferredPoll.ts",
18
+ "src/generatorify.ts",
19
+ "src/index.ts"
14
20
  ],
15
- "sideEffects": false,
16
21
  "scripts": {
17
22
  "build": "rm -rf build && inop src build -p -i __tests__ && tsc --declaration --emitDeclarationOnly",
18
23
  "test": "jest",
19
- "test:build": "node src/__tests__/index.cjs && node src/__tests__/index.mjs"
24
+ "test:build": "node src/__tests__/index.cjs && node src/__tests__/index.mjs",
25
+ "lint": "eslint .",
26
+ "prepare": "husky install"
20
27
  },
21
28
  "engines": {
22
29
  "node": ">=16"
@@ -50,13 +57,22 @@
50
57
  },
51
58
  "homepage": "https://github.com/3axap4eHko/asygen#readme",
52
59
  "devDependencies": {
53
- "@swc/core": "^1.3.46",
60
+ "@swc/core": "^1.3.50",
54
61
  "@swc/jest": "^0.2.24",
55
62
  "@types/jest": "^29.5.0",
56
63
  "@types/node": "^18.15.11",
64
+ "@typescript-eslint/eslint-plugin": "^5.58.0",
65
+ "@typescript-eslint/parser": "^5.58.0",
66
+ "eslint": "^8.38.0",
67
+ "eslint-plugin-import": "^2.27.5",
68
+ "eslint-plugin-prettier": "^4.2.1",
57
69
  "fast-glob": "^3.2.12",
58
- "inop": "^0.1.1",
70
+ "husky": "^8.0.3",
71
+ "inop": "^0.2.3",
59
72
  "jest": "^29.5.0",
73
+ "prettier": "^2.8.7",
74
+ "pretty-quick": "^3.1.3",
75
+ "ts-jest": "^29.1.0",
60
76
  "typescript": "^5.0.4"
61
77
  }
62
- }
78
+ }
package/src/combine.ts ADDED
@@ -0,0 +1,23 @@
1
+ import { createPoll } from './deferredPoll.js';
2
+
3
+ export const combine = <T, R = unknown>(...iterables: AsyncIterable<T>[]) => {
4
+ const poll = createPoll<IteratorResult<T, R>>();
5
+
6
+ Promise.all(
7
+ iterables.map(async (iterable) => {
8
+ for await (const value of iterable) {
9
+ await poll.push({ value, done: false }).promise;
10
+ }
11
+ })
12
+ ).then(async () => poll.done({ value: null, done: true }));
13
+
14
+ return {
15
+ [Symbol.asyncIterator]() {
16
+ return {
17
+ next() {
18
+ return poll.pull().promise;
19
+ },
20
+ };
21
+ },
22
+ };
23
+ };
package/src/defer.ts CHANGED
@@ -4,14 +4,14 @@ export enum Status {
4
4
  REJECTED = 'rejected',
5
5
  }
6
6
 
7
- const counter: [number, number] = [0,0];
7
+ const counter: [number, number] = [0, 0];
8
8
  export const getId = () => {
9
9
  const result = Date.now() * 100;
10
10
  if (counter[0] !== result) {
11
11
  counter[0] = result;
12
12
  counter[1] = 0;
13
- };
14
- return (counter[0] + (counter[1]++)).toString(16);
13
+ }
14
+ return (counter[0] + counter[1]++).toString(16);
15
15
  };
16
16
 
17
17
  export class Deferred<T = void, E = unknown> {
@@ -62,4 +62,4 @@ export class Deferred<T = void, E = unknown> {
62
62
 
63
63
  export const defer = <T = void, E = unknown>() => {
64
64
  return new Deferred<T, E>();
65
- }
65
+ };
@@ -0,0 +1,25 @@
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
+ };
@@ -1,37 +1,29 @@
1
- import { defer, Deferred } from './defer';
1
+ import { createPoll } from './deferredPoll.js';
2
2
 
3
3
  export interface TaskCallback<T> {
4
- (value: T): Promise<T>;
4
+ (value: T): Promise<void>;
5
5
  }
6
6
 
7
7
  export interface Task<T, R = unknown> {
8
8
  (callback: TaskCallback<T>): R;
9
9
  }
10
10
 
11
- export const generatorify = <T, R = unknown>(task: Task<T, R>): AsyncIterable<T> => {
12
- const dPoll: Deferred<IteratorResult<T, R>>[] = [defer<IteratorYieldResult<T>>()];
11
+ export const generatorify = <T, R>(task: Task<T, R>): AsyncIterable<T> => {
12
+ const poll = createPoll<IteratorResult<T, R>>();
13
13
 
14
- Promise.resolve(task(value => {
15
- const next = defer<IteratorYieldResult<T>>();
16
- const prev = dPoll.push(next) - 2;
17
- const prevDeferred = dPoll[prev] as Deferred<IteratorYieldResult<T>>;
18
- prevDeferred.resolve({ value, done: false });
19
- return prevDeferred.promise.then(v => v.value);
20
- })).then(async (value) => {
21
- dPoll[dPoll.length - 1].resolve({ value, done: true });
22
- await Promise.all(dPoll.map(d => d.promise));
23
- return { value, done: true };
24
- });
14
+ Promise.resolve(
15
+ task(async (value) => {
16
+ await poll.push({ value, done: false }).promise;
17
+ })
18
+ ).then(async (value) => poll.done({ value, done: true }));
25
19
 
26
20
  return {
27
21
  [Symbol.asyncIterator]() {
28
22
  return {
29
23
  next() {
30
- const current = dPoll[0];
31
- current.promise.then(() => dPoll.shift());
32
- return current.promise;
24
+ return poll.pull().promise;
33
25
  },
34
26
  };
35
- }
27
+ },
36
28
  };
37
- }
29
+ };
package/src/index.ts CHANGED
@@ -1,2 +1,4 @@
1
- export * from './defer';
2
- export * from './generatorify';
1
+ export * from './defer.js';
2
+ export * from './generatorify.js';
3
+ export * from './deferredPoll.js';
4
+ export * from './combine.js';