@e280/stz 0.3.3 → 0.3.5
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/package.json +1 -1
- package/s/data/bytes.ts +15 -0
- package/s/index.ts +1 -0
- package/s/queue/lane.ts +10 -0
- package/s/queue/queue.test.ts +17 -6
- package/s/queue/queue.ts +14 -5
- package/s/utensils/map.ts +5 -1
- package/x/data/bytes.d.ts +1 -0
- package/x/data/bytes.js +12 -0
- package/x/data/bytes.js.map +1 -1
- package/x/index.d.ts +1 -0
- package/x/index.js +1 -0
- package/x/index.js.map +1 -1
- package/x/queue/lane.d.ts +2 -0
- package/x/queue/lane.js +6 -0
- package/x/queue/lane.js.map +1 -0
- package/x/queue/queue.d.ts +2 -4
- package/x/queue/queue.js +14 -5
- package/x/queue/queue.js.map +1 -1
- package/x/queue/queue.test.d.ts +5 -5
- package/x/queue/queue.test.js +14 -6
- package/x/queue/queue.test.js.map +1 -1
- package/x/utensils/map.js +1 -1
- package/x/utensils/map.js.map +1 -1
package/package.json
CHANGED
package/s/data/bytes.ts
CHANGED
|
@@ -10,5 +10,20 @@ export const bytes = Object.freeze({
|
|
|
10
10
|
random(count: number) {
|
|
11
11
|
return crypto.getRandomValues(new Uint8Array(count))
|
|
12
12
|
},
|
|
13
|
+
|
|
14
|
+
concat(parts: Uint8Array[]) {
|
|
15
|
+
let size = 0
|
|
16
|
+
for (const part of parts) size += part.byteLength
|
|
17
|
+
|
|
18
|
+
const bytes = new Uint8Array(size)
|
|
19
|
+
|
|
20
|
+
let offset = 0
|
|
21
|
+
for (const part of parts) {
|
|
22
|
+
bytes.set(part, offset)
|
|
23
|
+
offset += part.byteLength
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return bytes as Uint8Array
|
|
27
|
+
},
|
|
13
28
|
})
|
|
14
29
|
|
package/s/index.ts
CHANGED
package/s/queue/lane.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
|
|
2
|
+
import {queue} from "./queue.js"
|
|
3
|
+
|
|
4
|
+
/** create a serialized execution lane for arbitrary async functions. */
|
|
5
|
+
export function lane(limit = Infinity) {
|
|
6
|
+
return queue((fn: () => Promise<unknown>) => fn(), limit) as (
|
|
7
|
+
<R>(fn: () => Promise<R>) => Promise<R>
|
|
8
|
+
)
|
|
9
|
+
}
|
|
10
|
+
|
package/s/queue/queue.test.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
|
|
2
|
-
import {
|
|
2
|
+
import {suite, test, expect} from "@e280/science"
|
|
3
3
|
|
|
4
4
|
import {nap} from "../nap.js"
|
|
5
5
|
import {queue} from "./queue.js"
|
|
6
6
|
|
|
7
|
-
export default
|
|
8
|
-
"job runs":
|
|
7
|
+
export default suite({
|
|
8
|
+
"job runs": test(async() => {
|
|
9
9
|
let concurrent = 0
|
|
10
10
|
const job = queue(async() => {
|
|
11
11
|
concurrent++
|
|
@@ -19,7 +19,7 @@ export default Science.suite({
|
|
|
19
19
|
expect(concurrent).is(0)
|
|
20
20
|
}),
|
|
21
21
|
|
|
22
|
-
"sequencing is enforced":
|
|
22
|
+
"sequencing is enforced": test(async() => {
|
|
23
23
|
let concurrent = 0
|
|
24
24
|
const job = queue(async() => {
|
|
25
25
|
concurrent++
|
|
@@ -41,7 +41,7 @@ export default Science.suite({
|
|
|
41
41
|
expect(concurrent).is(0)
|
|
42
42
|
}),
|
|
43
43
|
|
|
44
|
-
"params and return values seem to work":
|
|
44
|
+
"params and return values seem to work": test(async() => {
|
|
45
45
|
const add = queue(async(a: number, b: number) => {
|
|
46
46
|
await nap(100)
|
|
47
47
|
return a + b
|
|
@@ -52,7 +52,7 @@ export default Science.suite({
|
|
|
52
52
|
expect(await promise2).is(30)
|
|
53
53
|
}),
|
|
54
54
|
|
|
55
|
-
"first job throws, second job unaffected":
|
|
55
|
+
"first job throws, second job unaffected": test(async() => {
|
|
56
56
|
let run = 0
|
|
57
57
|
const job = queue(async() => {
|
|
58
58
|
run++
|
|
@@ -63,5 +63,16 @@ export default Science.suite({
|
|
|
63
63
|
expect(async() => job()).throwsAsync()
|
|
64
64
|
expect(async() => job()).not.throwsAsync()
|
|
65
65
|
}),
|
|
66
|
+
|
|
67
|
+
"limit exceeded": test(async() => {
|
|
68
|
+
const job = queue(async() => nap(10), 2)
|
|
69
|
+
await expect(
|
|
70
|
+
async() => await Promise.all([
|
|
71
|
+
job(),
|
|
72
|
+
job(),
|
|
73
|
+
job(),
|
|
74
|
+
])
|
|
75
|
+
).throwsAsync()
|
|
76
|
+
}),
|
|
66
77
|
})
|
|
67
78
|
|
package/s/queue/queue.ts
CHANGED
|
@@ -1,15 +1,24 @@
|
|
|
1
1
|
|
|
2
|
-
/**
|
|
3
|
-
* create a job queue that ensures the given fn is always called in sequence (not concurrently).
|
|
4
|
-
*/
|
|
2
|
+
/** create a job queue that ensures the given fn is always called in sequence (not concurrently). */
|
|
5
3
|
export function queue<Args extends any[], Result>(
|
|
6
|
-
fn: (...args: Args) => Promise<Result
|
|
4
|
+
fn: (...args: Args) => Promise<Result>,
|
|
5
|
+
limit = Infinity,
|
|
7
6
|
): (...args: Args) => Promise<Result> {
|
|
8
7
|
|
|
8
|
+
let pending = 0
|
|
9
9
|
let last: Promise<any> = Promise.resolve()
|
|
10
10
|
|
|
11
11
|
return (...args: Args): Promise<Result> => {
|
|
12
|
-
|
|
12
|
+
if (pending >= limit)
|
|
13
|
+
return Promise.reject(new Error(`queue limit exceeded (${limit})`))
|
|
14
|
+
|
|
15
|
+
pending++
|
|
16
|
+
|
|
17
|
+
const job = async() => {
|
|
18
|
+
try { return await fn(...args) }
|
|
19
|
+
finally { pending-- }
|
|
20
|
+
}
|
|
21
|
+
|
|
13
22
|
const current = last.then(job)
|
|
14
23
|
|
|
15
24
|
// prevent unhandled rejection breaking the chain
|
package/s/utensils/map.ts
CHANGED
|
@@ -5,7 +5,11 @@ type MapLike<K, V> = {
|
|
|
5
5
|
set(key: K, value: V): unknown
|
|
6
6
|
}
|
|
7
7
|
|
|
8
|
-
export function need<K, V>(
|
|
8
|
+
export function need<K, V>(
|
|
9
|
+
map: Pick<MapLike<K, V>, "has" | "get">,
|
|
10
|
+
key: K,
|
|
11
|
+
err = (typeof key === "string" ? `needed key not found "${key}"` : "needed key not found"),
|
|
12
|
+
) {
|
|
9
13
|
if (map.has(key))
|
|
10
14
|
return map.get(key) as V
|
|
11
15
|
else
|
package/x/data/bytes.d.ts
CHANGED
package/x/data/bytes.js
CHANGED
|
@@ -10,5 +10,17 @@ export const bytes = Object.freeze({
|
|
|
10
10
|
random(count) {
|
|
11
11
|
return crypto.getRandomValues(new Uint8Array(count));
|
|
12
12
|
},
|
|
13
|
+
concat(parts) {
|
|
14
|
+
let size = 0;
|
|
15
|
+
for (const part of parts)
|
|
16
|
+
size += part.byteLength;
|
|
17
|
+
const bytes = new Uint8Array(size);
|
|
18
|
+
let offset = 0;
|
|
19
|
+
for (const part of parts) {
|
|
20
|
+
bytes.set(part, offset);
|
|
21
|
+
offset += part.byteLength;
|
|
22
|
+
}
|
|
23
|
+
return bytes;
|
|
24
|
+
},
|
|
13
25
|
});
|
|
14
26
|
//# sourceMappingURL=bytes.js.map
|
package/x/data/bytes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bytes.js","sourceRoot":"","sources":["../../s/data/bytes.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;IAClC,EAAE,CAAC,CAAa,EAAE,CAAa;QAC9B,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;YAAE,OAAO,KAAK,CAAA;QACvC,IAAI,IAAI,GAAG,CAAC,CAAA;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QACtD,OAAO,IAAI,KAAK,CAAC,CAAA;IAClB,CAAC;IAED,MAAM,CAAC,KAAa;QACnB,OAAO,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;IACrD,CAAC;CACD,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"bytes.js","sourceRoot":"","sources":["../../s/data/bytes.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;IAClC,EAAE,CAAC,CAAa,EAAE,CAAa;QAC9B,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;YAAE,OAAO,KAAK,CAAA;QACvC,IAAI,IAAI,GAAG,CAAC,CAAA;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QACtD,OAAO,IAAI,KAAK,CAAC,CAAA;IAClB,CAAC;IAED,MAAM,CAAC,KAAa;QACnB,OAAO,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;IACrD,CAAC;IAED,MAAM,CAAC,KAAmB;QACzB,IAAI,IAAI,GAAG,CAAC,CAAA;QACZ,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,IAAI,IAAI,IAAI,CAAC,UAAU,CAAA;QAEjD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAA;QAElC,IAAI,MAAM,GAAG,CAAC,CAAA;QACd,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAC1B,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;YACvB,MAAM,IAAI,IAAI,CAAC,UAAU,CAAA;QAC1B,CAAC;QAED,OAAO,KAAmB,CAAA;IAC3B,CAAC;CACD,CAAC,CAAA"}
|
package/x/index.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export * from "./debounce/microbounce.js";
|
|
|
9
9
|
export * from "./debounce/types.js";
|
|
10
10
|
export * from "./deep/index.js";
|
|
11
11
|
export * from "./dig/dig.js";
|
|
12
|
+
export * from "./queue/lane.js";
|
|
12
13
|
export * from "./queue/queue.js";
|
|
13
14
|
export * from "./rand/index.js";
|
|
14
15
|
export * from "./ok/index.js";
|
package/x/index.js
CHANGED
|
@@ -9,6 +9,7 @@ export * from "./debounce/microbounce.js";
|
|
|
9
9
|
export * from "./debounce/types.js";
|
|
10
10
|
export * from "./deep/index.js";
|
|
11
11
|
export * from "./dig/dig.js";
|
|
12
|
+
export * from "./queue/lane.js";
|
|
12
13
|
export * from "./queue/queue.js";
|
|
13
14
|
export * from "./rand/index.js";
|
|
14
15
|
export * from "./ok/index.js";
|
package/x/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../s/index.ts"],"names":[],"mappings":"AACA,cAAc,6BAA6B,CAAA;AAC3C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,yBAAyB,CAAA;AACvC,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAE7B,cAAc,wBAAwB,CAAA;AACtC,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA;AAEnC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAE5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAE/B,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAEhC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AAEjC,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,kBAAkB,CAAA;AAChC,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,SAAS,CAAA;AACvB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../s/index.ts"],"names":[],"mappings":"AACA,cAAc,6BAA6B,CAAA;AAC3C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,yBAAyB,CAAA;AACvC,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAE7B,cAAc,wBAAwB,CAAA;AACtC,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA;AAEnC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAE5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAE/B,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAEhC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AAEjC,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,kBAAkB,CAAA;AAChC,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,SAAS,CAAA;AACvB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA"}
|
package/x/queue/lane.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lane.js","sourceRoot":"","sources":["../../s/queue/lane.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAA;AAEhC,wEAAwE;AACxE,MAAM,UAAU,IAAI,CAAC,KAAK,GAAG,QAAQ;IACpC,OAAO,KAAK,CAAC,CAAC,EAA0B,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,CAEvD,CAAA;AACF,CAAC"}
|
package/x/queue/queue.d.ts
CHANGED
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
*/
|
|
4
|
-
export declare function queue<Args extends any[], Result>(fn: (...args: Args) => Promise<Result>): (...args: Args) => Promise<Result>;
|
|
1
|
+
/** create a job queue that ensures the given fn is always called in sequence (not concurrently). */
|
|
2
|
+
export declare function queue<Args extends any[], Result>(fn: (...args: Args) => Promise<Result>, limit?: number): (...args: Args) => Promise<Result>;
|
package/x/queue/queue.js
CHANGED
|
@@ -1,10 +1,19 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export function queue(fn) {
|
|
1
|
+
/** create a job queue that ensures the given fn is always called in sequence (not concurrently). */
|
|
2
|
+
export function queue(fn, limit = Infinity) {
|
|
3
|
+
let pending = 0;
|
|
5
4
|
let last = Promise.resolve();
|
|
6
5
|
return (...args) => {
|
|
7
|
-
|
|
6
|
+
if (pending >= limit)
|
|
7
|
+
return Promise.reject(new Error(`queue limit exceeded (${limit})`));
|
|
8
|
+
pending++;
|
|
9
|
+
const job = async () => {
|
|
10
|
+
try {
|
|
11
|
+
return await fn(...args);
|
|
12
|
+
}
|
|
13
|
+
finally {
|
|
14
|
+
pending--;
|
|
15
|
+
}
|
|
16
|
+
};
|
|
8
17
|
const current = last.then(job);
|
|
9
18
|
// prevent unhandled rejection breaking the chain
|
|
10
19
|
last = current.catch(() => { });
|
package/x/queue/queue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../s/queue/queue.ts"],"names":[],"mappings":"AACA
|
|
1
|
+
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../s/queue/queue.ts"],"names":[],"mappings":"AACA,oGAAoG;AACpG,MAAM,UAAU,KAAK,CACnB,EAAsC,EACtC,KAAK,GAAG,QAAQ;IAGjB,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,IAAI,IAAI,GAAiB,OAAO,CAAC,OAAO,EAAE,CAAA;IAE1C,OAAO,CAAC,GAAG,IAAU,EAAmB,EAAE;QACzC,IAAI,OAAO,IAAI,KAAK;YACnB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,KAAK,GAAG,CAAC,CAAC,CAAA;QAEpE,OAAO,EAAE,CAAA;QAET,MAAM,GAAG,GAAG,KAAK,IAAG,EAAE;YACrB,IAAI,CAAC;gBAAC,OAAO,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,CAAA;YAAC,CAAC;oBACxB,CAAC;gBAAC,OAAO,EAAE,CAAA;YAAC,CAAC;QACtB,CAAC,CAAA;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAE9B,iDAAiD;QACjD,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QAE9B,OAAO,OAAO,CAAA;IACf,CAAC,CAAA;AACF,CAAC"}
|
package/x/queue/queue.test.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Science } from "@e280/science";
|
|
2
1
|
declare const _default: {
|
|
3
|
-
"job runs":
|
|
4
|
-
"sequencing is enforced":
|
|
5
|
-
"params and return values seem to work":
|
|
6
|
-
"first job throws, second job unaffected":
|
|
2
|
+
"job runs": import("@e280/science").Test;
|
|
3
|
+
"sequencing is enforced": import("@e280/science").Test;
|
|
4
|
+
"params and return values seem to work": import("@e280/science").Test;
|
|
5
|
+
"first job throws, second job unaffected": import("@e280/science").Test;
|
|
6
|
+
"limit exceeded": import("@e280/science").Test;
|
|
7
7
|
};
|
|
8
8
|
export default _default;
|
package/x/queue/queue.test.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { suite, test, expect } from "@e280/science";
|
|
2
2
|
import { nap } from "../nap.js";
|
|
3
3
|
import { queue } from "./queue.js";
|
|
4
|
-
export default
|
|
5
|
-
"job runs":
|
|
4
|
+
export default suite({
|
|
5
|
+
"job runs": test(async () => {
|
|
6
6
|
let concurrent = 0;
|
|
7
7
|
const job = queue(async () => {
|
|
8
8
|
concurrent++;
|
|
@@ -15,7 +15,7 @@ export default Science.suite({
|
|
|
15
15
|
await promise1;
|
|
16
16
|
expect(concurrent).is(0);
|
|
17
17
|
}),
|
|
18
|
-
"sequencing is enforced":
|
|
18
|
+
"sequencing is enforced": test(async () => {
|
|
19
19
|
let concurrent = 0;
|
|
20
20
|
const job = queue(async () => {
|
|
21
21
|
concurrent++;
|
|
@@ -32,7 +32,7 @@ export default Science.suite({
|
|
|
32
32
|
await promise2;
|
|
33
33
|
expect(concurrent).is(0);
|
|
34
34
|
}),
|
|
35
|
-
"params and return values seem to work":
|
|
35
|
+
"params and return values seem to work": test(async () => {
|
|
36
36
|
const add = queue(async (a, b) => {
|
|
37
37
|
await nap(100);
|
|
38
38
|
return a + b;
|
|
@@ -42,7 +42,7 @@ export default Science.suite({
|
|
|
42
42
|
expect(await promise1).is(3);
|
|
43
43
|
expect(await promise2).is(30);
|
|
44
44
|
}),
|
|
45
|
-
"first job throws, second job unaffected":
|
|
45
|
+
"first job throws, second job unaffected": test(async () => {
|
|
46
46
|
let run = 0;
|
|
47
47
|
const job = queue(async () => {
|
|
48
48
|
run++;
|
|
@@ -53,5 +53,13 @@ export default Science.suite({
|
|
|
53
53
|
expect(async () => job()).throwsAsync();
|
|
54
54
|
expect(async () => job()).not.throwsAsync();
|
|
55
55
|
}),
|
|
56
|
+
"limit exceeded": test(async () => {
|
|
57
|
+
const job = queue(async () => nap(10), 2);
|
|
58
|
+
await expect(async () => await Promise.all([
|
|
59
|
+
job(),
|
|
60
|
+
job(),
|
|
61
|
+
job(),
|
|
62
|
+
])).throwsAsync();
|
|
63
|
+
}),
|
|
56
64
|
});
|
|
57
65
|
//# sourceMappingURL=queue.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.test.js","sourceRoot":"","sources":["../../s/queue/queue.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"queue.test.js","sourceRoot":"","sources":["../../s/queue/queue.test.ts"],"names":[],"mappings":"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"}
|
package/x/utensils/map.js
CHANGED
package/x/utensils/map.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map.js","sourceRoot":"","sources":["../../s/utensils/map.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,IAAI,
|
|
1
|
+
{"version":3,"file":"map.js","sourceRoot":"","sources":["../../s/utensils/map.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,IAAI,CAClB,GAAuC,EACvC,GAAM,EACN,GAAG,GAAG,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,yBAAyB,GAAG,GAAG,CAAC,CAAC,CAAC,sBAAsB,CAAC;IAE3F,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;QACf,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAM,CAAA;;QAExB,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAA;AACtB,CAAC;AAED,MAAM,UAAU,SAAS,CAAO,GAAkB,EAAE,GAAM,EAAE,IAAa;IACxE,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;QACf,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAE,CAAA;SAChB,CAAC;QACL,MAAM,KAAK,GAAG,IAAI,EAAE,CAAA;QACpB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QACnB,OAAO,KAAK,CAAA;IACb,CAAC;AACF,CAAC;AAED,MAAM,UAAU,OAAO,CAA6C,GAAM,EAAE,OAAyB;IACpG,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO;QACjC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IACpB,OAAO,GAAG,CAAA;AACX,CAAC"}
|