lib0 0.2.92 → 0.2.94
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/bin/0ecdsa-generate-keypair.js +2 -2
- package/coverage/tmp/coverage-40409-1715766144203-0.json +1 -0
- package/dist/{broadcastchannel-80813eea.cjs → broadcastchannel-d3d8f202.cjs} +2 -2
- package/dist/{broadcastchannel-80813eea.cjs.map → broadcastchannel-d3d8f202.cjs.map} +1 -1
- package/dist/broadcastchannel.cjs +5 -5
- package/dist/{buffer-f11b8d4d.cjs → buffer-f10b0247.cjs} +2 -2
- package/dist/{buffer-f11b8d4d.cjs.map → buffer-f10b0247.cjs.map} +1 -1
- package/dist/buffer.cjs +4 -4
- package/dist/cache.cjs +2 -2
- package/dist/component.cjs +3 -3
- package/dist/{diff-fbaa426b.cjs → diff-38d8f45b.cjs} +2 -2
- package/dist/{diff-fbaa426b.cjs.map → diff-38d8f45b.cjs.map} +1 -1
- package/dist/diff.cjs +3 -3
- package/dist/{environment-f4d7c3e5.cjs → environment-45676492.cjs} +4 -4
- package/dist/environment-45676492.cjs.map +1 -0
- package/dist/environment.cjs +3 -3
- package/dist/{function-314fdc56.cjs → function-18d343cf.cjs} +2 -2
- package/dist/{function-314fdc56.cjs.map → function-18d343cf.cjs.map} +1 -1
- package/dist/function.cjs +2 -2
- package/dist/index.cjs +9 -9
- package/dist/{indexeddb-8d495848.cjs → indexeddb-0cbb4d6f.cjs} +2 -2
- package/dist/{indexeddb-8d495848.cjs.map → indexeddb-0cbb4d6f.cjs.map} +1 -1
- package/dist/indexeddb.cjs +2 -2
- package/dist/indexeddbV2.cjs +287 -0
- package/dist/indexeddbV2.cjs.map +1 -0
- package/dist/indexeddbV2.d.ts +35 -0
- package/dist/indexeddbV2.d.ts.map +1 -0
- package/dist/indexeddbV2.test.d.ts +3 -0
- package/dist/indexeddbV2.test.d.ts.map +1 -0
- package/dist/jwt.cjs +4 -4
- package/dist/list.cjs +2 -2
- package/dist/logging.cjs +3 -3
- package/dist/logging.common.cjs +3 -3
- package/dist/logging.node.cjs +3 -3
- package/dist/{object-fecf6a7b.cjs → object-b0539a4e.cjs} +11 -2
- package/dist/object-b0539a4e.cjs.map +1 -0
- package/dist/object.cjs +2 -1
- package/dist/object.cjs.map +1 -1
- package/dist/object.d.ts +3 -0
- package/dist/object.d.ts.map +1 -1
- package/dist/performance.node.cjs +2 -2
- package/dist/pledge.cjs +307 -0
- package/dist/pledge.cjs.map +1 -0
- package/dist/pledge.d.ts +68 -0
- package/dist/pledge.d.ts.map +1 -0
- package/dist/pledge.test.d.ts +6 -0
- package/dist/pledge.test.d.ts.map +1 -0
- package/dist/{prng-e4f28259.cjs → prng-4ea69eec.cjs} +2 -2
- package/dist/{prng-e4f28259.cjs.map → prng-4ea69eec.cjs.map} +1 -1
- package/dist/prng.cjs +5 -5
- package/dist/{promise-afe9dfc3.cjs → promise-7d13a97c.cjs} +22 -2
- package/dist/promise-7d13a97c.cjs.map +1 -0
- package/dist/promise.cjs +2 -1
- package/dist/promise.cjs.map +1 -1
- package/dist/promise.d.ts +1 -0
- package/dist/promise.d.ts.map +1 -1
- package/dist/promise.test.d.ts.map +1 -1
- package/dist/rabin-gf2-polynomial.cjs +4 -4
- package/dist/rabin-uncached.cjs +4 -4
- package/dist/rabin.cjs +4 -4
- package/dist/testing.cjs +7 -7
- package/dist/url.cjs +1 -1
- package/environment.js +2 -2
- package/indexeddbV2.d.ts +35 -0
- package/indexeddbV2.d.ts.map +1 -0
- package/indexeddbV2.js +265 -0
- package/indexeddbV2.test.d.ts +3 -0
- package/indexeddbV2.test.d.ts.map +1 -0
- package/object.d.ts +3 -0
- package/object.d.ts.map +1 -1
- package/object.js +8 -1
- package/package.json +1 -1
- package/pledge.d.ts +68 -0
- package/pledge.d.ts.map +1 -0
- package/pledge.js +292 -0
- package/pledge.test.d.ts +6 -0
- package/pledge.test.d.ts.map +1 -0
- package/promise.d.ts +1 -0
- package/promise.d.ts.map +1 -1
- package/promise.js +19 -1
- package/promise.test.d.ts.map +1 -1
- package/test.js +4 -0
- package/coverage/tmp/coverage-45341-1710461365510-0.json +0 -1
- package/dist/environment-f4d7c3e5.cjs.map +0 -1
- package/dist/object-fecf6a7b.cjs.map +0 -1
- package/dist/promise-afe9dfc3.cjs.map +0 -1
package/dist/pledge.cjs
ADDED
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var queue = require('./queue.cjs');
|
|
6
|
+
var object = require('./object-b0539a4e.cjs');
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @experimental Use of this module is not encouraged!
|
|
10
|
+
* This is just an experiment.
|
|
11
|
+
* @todo remove `c8 ignore` line once this is moved to "non-experimental"
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/* c8 ignore start */
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @type {queue.Queue<queue.QueueValue<()=>void>>}
|
|
18
|
+
*/
|
|
19
|
+
const ctxFs = queue.create();
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @param {() => void} f
|
|
23
|
+
*/
|
|
24
|
+
const runInGlobalContext = f => {
|
|
25
|
+
const isEmpty = queue.isEmpty(ctxFs);
|
|
26
|
+
queue.enqueue(ctxFs, new queue.QueueValue(f));
|
|
27
|
+
if (isEmpty) {
|
|
28
|
+
while (!queue.isEmpty(ctxFs)) {
|
|
29
|
+
/** @type {queue.QueueValue<()=>{}>} */ (ctxFs.start).v();
|
|
30
|
+
queue.dequeue(ctxFs);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @template V
|
|
37
|
+
* @typedef {V | PledgeInstance<V>} Pledge
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* @template {any} Val
|
|
42
|
+
* @template {any} [CancelReason=Error]
|
|
43
|
+
*/
|
|
44
|
+
class PledgeInstance {
|
|
45
|
+
constructor () {
|
|
46
|
+
/**
|
|
47
|
+
* @type {Val | CancelReason | null}
|
|
48
|
+
*/
|
|
49
|
+
this._v = null;
|
|
50
|
+
this.isResolved = false;
|
|
51
|
+
/**
|
|
52
|
+
* @type {Array<function(Val):void> | null}
|
|
53
|
+
*/
|
|
54
|
+
this._whenResolved = [];
|
|
55
|
+
/**
|
|
56
|
+
* @type {Array<function(CancelReason):void> | null}
|
|
57
|
+
*/
|
|
58
|
+
this._whenCanceled = [];
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
get isDone () {
|
|
62
|
+
return this._whenResolved === null
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
get isCanceled () {
|
|
66
|
+
return !this.isResolved && this._whenResolved === null
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* @param {Val} v
|
|
71
|
+
*/
|
|
72
|
+
resolve (v) {
|
|
73
|
+
const whenResolved = this._whenResolved;
|
|
74
|
+
if (whenResolved === null) return
|
|
75
|
+
this._v = v;
|
|
76
|
+
this.isResolved = true;
|
|
77
|
+
this._whenResolved = null;
|
|
78
|
+
this._whenCanceled = null;
|
|
79
|
+
for (let i = 0; i < whenResolved.length; i++) {
|
|
80
|
+
whenResolved[i](v);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* @param {CancelReason} reason
|
|
86
|
+
*/
|
|
87
|
+
cancel (reason) {
|
|
88
|
+
const whenCanceled = this._whenCanceled;
|
|
89
|
+
if (whenCanceled === null) return
|
|
90
|
+
this._v = reason;
|
|
91
|
+
this._whenResolved = null;
|
|
92
|
+
this._whenCanceled = null;
|
|
93
|
+
for (let i = 0; i < whenCanceled.length; i++) {
|
|
94
|
+
whenCanceled[i](reason);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* @template R
|
|
100
|
+
* @param {function(Val):Pledge<R>} f
|
|
101
|
+
* @return {PledgeInstance<R>}
|
|
102
|
+
*/
|
|
103
|
+
map (f) {
|
|
104
|
+
/**
|
|
105
|
+
* @type {PledgeInstance<R>}
|
|
106
|
+
*/
|
|
107
|
+
const p = new PledgeInstance();
|
|
108
|
+
this.whenResolved(v => {
|
|
109
|
+
const result = f(v);
|
|
110
|
+
if (result instanceof PledgeInstance) {
|
|
111
|
+
if (result._whenResolved === null) {
|
|
112
|
+
result.resolve(/** @type {R} */ (result._v));
|
|
113
|
+
} else {
|
|
114
|
+
result._whenResolved.push(p.resolve.bind(p));
|
|
115
|
+
}
|
|
116
|
+
} else {
|
|
117
|
+
p.resolve(result);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
return p
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* @param {function(Val):void} f
|
|
125
|
+
*/
|
|
126
|
+
whenResolved (f) {
|
|
127
|
+
if (this.isResolved) {
|
|
128
|
+
f(/** @type {Val} */ (this._v));
|
|
129
|
+
} else {
|
|
130
|
+
this._whenResolved?.push(f);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* @param {(reason: CancelReason) => void} f
|
|
136
|
+
*/
|
|
137
|
+
whenCanceled (f) {
|
|
138
|
+
if (this.isCanceled) {
|
|
139
|
+
f(/** @type {CancelReason} */ (this._v));
|
|
140
|
+
} else {
|
|
141
|
+
this._whenCanceled?.push(f);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* @return {Promise<Val>}
|
|
147
|
+
*/
|
|
148
|
+
promise () {
|
|
149
|
+
return new Promise((resolve, reject) => {
|
|
150
|
+
this.whenResolved(resolve);
|
|
151
|
+
this.whenCanceled(reject);
|
|
152
|
+
})
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* @template T
|
|
158
|
+
* @return {PledgeInstance<T>}
|
|
159
|
+
*/
|
|
160
|
+
const create = () => new PledgeInstance();
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* @typedef {Array<Pledge<unknown>> | Object<string,Pledge<unknown>>} PledgeMap
|
|
164
|
+
*/
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* @template {Pledge<unknown> | PledgeMap} P
|
|
168
|
+
* @typedef {P extends PledgeMap ? { [K in keyof P]: P[K] extends Pledge<infer V> ? V : P[K]} : (P extends Pledge<infer V> ? V : never)} Resolved<P>
|
|
169
|
+
*/
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* @todo Create a "resolveHelper" that will simplify creating indxeddbv2 functions. Double arguments
|
|
173
|
+
* are not necessary.
|
|
174
|
+
*
|
|
175
|
+
* @template V
|
|
176
|
+
* @template {Array<Pledge<unknown>>} DEPS
|
|
177
|
+
* @param {(p: PledgeInstance<V>, ...deps: Resolved<DEPS>) => void} init
|
|
178
|
+
* @param {DEPS} deps
|
|
179
|
+
* @return {PledgeInstance<V>}
|
|
180
|
+
*/
|
|
181
|
+
const createWithDependencies = (init, ...deps) => {
|
|
182
|
+
/**
|
|
183
|
+
* @type {PledgeInstance<V>}
|
|
184
|
+
*/
|
|
185
|
+
const p = new PledgeInstance();
|
|
186
|
+
// @ts-ignore @todo remove this
|
|
187
|
+
all(deps).whenResolved(ds => init(p, ...ds));
|
|
188
|
+
return p
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* @template R
|
|
193
|
+
* @param {Pledge<R>} p
|
|
194
|
+
* @param {function(R):void} f
|
|
195
|
+
*/
|
|
196
|
+
const whenResolved = (p, f) => {
|
|
197
|
+
if (p instanceof PledgeInstance) {
|
|
198
|
+
return p.whenResolved(f)
|
|
199
|
+
}
|
|
200
|
+
return f(p)
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* @template {Pledge<unknown>} P
|
|
205
|
+
* @param {P} p
|
|
206
|
+
* @param {P extends PledgeInstance<unknown, infer CancelReason> ? function(CancelReason):void : function(any):void} f
|
|
207
|
+
*/
|
|
208
|
+
const whenCanceled = (p, f) => {
|
|
209
|
+
if (p instanceof PledgeInstance) {
|
|
210
|
+
p.whenCanceled(f);
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* @template P
|
|
216
|
+
* @template Q
|
|
217
|
+
* @param {Pledge<P>} p
|
|
218
|
+
* @param {(r: P) => Q} f
|
|
219
|
+
* @return {Pledge<Q>}
|
|
220
|
+
*/
|
|
221
|
+
const map = (p, f) => {
|
|
222
|
+
if (p instanceof PledgeInstance) {
|
|
223
|
+
return p.map(f)
|
|
224
|
+
}
|
|
225
|
+
return f(p)
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* @template {PledgeMap} PS
|
|
230
|
+
* @param {PS} ps
|
|
231
|
+
* @return {PledgeInstance<Resolved<PS>>}
|
|
232
|
+
*/
|
|
233
|
+
const all = ps => {
|
|
234
|
+
/**
|
|
235
|
+
* @type {any}
|
|
236
|
+
*/
|
|
237
|
+
const pall = create();
|
|
238
|
+
/**
|
|
239
|
+
* @type {any}
|
|
240
|
+
*/
|
|
241
|
+
const result = ps instanceof Array ? new Array(ps.length) : {};
|
|
242
|
+
let waitingPs = ps instanceof Array ? ps.length : object.size(ps);
|
|
243
|
+
for (const key in ps) {
|
|
244
|
+
const p = ps[key];
|
|
245
|
+
whenResolved(p, r => {
|
|
246
|
+
result[key] = r;
|
|
247
|
+
if (--waitingPs === 0) {
|
|
248
|
+
// @ts-ignore
|
|
249
|
+
pall.resolve(result);
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
return pall
|
|
254
|
+
};
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* @template Result
|
|
258
|
+
* @template {any} YieldResults
|
|
259
|
+
* @param {() => Generator<Pledge<YieldResults> | PledgeInstance<YieldResults,any>, Result, any>} f
|
|
260
|
+
* @return {PledgeInstance<Result>}
|
|
261
|
+
*/
|
|
262
|
+
const coroutine = f => {
|
|
263
|
+
const p = create();
|
|
264
|
+
const gen = f();
|
|
265
|
+
/**
|
|
266
|
+
* @param {any} [yv]
|
|
267
|
+
*/
|
|
268
|
+
const handleGen = (yv) => {
|
|
269
|
+
const res = gen.next(yv);
|
|
270
|
+
if (res.done) {
|
|
271
|
+
p.resolve(res.value);
|
|
272
|
+
return
|
|
273
|
+
}
|
|
274
|
+
// @ts-ignore
|
|
275
|
+
whenCanceled(res.value, (reason) => {
|
|
276
|
+
gen.throw(reason);
|
|
277
|
+
});
|
|
278
|
+
runInGlobalContext(() =>
|
|
279
|
+
whenResolved(res.value, handleGen)
|
|
280
|
+
);
|
|
281
|
+
};
|
|
282
|
+
handleGen();
|
|
283
|
+
return p
|
|
284
|
+
};
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* @param {number} timeout
|
|
288
|
+
* @return {PledgeInstance<undefined>}
|
|
289
|
+
*/
|
|
290
|
+
const wait = timeout => {
|
|
291
|
+
const p = create();
|
|
292
|
+
setTimeout(p.resolve.bind(p), timeout);
|
|
293
|
+
return p
|
|
294
|
+
};
|
|
295
|
+
|
|
296
|
+
/* c8 ignore end */
|
|
297
|
+
|
|
298
|
+
exports.PledgeInstance = PledgeInstance;
|
|
299
|
+
exports.all = all;
|
|
300
|
+
exports.coroutine = coroutine;
|
|
301
|
+
exports.create = create;
|
|
302
|
+
exports.createWithDependencies = createWithDependencies;
|
|
303
|
+
exports.map = map;
|
|
304
|
+
exports.wait = wait;
|
|
305
|
+
exports.whenCanceled = whenCanceled;
|
|
306
|
+
exports.whenResolved = whenResolved;
|
|
307
|
+
//# sourceMappingURL=pledge.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pledge.cjs","sources":["../pledge.js"],"sourcesContent":["/**\n * @experimental Use of this module is not encouraged!\n * This is just an experiment.\n * @todo remove `c8 ignore` line once this is moved to \"non-experimental\"\n */\n\nimport * as queue from './queue.js'\nimport * as object from './object.js'\n\n/* c8 ignore start */\n\n/**\n * @type {queue.Queue<queue.QueueValue<()=>void>>}\n */\nconst ctxFs = queue.create()\n\n/**\n * @param {() => void} f\n */\nconst runInGlobalContext = f => {\n const isEmpty = queue.isEmpty(ctxFs)\n queue.enqueue(ctxFs, new queue.QueueValue(f))\n if (isEmpty) {\n while (!queue.isEmpty(ctxFs)) {\n /** @type {queue.QueueValue<()=>{}>} */ (ctxFs.start).v()\n queue.dequeue(ctxFs)\n }\n }\n}\n\n/**\n * @template V\n * @typedef {V | PledgeInstance<V>} Pledge\n */\n\n/**\n * @template {any} Val\n * @template {any} [CancelReason=Error]\n */\nexport class PledgeInstance {\n constructor () {\n /**\n * @type {Val | CancelReason | null}\n */\n this._v = null\n this.isResolved = false\n /**\n * @type {Array<function(Val):void> | null}\n */\n this._whenResolved = []\n /**\n * @type {Array<function(CancelReason):void> | null}\n */\n this._whenCanceled = []\n }\n\n get isDone () {\n return this._whenResolved === null\n }\n\n get isCanceled () {\n return !this.isResolved && this._whenResolved === null\n }\n\n /**\n * @param {Val} v\n */\n resolve (v) {\n const whenResolved = this._whenResolved\n if (whenResolved === null) return\n this._v = v\n this.isResolved = true\n this._whenResolved = null\n this._whenCanceled = null\n for (let i = 0; i < whenResolved.length; i++) {\n whenResolved[i](v)\n }\n }\n\n /**\n * @param {CancelReason} reason\n */\n cancel (reason) {\n const whenCanceled = this._whenCanceled\n if (whenCanceled === null) return\n this._v = reason\n this._whenResolved = null\n this._whenCanceled = null\n for (let i = 0; i < whenCanceled.length; i++) {\n whenCanceled[i](reason)\n }\n }\n\n /**\n * @template R\n * @param {function(Val):Pledge<R>} f\n * @return {PledgeInstance<R>}\n */\n map (f) {\n /**\n * @type {PledgeInstance<R>}\n */\n const p = new PledgeInstance()\n this.whenResolved(v => {\n const result = f(v)\n if (result instanceof PledgeInstance) {\n if (result._whenResolved === null) {\n result.resolve(/** @type {R} */ (result._v))\n } else {\n result._whenResolved.push(p.resolve.bind(p))\n }\n } else {\n p.resolve(result)\n }\n })\n return p\n }\n\n /**\n * @param {function(Val):void} f\n */\n whenResolved (f) {\n if (this.isResolved) {\n f(/** @type {Val} */ (this._v))\n } else {\n this._whenResolved?.push(f)\n }\n }\n\n /**\n * @param {(reason: CancelReason) => void} f\n */\n whenCanceled (f) {\n if (this.isCanceled) {\n f(/** @type {CancelReason} */ (this._v))\n } else {\n this._whenCanceled?.push(f)\n }\n }\n\n /**\n * @return {Promise<Val>}\n */\n promise () {\n return new Promise((resolve, reject) => {\n this.whenResolved(resolve)\n this.whenCanceled(reject)\n })\n }\n}\n\n/**\n * @template T\n * @return {PledgeInstance<T>}\n */\nexport const create = () => new PledgeInstance()\n\n/**\n * @typedef {Array<Pledge<unknown>> | Object<string,Pledge<unknown>>} PledgeMap\n */\n\n/**\n * @template {Pledge<unknown> | PledgeMap} P\n * @typedef {P extends PledgeMap ? { [K in keyof P]: P[K] extends Pledge<infer V> ? V : P[K]} : (P extends Pledge<infer V> ? V : never)} Resolved<P>\n */\n\n/**\n * @todo Create a \"resolveHelper\" that will simplify creating indxeddbv2 functions. Double arguments\n * are not necessary.\n *\n * @template V\n * @template {Array<Pledge<unknown>>} DEPS\n * @param {(p: PledgeInstance<V>, ...deps: Resolved<DEPS>) => void} init\n * @param {DEPS} deps\n * @return {PledgeInstance<V>}\n */\nexport const createWithDependencies = (init, ...deps) => {\n /**\n * @type {PledgeInstance<V>}\n */\n const p = new PledgeInstance()\n // @ts-ignore @todo remove this\n all(deps).whenResolved(ds => init(p, ...ds))\n return p\n}\n\n/**\n * @template R\n * @param {Pledge<R>} p\n * @param {function(R):void} f\n */\nexport const whenResolved = (p, f) => {\n if (p instanceof PledgeInstance) {\n return p.whenResolved(f)\n }\n return f(p)\n}\n\n/**\n * @template {Pledge<unknown>} P\n * @param {P} p\n * @param {P extends PledgeInstance<unknown, infer CancelReason> ? function(CancelReason):void : function(any):void} f\n */\nexport const whenCanceled = (p, f) => {\n if (p instanceof PledgeInstance) {\n p.whenCanceled(f)\n }\n}\n\n/**\n * @template P\n * @template Q\n * @param {Pledge<P>} p\n * @param {(r: P) => Q} f\n * @return {Pledge<Q>}\n */\nexport const map = (p, f) => {\n if (p instanceof PledgeInstance) {\n return p.map(f)\n }\n return f(p)\n}\n\n/**\n * @template {PledgeMap} PS\n * @param {PS} ps\n * @return {PledgeInstance<Resolved<PS>>}\n */\nexport const all = ps => {\n /**\n * @type {any}\n */\n const pall = create()\n /**\n * @type {any}\n */\n const result = ps instanceof Array ? new Array(ps.length) : {}\n let waitingPs = ps instanceof Array ? ps.length : object.size(ps)\n for (const key in ps) {\n const p = ps[key]\n whenResolved(p, r => {\n result[key] = r\n if (--waitingPs === 0) {\n // @ts-ignore\n pall.resolve(result)\n }\n })\n }\n return pall\n}\n\n/**\n * @template Result\n * @template {any} YieldResults\n * @param {() => Generator<Pledge<YieldResults> | PledgeInstance<YieldResults,any>, Result, any>} f\n * @return {PledgeInstance<Result>}\n */\nexport const coroutine = f => {\n const p = create()\n const gen = f()\n /**\n * @param {any} [yv]\n */\n const handleGen = (yv) => {\n const res = gen.next(yv)\n if (res.done) {\n p.resolve(res.value)\n return\n }\n // @ts-ignore\n whenCanceled(res.value, (reason) => {\n gen.throw(reason)\n })\n runInGlobalContext(() =>\n whenResolved(res.value, handleGen)\n )\n }\n handleGen()\n return p\n}\n\n/**\n * @param {number} timeout\n * @return {PledgeInstance<undefined>}\n */\nexport const wait = timeout => {\n const p = create()\n setTimeout(p.resolve.bind(p), timeout)\n return p\n}\n\n/* c8 ignore end */\n"],"names":["queue.create","queue.isEmpty","queue.enqueue","queue.QueueValue","queue.dequeue","object.size"],"mappings":"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"}
|
package/dist/pledge.d.ts
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @template V
|
|
3
|
+
* @typedef {V | PledgeInstance<V>} Pledge
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* @template {any} Val
|
|
7
|
+
* @template {any} [CancelReason=Error]
|
|
8
|
+
*/
|
|
9
|
+
export class PledgeInstance<Val extends unknown, CancelReason extends unknown = Error> {
|
|
10
|
+
/**
|
|
11
|
+
* @type {Val | CancelReason | null}
|
|
12
|
+
*/
|
|
13
|
+
_v: Val | CancelReason | null;
|
|
14
|
+
isResolved: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* @type {Array<function(Val):void> | null}
|
|
17
|
+
*/
|
|
18
|
+
_whenResolved: ((arg0: Val) => void)[] | null;
|
|
19
|
+
/**
|
|
20
|
+
* @type {Array<function(CancelReason):void> | null}
|
|
21
|
+
*/
|
|
22
|
+
_whenCanceled: ((arg0: CancelReason) => void)[] | null;
|
|
23
|
+
get isDone(): boolean;
|
|
24
|
+
get isCanceled(): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* @param {Val} v
|
|
27
|
+
*/
|
|
28
|
+
resolve(v: Val): void;
|
|
29
|
+
/**
|
|
30
|
+
* @param {CancelReason} reason
|
|
31
|
+
*/
|
|
32
|
+
cancel(reason: CancelReason): void;
|
|
33
|
+
/**
|
|
34
|
+
* @template R
|
|
35
|
+
* @param {function(Val):Pledge<R>} f
|
|
36
|
+
* @return {PledgeInstance<R>}
|
|
37
|
+
*/
|
|
38
|
+
map<R>(f: (arg0: Val) => Pledge<R>): PledgeInstance<R, Error>;
|
|
39
|
+
/**
|
|
40
|
+
* @param {function(Val):void} f
|
|
41
|
+
*/
|
|
42
|
+
whenResolved(f: (arg0: Val) => void): void;
|
|
43
|
+
/**
|
|
44
|
+
* @param {(reason: CancelReason) => void} f
|
|
45
|
+
*/
|
|
46
|
+
whenCanceled(f: (reason: CancelReason) => void): void;
|
|
47
|
+
/**
|
|
48
|
+
* @return {Promise<Val>}
|
|
49
|
+
*/
|
|
50
|
+
promise(): Promise<Val>;
|
|
51
|
+
}
|
|
52
|
+
export function create<T>(): PledgeInstance<T, Error>;
|
|
53
|
+
export function createWithDependencies<V, DEPS extends unknown[]>(init: (p: PledgeInstance<V, Error>, ...deps: Resolved<DEPS>) => void, ...deps: DEPS): PledgeInstance<V, Error>;
|
|
54
|
+
export function whenResolved<R>(p: Pledge<R>, f: (arg0: R) => void): void;
|
|
55
|
+
export function whenCanceled<P extends unknown>(p: P, f: P extends PledgeInstance<unknown, infer CancelReason extends unknown> ? (arg0: CancelReason) => void : (arg0: any) => void): void;
|
|
56
|
+
export function map<P, Q>(p: Pledge<P>, f: (r: P) => Q): Pledge<Q>;
|
|
57
|
+
export function all<PS extends PledgeMap>(ps: PS): PledgeInstance<Resolved<PS>, Error>;
|
|
58
|
+
export function coroutine<Result, YieldResults extends unknown>(f: () => Generator<Pledge<YieldResults> | PledgeInstance<YieldResults, any>, Result, any>): PledgeInstance<Result, Error>;
|
|
59
|
+
export function wait(timeout: number): PledgeInstance<undefined>;
|
|
60
|
+
export type Pledge<V> = V | PledgeInstance<V>;
|
|
61
|
+
export type PledgeMap = Array<Pledge<unknown>> | {
|
|
62
|
+
[x: string]: Pledge<unknown>;
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* <P>
|
|
66
|
+
*/
|
|
67
|
+
export type Resolved<P extends unknown> = P extends PledgeMap ? P extends infer T extends PledgeMap ? { [K in keyof T]: P[K] extends Pledge<infer V> ? V : P[K]; } : never : P extends Pledge<infer V_1> ? V_1 : never;
|
|
68
|
+
//# sourceMappingURL=pledge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pledge.d.ts","sourceRoot":"","sources":["../pledge.js"],"names":[],"mappings":"AA8BA;;;GAGG;AAEH;;;GAGG;AACH;IAEI;;OAEG;IACH,IAFU,GAAG,GAAG,YAAY,GAAG,IAAI,CAErB;IACd,oBAAuB;IACvB;;OAEG;IACH,uBAFyB,GAAG,KAAE,IAAI,WAEX;IACvB;;OAEG;IACH,uBAFyB,YAAY,KAAE,IAAI,WAEpB;IAGzB,sBAEC;IAED,0BAEC;IAED;;OAEG;IACH,WAFW,GAAG,QAYb;IAED;;OAEG;IACH,eAFW,YAAY,QAWtB;IAED;;;;OAIG;IACH,iBAHoB,GAAG,0CAqBtB;IAED;;OAEG;IACH,uBAFoB,GAAG,KAAE,IAAI,QAQ5B;IAED;;OAEG;IACH,yBAFoB,YAAY,KAAK,IAAI,QAQxC;IAED;;OAEG;IACH,WAFY,QAAQ,GAAG,CAAC,CAOvB;CACF;AAMM,sDAAyC;AAqBzC,kIAJuD,IAAI,2CAYjE;AAOM,8DAFgB,IAAI,QAO1B;AAOM,yJAFmF,IAAI,UAAY,GAAG,KAAE,IAAI,QAMlH;AASM,mEAKN;AAOM,uFAqBN;AAQM,0LAsBN;AAMM,8BAHI,MAAM,GACL,eAAe,SAAS,CAAC,CAMpC;wBAjQY,CAAC,GAAG,eAAe,CAAC,CAAC;wBA8HrB,MAAM,OAAO,OAAO,CAAC,CAAC;QAAU,MAAM,GAAC,OAAO,OAAO,CAAC;CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export function testPledgeCoroutine(_tc: t.TestCase): Promise<void>;
|
|
2
|
+
export function testPledgeVsPromisePerformanceTimeout(_tc: t.TestCase): Promise<void>;
|
|
3
|
+
export function testPledgeVsPromisePerformanceResolved(_tc: t.TestCase): Promise<void>;
|
|
4
|
+
export type MaybePromise = Promise<number> | number;
|
|
5
|
+
import * as t from './testing.js';
|
|
6
|
+
//# sourceMappingURL=pledge.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pledge.test.d.ts","sourceRoot":"","sources":["../pledge.test.js"],"names":[],"mappings":"AAOO,yCAFI,EAAE,QAAQ,iBAepB;AAKM,2DAFI,EAAE,QAAQ,iBAiBpB;AASM,4DAFI,EAAE,QAAQ,iBAqCpB;2BAzCY,QAAQ,MAAM,CAAC,GAAG,MAAM;mBA3ClB,cAAc"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var binary = require('./binary-ac8e39e2.cjs');
|
|
4
4
|
var string = require('./string-6d104757.cjs');
|
|
5
5
|
var math = require('./math-08e068f9.cjs');
|
|
6
|
-
var buffer = require('./buffer-
|
|
6
|
+
var buffer = require('./buffer-f10b0247.cjs');
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* @module prng
|
|
@@ -384,4 +384,4 @@ exports.uint8Array = uint8Array;
|
|
|
384
384
|
exports.utf16Rune = utf16Rune;
|
|
385
385
|
exports.utf16String = utf16String;
|
|
386
386
|
exports.word = word;
|
|
387
|
-
//# sourceMappingURL=prng-
|
|
387
|
+
//# sourceMappingURL=prng-4ea69eec.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prng-e4f28259.cjs","sources":["../prng/Xorshift32.js","../prng/Xoroshiro128plus.js","../prng.js"],"sourcesContent":["/**\n * @module prng\n */\n\nimport * as binary from '../binary.js'\n\n/**\n * Xorshift32 is a very simple but elegang PRNG with a period of `2^32-1`.\n */\nexport class Xorshift32 {\n /**\n * @param {number} seed Unsigned 32 bit number\n */\n constructor (seed) {\n this.seed = seed\n /**\n * @type {number}\n */\n this._state = seed\n }\n\n /**\n * Generate a random signed integer.\n *\n * @return {Number} A 32 bit signed integer.\n */\n next () {\n let x = this._state\n x ^= x << 13\n x ^= x >> 17\n x ^= x << 5\n this._state = x\n return (x >>> 0) / (binary.BITS32 + 1)\n }\n}\n","/**\n * @module prng\n */\n\nimport { Xorshift32 } from './Xorshift32.js'\nimport * as binary from '../binary.js'\n\n/**\n * This is a variant of xoroshiro128plus - the fastest full-period generator passing BigCrush without systematic failures.\n *\n * This implementation follows the idea of the original xoroshiro128plus implementation,\n * but is optimized for the JavaScript runtime. I.e.\n * * The operations are performed on 32bit integers (the original implementation works with 64bit values).\n * * The initial 128bit state is computed based on a 32bit seed and Xorshift32.\n * * This implementation returns two 32bit values based on the 64bit value that is computed by xoroshiro128plus.\n * Caution: The last addition step works slightly different than in the original implementation - the add carry of the\n * first 32bit addition is not carried over to the last 32bit.\n *\n * [Reference implementation](http://vigna.di.unimi.it/xorshift/xoroshiro128plus.c)\n */\nexport class Xoroshiro128plus {\n /**\n * @param {number} seed Unsigned 32 bit number\n */\n constructor (seed) {\n this.seed = seed\n // This is a variant of Xoroshiro128plus to fill the initial state\n const xorshift32 = new Xorshift32(seed)\n this.state = new Uint32Array(4)\n for (let i = 0; i < 4; i++) {\n this.state[i] = xorshift32.next() * binary.BITS32\n }\n this._fresh = true\n }\n\n /**\n * @return {number} Float/Double in [0,1)\n */\n next () {\n const state = this.state\n if (this._fresh) {\n this._fresh = false\n return ((state[0] + state[2]) >>> 0) / (binary.BITS32 + 1)\n } else {\n this._fresh = true\n const s0 = state[0]\n const s1 = state[1]\n const s2 = state[2] ^ s0\n const s3 = state[3] ^ s1\n // function js_rotl (x, k) {\n // k = k - 32\n // const x1 = x[0]\n // const x2 = x[1]\n // x[0] = x2 << k | x1 >>> (32 - k)\n // x[1] = x1 << k | x2 >>> (32 - k)\n // }\n // rotl(s0, 55) // k = 23 = 55 - 32; j = 9 = 32 - 23\n state[0] = (s1 << 23 | s0 >>> 9) ^ s2 ^ (s2 << 14 | s3 >>> 18)\n state[1] = (s0 << 23 | s1 >>> 9) ^ s3 ^ (s3 << 14)\n // rol(s1, 36) // k = 4 = 36 - 32; j = 23 = 32 - 9\n state[2] = s3 << 4 | s2 >>> 28\n state[3] = s2 << 4 | s3 >>> 28\n return (((state[1] + state[3]) >>> 0) / (binary.BITS32 + 1))\n }\n }\n}\n\n/*\n// Reference implementation\n// Source: http://vigna.di.unimi.it/xorshift/xoroshiro128plus.c\n// By David Blackman and Sebastiano Vigna\n// Who published the reference implementation under Public Domain (CC0)\n\n#include <stdint.h>\n#include <stdio.h>\n\nuint64_t s[2];\n\nstatic inline uint64_t rotl(const uint64_t x, int k) {\n return (x << k) | (x >> (64 - k));\n}\n\nuint64_t next(void) {\n const uint64_t s0 = s[0];\n uint64_t s1 = s[1];\n s1 ^= s0;\n s[0] = rotl(s0, 55) ^ s1 ^ (s1 << 14); // a, b\n s[1] = rotl(s1, 36); // c\n return (s[0] + s[1]) & 0xFFFFFFFF;\n}\n\nint main(void)\n{\n int i;\n s[0] = 1111 | (1337ul << 32);\n s[1] = 1234 | (9999ul << 32);\n\n printf(\"1000 outputs of genrand_int31()\\n\");\n for (i=0; i<100; i++) {\n printf(\"%10lu \", i);\n printf(\"%10lu \", next());\n printf(\"- %10lu \", s[0] >> 32);\n printf(\"%10lu \", (s[0] << 32) >> 32);\n printf(\"%10lu \", s[1] >> 32);\n printf(\"%10lu \", (s[1] << 32) >> 32);\n printf(\"\\n\");\n // if (i%5==4) printf(\"\\n\");\n }\n return 0;\n}\n*/\n","/**\n * Fast Pseudo Random Number Generators.\n *\n * Given a seed a PRNG generates a sequence of numbers that cannot be reasonably predicted.\n * Two PRNGs must generate the same random sequence of numbers if given the same seed.\n *\n * @module prng\n */\n\nimport * as binary from './binary.js'\nimport { fromCharCode, fromCodePoint } from './string.js'\nimport * as math from './math.js'\nimport { Xoroshiro128plus } from './prng/Xoroshiro128plus.js'\nimport * as buffer from './buffer.js'\n\n/**\n * Description of the function\n * @callback generatorNext\n * @return {number} A random float in the cange of [0,1)\n */\n\n/**\n * A random type generator.\n *\n * @typedef {Object} PRNG\n * @property {generatorNext} next Generate new number\n */\nexport const DefaultPRNG = Xoroshiro128plus\n\n/**\n * Create a Xoroshiro128plus Pseudo-Random-Number-Generator.\n * This is the fastest full-period generator passing BigCrush without systematic failures.\n * But there are more PRNGs available in ./PRNG/.\n *\n * @param {number} seed A positive 32bit integer. Do not use negative numbers.\n * @return {PRNG}\n */\nexport const create = seed => new DefaultPRNG(seed)\n\n/**\n * Generates a single random bool.\n *\n * @param {PRNG} gen A random number generator.\n * @return {Boolean} A random boolean\n */\nexport const bool = gen => (gen.next() >= 0.5)\n\n/**\n * Generates a random integer with 53 bit resolution.\n *\n * @param {PRNG} gen A random number generator.\n * @param {Number} min The lower bound of the allowed return values (inclusive).\n * @param {Number} max The upper bound of the allowed return values (inclusive).\n * @return {Number} A random integer on [min, max]\n */\nexport const int53 = (gen, min, max) => math.floor(gen.next() * (max + 1 - min) + min)\n\n/**\n * Generates a random integer with 53 bit resolution.\n *\n * @param {PRNG} gen A random number generator.\n * @param {Number} min The lower bound of the allowed return values (inclusive).\n * @param {Number} max The upper bound of the allowed return values (inclusive).\n * @return {Number} A random integer on [min, max]\n */\nexport const uint53 = (gen, min, max) => math.abs(int53(gen, min, max))\n\n/**\n * Generates a random integer with 32 bit resolution.\n *\n * @param {PRNG} gen A random number generator.\n * @param {Number} min The lower bound of the allowed return values (inclusive).\n * @param {Number} max The upper bound of the allowed return values (inclusive).\n * @return {Number} A random integer on [min, max]\n */\nexport const int32 = (gen, min, max) => math.floor(gen.next() * (max + 1 - min) + min)\n\n/**\n * Generates a random integer with 53 bit resolution.\n *\n * @param {PRNG} gen A random number generator.\n * @param {Number} min The lower bound of the allowed return values (inclusive).\n * @param {Number} max The upper bound of the allowed return values (inclusive).\n * @return {Number} A random integer on [min, max]\n */\nexport const uint32 = (gen, min, max) => int32(gen, min, max) >>> 0\n\n/**\n * @deprecated\n * Optimized version of prng.int32. It has the same precision as prng.int32, but should be preferred when\n * openaring on smaller ranges.\n *\n * @param {PRNG} gen A random number generator.\n * @param {Number} min The lower bound of the allowed return values (inclusive).\n * @param {Number} max The upper bound of the allowed return values (inclusive). The max inclusive number is `binary.BITS31-1`\n * @return {Number} A random integer on [min, max]\n */\nexport const int31 = (gen, min, max) => int32(gen, min, max)\n\n/**\n * Generates a random real on [0, 1) with 53 bit resolution.\n *\n * @param {PRNG} gen A random number generator.\n * @return {Number} A random real number on [0, 1).\n */\nexport const real53 = gen => gen.next() // (((gen.next() >>> 5) * binary.BIT26) + (gen.next() >>> 6)) / MAX_SAFE_INTEGER\n\n/**\n * Generates a random character from char code 32 - 126. I.e. Characters, Numbers, special characters, and Space:\n *\n * @param {PRNG} gen A random number generator.\n * @return {string}\n *\n * (Space)!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[/]^_`abcdefghijklmnopqrstuvwxyz{|}~\n */\nexport const char = gen => fromCharCode(int31(gen, 32, 126))\n\n/**\n * @param {PRNG} gen\n * @return {string} A single letter (a-z)\n */\nexport const letter = gen => fromCharCode(int31(gen, 97, 122))\n\n/**\n * @param {PRNG} gen\n * @param {number} [minLen=0]\n * @param {number} [maxLen=20]\n * @return {string} A random word (0-20 characters) without spaces consisting of letters (a-z)\n */\nexport const word = (gen, minLen = 0, maxLen = 20) => {\n const len = int31(gen, minLen, maxLen)\n let str = ''\n for (let i = 0; i < len; i++) {\n str += letter(gen)\n }\n return str\n}\n\n/**\n * TODO: this function produces invalid runes. Does not cover all of utf16!!\n *\n * @param {PRNG} gen\n * @return {string}\n */\nexport const utf16Rune = gen => {\n const codepoint = int31(gen, 0, 256)\n return fromCodePoint(codepoint)\n}\n\n/**\n * @param {PRNG} gen\n * @param {number} [maxlen = 20]\n */\nexport const utf16String = (gen, maxlen = 20) => {\n const len = int31(gen, 0, maxlen)\n let str = ''\n for (let i = 0; i < len; i++) {\n str += utf16Rune(gen)\n }\n return str\n}\n\n/**\n * Returns one element of a given array.\n *\n * @param {PRNG} gen A random number generator.\n * @param {Array<T>} array Non empty Array of possible values.\n * @return {T} One of the values of the supplied Array.\n * @template T\n */\nexport const oneOf = (gen, array) => array[int31(gen, 0, array.length - 1)]\n\n/**\n * @param {PRNG} gen\n * @param {number} len\n * @return {Uint8Array}\n */\nexport const uint8Array = (gen, len) => {\n const buf = buffer.createUint8ArrayFromLen(len)\n for (let i = 0; i < buf.length; i++) {\n buf[i] = int32(gen, 0, binary.BITS8)\n }\n return buf\n}\n\n/* c8 ignore start */\n/**\n * @param {PRNG} gen\n * @param {number} len\n * @return {Uint16Array}\n */\nexport const uint16Array = (gen, len) => new Uint16Array(uint8Array(gen, len * 2).buffer)\n\n/**\n * @param {PRNG} gen\n * @param {number} len\n * @return {Uint32Array}\n */\nexport const uint32Array = (gen, len) => new Uint32Array(uint8Array(gen, len * 4).buffer)\n/* c8 ignore stop */\n"],"names":["binary.BITS32","math.floor","math.abs","fromCharCode","fromCodePoint","buffer.createUint8ArrayFromLen","binary.BITS8"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"prng-4ea69eec.cjs","sources":["../prng/Xorshift32.js","../prng/Xoroshiro128plus.js","../prng.js"],"sourcesContent":["/**\n * @module prng\n */\n\nimport * as binary from '../binary.js'\n\n/**\n * Xorshift32 is a very simple but elegang PRNG with a period of `2^32-1`.\n */\nexport class Xorshift32 {\n /**\n * @param {number} seed Unsigned 32 bit number\n */\n constructor (seed) {\n this.seed = seed\n /**\n * @type {number}\n */\n this._state = seed\n }\n\n /**\n * Generate a random signed integer.\n *\n * @return {Number} A 32 bit signed integer.\n */\n next () {\n let x = this._state\n x ^= x << 13\n x ^= x >> 17\n x ^= x << 5\n this._state = x\n return (x >>> 0) / (binary.BITS32 + 1)\n }\n}\n","/**\n * @module prng\n */\n\nimport { Xorshift32 } from './Xorshift32.js'\nimport * as binary from '../binary.js'\n\n/**\n * This is a variant of xoroshiro128plus - the fastest full-period generator passing BigCrush without systematic failures.\n *\n * This implementation follows the idea of the original xoroshiro128plus implementation,\n * but is optimized for the JavaScript runtime. I.e.\n * * The operations are performed on 32bit integers (the original implementation works with 64bit values).\n * * The initial 128bit state is computed based on a 32bit seed and Xorshift32.\n * * This implementation returns two 32bit values based on the 64bit value that is computed by xoroshiro128plus.\n * Caution: The last addition step works slightly different than in the original implementation - the add carry of the\n * first 32bit addition is not carried over to the last 32bit.\n *\n * [Reference implementation](http://vigna.di.unimi.it/xorshift/xoroshiro128plus.c)\n */\nexport class Xoroshiro128plus {\n /**\n * @param {number} seed Unsigned 32 bit number\n */\n constructor (seed) {\n this.seed = seed\n // This is a variant of Xoroshiro128plus to fill the initial state\n const xorshift32 = new Xorshift32(seed)\n this.state = new Uint32Array(4)\n for (let i = 0; i < 4; i++) {\n this.state[i] = xorshift32.next() * binary.BITS32\n }\n this._fresh = true\n }\n\n /**\n * @return {number} Float/Double in [0,1)\n */\n next () {\n const state = this.state\n if (this._fresh) {\n this._fresh = false\n return ((state[0] + state[2]) >>> 0) / (binary.BITS32 + 1)\n } else {\n this._fresh = true\n const s0 = state[0]\n const s1 = state[1]\n const s2 = state[2] ^ s0\n const s3 = state[3] ^ s1\n // function js_rotl (x, k) {\n // k = k - 32\n // const x1 = x[0]\n // const x2 = x[1]\n // x[0] = x2 << k | x1 >>> (32 - k)\n // x[1] = x1 << k | x2 >>> (32 - k)\n // }\n // rotl(s0, 55) // k = 23 = 55 - 32; j = 9 = 32 - 23\n state[0] = (s1 << 23 | s0 >>> 9) ^ s2 ^ (s2 << 14 | s3 >>> 18)\n state[1] = (s0 << 23 | s1 >>> 9) ^ s3 ^ (s3 << 14)\n // rol(s1, 36) // k = 4 = 36 - 32; j = 23 = 32 - 9\n state[2] = s3 << 4 | s2 >>> 28\n state[3] = s2 << 4 | s3 >>> 28\n return (((state[1] + state[3]) >>> 0) / (binary.BITS32 + 1))\n }\n }\n}\n\n/*\n// Reference implementation\n// Source: http://vigna.di.unimi.it/xorshift/xoroshiro128plus.c\n// By David Blackman and Sebastiano Vigna\n// Who published the reference implementation under Public Domain (CC0)\n\n#include <stdint.h>\n#include <stdio.h>\n\nuint64_t s[2];\n\nstatic inline uint64_t rotl(const uint64_t x, int k) {\n return (x << k) | (x >> (64 - k));\n}\n\nuint64_t next(void) {\n const uint64_t s0 = s[0];\n uint64_t s1 = s[1];\n s1 ^= s0;\n s[0] = rotl(s0, 55) ^ s1 ^ (s1 << 14); // a, b\n s[1] = rotl(s1, 36); // c\n return (s[0] + s[1]) & 0xFFFFFFFF;\n}\n\nint main(void)\n{\n int i;\n s[0] = 1111 | (1337ul << 32);\n s[1] = 1234 | (9999ul << 32);\n\n printf(\"1000 outputs of genrand_int31()\\n\");\n for (i=0; i<100; i++) {\n printf(\"%10lu \", i);\n printf(\"%10lu \", next());\n printf(\"- %10lu \", s[0] >> 32);\n printf(\"%10lu \", (s[0] << 32) >> 32);\n printf(\"%10lu \", s[1] >> 32);\n printf(\"%10lu \", (s[1] << 32) >> 32);\n printf(\"\\n\");\n // if (i%5==4) printf(\"\\n\");\n }\n return 0;\n}\n*/\n","/**\n * Fast Pseudo Random Number Generators.\n *\n * Given a seed a PRNG generates a sequence of numbers that cannot be reasonably predicted.\n * Two PRNGs must generate the same random sequence of numbers if given the same seed.\n *\n * @module prng\n */\n\nimport * as binary from './binary.js'\nimport { fromCharCode, fromCodePoint } from './string.js'\nimport * as math from './math.js'\nimport { Xoroshiro128plus } from './prng/Xoroshiro128plus.js'\nimport * as buffer from './buffer.js'\n\n/**\n * Description of the function\n * @callback generatorNext\n * @return {number} A random float in the cange of [0,1)\n */\n\n/**\n * A random type generator.\n *\n * @typedef {Object} PRNG\n * @property {generatorNext} next Generate new number\n */\nexport const DefaultPRNG = Xoroshiro128plus\n\n/**\n * Create a Xoroshiro128plus Pseudo-Random-Number-Generator.\n * This is the fastest full-period generator passing BigCrush without systematic failures.\n * But there are more PRNGs available in ./PRNG/.\n *\n * @param {number} seed A positive 32bit integer. Do not use negative numbers.\n * @return {PRNG}\n */\nexport const create = seed => new DefaultPRNG(seed)\n\n/**\n * Generates a single random bool.\n *\n * @param {PRNG} gen A random number generator.\n * @return {Boolean} A random boolean\n */\nexport const bool = gen => (gen.next() >= 0.5)\n\n/**\n * Generates a random integer with 53 bit resolution.\n *\n * @param {PRNG} gen A random number generator.\n * @param {Number} min The lower bound of the allowed return values (inclusive).\n * @param {Number} max The upper bound of the allowed return values (inclusive).\n * @return {Number} A random integer on [min, max]\n */\nexport const int53 = (gen, min, max) => math.floor(gen.next() * (max + 1 - min) + min)\n\n/**\n * Generates a random integer with 53 bit resolution.\n *\n * @param {PRNG} gen A random number generator.\n * @param {Number} min The lower bound of the allowed return values (inclusive).\n * @param {Number} max The upper bound of the allowed return values (inclusive).\n * @return {Number} A random integer on [min, max]\n */\nexport const uint53 = (gen, min, max) => math.abs(int53(gen, min, max))\n\n/**\n * Generates a random integer with 32 bit resolution.\n *\n * @param {PRNG} gen A random number generator.\n * @param {Number} min The lower bound of the allowed return values (inclusive).\n * @param {Number} max The upper bound of the allowed return values (inclusive).\n * @return {Number} A random integer on [min, max]\n */\nexport const int32 = (gen, min, max) => math.floor(gen.next() * (max + 1 - min) + min)\n\n/**\n * Generates a random integer with 53 bit resolution.\n *\n * @param {PRNG} gen A random number generator.\n * @param {Number} min The lower bound of the allowed return values (inclusive).\n * @param {Number} max The upper bound of the allowed return values (inclusive).\n * @return {Number} A random integer on [min, max]\n */\nexport const uint32 = (gen, min, max) => int32(gen, min, max) >>> 0\n\n/**\n * @deprecated\n * Optimized version of prng.int32. It has the same precision as prng.int32, but should be preferred when\n * openaring on smaller ranges.\n *\n * @param {PRNG} gen A random number generator.\n * @param {Number} min The lower bound of the allowed return values (inclusive).\n * @param {Number} max The upper bound of the allowed return values (inclusive). The max inclusive number is `binary.BITS31-1`\n * @return {Number} A random integer on [min, max]\n */\nexport const int31 = (gen, min, max) => int32(gen, min, max)\n\n/**\n * Generates a random real on [0, 1) with 53 bit resolution.\n *\n * @param {PRNG} gen A random number generator.\n * @return {Number} A random real number on [0, 1).\n */\nexport const real53 = gen => gen.next() // (((gen.next() >>> 5) * binary.BIT26) + (gen.next() >>> 6)) / MAX_SAFE_INTEGER\n\n/**\n * Generates a random character from char code 32 - 126. I.e. Characters, Numbers, special characters, and Space:\n *\n * @param {PRNG} gen A random number generator.\n * @return {string}\n *\n * (Space)!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[/]^_`abcdefghijklmnopqrstuvwxyz{|}~\n */\nexport const char = gen => fromCharCode(int31(gen, 32, 126))\n\n/**\n * @param {PRNG} gen\n * @return {string} A single letter (a-z)\n */\nexport const letter = gen => fromCharCode(int31(gen, 97, 122))\n\n/**\n * @param {PRNG} gen\n * @param {number} [minLen=0]\n * @param {number} [maxLen=20]\n * @return {string} A random word (0-20 characters) without spaces consisting of letters (a-z)\n */\nexport const word = (gen, minLen = 0, maxLen = 20) => {\n const len = int31(gen, minLen, maxLen)\n let str = ''\n for (let i = 0; i < len; i++) {\n str += letter(gen)\n }\n return str\n}\n\n/**\n * TODO: this function produces invalid runes. Does not cover all of utf16!!\n *\n * @param {PRNG} gen\n * @return {string}\n */\nexport const utf16Rune = gen => {\n const codepoint = int31(gen, 0, 256)\n return fromCodePoint(codepoint)\n}\n\n/**\n * @param {PRNG} gen\n * @param {number} [maxlen = 20]\n */\nexport const utf16String = (gen, maxlen = 20) => {\n const len = int31(gen, 0, maxlen)\n let str = ''\n for (let i = 0; i < len; i++) {\n str += utf16Rune(gen)\n }\n return str\n}\n\n/**\n * Returns one element of a given array.\n *\n * @param {PRNG} gen A random number generator.\n * @param {Array<T>} array Non empty Array of possible values.\n * @return {T} One of the values of the supplied Array.\n * @template T\n */\nexport const oneOf = (gen, array) => array[int31(gen, 0, array.length - 1)]\n\n/**\n * @param {PRNG} gen\n * @param {number} len\n * @return {Uint8Array}\n */\nexport const uint8Array = (gen, len) => {\n const buf = buffer.createUint8ArrayFromLen(len)\n for (let i = 0; i < buf.length; i++) {\n buf[i] = int32(gen, 0, binary.BITS8)\n }\n return buf\n}\n\n/* c8 ignore start */\n/**\n * @param {PRNG} gen\n * @param {number} len\n * @return {Uint16Array}\n */\nexport const uint16Array = (gen, len) => new Uint16Array(uint8Array(gen, len * 2).buffer)\n\n/**\n * @param {PRNG} gen\n * @param {number} len\n * @return {Uint32Array}\n */\nexport const uint32Array = (gen, len) => new Uint32Array(uint8Array(gen, len * 4).buffer)\n/* c8 ignore stop */\n"],"names":["binary.BITS32","math.floor","math.abs","fromCharCode","fromCodePoint","buffer.createUint8ArrayFromLen","binary.BITS8"],"mappings":"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"}
|
package/dist/prng.cjs
CHANGED
|
@@ -5,16 +5,16 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
require('./binary-ac8e39e2.cjs');
|
|
6
6
|
require('./string-6d104757.cjs');
|
|
7
7
|
require('./math-08e068f9.cjs');
|
|
8
|
-
var prng = require('./prng-
|
|
9
|
-
require('./buffer-
|
|
8
|
+
var prng = require('./prng-4ea69eec.cjs');
|
|
9
|
+
require('./buffer-f10b0247.cjs');
|
|
10
10
|
require('./array-704ca50e.cjs');
|
|
11
11
|
require('./set-0f209abb.cjs');
|
|
12
|
-
require('./environment-
|
|
12
|
+
require('./environment-45676492.cjs');
|
|
13
13
|
require('./map-0dabcc55.cjs');
|
|
14
14
|
require('./conditions-f5c0c102.cjs');
|
|
15
15
|
require('./storage.cjs');
|
|
16
|
-
require('./function-
|
|
17
|
-
require('./object-
|
|
16
|
+
require('./function-18d343cf.cjs');
|
|
17
|
+
require('./object-b0539a4e.cjs');
|
|
18
18
|
require('./encoding-882cb136.cjs');
|
|
19
19
|
require('./number-466d8922.cjs');
|
|
20
20
|
require('./decoding-000d097f.cjs');
|
|
@@ -58,6 +58,7 @@ const resolveWith = res => Promise.resolve(res);
|
|
|
58
58
|
|
|
59
59
|
/**
|
|
60
60
|
* @todo Next version, reorder parameters: check, [timeout, [intervalResolution]]
|
|
61
|
+
* @deprecated use untilAsync instead
|
|
61
62
|
*
|
|
62
63
|
* @param {number} timeout
|
|
63
64
|
* @param {function():boolean} check
|
|
@@ -82,11 +83,28 @@ const until = (timeout, check, intervalResolution = 10) => create((resolve, reje
|
|
|
82
83
|
const intervalHandle = setInterval(untilInterval, intervalResolution);
|
|
83
84
|
});
|
|
84
85
|
|
|
86
|
+
/**
|
|
87
|
+
* @param {()=>Promise<boolean>|boolean} check
|
|
88
|
+
* @param {number} timeout
|
|
89
|
+
* @param {number} intervalResolution
|
|
90
|
+
* @return {Promise<void>}
|
|
91
|
+
*/
|
|
92
|
+
const untilAsync = async (check, timeout = 0, intervalResolution = 10) => {
|
|
93
|
+
const startTime = time.getUnixTime();
|
|
94
|
+
const noTimeout = timeout <= 0;
|
|
95
|
+
// eslint-disable-next-line no-unmodified-loop-condition
|
|
96
|
+
while (noTimeout || time.getUnixTime() - startTime <= timeout) {
|
|
97
|
+
if (await check()) return
|
|
98
|
+
await wait(intervalResolution);
|
|
99
|
+
}
|
|
100
|
+
throw new Error('Timeout')
|
|
101
|
+
};
|
|
102
|
+
|
|
85
103
|
/**
|
|
86
104
|
* @param {number} timeout
|
|
87
105
|
* @return {Promise<undefined>}
|
|
88
106
|
*/
|
|
89
|
-
const wait = timeout => create((resolve,
|
|
107
|
+
const wait = timeout => create((resolve, _reject) => setTimeout(resolve, timeout));
|
|
90
108
|
|
|
91
109
|
/**
|
|
92
110
|
* Checks if an object is a promise using ducktyping.
|
|
@@ -108,6 +126,7 @@ var promise = /*#__PURE__*/Object.freeze({
|
|
|
108
126
|
resolve: resolve,
|
|
109
127
|
resolveWith: resolveWith,
|
|
110
128
|
until: until,
|
|
129
|
+
untilAsync: untilAsync,
|
|
111
130
|
wait: wait,
|
|
112
131
|
isPromise: isPromise
|
|
113
132
|
});
|
|
@@ -121,5 +140,6 @@ exports.reject = reject;
|
|
|
121
140
|
exports.resolve = resolve;
|
|
122
141
|
exports.resolveWith = resolveWith;
|
|
123
142
|
exports.until = until;
|
|
143
|
+
exports.untilAsync = untilAsync;
|
|
124
144
|
exports.wait = wait;
|
|
125
|
-
//# sourceMappingURL=promise-
|
|
145
|
+
//# sourceMappingURL=promise-7d13a97c.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promise-7d13a97c.cjs","sources":["../promise.js"],"sourcesContent":["/**\n * Utility helpers to work with promises.\n *\n * @module promise\n */\n\nimport * as time from './time.js'\n\n/**\n * @template T\n * @callback PromiseResolve\n * @param {T|PromiseLike<T>} [result]\n */\n\n/**\n * @template T\n * @param {function(PromiseResolve<T>,function(Error):void):any} f\n * @return {Promise<T>}\n */\nexport const create = f => /** @type {Promise<T>} */ (new Promise(f))\n\n/**\n * @param {function(function():void,function(Error):void):void} f\n * @return {Promise<void>}\n */\nexport const createEmpty = f => new Promise(f)\n\n/**\n * `Promise.all` wait for all promises in the array to resolve and return the result\n * @template {unknown[] | []} PS\n *\n * @param {PS} ps\n * @return {Promise<{ -readonly [P in keyof PS]: Awaited<PS[P]> }>}\n */\nexport const all = Promise.all.bind(Promise)\n\n/**\n * @param {Error} [reason]\n * @return {Promise<never>}\n */\nexport const reject = reason => Promise.reject(reason)\n\n/**\n * @template T\n * @param {T|void} res\n * @return {Promise<T|void>}\n */\nexport const resolve = res => Promise.resolve(res)\n\n/**\n * @template T\n * @param {T} res\n * @return {Promise<T>}\n */\nexport const resolveWith = res => Promise.resolve(res)\n\n/**\n * @todo Next version, reorder parameters: check, [timeout, [intervalResolution]]\n * @deprecated use untilAsync instead\n *\n * @param {number} timeout\n * @param {function():boolean} check\n * @param {number} [intervalResolution]\n * @return {Promise<void>}\n */\nexport const until = (timeout, check, intervalResolution = 10) => create((resolve, reject) => {\n const startTime = time.getUnixTime()\n const hasTimeout = timeout > 0\n const untilInterval = () => {\n if (check()) {\n clearInterval(intervalHandle)\n resolve()\n } else if (hasTimeout) {\n /* c8 ignore else */\n if (time.getUnixTime() - startTime > timeout) {\n clearInterval(intervalHandle)\n reject(new Error('Timeout'))\n }\n }\n }\n const intervalHandle = setInterval(untilInterval, intervalResolution)\n})\n\n/**\n * @param {()=>Promise<boolean>|boolean} check\n * @param {number} timeout\n * @param {number} intervalResolution\n * @return {Promise<void>}\n */\nexport const untilAsync = async (check, timeout = 0, intervalResolution = 10) => {\n const startTime = time.getUnixTime()\n const noTimeout = timeout <= 0\n // eslint-disable-next-line no-unmodified-loop-condition\n while (noTimeout || time.getUnixTime() - startTime <= timeout) {\n if (await check()) return\n await wait(intervalResolution)\n }\n throw new Error('Timeout')\n}\n\n/**\n * @param {number} timeout\n * @return {Promise<undefined>}\n */\nexport const wait = timeout => create((resolve, _reject) => setTimeout(resolve, timeout))\n\n/**\n * Checks if an object is a promise using ducktyping.\n *\n * Promises are often polyfilled, so it makes sense to add some additional guarantees if the user of this\n * library has some insane environment where global Promise objects are overwritten.\n *\n * @param {any} p\n * @return {boolean}\n */\nexport const isPromise = p => p instanceof Promise || (p && p.then && p.catch && p.finally)\n"],"names":["time.getUnixTime"],"mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,MAAM,GAAG,CAAC,+BAA+B,IAAI,OAAO,CAAC,CAAC,CAAC,EAAC;AACrE;AACA;AACA;AACA;AACA;AACY,MAAC,WAAW,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,EAAC;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAC;AAC5C;AACA;AACA;AACA;AACA;AACY,MAAC,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAC;AACtD;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,OAAO,GAAG,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,EAAC;AAClD;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,WAAW,GAAG,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,EAAC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,KAAK,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,kBAAkB,GAAG,EAAE,KAAK,MAAM,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AAC9F,EAAE,MAAM,SAAS,GAAGA,gBAAgB,GAAE;AACtC,EAAE,MAAM,UAAU,GAAG,OAAO,GAAG,EAAC;AAChC,EAAE,MAAM,aAAa,GAAG,MAAM;AAC9B,IAAI,IAAI,KAAK,EAAE,EAAE;AACjB,MAAM,aAAa,CAAC,cAAc,EAAC;AACnC,MAAM,OAAO,GAAE;AACf,KAAK,MAAM,IAAI,UAAU,EAAE;AAC3B;AACA,MAAM,IAAIA,gBAAgB,EAAE,GAAG,SAAS,GAAG,OAAO,EAAE;AACpD,QAAQ,aAAa,CAAC,cAAc,EAAC;AACrC,QAAQ,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,EAAC;AACpC,OAAO;AACP,KAAK;AACL,IAAG;AACH,EAAE,MAAM,cAAc,GAAG,WAAW,CAAC,aAAa,EAAE,kBAAkB,EAAC;AACvE,CAAC,EAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,UAAU,GAAG,OAAO,KAAK,EAAE,OAAO,GAAG,CAAC,EAAE,kBAAkB,GAAG,EAAE,KAAK;AACjF,EAAE,MAAM,SAAS,GAAGA,gBAAgB,GAAE;AACtC,EAAE,MAAM,SAAS,GAAG,OAAO,IAAI,EAAC;AAChC;AACA,EAAE,OAAO,SAAS,IAAIA,gBAAgB,EAAE,GAAG,SAAS,IAAI,OAAO,EAAE;AACjE,IAAI,IAAI,MAAM,KAAK,EAAE,EAAE,MAAM;AAC7B,IAAI,MAAM,IAAI,CAAC,kBAAkB,EAAC;AAClC,GAAG;AACH,EAAE,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC;AAC5B,EAAC;AACD;AACA;AACA;AACA;AACA;AACY,MAAC,IAAI,GAAG,OAAO,IAAI,MAAM,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,EAAC;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,SAAS,GAAG,CAAC,IAAI,CAAC,YAAY,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/promise.cjs
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
require('./time-bc2081b9.cjs');
|
|
6
|
-
var promise = require('./promise-
|
|
6
|
+
var promise = require('./promise-7d13a97c.cjs');
|
|
7
7
|
require('./metric.cjs');
|
|
8
8
|
require('./math-08e068f9.cjs');
|
|
9
9
|
|
|
@@ -17,5 +17,6 @@ exports.reject = promise.reject;
|
|
|
17
17
|
exports.resolve = promise.resolve;
|
|
18
18
|
exports.resolveWith = promise.resolveWith;
|
|
19
19
|
exports.until = promise.until;
|
|
20
|
+
exports.untilAsync = promise.untilAsync;
|
|
20
21
|
exports.wait = promise.wait;
|
|
21
22
|
//# sourceMappingURL=promise.cjs.map
|
package/dist/promise.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promise.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"promise.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}
|
package/dist/promise.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ export function reject(reason?: Error | undefined): Promise<never>;
|
|
|
15
15
|
export function resolve<T>(res: void | T): Promise<void | T>;
|
|
16
16
|
export function resolveWith<T>(res: T): Promise<T>;
|
|
17
17
|
export function until(timeout: number, check: () => boolean, intervalResolution?: number | undefined): Promise<void>;
|
|
18
|
+
export function untilAsync(check: () => Promise<boolean> | boolean, timeout?: number, intervalResolution?: number): Promise<void>;
|
|
18
19
|
export function wait(timeout: number): Promise<undefined>;
|
|
19
20
|
export function isPromise(p: any): boolean;
|
|
20
21
|
export type PromiseResolve<T> = (result?: T | PromiseLike<T> | undefined) => any;
|
package/dist/promise.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../promise.js"],"names":[],"mappings":"AAmBO,oEAHwC,KAAK,KAAE,IAAI,KAAE,GAAG,cAGM;AAM9D,4CAHwB,IAAI,eAAU,KAAK,KAAE,IAAI,KAAE,IAAI,GAClD,QAAQ,IAAI,CAAC,CAEqB;AAE9C;;;;;;GAMG;AACH;;;EAA4C;AAMrC,oDAFK,QAAQ,KAAK,CAAC,CAE4B;AAO/C,6DAA2C;AAO3C,mDAA+C;
|
|
1
|
+
{"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../promise.js"],"names":[],"mappings":"AAmBO,oEAHwC,KAAK,KAAE,IAAI,KAAE,GAAG,cAGM;AAM9D,4CAHwB,IAAI,eAAU,KAAK,KAAE,IAAI,KAAE,IAAI,GAClD,QAAQ,IAAI,CAAC,CAEqB;AAE9C;;;;;;GAMG;AACH;;;EAA4C;AAMrC,oDAFK,QAAQ,KAAK,CAAC,CAE4B;AAO/C,6DAA2C;AAO3C,mDAA+C;AAW/C,+BALI,MAAM,eACK,OAAO,4CAEjB,QAAQ,IAAI,CAAC,CAkBvB;AAQK,kCALI,MAAI,QAAQ,OAAO,CAAC,GAAC,OAAO,YAC5B,MAAM,uBACN,MAAM,GACL,QAAQ,IAAI,CAAC,CAWxB;AAMM,8BAHI,MAAM,GACL,QAAQ,SAAS,CAAC,CAE2D;AAWlF,6BAHI,GAAG,GACF,OAAO,CAEwE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promise.test.d.ts","sourceRoot":"","sources":["../promise.test.js"],"names":[],"mappings":"AA6BO,uCAFI,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"promise.test.d.ts","sourceRoot":"","sources":["../promise.test.js"],"names":[],"mappings":"AA6BO,uCAFI,EAAE,QAAQ,iBAmBpB;AAKM,mCAFI,EAAE,QAAQ,QAapB;AAKM,iCAFI,EAAE,QAAQ,iBAapB;mBA7EkB,cAAc"}
|