asygen 0.0.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/LICENSE ADDED
@@ -0,0 +1,13 @@
1
+ Copyright (c) 2023-present Ivan Zakharchanka
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
package/README.md ADDED
@@ -0,0 +1,50 @@
1
+ # Asygen
2
+
3
+ 0-Deps, simple and fast async generator library for browser and NodeJS.
4
+
5
+ Supports ESM and CommonJS modules.
6
+
7
+ [![Build Status][github-image]][github-url]
8
+ [![NPM version][npm-image]][npm-url]
9
+ [![Downloads][downloads-image]][npm-url]
10
+ [![Coverage Status][codecov-image]][codecov-url]
11
+ [![Maintainability][codeclimate-image]][codeclimate-url]
12
+
13
+ ## Usage
14
+
15
+ ```typescript
16
+ import { defer, generatorify } from 'asygen';
17
+
18
+ const result = defer();
19
+
20
+ console.log(result.status); // pending
21
+
22
+ task.once('data', error.resolve);
23
+ task.once('error', error.reject);
24
+ await result.promise;
25
+
26
+ console.log(result.status); // resolved or rejected
27
+
28
+ // easy way to turn your events into asyncGenerator
29
+ for await (const data of generatorify(send => process.on('data', send))) {
30
+ // handle data
31
+ }
32
+ ```
33
+
34
+ ## License
35
+
36
+ License [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0)
37
+ Copyright (c) 2023-present Ivan Zakharchanka
38
+
39
+
40
+ [npm-url]: https://www.npmjs.com/package/asygen
41
+ [downloads-image]: https://img.shields.io/npm/dw/asygen.svg?maxAge=43200
42
+ [npm-image]: https://img.shields.io/npm/v/asygen.svg?maxAge=43200
43
+ [github-url]: https://github.com/3axap4eHko/asygen/actions/workflows/cicd.yml
44
+ [github-image]: https://github.com/3axap4eHko/asygen/actions/workflows/cicd.yml/badge.svg
45
+ [codecov-url]: https://codecov.io/gh/3axap4eHko/asygen
46
+ [codecov-image]: https://codecov.io/gh/3axap4eHko/asygen/branch/master/graph/badge.svg?token=JZ8QCGH6PI
47
+ [codeclimate-url]: https://codeclimate.com/github/3axap4eHko/asygen/maintainability
48
+ [codeclimate-image]: https://api.codeclimate.com/v1/badges/0ba20f27f6db2b0fec8c/maintainability
49
+ [snyk-url]: https://snyk.io/test/npm/asygen/latest
50
+ [snyk-image]: https://img.shields.io/snyk/vulnerabilities/github/3axap4eHko/asygen.svg?maxAge=43200
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ State: function() {
13
+ return State;
14
+ },
15
+ getId: function() {
16
+ return getId;
17
+ },
18
+ Deferred: function() {
19
+ return Deferred;
20
+ },
21
+ defer: function() {
22
+ return defer;
23
+ }
24
+ });
25
+ function _classCallCheck(instance, Constructor) {
26
+ if (!(instance instanceof Constructor)) {
27
+ throw new TypeError("Cannot call a class as a function");
28
+ }
29
+ }
30
+ function _defineProperties(target, props) {
31
+ for(var i = 0; i < props.length; i++){
32
+ var descriptor = props[i];
33
+ descriptor.enumerable = descriptor.enumerable || false;
34
+ descriptor.configurable = true;
35
+ if ("value" in descriptor) descriptor.writable = true;
36
+ Object.defineProperty(target, descriptor.key, descriptor);
37
+ }
38
+ }
39
+ function _createClass(Constructor, protoProps, staticProps) {
40
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
41
+ if (staticProps) _defineProperties(Constructor, staticProps);
42
+ return Constructor;
43
+ }
44
+ function _defineProperty(obj, key, value) {
45
+ if (key in obj) {
46
+ Object.defineProperty(obj, key, {
47
+ value: value,
48
+ enumerable: true,
49
+ configurable: true,
50
+ writable: true
51
+ });
52
+ } else {
53
+ obj[key] = value;
54
+ }
55
+ return obj;
56
+ }
57
+ var State;
58
+ (function(State) {
59
+ State["PENDING"] = "pending";
60
+ State["RESOLVED"] = "resolved";
61
+ State["REJECTED"] = "rejected";
62
+ })(State || (State = {}));
63
+ var counter = [
64
+ 0,
65
+ 0
66
+ ];
67
+ var getId = function() {
68
+ var result = Date.now() * 100;
69
+ if (counter[0] !== result) {
70
+ counter[0] = result;
71
+ counter[1] = 0;
72
+ }
73
+ return (counter[0] + counter[1]++).toString(16);
74
+ };
75
+ var _Symbol_toStringTag = Symbol.toStringTag;
76
+ var Deferred = /*#__PURE__*/ function() {
77
+ "use strict";
78
+ function Deferred() {
79
+ var _this = this;
80
+ _classCallCheck(this, Deferred);
81
+ _defineProperty(this, "txts", getId());
82
+ _defineProperty(this, "_promise", void 0);
83
+ _defineProperty(this, "_resolve", void 0);
84
+ _defineProperty(this, "_reject", void 0);
85
+ _defineProperty(this, "_state", State.PENDING);
86
+ this._promise = new Promise(function(resolve, reject) {
87
+ _this._resolve = function(value) {
88
+ _this._state = State.RESOLVED;
89
+ resolve(value);
90
+ };
91
+ _this._reject = function(error) {
92
+ _this._state = State.REJECTED;
93
+ reject(error);
94
+ };
95
+ });
96
+ this.resolve = this.resolve.bind(this);
97
+ this.reject = this.reject.bind(this);
98
+ }
99
+ _createClass(Deferred, [
100
+ {
101
+ key: _Symbol_toStringTag,
102
+ get: function get() {
103
+ return "Deffer ".concat(this.txts, " ").concat(this._state);
104
+ }
105
+ },
106
+ {
107
+ key: "promise",
108
+ get: function get() {
109
+ return this._promise;
110
+ }
111
+ },
112
+ {
113
+ key: "state",
114
+ get: function get() {
115
+ return this._state;
116
+ }
117
+ },
118
+ {
119
+ key: "resolve",
120
+ value: function resolve(value) {
121
+ if (this._state === State.PENDING) {
122
+ this._resolve && this._resolve(value);
123
+ }
124
+ return this;
125
+ }
126
+ },
127
+ {
128
+ key: "reject",
129
+ value: function reject(error) {
130
+ if (this._state === State.PENDING) {
131
+ this._reject && this._reject(error);
132
+ }
133
+ return this;
134
+ }
135
+ }
136
+ ]);
137
+ return Deferred;
138
+ }();
139
+ var defer = function() {
140
+ return new Deferred();
141
+ };
142
+
143
+ //# sourceMappingURL=defer.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["src/defer.ts"],"sourcesContent":["export enum State {\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 _state: State = State.PENDING;\n\n constructor() {\n this._promise = new Promise<T>((resolve, reject) => {\n this._resolve = (value: T) => {\n this._state = State.RESOLVED;\n resolve(value);\n };\n this._reject = (error: unknown) => {\n this._state = State.REJECTED;\n reject(error)\n };\n });\n this.resolve = this.resolve.bind(this);\n this.reject = this.reject.bind(this);\n }\n\n get [Symbol.toStringTag]() {\n return `Deffer ${this.txts} ${this._state}`;\n }\n\n get promise() {\n return this._promise;\n }\n\n get state() {\n return this._state;\n }\n\n resolve(value: T) {\n if (this._state === State.PENDING) {\n this._resolve && this._resolve(value);\n }\n return this;\n }\n\n reject(error: E) {\n if (this._state === State.PENDING) {\n this._reject && 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","State","PENDING","RESOLVED","REJECTED","counter","result","Date","now","toString","Symbol","toStringTag","txts","_promise","_resolve","_reject","_state","Promise","resolve","reject","value","error","bind","promise","state"],"mappings":";;;;;;;;;;;;;;IAOaA,KAAK;eAALA;;IASAC,QAAQ;eAARA;;IAiDAC,KAAK;eAALA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAjEN;UAAKC,KAAK;IAALA,MACVC,aAAU;IADAD,MAEVE,cAAW;IAFDF,MAGVG,cAAW;GAHDH,UAAAA;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;IAwBOC,sBAAAA,OAAOC,WAAW;AAtBlB,IAAA,AAAMZ,yBAiDV,AAjDI;;aAAMA;;8BAAAA;QACX,sBAAQa,QAAOd;QACf,sBAAQe,YAAR,KAAA;QACA,sBAAQC,YAAR,KAAA;QACA,sBAAQC,WAAR,KAAA;QACA,sBAAQC,UAAgBf,MAAMC,OAAO;QAGnC,IAAI,CAACW,QAAQ,GAAG,IAAII,QAAW,SAACC,SAASC,QAAW;YAClD,MAAKL,QAAQ,GAAG,SAACM,OAAa;gBAC5B,MAAKJ,MAAM,GAAGf,MAAME,QAAQ;gBAC5Be,QAAQE;YACV;YACA,MAAKL,OAAO,GAAG,SAACM,OAAmB;gBACjC,MAAKL,MAAM,GAAGf,MAAMG,QAAQ;gBAC5Be,OAAOE;YACT;QACF;QACA,IAAI,CAACH,OAAO,GAAG,IAAI,CAACA,OAAO,CAACI,IAAI,CAAC,IAAI;QACrC,IAAI,CAACH,MAAM,GAAG,IAAI,CAACA,MAAM,CAACG,IAAI,CAAC,IAAI;;iBAnB1BvB;;YAsBP,KAACW;iBAAL,eAA2B;gBACzB,OAAO,AAAC,UAAsB,OAAb,IAAI,CAACE,IAAI,EAAC,KAAe,OAAZ,IAAI,CAACI,MAAM;YAC3C;;;YAEIO,KAAAA;iBAAJ,eAAc;gBACZ,OAAO,IAAI,CAACV,QAAQ;YACtB;;;YAEIW,KAAAA;iBAAJ,eAAY;gBACV,OAAO,IAAI,CAACR,MAAM;YACpB;;;YAEAE,KAAAA;mBAAAA,SAAAA,QAAQE,KAAQ,EAAE;gBAChB,IAAI,IAAI,CAACJ,MAAM,KAAKf,MAAMC,OAAO,EAAE;oBACjC,IAAI,CAACY,QAAQ,IAAI,IAAI,CAACA,QAAQ,CAACM;gBACjC,CAAC;gBACD,OAAO,IAAI;YACb;;;YAEAD,KAAAA;mBAAAA,SAAAA,OAAOE,KAAQ,EAAE;gBACf,IAAI,IAAI,CAACL,MAAM,KAAKf,MAAMC,OAAO,EAAE;oBACjC,IAAI,CAACa,OAAO,IAAI,IAAI,CAACA,OAAO,CAACM;gBAC/B,CAAC;gBACD,OAAO,IAAI;YACb;;;WA9CWtB;;AAiDN,IAAMC,QAAQ,WAA6B;IAChD,OAAO,IAAID;AACb"}
@@ -0,0 +1,20 @@
1
+ export declare enum State {
2
+ PENDING = "pending",
3
+ RESOLVED = "resolved",
4
+ REJECTED = "rejected"
5
+ }
6
+ export declare const getId: () => string;
7
+ export declare class Deferred<T = void, E = unknown> {
8
+ private txts;
9
+ private _promise;
10
+ private _resolve?;
11
+ private _reject?;
12
+ private _state;
13
+ constructor();
14
+ get [Symbol.toStringTag](): string;
15
+ get promise(): Promise<T>;
16
+ get state(): State;
17
+ resolve(value: T): this;
18
+ reject(error: E): this;
19
+ }
20
+ export declare const defer: <T = void, E = unknown>() => Deferred<T, E>;
package/build/defer.js ADDED
@@ -0,0 +1,65 @@
1
+ export let State;
2
+ (function(State) {
3
+ State["PENDING"] = 'pending';
4
+ State["RESOLVED"] = 'resolved';
5
+ State["REJECTED"] = 'rejected';
6
+ })(State || (State = {}));
7
+ const counter = [
8
+ 0,
9
+ 0
10
+ ];
11
+ export const getId = ()=>{
12
+ const result = Date.now() * 100;
13
+ if (counter[0] !== result) {
14
+ counter[0] = result;
15
+ counter[1] = 0;
16
+ }
17
+ return (counter[0] + counter[1]++).toString(16);
18
+ };
19
+ export class Deferred {
20
+ txts = getId();
21
+ _promise;
22
+ _resolve;
23
+ _reject;
24
+ _state = State.PENDING;
25
+ constructor(){
26
+ this._promise = new Promise((resolve, reject)=>{
27
+ this._resolve = (value)=>{
28
+ this._state = State.RESOLVED;
29
+ resolve(value);
30
+ };
31
+ this._reject = (error)=>{
32
+ this._state = State.REJECTED;
33
+ reject(error);
34
+ };
35
+ });
36
+ this.resolve = this.resolve.bind(this);
37
+ this.reject = this.reject.bind(this);
38
+ }
39
+ get [Symbol.toStringTag]() {
40
+ return `Deffer ${this.txts} ${this._state}`;
41
+ }
42
+ get promise() {
43
+ return this._promise;
44
+ }
45
+ get state() {
46
+ return this._state;
47
+ }
48
+ resolve(value) {
49
+ if (this._state === State.PENDING) {
50
+ this._resolve && this._resolve(value);
51
+ }
52
+ return this;
53
+ }
54
+ reject(error) {
55
+ if (this._state === State.PENDING) {
56
+ this._reject && this._reject(error);
57
+ }
58
+ return this;
59
+ }
60
+ }
61
+ export const defer = ()=>{
62
+ return new Deferred();
63
+ };
64
+
65
+ //# sourceMappingURL=defer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["src/defer.ts"],"sourcesContent":["export enum State {\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 _state: State = State.PENDING;\n\n constructor() {\n this._promise = new Promise<T>((resolve, reject) => {\n this._resolve = (value: T) => {\n this._state = State.RESOLVED;\n resolve(value);\n };\n this._reject = (error: unknown) => {\n this._state = State.REJECTED;\n reject(error)\n };\n });\n this.resolve = this.resolve.bind(this);\n this.reject = this.reject.bind(this);\n }\n\n get [Symbol.toStringTag]() {\n return `Deffer ${this.txts} ${this._state}`;\n }\n\n get promise() {\n return this._promise;\n }\n\n get state() {\n return this._state;\n }\n\n resolve(value: T) {\n if (this._state === State.PENDING) {\n this._resolve && this._resolve(value);\n }\n return this;\n }\n\n reject(error: E) {\n if (this._state === State.PENDING) {\n this._reject && 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":["State","PENDING","RESOLVED","REJECTED","counter","getId","result","Date","now","toString","Deferred","txts","_promise","_resolve","_reject","_state","constructor","Promise","resolve","reject","value","error","bind","Symbol","toStringTag","promise","state","defer"],"mappings":"WAAO;UAAKA,KAAK;IAALA,MACVC,aAAU;IADAD,MAEVE,cAAW;IAFDF,MAGVG,cAAW;GAHDH,UAAAA;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,SAAgBf,MAAMC,OAAO,CAAC;IAEtCe,aAAc;QACZ,IAAI,CAACJ,QAAQ,GAAG,IAAIK,QAAW,CAACC,SAASC,SAAW;YAClD,IAAI,CAACN,QAAQ,GAAG,CAACO,QAAa;gBAC5B,IAAI,CAACL,MAAM,GAAGf,MAAME,QAAQ;gBAC5BgB,QAAQE;YACV;YACA,IAAI,CAACN,OAAO,GAAG,CAACO,QAAmB;gBACjC,IAAI,CAACN,MAAM,GAAGf,MAAMG,QAAQ;gBAC5BgB,OAAOE;YACT;QACF;QACA,IAAI,CAACH,OAAO,GAAG,IAAI,CAACA,OAAO,CAACI,IAAI,CAAC,IAAI;QACrC,IAAI,CAACH,MAAM,GAAG,IAAI,CAACA,MAAM,CAACG,IAAI,CAAC,IAAI;IACrC;IAEA,IAAI,CAACC,OAAOC,WAAW,CAAC,GAAG;QACzB,OAAO,CAAC,OAAO,EAAE,IAAI,CAACb,IAAI,CAAC,CAAC,EAAE,IAAI,CAACI,MAAM,CAAC,CAAC;IAC7C;IAEA,IAAIU,UAAU;QACZ,OAAO,IAAI,CAACb,QAAQ;IACtB;IAEA,IAAIc,QAAQ;QACV,OAAO,IAAI,CAACX,MAAM;IACpB;IAEAG,QAAQE,KAAQ,EAAE;QAChB,IAAI,IAAI,CAACL,MAAM,KAAKf,MAAMC,OAAO,EAAE;YACjC,IAAI,CAACY,QAAQ,IAAI,IAAI,CAACA,QAAQ,CAACO;QACjC,CAAC;QACD,OAAO,IAAI;IACb;IAEAD,OAAOE,KAAQ,EAAE;QACf,IAAI,IAAI,CAACN,MAAM,KAAKf,MAAMC,OAAO,EAAE;YACjC,IAAI,CAACa,OAAO,IAAI,IAAI,CAACA,OAAO,CAACO;QAC/B,CAAC;QACD,OAAO,IAAI;IACb;AACF,CAAC;AAED,OAAO,MAAMM,QAAQ,IAA6B;IAChD,OAAO,IAAIjB;AACb,EAAC"}
@@ -0,0 +1,204 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "generatorify", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return generatorify;
9
+ }
10
+ });
11
+ var _deferCjs = require("./defer.cjs");
12
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
13
+ try {
14
+ var info = gen[key](arg);
15
+ var value = info.value;
16
+ } catch (error) {
17
+ reject(error);
18
+ return;
19
+ }
20
+ if (info.done) {
21
+ resolve(value);
22
+ } else {
23
+ Promise.resolve(value).then(_next, _throw);
24
+ }
25
+ }
26
+ function _asyncToGenerator(fn) {
27
+ return function() {
28
+ var self = this, args = arguments;
29
+ return new Promise(function(resolve, reject) {
30
+ var gen = fn.apply(self, args);
31
+ function _next(value) {
32
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
33
+ }
34
+ function _throw(err) {
35
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
36
+ }
37
+ _next(undefined);
38
+ });
39
+ };
40
+ }
41
+ function _defineProperty(obj, key, value) {
42
+ if (key in obj) {
43
+ Object.defineProperty(obj, key, {
44
+ value: value,
45
+ enumerable: true,
46
+ configurable: true,
47
+ writable: true
48
+ });
49
+ } else {
50
+ obj[key] = value;
51
+ }
52
+ return obj;
53
+ }
54
+ var __generator = (void 0) && (void 0).__generator || function(thisArg, body) {
55
+ var f, y, t, g, _ = {
56
+ label: 0,
57
+ sent: function() {
58
+ if (t[0] & 1) throw t[1];
59
+ return t[1];
60
+ },
61
+ trys: [],
62
+ ops: []
63
+ };
64
+ return(g = {
65
+ next: verb(0),
66
+ "throw": verb(1),
67
+ "return": verb(2)
68
+ }, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
69
+ return this;
70
+ }), g);
71
+ function verb(n) {
72
+ return function(v) {
73
+ return step([
74
+ n,
75
+ v
76
+ ]);
77
+ };
78
+ }
79
+ function step(op) {
80
+ if (f) throw new TypeError("Generator is already executing.");
81
+ while(_)try {
82
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
83
+ if (y = 0, t) op = [
84
+ op[0] & 2,
85
+ t.value
86
+ ];
87
+ switch(op[0]){
88
+ case 0:
89
+ case 1:
90
+ t = op;
91
+ break;
92
+ case 4:
93
+ _.label++;
94
+ return {
95
+ value: op[1],
96
+ done: false
97
+ };
98
+ case 5:
99
+ _.label++;
100
+ y = op[1];
101
+ op = [
102
+ 0
103
+ ];
104
+ continue;
105
+ case 7:
106
+ op = _.ops.pop();
107
+ _.trys.pop();
108
+ continue;
109
+ default:
110
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
111
+ _ = 0;
112
+ continue;
113
+ }
114
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
115
+ _.label = op[1];
116
+ break;
117
+ }
118
+ if (op[0] === 6 && _.label < t[1]) {
119
+ _.label = t[1];
120
+ t = op;
121
+ break;
122
+ }
123
+ if (t && _.label < t[2]) {
124
+ _.label = t[2];
125
+ _.ops.push(op);
126
+ break;
127
+ }
128
+ if (t[2]) _.ops.pop();
129
+ _.trys.pop();
130
+ continue;
131
+ }
132
+ op = body.call(thisArg, _);
133
+ } catch (e) {
134
+ op = [
135
+ 6,
136
+ e
137
+ ];
138
+ y = 0;
139
+ } finally{
140
+ f = t = 0;
141
+ }
142
+ if (op[0] & 5) throw op[1];
143
+ return {
144
+ value: op[0] ? op[1] : void 0,
145
+ done: true
146
+ };
147
+ }
148
+ };
149
+ var generatorify = function(task) {
150
+ var dPoll = [
151
+ (0, _deferCjs.defer)()
152
+ ];
153
+ Promise.resolve(task(function(value) {
154
+ var next = (0, _deferCjs.defer)();
155
+ var prev = dPoll.push(next) - 2;
156
+ dPoll[prev].resolve({
157
+ value: value,
158
+ done: false
159
+ });
160
+ return dPoll[prev].promise.then(function(v) {
161
+ return v.value;
162
+ });
163
+ })).then(function() {
164
+ var _ref = _asyncToGenerator(function(value) {
165
+ return __generator(this, function(_state) {
166
+ switch(_state.label){
167
+ case 0:
168
+ return [
169
+ 4,
170
+ Promise.all(dPoll.map(function(d) {
171
+ return d.promise;
172
+ }))
173
+ ];
174
+ case 1:
175
+ _state.sent();
176
+ return [
177
+ 2,
178
+ {
179
+ value: value,
180
+ done: true
181
+ }
182
+ ];
183
+ }
184
+ });
185
+ });
186
+ return function(value) {
187
+ return _ref.apply(this, arguments);
188
+ };
189
+ }());
190
+ return _defineProperty({}, Symbol.asyncIterator, function() {
191
+ return {
192
+ next: function next() {
193
+ var _current_promise;
194
+ var current = dPoll[0];
195
+ current === null || current === void 0 ? void 0 : (_current_promise = current.promise) === null || _current_promise === void 0 ? void 0 : _current_promise.then(function() {
196
+ return dPoll.shift();
197
+ });
198
+ return current === null || current === void 0 ? void 0 : current.promise;
199
+ }
200
+ };
201
+ });
202
+ };
203
+
204
+ //# sourceMappingURL=generatorify.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["src/generatorify.ts"],"sourcesContent":["import { defer } from './defer';\n\ninterface GeneratorState<T> {\n value: T;\n done: boolean\n}\n\ninterface 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 = [defer<GeneratorState<T>>()];\n\n Promise.resolve(task(value => {\n const next = defer<GeneratorState<T>>();\n const prev = dPoll.push(next) - 2;\n dPoll[prev].resolve({ value, done: false });\n return dPoll[prev].promise.then(v => v.value);\n })).then(async (value) => {\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","done","promise","then","v","all","map","d","Symbol","asyncIterator","current","shift"],"mappings":";;;;+BAeaA;;;eAAAA;;;wBAfS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAef,IAAMA,eAAe,SAAiBC,MAAuC;IAClF,IAAMC,QAAQ;QAACC,IAAAA,eAAK;KAAsB;IAE1CC,QAAQC,OAAO,CAACJ,KAAKK,SAAAA,OAAS;QAC5B,IAAMC,OAAOJ,IAAAA,eAAK;QAClB,IAAMK,OAAON,MAAMO,IAAI,CAACF,QAAQ;QAChCL,KAAK,CAACM,KAAK,CAACH,OAAO,CAAC;YAAEC,OAAAA;YAAOI,MAAM,KAAK;QAAC;QACzC,OAAOR,KAAK,CAACM,KAAK,CAACG,OAAO,CAACC,IAAI,CAACC,SAAAA;mBAAKA,EAAEP,KAAK;;IAC9C,IAAIM,IAAI;mBAAC,kBAAA,SAAON,OAAU;;;;wBACxB;;4BAAMF,QAAQU,GAAG,CAACZ,MAAMa,GAAG,CAACC,SAAAA;uCAAKA,EAAEL,OAAO;;;;wBAA1C;wBACA;;4BAAO;gCAAEL,OAAAA;gCAAOI,MAAM,IAAI;4BAAC;;;;QAC7B;wBAHgBJ;;;;IAKhB,OACE,oBAACW,OAAOC,aAAa,EAArB,WAAyB;QACvB,OAAO;YACLX,MAAAA,SAAAA,OAAO;oBAELY;gBADA,IAAMA,UAAUjB,KAAK,CAAC,EAAE;gBACxBiB,oBAAAA,qBAAAA,KAAAA,IAAAA,CAAAA,mBAAAA,QAASR,OAAO,cAAhBQ,8BAAAA,KAAAA,IAAAA,iBAAkBP,KAAK;2BAAMV,MAAMkB,KAAK;;gBACxC,OAAOD,oBAAAA,qBAAAA,KAAAA,IAAAA,QAASR,OAAO;YACzB;QACF;IACF;AAEJ"}
@@ -0,0 +1,8 @@
1
+ interface TaskCallback<T> {
2
+ (value: T): Promise<T>;
3
+ }
4
+ export interface Task<T, R = unknown> {
5
+ (callback: TaskCallback<T>): R;
6
+ }
7
+ export declare const generatorify: <T, R = unknown>(task: Task<T, R>) => AsyncIterable<T>;
8
+ export {};
@@ -0,0 +1,34 @@
1
+ import { defer } from "./defer.js";
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
+ dPoll[prev].resolve({
10
+ value,
11
+ done: false
12
+ });
13
+ return dPoll[prev].promise.then((v)=>v.value);
14
+ })).then(async (value)=>{
15
+ await Promise.all(dPoll.map((d)=>d.promise));
16
+ return {
17
+ value,
18
+ done: true
19
+ };
20
+ });
21
+ return {
22
+ [Symbol.asyncIterator] () {
23
+ return {
24
+ next () {
25
+ const current = dPoll[0];
26
+ current?.promise?.then(()=>dPoll.shift());
27
+ return current?.promise;
28
+ }
29
+ };
30
+ }
31
+ };
32
+ };
33
+
34
+ //# sourceMappingURL=generatorify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["src/generatorify.ts"],"sourcesContent":["import { defer } from './defer';\n\ninterface GeneratorState<T> {\n value: T;\n done: boolean\n}\n\ninterface 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 = [defer<GeneratorState<T>>()];\n\n Promise.resolve(task(value => {\n const next = defer<GeneratorState<T>>();\n const prev = dPoll.push(next) - 2;\n dPoll[prev].resolve({ value, done: false });\n return dPoll[prev].promise.then(v => v.value);\n })).then(async (value) => {\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","done","promise","then","v","all","map","d","Symbol","asyncIterator","current","shift"],"mappings":"AAAA,SAASA,KAAK,QAAQ,aAAU;AAehC,OAAO,MAAMC,eAAe,CAAiBC,OAAuC;IAClF,MAAMC,QAAQ;QAACH;KAA2B;IAE1CI,QAAQC,OAAO,CAACH,KAAKI,CAAAA,QAAS;QAC5B,MAAMC,OAAOP;QACb,MAAMQ,OAAOL,MAAMM,IAAI,CAACF,QAAQ;QAChCJ,KAAK,CAACK,KAAK,CAACH,OAAO,CAAC;YAAEC;YAAOI,MAAM,KAAK;QAAC;QACzC,OAAOP,KAAK,CAACK,KAAK,CAACG,OAAO,CAACC,IAAI,CAACC,CAAAA,IAAKA,EAAEP,KAAK;IAC9C,IAAIM,IAAI,CAAC,OAAON,QAAU;QACxB,MAAMF,QAAQU,GAAG,CAACX,MAAMY,GAAG,CAACC,CAAAA,IAAKA,EAAEL,OAAO;QAC1C,OAAO;YAAEL;YAAOI,MAAM,IAAI;QAAC;IAC7B;IAEA,OAAO;QACL,CAACO,OAAOC,aAAa,CAAC,IAAG;YACvB,OAAO;gBACLX,QAAO;oBACL,MAAMY,UAAUhB,KAAK,CAAC,EAAE;oBACxBgB,SAASR,SAASC,KAAK,IAAMT,MAAMiB,KAAK;oBACxC,OAAOD,SAASR;gBAClB;YACF;QACF;IACF;AACF,EAAC"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
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
+
28
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["src/index.ts"],"sourcesContent":["export { defer, Deferred, State } from './defer';\nexport { generatorify } from './generatorify';\n"],"names":["defer","Deferred","State","generatorify"],"mappings":";;;;;;;;;;;IAASA,KAAK;eAALA,eAAK;;IAAEC,QAAQ;eAARA,kBAAQ;;IAAEC,KAAK;eAALA,eAAK;;IACtBC,YAAY;eAAZA,6BAAY;;;wBADkB;+BACV"}
@@ -0,0 +1,2 @@
1
+ export { defer, Deferred, State } from './defer';
2
+ export { generatorify } from './generatorify';
package/build/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export { defer, Deferred, State } from "./defer.js";
2
+ export { generatorify } from "./generatorify.js";
3
+
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["src/index.ts"],"sourcesContent":["export { defer, Deferred, State } from './defer';\nexport { generatorify } from './generatorify';\n"],"names":["defer","Deferred","State","generatorify"],"mappings":"AAAA,SAASA,KAAK,EAAEC,QAAQ,EAAEC,KAAK,QAAQ,aAAU;AACjD,SAASC,YAAY,QAAQ,oBAAiB"}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "asygen",
3
+ "version": "0.0.1",
4
+ "description": "0-Deps, simple and fast async generator library for browser and NodeJS",
5
+ "type": "module",
6
+ "main": "build/index.cjs",
7
+ "types": "build/index.d.ts",
8
+ "files": [
9
+ "build",
10
+ "src/index.ts"
11
+ ],
12
+ "module": "build/index.js",
13
+ "sideEffects": false,
14
+ "scripts": {
15
+ "build": "rm -rf build && ./scripts/build.js && tsc --declaration --emitDeclarationOnly",
16
+ "test": "jest",
17
+ "test:build": "node src/__tests__/index.cjs && node src/__tests__/index.mjs"
18
+ },
19
+ "engines": {
20
+ "node": ">=15"
21
+ },
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "git+https://github.com/3axap4eHko/asygen.git"
25
+ },
26
+ "funding": "https://github.com/sponsors/3axap4eHko",
27
+ "author": {
28
+ "name": "Ivan Zakharchanka",
29
+ "email": "3axap4eHko@gmail.com",
30
+ "url": "https://linkedin.com/in/3axap4eHko"
31
+ },
32
+ "keywords": [],
33
+ "license": "Apache-2.0",
34
+ "bugs": {
35
+ "url": "https://github.com/3axap4eHko/asygen/issues"
36
+ },
37
+ "homepage": "https://github.com/3axap4eHko/asygen#readme",
38
+ "devDependencies": {
39
+ "@swc/cli": "^0.1.62",
40
+ "@swc/core": "^1.3.41",
41
+ "@swc/jest": "^0.2.24",
42
+ "@types/jest": "^29.5.0",
43
+ "@types/node": "^18.15.3",
44
+ "glob": "^9.3.0",
45
+ "jest": "^29.5.0",
46
+ "typescript": "^5.0.2"
47
+ }
48
+ }
package/src/index.ts ADDED
@@ -0,0 +1,2 @@
1
+ export { defer, Deferred, State } from './defer';
2
+ export { generatorify } from './generatorify';