asygen 0.0.1 → 0.0.3
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 +17 -4
- package/build/defer.cjs +20 -24
- package/build/defer.cjs.map +1 -1
- package/build/defer.d.ts +3 -3
- package/build/defer.js +18 -22
- package/build/defer.js.map +1 -1
- package/build/generatorify.cjs +9 -5
- package/build/generatorify.cjs.map +1 -1
- package/build/generatorify.d.ts +1 -2
- package/build/generatorify.js +9 -4
- package/build/generatorify.js.map +1 -1
- package/build/index.cjs +11 -20
- package/build/index.cjs.map +1 -1
- package/build/index.d.ts +2 -2
- package/build/index.js +2 -2
- package/build/index.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +2 -2
package/README.md
CHANGED
|
@@ -12,8 +12,10 @@ Supports ESM and CommonJS modules.
|
|
|
12
12
|
|
|
13
13
|
## Usage
|
|
14
14
|
|
|
15
|
+
#### Create deferred token
|
|
16
|
+
|
|
15
17
|
```typescript
|
|
16
|
-
import { defer
|
|
18
|
+
import { defer } from 'asygen';
|
|
17
19
|
|
|
18
20
|
const result = defer();
|
|
19
21
|
|
|
@@ -24,9 +26,20 @@ task.once('error', error.reject);
|
|
|
24
26
|
await result.promise;
|
|
25
27
|
|
|
26
28
|
console.log(result.status); // resolved or rejected
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
#### Convert events to asyncGenerator
|
|
32
|
+
```typescript
|
|
33
|
+
import { once } from 'node:events';
|
|
34
|
+
import { defer, Task } from 'asygen';
|
|
35
|
+
|
|
36
|
+
// send data from the event until process exit
|
|
37
|
+
const task: Task = async (send) => {
|
|
38
|
+
process.on('data', send);
|
|
39
|
+
await once(process, 'exit');
|
|
40
|
+
};
|
|
27
41
|
|
|
28
|
-
|
|
29
|
-
for await (const data of generatorify(send => process.on('data', send))) {
|
|
42
|
+
for await (const data of generatorify(task)) {
|
|
30
43
|
// handle data
|
|
31
44
|
}
|
|
32
45
|
```
|
|
@@ -45,6 +58,6 @@ Copyright (c) 2023-present Ivan Zakharchanka
|
|
|
45
58
|
[codecov-url]: https://codecov.io/gh/3axap4eHko/asygen
|
|
46
59
|
[codecov-image]: https://codecov.io/gh/3axap4eHko/asygen/branch/master/graph/badge.svg?token=JZ8QCGH6PI
|
|
47
60
|
[codeclimate-url]: https://codeclimate.com/github/3axap4eHko/asygen/maintainability
|
|
48
|
-
[codeclimate-image]: https://api.codeclimate.com/v1/badges/
|
|
61
|
+
[codeclimate-image]: https://api.codeclimate.com/v1/badges/0f24a357154bada2a37f/maintainability
|
|
49
62
|
[snyk-url]: https://snyk.io/test/npm/asygen/latest
|
|
50
63
|
[snyk-image]: https://img.shields.io/snyk/vulnerabilities/github/3axap4eHko/asygen.svg?maxAge=43200
|
package/build/defer.cjs
CHANGED
|
@@ -9,8 +9,8 @@ function _export(target, all) {
|
|
|
9
9
|
});
|
|
10
10
|
}
|
|
11
11
|
_export(exports, {
|
|
12
|
-
|
|
13
|
-
return
|
|
12
|
+
Status: function() {
|
|
13
|
+
return Status;
|
|
14
14
|
},
|
|
15
15
|
getId: function() {
|
|
16
16
|
return getId;
|
|
@@ -54,12 +54,12 @@ function _defineProperty(obj, key, value) {
|
|
|
54
54
|
}
|
|
55
55
|
return obj;
|
|
56
56
|
}
|
|
57
|
-
var
|
|
58
|
-
(function(
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
})(
|
|
57
|
+
var Status;
|
|
58
|
+
(function(Status) {
|
|
59
|
+
Status["PENDING"] = "pending";
|
|
60
|
+
Status["RESOLVED"] = "resolved";
|
|
61
|
+
Status["REJECTED"] = "rejected";
|
|
62
|
+
})(Status || (Status = {}));
|
|
63
63
|
var counter = [
|
|
64
64
|
0,
|
|
65
65
|
0
|
|
@@ -82,16 +82,10 @@ var Deferred = /*#__PURE__*/ function() {
|
|
|
82
82
|
_defineProperty(this, "_promise", void 0);
|
|
83
83
|
_defineProperty(this, "_resolve", void 0);
|
|
84
84
|
_defineProperty(this, "_reject", void 0);
|
|
85
|
-
_defineProperty(this, "
|
|
85
|
+
_defineProperty(this, "_status", Status.PENDING);
|
|
86
86
|
this._promise = new Promise(function(resolve, reject) {
|
|
87
|
-
_this._resolve =
|
|
88
|
-
|
|
89
|
-
resolve(value);
|
|
90
|
-
};
|
|
91
|
-
_this._reject = function(error) {
|
|
92
|
-
_this._state = State.REJECTED;
|
|
93
|
-
reject(error);
|
|
94
|
-
};
|
|
87
|
+
_this._resolve = resolve;
|
|
88
|
+
_this._reject = reject;
|
|
95
89
|
});
|
|
96
90
|
this.resolve = this.resolve.bind(this);
|
|
97
91
|
this.reject = this.reject.bind(this);
|
|
@@ -100,7 +94,7 @@ var Deferred = /*#__PURE__*/ function() {
|
|
|
100
94
|
{
|
|
101
95
|
key: _Symbol_toStringTag,
|
|
102
96
|
get: function get() {
|
|
103
|
-
return "
|
|
97
|
+
return "Deferred ".concat(this.txts, " ").concat(this._status);
|
|
104
98
|
}
|
|
105
99
|
},
|
|
106
100
|
{
|
|
@@ -110,16 +104,17 @@ var Deferred = /*#__PURE__*/ function() {
|
|
|
110
104
|
}
|
|
111
105
|
},
|
|
112
106
|
{
|
|
113
|
-
key: "
|
|
107
|
+
key: "status",
|
|
114
108
|
get: function get() {
|
|
115
|
-
return this.
|
|
109
|
+
return this._status;
|
|
116
110
|
}
|
|
117
111
|
},
|
|
118
112
|
{
|
|
119
113
|
key: "resolve",
|
|
120
114
|
value: function resolve(value) {
|
|
121
|
-
if (this.
|
|
122
|
-
this.
|
|
115
|
+
if (this._status === Status.PENDING) {
|
|
116
|
+
this._status = Status.RESOLVED;
|
|
117
|
+
this._resolve(value);
|
|
123
118
|
}
|
|
124
119
|
return this;
|
|
125
120
|
}
|
|
@@ -127,8 +122,9 @@ var Deferred = /*#__PURE__*/ function() {
|
|
|
127
122
|
{
|
|
128
123
|
key: "reject",
|
|
129
124
|
value: function reject(error) {
|
|
130
|
-
if (this.
|
|
131
|
-
this.
|
|
125
|
+
if (this._status === Status.PENDING) {
|
|
126
|
+
this._status = Status.REJECTED;
|
|
127
|
+
this._reject(error);
|
|
132
128
|
}
|
|
133
129
|
return this;
|
|
134
130
|
}
|
package/build/defer.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["src/defer.ts"],"sourcesContent":["export enum
|
|
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","Symbol","toStringTag","txts","_promise","_resolve","_reject","_status","Promise","resolve","reject","bind","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,IAAMI,UAA4B;IAAC;IAAE;CAAE;AAChC,IAAMP,QAAQ,WAAM;IACzB,IAAMQ,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;IAkBOC,sBAAAA,OAAOC,WAAW;AAhBlB,IAAA,AAAMZ,yBA8CV,AA9CI;;aAAMA;;8BAAAA;QACX,sBAAQa,QAAOd;QACf,sBAAQe,YAAR,KAAA;QACA,sBAAQC,YAAR,KAAA;QACA,sBAAQC,WAAR,KAAA;QACA,sBAAQC,WAAkBf,OAAOC,OAAO;QAGtC,IAAI,CAACW,QAAQ,GAAG,IAAII,QAAW,SAACC,SAASC,QAAW;YAClD,MAAKL,QAAQ,GAAGI;YAChB,MAAKH,OAAO,GAAGI;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;;iBAb1BrB;;YAgBP,KAACW;iBAAL,eAA2B;gBACzB,OAAO,AAAC,YAAwB,OAAb,IAAI,CAACE,IAAI,EAAC,KAAgB,OAAb,IAAI,CAACI,OAAO;YAC9C;;;YAEIK,KAAAA;iBAAJ,eAAc;gBACZ,OAAO,IAAI,CAACR,QAAQ;YACtB;;;YAEIS,KAAAA;iBAAJ,eAAa;gBACX,OAAO,IAAI,CAACN,OAAO;YACrB;;;YAEAE,KAAAA;mBAAAA,SAAAA,QAAQK,KAAQ,EAAE;gBAChB,IAAI,IAAI,CAACP,OAAO,KAAKf,OAAOC,OAAO,EAAE;oBACnC,IAAI,CAACc,OAAO,GAAGf,OAAOE,QAAQ;oBAC9B,IAAI,CAACW,QAAQ,CAACS;gBAChB,CAAC;gBAED,OAAO,IAAI;YACb;;;YAEAJ,KAAAA;mBAAAA,SAAAA,OAAOK,KAAQ,EAAE;gBACf,IAAI,IAAI,CAACR,OAAO,KAAKf,OAAOC,OAAO,EAAE;oBACnC,IAAI,CAACc,OAAO,GAAGf,OAAOG,QAAQ;oBAC9B,IAAI,CAACW,OAAO,CAACS;gBACf,CAAC;gBACD,OAAO,IAAI;YACb;;;WA3CWzB;;AA8CN,IAAMC,QAAQ,WAA6B;IAChD,OAAO,IAAID;AACb"}
|
package/build/defer.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare enum
|
|
1
|
+
export declare enum Status {
|
|
2
2
|
PENDING = "pending",
|
|
3
3
|
RESOLVED = "resolved",
|
|
4
4
|
REJECTED = "rejected"
|
|
@@ -9,11 +9,11 @@ export declare class Deferred<T = void, E = unknown> {
|
|
|
9
9
|
private _promise;
|
|
10
10
|
private _resolve?;
|
|
11
11
|
private _reject?;
|
|
12
|
-
private
|
|
12
|
+
private _status;
|
|
13
13
|
constructor();
|
|
14
14
|
get [Symbol.toStringTag](): string;
|
|
15
15
|
get promise(): Promise<T>;
|
|
16
|
-
get
|
|
16
|
+
get status(): Status;
|
|
17
17
|
resolve(value: T): this;
|
|
18
18
|
reject(error: E): this;
|
|
19
19
|
}
|
package/build/defer.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export let
|
|
2
|
-
(function(
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
})(
|
|
1
|
+
export let Status;
|
|
2
|
+
(function(Status) {
|
|
3
|
+
Status["PENDING"] = 'pending';
|
|
4
|
+
Status["RESOLVED"] = 'resolved';
|
|
5
|
+
Status["REJECTED"] = 'rejected';
|
|
6
|
+
})(Status || (Status = {}));
|
|
7
7
|
const counter = [
|
|
8
8
|
0,
|
|
9
9
|
0
|
|
@@ -21,39 +21,35 @@ export class Deferred {
|
|
|
21
21
|
_promise;
|
|
22
22
|
_resolve;
|
|
23
23
|
_reject;
|
|
24
|
-
|
|
24
|
+
_status = Status.PENDING;
|
|
25
25
|
constructor(){
|
|
26
26
|
this._promise = new Promise((resolve, reject)=>{
|
|
27
|
-
this._resolve =
|
|
28
|
-
|
|
29
|
-
resolve(value);
|
|
30
|
-
};
|
|
31
|
-
this._reject = (error)=>{
|
|
32
|
-
this._state = State.REJECTED;
|
|
33
|
-
reject(error);
|
|
34
|
-
};
|
|
27
|
+
this._resolve = resolve;
|
|
28
|
+
this._reject = reject;
|
|
35
29
|
});
|
|
36
30
|
this.resolve = this.resolve.bind(this);
|
|
37
31
|
this.reject = this.reject.bind(this);
|
|
38
32
|
}
|
|
39
33
|
get [Symbol.toStringTag]() {
|
|
40
|
-
return `
|
|
34
|
+
return `Deferred ${this.txts} ${this._status}`;
|
|
41
35
|
}
|
|
42
36
|
get promise() {
|
|
43
37
|
return this._promise;
|
|
44
38
|
}
|
|
45
|
-
get
|
|
46
|
-
return this.
|
|
39
|
+
get status() {
|
|
40
|
+
return this._status;
|
|
47
41
|
}
|
|
48
42
|
resolve(value) {
|
|
49
|
-
if (this.
|
|
50
|
-
this.
|
|
43
|
+
if (this._status === Status.PENDING) {
|
|
44
|
+
this._status = Status.RESOLVED;
|
|
45
|
+
this._resolve(value);
|
|
51
46
|
}
|
|
52
47
|
return this;
|
|
53
48
|
}
|
|
54
49
|
reject(error) {
|
|
55
|
-
if (this.
|
|
56
|
-
this.
|
|
50
|
+
if (this._status === Status.PENDING) {
|
|
51
|
+
this._status = Status.REJECTED;
|
|
52
|
+
this._reject(error);
|
|
57
53
|
}
|
|
58
54
|
return this;
|
|
59
55
|
}
|
package/build/defer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["src/defer.ts"],"sourcesContent":["export enum
|
|
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"}
|
package/build/generatorify.cjs
CHANGED
|
@@ -153,11 +153,12 @@ var generatorify = function(task) {
|
|
|
153
153
|
Promise.resolve(task(function(value) {
|
|
154
154
|
var next = (0, _deferCjs.defer)();
|
|
155
155
|
var prev = dPoll.push(next) - 2;
|
|
156
|
-
dPoll[prev]
|
|
156
|
+
var prevDeferred = dPoll[prev];
|
|
157
|
+
prevDeferred.resolve({
|
|
157
158
|
value: value,
|
|
158
159
|
done: false
|
|
159
160
|
});
|
|
160
|
-
return
|
|
161
|
+
return prevDeferred.promise.then(function(v) {
|
|
161
162
|
return v.value;
|
|
162
163
|
});
|
|
163
164
|
})).then(function() {
|
|
@@ -165,6 +166,10 @@ var generatorify = function(task) {
|
|
|
165
166
|
return __generator(this, function(_state) {
|
|
166
167
|
switch(_state.label){
|
|
167
168
|
case 0:
|
|
169
|
+
dPoll[dPoll.length - 1].resolve({
|
|
170
|
+
value: value,
|
|
171
|
+
done: true
|
|
172
|
+
});
|
|
168
173
|
return [
|
|
169
174
|
4,
|
|
170
175
|
Promise.all(dPoll.map(function(d) {
|
|
@@ -190,12 +195,11 @@ var generatorify = function(task) {
|
|
|
190
195
|
return _defineProperty({}, Symbol.asyncIterator, function() {
|
|
191
196
|
return {
|
|
192
197
|
next: function next() {
|
|
193
|
-
var _current_promise;
|
|
194
198
|
var current = dPoll[0];
|
|
195
|
-
current
|
|
199
|
+
current.promise.then(function() {
|
|
196
200
|
return dPoll.shift();
|
|
197
201
|
});
|
|
198
|
-
return current
|
|
202
|
+
return current.promise;
|
|
199
203
|
}
|
|
200
204
|
};
|
|
201
205
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["src/generatorify.ts"],"sourcesContent":["import { defer } from './defer';\n\
|
|
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;;;eAAAA;;;wBAVmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUzB,IAAMA,eAAe,SAAiBC,MAAuC;IAClF,IAAMC,QAA0C;QAACC,IAAAA,eAAK;KAA2B;IAEjFC,QAAQC,OAAO,CAACJ,KAAKK,SAAAA,OAAS;QAC5B,IAAMC,OAAOJ,IAAAA,eAAK;QAClB,IAAMK,OAAON,MAAMO,IAAI,CAACF,QAAQ;QAChC,IAAMG,eAAeR,KAAK,CAACM,KAAK;QAChCE,aAAaL,OAAO,CAAC;YAAEC,OAAAA;YAAOK,MAAM,KAAK;QAAC;QAC1C,OAAOD,aAAaE,OAAO,CAACC,IAAI,CAACC,SAAAA;mBAAKA,EAAER,KAAK;;IAC/C,IAAIO,IAAI;mBAAC,kBAAA,SAAOP,OAAU;;;;wBACxBJ,KAAK,CAACA,MAAMa,MAAM,GAAG,EAAE,CAACV,OAAO,CAAC;4BAAEC,OAAAA;4BAAOK,MAAM,IAAI;wBAAC;wBACpD;;4BAAMP,QAAQY,GAAG,CAACd,MAAMe,GAAG,CAACC,SAAAA;uCAAKA,EAAEN,OAAO;;;;wBAA1C;wBACA;;4BAAO;gCAAEN,OAAAA;gCAAOK,MAAM,IAAI;4BAAC;;;;QAC7B;wBAJgBL;;;;IAMhB,OACE,oBAACa,OAAOC,aAAa,EAArB,WAAyB;QACvB,OAAO;YACLb,MAAAA,SAAAA,OAAO;gBACL,IAAMc,UAAUnB,KAAK,CAAC,EAAE;gBACxBmB,QAAQT,OAAO,CAACC,IAAI,CAAC;2BAAMX,MAAMoB,KAAK;;gBACtC,OAAOD,QAAQT,OAAO;YACxB;QACF;IACF;AAEJ"}
|
package/build/generatorify.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
interface TaskCallback<T> {
|
|
1
|
+
export interface TaskCallback<T> {
|
|
2
2
|
(value: T): Promise<T>;
|
|
3
3
|
}
|
|
4
4
|
export interface Task<T, R = unknown> {
|
|
5
5
|
(callback: TaskCallback<T>): R;
|
|
6
6
|
}
|
|
7
7
|
export declare const generatorify: <T, R = unknown>(task: Task<T, R>) => AsyncIterable<T>;
|
|
8
|
-
export {};
|
package/build/generatorify.js
CHANGED
|
@@ -6,12 +6,17 @@ export const generatorify = (task)=>{
|
|
|
6
6
|
Promise.resolve(task((value)=>{
|
|
7
7
|
const next = defer();
|
|
8
8
|
const prev = dPoll.push(next) - 2;
|
|
9
|
-
dPoll[prev]
|
|
9
|
+
const prevDeferred = dPoll[prev];
|
|
10
|
+
prevDeferred.resolve({
|
|
10
11
|
value,
|
|
11
12
|
done: false
|
|
12
13
|
});
|
|
13
|
-
return
|
|
14
|
+
return prevDeferred.promise.then((v)=>v.value);
|
|
14
15
|
})).then(async (value)=>{
|
|
16
|
+
dPoll[dPoll.length - 1].resolve({
|
|
17
|
+
value,
|
|
18
|
+
done: true
|
|
19
|
+
});
|
|
15
20
|
await Promise.all(dPoll.map((d)=>d.promise));
|
|
16
21
|
return {
|
|
17
22
|
value,
|
|
@@ -23,8 +28,8 @@ export const generatorify = (task)=>{
|
|
|
23
28
|
return {
|
|
24
29
|
next () {
|
|
25
30
|
const current = dPoll[0];
|
|
26
|
-
current
|
|
27
|
-
return current
|
|
31
|
+
current.promise.then(()=>dPoll.shift());
|
|
32
|
+
return current.promise;
|
|
28
33
|
}
|
|
29
34
|
};
|
|
30
35
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["src/generatorify.ts"],"sourcesContent":["import { defer } from './defer';\n\
|
|
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"}
|
package/build/index.cjs
CHANGED
|
@@ -2,27 +2,18 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", {
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
_exportStar(require("./defer.cjs"), exports);
|
|
6
|
+
_exportStar(require("./generatorify.cjs"), exports);
|
|
7
|
+
function _exportStar(from, to) {
|
|
8
|
+
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
|
+
});
|
|
9
15
|
});
|
|
16
|
+
return from;
|
|
10
17
|
}
|
|
11
|
-
_export(exports, {
|
|
12
|
-
defer: function() {
|
|
13
|
-
return _deferCjs.defer;
|
|
14
|
-
},
|
|
15
|
-
Deferred: function() {
|
|
16
|
-
return _deferCjs.Deferred;
|
|
17
|
-
},
|
|
18
|
-
State: function() {
|
|
19
|
-
return _deferCjs.State;
|
|
20
|
-
},
|
|
21
|
-
generatorify: function() {
|
|
22
|
-
return _generatorifyCjs.generatorify;
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
var _deferCjs = require("./defer.cjs");
|
|
26
|
-
var _generatorifyCjs = require("./generatorify.cjs");
|
|
27
18
|
|
|
28
19
|
//# sourceMappingURL=index.cjs.map
|
package/build/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["src/index.ts"],"sourcesContent":["export
|
|
1
|
+
{"version":3,"sources":["src/index.ts"],"sourcesContent":["export * from './defer';\nexport * from './generatorify';\n"],"names":[],"mappings":";;;;oBAAc;oBACA"}
|
package/build/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
1
|
+
export * from './defer';
|
|
2
|
+
export * from './generatorify';
|
package/build/index.js
CHANGED
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["src/index.ts"],"sourcesContent":["export
|
|
1
|
+
{"version":3,"sources":["src/index.ts"],"sourcesContent":["export * from './defer';\nexport * from './generatorify';\n"],"names":[],"mappings":"AAAA,cAAc,aAAU;AACxB,cAAc,oBAAiB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "asygen",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"description": "0-Deps, simple and fast async generator library for browser and NodeJS",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "build/index.cjs",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"test:build": "node src/__tests__/index.cjs && node src/__tests__/index.mjs"
|
|
18
18
|
},
|
|
19
19
|
"engines": {
|
|
20
|
-
"node": ">=
|
|
20
|
+
"node": ">=16"
|
|
21
21
|
},
|
|
22
22
|
"repository": {
|
|
23
23
|
"type": "git",
|
package/src/index.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
1
|
+
export * from './defer';
|
|
2
|
+
export * from './generatorify';
|