@greypan/js-kit 1.0.0
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/.turbo/turbo-build.log +38 -0
- package/.turbo/turbo-test.log +87 -0
- package/README.CN.md +5 -0
- package/README.md +5 -0
- package/dist/_virtual/_rolldown/runtime.js +11 -0
- package/dist/fetch/compose.d.ts +3 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +10 -0
- package/dist/node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/funnel.js +40 -0
- package/dist/node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/funnel.js.map +1 -0
- package/dist/node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/isNullish.js +8 -0
- package/dist/node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/isNullish.js.map +1 -0
- package/dist/node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/lazyDataLastImpl--3B10z3s.js +12 -0
- package/dist/node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/lazyDataLastImpl--3B10z3s.js.map +1 -0
- package/dist/node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/omitBy.js +14 -0
- package/dist/node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/omitBy.js.map +1 -0
- package/dist/node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/purry.js +12 -0
- package/dist/node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/purry.js.map +1 -0
- package/dist/number/index.d.ts +14 -0
- package/dist/number/index.js +13 -0
- package/dist/number/index.js.map +1 -0
- package/dist/paradigm/go.d.ts +12 -0
- package/dist/paradigm/go.js +37 -0
- package/dist/paradigm/go.js.map +1 -0
- package/dist/paradigm/index.d.ts +2 -0
- package/dist/paradigm/rust.d.ts +25 -0
- package/dist/paradigm/rust.js +42 -0
- package/dist/paradigm/rust.js.map +1 -0
- package/dist/plugin/batching-emitter.d.ts +4 -0
- package/dist/plugin/batching-emitter.js +33 -0
- package/dist/plugin/batching-emitter.js.map +1 -0
- package/dist/plugin/core.d.ts +10 -0
- package/dist/plugin/core.js +23 -0
- package/dist/plugin/core.js.map +1 -0
- package/dist/plugin/event-emitter.d.ts +4 -0
- package/dist/plugin/index.d.ts +2 -0
- package/dist/random/index.d.ts +23 -0
- package/dist/random/index.js +18 -0
- package/dist/random/index.js.map +1 -0
- package/dist/timer/controllable-interval.d.ts +34 -0
- package/dist/timer/controllable-interval.js +41 -0
- package/dist/timer/controllable-interval.js.map +1 -0
- package/dist/timer/debounce.d.ts +21 -0
- package/dist/timer/debounce.js +30 -0
- package/dist/timer/debounce.js.map +1 -0
- package/dist/timer/index.d.ts +2 -0
- package/dist/url/index.d.ts +9 -0
- package/dist/url/index.js +28 -0
- package/dist/url/index.js.map +1 -0
- package/dist/utility-types/index.d.ts +13 -0
- package/package.json +54 -0
- package/src/fetch/__tests__/compose.spec.ts +105 -0
- package/src/fetch/compose.ts +23 -0
- package/src/index.ts +7 -0
- package/src/number/__tests__/number.spec.ts +50 -0
- package/src/number/index.ts +22 -0
- package/src/paradigm/__tests__/go.spec.ts +63 -0
- package/src/paradigm/__tests__/rust.spec.ts +68 -0
- package/src/paradigm/go.ts +38 -0
- package/src/paradigm/index.ts +2 -0
- package/src/paradigm/rust.ts +50 -0
- package/src/plugin/__tests__/batch-emitter.spec.ts +48 -0
- package/src/plugin/__tests__/core.spec.ts +110 -0
- package/src/plugin/__tests__/event-emiiter.spec.ts +41 -0
- package/src/plugin/batching-emitter.ts +61 -0
- package/src/plugin/core.ts +37 -0
- package/src/plugin/event-emitter.ts +25 -0
- package/src/plugin/index.ts +2 -0
- package/src/random/__tests__/random.spec.ts +77 -0
- package/src/random/index.ts +37 -0
- package/src/timer/__tests__/controllable-interval.spec.ts +51 -0
- package/src/timer/controllable-interval.ts +86 -0
- package/src/timer/debounce.ts +92 -0
- package/src/timer/index.ts +2 -0
- package/src/url/README.md +0 -0
- package/src/url/__tests__/url.spec.ts +152 -0
- package/src/url/index.ts +44 -0
- package/src/utility-types/index.ts +19 -0
- package/tsconfig.app.json +11 -0
- package/tsconfig.json +8 -0
- package/tsconfig.node.json +18 -0
- package/tsconfig.vitest.json +10 -0
- package/vite.config.ts +32 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
|
|
2
|
+
> @greypan/js-kit@1.0.0 build /Users/bopan/VibeCoding/mono/packages/js-kit
|
|
3
|
+
> run-p type-check "build-only {@}" --
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
> @greypan/js-kit@1.0.0 build-only /Users/bopan/VibeCoding/mono/packages/js-kit
|
|
7
|
+
> vp build
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
> @greypan/js-kit@1.0.0 type-check /Users/bopan/VibeCoding/mono/packages/js-kit
|
|
11
|
+
> vue-tsc --build
|
|
12
|
+
|
|
13
|
+
vite v8.1.2 building client environment for production...
|
|
14
|
+
[2K
|
|
15
|
+
rendering chunks...
|
|
16
|
+
|
|
17
|
+
[unplugin:dts] Start generate declaration files...
|
|
18
|
+
[unplugin:dts] Declaration files built in 684ms.
|
|
19
|
+
|
|
20
|
+
computing gzip size...
|
|
21
|
+
dist/node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/isNullish.js 0.20 kB │ gzip: 0.16 kB │ map: 0.35 kB
|
|
22
|
+
dist/_virtual/_rolldown/runtime.js 0.26 kB │ gzip: 0.22 kB
|
|
23
|
+
dist/plugin/core.js 0.29 kB │ gzip: 0.19 kB │ map: 1.36 kB
|
|
24
|
+
dist/number/index.js 0.30 kB │ gzip: 0.22 kB │ map: 1.07 kB
|
|
25
|
+
dist/node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/lazyDataLastImpl--3B10z3s.js 0.31 kB │ gzip: 0.24 kB │ map: 0.56 kB
|
|
26
|
+
dist/node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/omitBy.js 0.35 kB │ gzip: 0.25 kB │ map: 0.64 kB
|
|
27
|
+
dist/node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/purry.js 0.37 kB │ gzip: 0.27 kB │ map: 0.62 kB
|
|
28
|
+
dist/random/index.js 0.49 kB │ gzip: 0.27 kB │ map: 1.59 kB
|
|
29
|
+
dist/paradigm/rust.js 0.67 kB │ gzip: 0.37 kB │ map: 1.81 kB
|
|
30
|
+
dist/paradigm/go.js 0.69 kB │ gzip: 0.38 kB │ map: 1.55 kB
|
|
31
|
+
dist/plugin/batching-emitter.js 0.75 kB │ gzip: 0.43 kB │ map: 2.41 kB
|
|
32
|
+
dist/timer/controllable-interval.js 0.83 kB │ gzip: 0.42 kB │ map: 3.24 kB
|
|
33
|
+
dist/timer/debounce.js 0.88 kB │ gzip: 0.50 kB │ map: 3.59 kB
|
|
34
|
+
dist/index.js 0.91 kB │ gzip: 0.36 kB
|
|
35
|
+
dist/url/index.js 0.95 kB │ gzip: 0.56 kB │ map: 2.17 kB
|
|
36
|
+
dist/node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/funnel.js 1.23 kB │ gzip: 0.57 kB │ map: 2.10 kB
|
|
37
|
+
|
|
38
|
+
✓ built in 741ms
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
|
|
2
|
+
> @mono/js-kit@1.0.0 test /Users/bopan/VibeCoding/mono/packages/js-kit
|
|
3
|
+
> vp test run
|
|
4
|
+
|
|
5
|
+
[?25l
|
|
6
|
+
[1m[30m[46m RUN [49m[39m[22m [36mv4.1.9 [39m[90m/Users/bopan/VibeCoding/mono/packages/js-kit[39m
|
|
7
|
+
|
|
8
|
+
[?2026h
|
|
9
|
+
[1m[33m ❯ [39m[22msrc/plugin/__tests__/batch-emitter.spec.ts[2m [queued][22m
|
|
10
|
+
|
|
11
|
+
[2m Test Files [22m[1m[32m0 passed[39m[22m[90m (10)[39m
|
|
12
|
+
[2m Tests [22m[1m[32m0 passed[39m[22m[90m (0)[39m
|
|
13
|
+
[2m Start at [22m22:41:27
|
|
14
|
+
[2m Duration [22m329ms
|
|
15
|
+
[?2026l[?2026h[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K
|
|
16
|
+
[1m[33m ❯ [39m[22msrc/paradigm/__tests__/rust.spec.ts[2m [queued][22m
|
|
17
|
+
[1m[33m ❯ [39m[22msrc/plugin/__tests__/batch-emitter.spec.ts[2m [queued][22m
|
|
18
|
+
[1m[33m ❯ [39m[22msrc/plugin/__tests__/core.spec.ts[2m [queued][22m
|
|
19
|
+
[1m[33m ❯ [39m[22msrc/plugin/__tests__/event-emiiter.spec.ts[2m [queued][22m
|
|
20
|
+
[1m[33m ❯ [39m[22msrc/random/__tests__/random.spec.ts[2m [queued][22m
|
|
21
|
+
|
|
22
|
+
[2m Test Files [22m[1m[32m0 passed[39m[22m[90m (10)[39m
|
|
23
|
+
[2m Tests [22m[1m[32m0 passed[39m[22m[90m (0)[39m
|
|
24
|
+
[2m Start at [22m22:41:27
|
|
25
|
+
[2m Duration [22m537ms
|
|
26
|
+
[?2026l[?2026h[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K [32m✓[39m src/paradigm/__tests__/rust.spec.ts [2m([22m[2m9 tests[22m[2m)[22m[32m 14[2mms[22m[39m
|
|
27
|
+
[32m✓[39m src/random/__tests__/random.spec.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 16[2mms[22m[39m
|
|
28
|
+
[90mstdout[2m | src/plugin/__tests__/event-emiiter.spec.ts[2m > [22m[2mEventEmitter 单元测试[2m > [22m[2m应当支持注册和触发事件回调
|
|
29
|
+
[22m[39mTom click 1
|
|
30
|
+
Tom click 2
|
|
31
|
+
|
|
32
|
+
[32m✓[39m src/plugin/__tests__/event-emiiter.spec.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 6[2mms[22m[39m
|
|
33
|
+
[90mstdout[2m | src/plugin/__tests__/core.spec.ts[2m > [22m[2mdefinePlugin 单元测试[2m > [22m[2muse[2m > [22m[2m应当正确组合 Store, Logger 和 Persist 逻辑
|
|
34
|
+
[22m[39mset a = 100.
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
[1m[33m ❯ [39m[22msrc/plugin/__tests__/batch-emitter.spec.ts[2m 1/4[22m
|
|
38
|
+
[1m[33m ❯ [39m[22msrc/plugin/__tests__/core.spec.ts[2m 0/3[22m
|
|
39
|
+
[1m[33m ❯ [39m[22msrc/plugin/__tests__/event-emiiter.spec.ts[2m 2/2[22m
|
|
40
|
+
[1m[33m ❯ [39m[22msrc/random/__tests__/random.spec.ts[2m 7/7[22m
|
|
41
|
+
[1m[33m ❯ [39m[22msrc/timer/__tests__/controllable-interval.spec.ts[2m [queued][22m
|
|
42
|
+
[1m[33m ❯ [39m[22msrc/url/__tests__/url.spec.ts[2m [queued][22m
|
|
43
|
+
|
|
44
|
+
[2m Test Files [22m[1m[32m3 passed[39m[22m[90m (10)[39m
|
|
45
|
+
[2m Tests [22m[1m[32m19 passed[39m[22m[90m (25)[39m
|
|
46
|
+
[2m Start at [22m22:41:27
|
|
47
|
+
[2m Duration [22m638ms
|
|
48
|
+
[?2026l[?2026h[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K [32m✓[39m src/plugin/__tests__/batch-emitter.spec.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 20[2mms[22m[39m
|
|
49
|
+
[32m✓[39m src/plugin/__tests__/core.spec.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 40[2mms[22m[39m
|
|
50
|
+
|
|
51
|
+
[1m[33m ❯ [39m[22msrc/plugin/__tests__/event-emiiter.spec.ts[2m 2/2[22m
|
|
52
|
+
[1m[33m ❯ [39m[22msrc/random/__tests__/random.spec.ts[2m 7/7[22m
|
|
53
|
+
[1m[33m ❯ [39m[22msrc/timer/__tests__/controllable-interval.spec.ts[2m [queued][22m
|
|
54
|
+
[1m[33m ❯ [39m[22msrc/url/__tests__/url.spec.ts[2m 0/12[22m
|
|
55
|
+
|
|
56
|
+
[2m Test Files [22m[1m[32m5 passed[39m[22m[90m (10)[39m
|
|
57
|
+
[2m Tests [22m[1m[32m25 passed[39m[22m[90m (37)[39m
|
|
58
|
+
[2m Start at [22m22:41:27
|
|
59
|
+
[2m Duration [22m914ms
|
|
60
|
+
[?2026l[?2026h[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K [32m✓[39m src/url/__tests__/url.spec.ts [2m([22m[2m12 tests[22m[2m)[22m[32m 8[2mms[22m[39m
|
|
61
|
+
|
|
62
|
+
[1m[33m ❯ [39m[22msrc/fetch/__tests__/compose.spec.ts[2m [queued][22m
|
|
63
|
+
[1m[33m ❯ [39m[22msrc/number/__tests__/number.spec.ts[2m 0/8[22m
|
|
64
|
+
[1m[33m ❯ [39m[22msrc/timer/__tests__/controllable-interval.spec.ts[2m 1/3[22m
|
|
65
|
+
|
|
66
|
+
[2m Test Files [22m[1m[32m6 passed[39m[22m[90m (10)[39m
|
|
67
|
+
[2m Tests [22m[1m[32m38 passed[39m[22m[90m (48)[39m
|
|
68
|
+
[2m Start at [22m22:41:27
|
|
69
|
+
[2m Duration [22m1.01s
|
|
70
|
+
[?2026l[?2026h[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K [32m✓[39m src/timer/__tests__/controllable-interval.spec.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 8[2mms[22m[39m
|
|
71
|
+
[32m✓[39m src/number/__tests__/number.spec.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 7[2mms[22m[39m
|
|
72
|
+
[32m✓[39m src/fetch/__tests__/compose.spec.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 9[2mms[22m[39m
|
|
73
|
+
|
|
74
|
+
[1m[33m ❯ [39m[22msrc/paradigm/__tests__/go.spec.ts[2m 1/8[22m
|
|
75
|
+
|
|
76
|
+
[2m Test Files [22m[1m[32m9 passed[39m[22m[90m (10)[39m
|
|
77
|
+
[2m Tests [22m[1m[32m55 passed[39m[22m[90m (62)[39m
|
|
78
|
+
[2m Start at [22m22:41:27
|
|
79
|
+
[2m Duration [22m1.12s
|
|
80
|
+
[?2026l[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K [32m✓[39m src/paradigm/__tests__/go.spec.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 6[2mms[22m[39m
|
|
81
|
+
|
|
82
|
+
[2m Test Files [22m [1m[32m10 passed[39m[22m[90m (10)[39m
|
|
83
|
+
[2m Tests [22m [1m[32m62 passed[39m[22m[90m (62)[39m
|
|
84
|
+
[2m Start at [22m 22:41:27
|
|
85
|
+
[2m Duration [22m 1.16s[2m (transform 705ms, setup 0ms, import 1.53s, tests 135ms, environment 1ms)[22m
|
|
86
|
+
|
|
87
|
+
[?25h
|
package/README.CN.md
ADDED
package/README.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
//#region \0rolldown/runtime.js
|
|
2
|
+
var e = Object.defineProperty, t = (t, n) => {
|
|
3
|
+
let r = {};
|
|
4
|
+
for (var i in t) e(r, i, {
|
|
5
|
+
get: t[i],
|
|
6
|
+
enumerable: !0
|
|
7
|
+
});
|
|
8
|
+
return n || e(r, Symbol.toStringTag, { value: "Module" }), r;
|
|
9
|
+
};
|
|
10
|
+
//#endregion
|
|
11
|
+
export { t as __exportAll };
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { clamp as e, toPrecision as t } from "./number/index.js";
|
|
2
|
+
import { go_exports as n } from "./paradigm/go.js";
|
|
3
|
+
import { rust_exports as r } from "./paradigm/rust.js";
|
|
4
|
+
import { definePlugin as i } from "./plugin/core.js";
|
|
5
|
+
import { defineBatchEmitter as a } from "./plugin/batching-emitter.js";
|
|
6
|
+
import { random as o, randomFloat as s, randomHex as c, randomRgb as l } from "./random/index.js";
|
|
7
|
+
import { createControllableInterval as u, defineControllableInterval as d } from "./timer/controllable-interval.js";
|
|
8
|
+
import { debounce as f } from "./timer/debounce.js";
|
|
9
|
+
import { urlParse as p, urlStringify as m } from "./url/index.js";
|
|
10
|
+
export { e as clamp, u as createControllableInterval, f as debounce, a as defineBatchEmitter, d as defineControllableInterval, i as definePlugin, n as go, o as random, s as randomFloat, c as randomHex, l as randomRgb, r as rust, t as toPrecision, p as urlParse, m as urlStringify };
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
//#region ../../node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/funnel.js
|
|
2
|
+
var e = Symbol("funnel/voidReducer"), t = () => e;
|
|
3
|
+
function n(n, { triggerAt: r = "end", minQuietPeriodMs: i, maxBurstDurationMs: a, minGapMs: o, reducer: s = t }) {
|
|
4
|
+
let c, l, u, d, f = () => {
|
|
5
|
+
let t = u;
|
|
6
|
+
t !== void 0 && (u = void 0, t === e ? n() : n(t), o !== void 0 && (l = setTimeout(p, o)));
|
|
7
|
+
}, p = () => {
|
|
8
|
+
clearTimeout(l), l = void 0, c === void 0 && f();
|
|
9
|
+
}, m = () => {
|
|
10
|
+
clearTimeout(c), c = void 0, d = void 0, l === void 0 && f();
|
|
11
|
+
};
|
|
12
|
+
return {
|
|
13
|
+
call: (...e) => {
|
|
14
|
+
let t = c === void 0 && l === void 0;
|
|
15
|
+
if ((r !== "start" || t) && (u = s(u, ...e)), !(c === void 0 && !t)) {
|
|
16
|
+
if (i !== void 0 || a !== void 0 || o === void 0) {
|
|
17
|
+
clearTimeout(c);
|
|
18
|
+
let e = Date.now();
|
|
19
|
+
d ??= e;
|
|
20
|
+
let t = a === void 0 ? i ?? 0 : Math.min(i ?? a, Math.max(0, a - (e - d)));
|
|
21
|
+
c = setTimeout(m, t);
|
|
22
|
+
}
|
|
23
|
+
r !== "end" && t && f();
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
cancel: () => {
|
|
27
|
+
clearTimeout(c), c = void 0, d = void 0, clearTimeout(l), l = void 0, u = void 0;
|
|
28
|
+
},
|
|
29
|
+
flush: () => {
|
|
30
|
+
m(), p();
|
|
31
|
+
},
|
|
32
|
+
get isIdle() {
|
|
33
|
+
return c === void 0 && l === void 0;
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//#endregion
|
|
38
|
+
export { n as funnel };
|
|
39
|
+
|
|
40
|
+
//# sourceMappingURL=funnel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"funnel.js","names":[],"sources":["../../../../../../../../../node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/funnel.js"],"sourcesContent":["const e=Symbol(`funnel/voidReducer`),t=()=>e;function n(n,{triggerAt:r=`end`,minQuietPeriodMs:i,maxBurstDurationMs:a,minGapMs:o,reducer:s=t}){let c,l,u,d,f=()=>{let t=u;t!==void 0&&(u=void 0,t===e?n():n(t),o!==void 0&&(l=setTimeout(p,o)))},p=()=>{clearTimeout(l),l=void 0,c===void 0&&f()},m=()=>{clearTimeout(c),c=void 0,d=void 0,l===void 0&&f()};return{call:(...e)=>{let t=c===void 0&&l===void 0;if((r!==`start`||t)&&(u=s(u,...e)),!(c===void 0&&!t)){if(i!==void 0||a!==void 0||o===void 0){clearTimeout(c);let e=Date.now();d??=e;let t=a===void 0?i??0:Math.min(i??a,Math.max(0,a-(e-d)));c=setTimeout(m,t)}r!==`end`&&t&&f()}},cancel:()=>{clearTimeout(c),c=void 0,d=void 0,clearTimeout(l),l=void 0,u=void 0},flush:()=>{m(),p()},get isIdle(){return c===void 0&&l===void 0}}}export{n as funnel};\n//# sourceMappingURL=funnel.js.map"],"x_google_ignoreList":[0],"mappings":";AAAA,IAAM,IAAE,OAAO,oBAAoB,GAAE,UAAM;AAAE,SAAS,EAAE,GAAE,EAAC,WAAU,IAAE,OAAM,kBAAiB,GAAE,oBAAmB,GAAE,UAAS,GAAE,SAAQ,IAAE,KAAG;CAAC,IAAI,GAAE,GAAE,GAAE,GAAE,UAAM;EAAC,IAAI,IAAE;EAAE,MAAI,KAAK,MAAI,IAAE,KAAK,GAAE,MAAI,IAAE,EAAE,IAAE,EAAE,CAAC,GAAE,MAAI,KAAK,MAAI,IAAE,WAAW,GAAE,CAAC;CAAG,GAAE,UAAM;EAAC,aAAa,CAAC,GAAE,IAAE,KAAK,GAAE,MAAI,KAAK,KAAG,EAAE;CAAC,GAAE,UAAM;EAAC,aAAa,CAAC,GAAE,IAAE,KAAK,GAAE,IAAE,KAAK,GAAE,MAAI,KAAK,KAAG,EAAE;CAAC;CAAE,OAAM;EAAC,OAAM,GAAG,MAAI;GAAC,IAAI,IAAE,MAAI,KAAK,KAAG,MAAI,KAAK;GAAE,KAAI,MAAI,WAAS,OAAK,IAAE,EAAE,GAAE,GAAG,CAAC,IAAG,EAAE,MAAI,KAAK,KAAG,CAAC,IAAG;IAAC,IAAG,MAAI,KAAK,KAAG,MAAI,KAAK,KAAG,MAAI,KAAK,GAAE;KAAC,aAAa,CAAC;KAAE,IAAI,IAAE,KAAK,IAAI;KAAE,MAAI;KAAE,IAAI,IAAE,MAAI,KAAK,IAAE,KAAG,IAAE,KAAK,IAAI,KAAG,GAAE,KAAK,IAAI,GAAE,KAAG,IAAE,EAAE,CAAC;KAAE,IAAE,WAAW,GAAE,CAAC;IAAC;IAAC,MAAI,SAAO,KAAG,EAAE;GAAC;EAAC;EAAE,cAAW;GAAC,aAAa,CAAC,GAAE,IAAE,KAAK,GAAE,IAAE,KAAK,GAAE,aAAa,CAAC,GAAE,IAAE,KAAK,GAAE,IAAE,KAAK;EAAC;EAAE,aAAU;GAAC,EAAE,GAAE,EAAE;EAAC;EAAE,IAAI,SAAQ;GAAC,OAAO,MAAI,KAAK,KAAG,MAAI,KAAK;EAAC;CAAC;AAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isNullish.js","names":[],"sources":["../../../../../../../../../node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/isNullish.js"],"sourcesContent":["function e(e){return e==null}export{e as isNullish};\n//# sourceMappingURL=isNullish.js.map"],"x_google_ignoreList":[0],"mappings":";AAAA,SAAS,EAAE,GAAE;CAAC,OAAO,KAAG;AAAI"}
|
package/dist/node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/lazyDataLastImpl--3B10z3s.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region ../../node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/lazyDataLastImpl--3B10z3s.js
|
|
2
|
+
function e(e, t, n) {
|
|
3
|
+
let r = (n) => e(n, ...t);
|
|
4
|
+
return n === void 0 ? r : Object.assign(r, {
|
|
5
|
+
lazy: n,
|
|
6
|
+
lazyArgs: t
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { e as t };
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=lazyDataLastImpl--3B10z3s.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lazyDataLastImpl--3B10z3s.js","names":[],"sources":["../../../../../../../../../node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/lazyDataLastImpl--3B10z3s.js"],"sourcesContent":["function e(e,t,n){let r=n=>e(n,...t);return n===void 0?r:Object.assign(r,{lazy:n,lazyArgs:t})}export{e as t};\n//# sourceMappingURL=lazyDataLastImpl--3B10z3s.js.map"],"x_google_ignoreList":[0],"mappings":";AAAA,SAAS,EAAE,GAAE,GAAE,GAAE;CAAC,IAAI,KAAE,MAAG,EAAE,GAAE,GAAG,CAAC;CAAE,OAAO,MAAI,KAAK,IAAE,IAAE,OAAO,OAAO,GAAE;EAAC,MAAK;EAAE,UAAS;CAAC,CAAC;AAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { purry as e } from "./purry.js";
|
|
2
|
+
//#region ../../node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/omitBy.js
|
|
3
|
+
function t(...t) {
|
|
4
|
+
return e(n, t);
|
|
5
|
+
}
|
|
6
|
+
function n(e, t) {
|
|
7
|
+
let n = { ...e };
|
|
8
|
+
for (let [r, i] of Object.entries(n)) t(i, r, e) && delete n[r];
|
|
9
|
+
return n;
|
|
10
|
+
}
|
|
11
|
+
//#endregion
|
|
12
|
+
export { t as omitBy };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=omitBy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"omitBy.js","names":["e"],"sources":["../../../../../../../../../node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/omitBy.js"],"sourcesContent":["import{purry as e}from\"./purry.js\";function t(...t){return e(n,t)}function n(e,t){let n={...e};for(let[r,i]of Object.entries(n))t(i,r,e)&&delete n[r];return n}export{t as omitBy};\n//# sourceMappingURL=omitBy.js.map"],"x_google_ignoreList":[0],"mappings":";;AAAmC,SAAS,EAAE,GAAG,GAAE;CAAC,OAAOA,EAAE,GAAE,CAAC;AAAC;AAAC,SAAS,EAAE,GAAE,GAAE;CAAC,IAAI,IAAE,EAAC,GAAG,EAAC;CAAE,KAAI,IAAG,CAAC,GAAE,MAAK,OAAO,QAAQ,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,KAAG,OAAO,EAAE;CAAG,OAAO;AAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { t as e } from "./lazyDataLastImpl--3B10z3s.js";
|
|
2
|
+
//#region ../../node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/purry.js
|
|
3
|
+
function t(t, n, r) {
|
|
4
|
+
let i = t.length - n.length;
|
|
5
|
+
if (i === 0) return t(...n);
|
|
6
|
+
if (i === 1) return e(t, n, r);
|
|
7
|
+
throw Error("Wrong number of arguments");
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { t as purry };
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=purry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"purry.js","names":[],"sources":["../../../../../../../../../node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/purry.js"],"sourcesContent":["import{t as e}from\"./lazyDataLastImpl--3B10z3s.js\";function t(t,n,r){let i=t.length-n.length;if(i===0)return t(...n);if(i===1)return e(t,n,r);throw Error(`Wrong number of arguments`)}export{t as purry};\n//# sourceMappingURL=purry.js.map"],"x_google_ignoreList":[0],"mappings":";;AAAmD,SAAS,EAAE,GAAE,GAAE,GAAE;CAAC,IAAI,IAAE,EAAE,SAAO,EAAE;CAAO,IAAG,MAAI,GAAE,OAAO,EAAE,GAAG,CAAC;CAAE,IAAG,MAAI,GAAE,OAAO,EAAE,GAAE,GAAE,CAAC;CAAE,MAAM,MAAM,2BAA2B;AAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 转换为指定精度的数字
|
|
3
|
+
* @param val 需要转换的数字
|
|
4
|
+
* @param precision 精度。表示小数点后位数。如果传了负数(比如 -2),则取整到百位(1234.56->1200)。
|
|
5
|
+
* @returns 转换后的数字
|
|
6
|
+
*/
|
|
7
|
+
export declare function toPrecision(val: number, precision: number): number;
|
|
8
|
+
/**
|
|
9
|
+
* 将数字限制在指定的范围内
|
|
10
|
+
* @param val 当前值
|
|
11
|
+
* @param min 最小值
|
|
12
|
+
* @param max 最大值
|
|
13
|
+
*/
|
|
14
|
+
export declare function clamp(val: number, min: number, max: number): number;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//#region src/number/index.ts
|
|
2
|
+
function e(e, t) {
|
|
3
|
+
if (Number.isNaN(e) || !Number.isFinite(e)) return e;
|
|
4
|
+
let n = 10 ** t;
|
|
5
|
+
return Math.round(e * n) / n;
|
|
6
|
+
}
|
|
7
|
+
function t(e, t, n) {
|
|
8
|
+
return Math.max(t, Math.min(e, n));
|
|
9
|
+
}
|
|
10
|
+
//#endregion
|
|
11
|
+
export { t as clamp, e as toPrecision };
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/number/index.ts"],"sourcesContent":["/**\n * 转换为指定精度的数字\n * @param val 需要转换的数字\n * @param precision 精度。表示小数点后位数。如果传了负数(比如 -2),则取整到百位(1234.56->1200)。\n * @returns 转换后的数字\n */\nexport function toPrecision(val: number, precision: number): number {\n if (Number.isNaN(val) || !Number.isFinite(val)) return val\n\n const factor = Math.pow(10, precision)\n return Math.round(val * factor) / factor\n}\n\n/**\n * 将数字限制在指定的范围内\n * @param val 当前值\n * @param min 最小值\n * @param max 最大值\n */\nexport function clamp(val: number, min: number, max: number): number {\n return Math.max(min, Math.min(val, max))\n}\n"],"mappings":";AAMA,SAAgB,EAAY,GAAa,GAA2B;CAClE,IAAI,OAAO,MAAM,CAAG,KAAK,CAAC,OAAO,SAAS,CAAG,GAAG,OAAO;CAEvD,IAAM,IAAkB,MAAI;CAC5B,OAAO,KAAK,MAAM,IAAM,CAAM,IAAI;AACpC;AAQA,SAAgB,EAAM,GAAa,GAAa,GAAqB;CACnE,OAAO,KAAK,IAAI,GAAK,KAAK,IAAI,GAAK,CAAG,CAAC;AACzC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Go 范式,用于统一处理成功/失败返回值
|
|
3
|
+
*/
|
|
4
|
+
export type Ok<T> = readonly [null, T];
|
|
5
|
+
export type Err<E> = readonly [E, null];
|
|
6
|
+
export type Result<T, E> = Ok<T> | Err<E>;
|
|
7
|
+
export declare function ok<T>(value: T): Ok<T>;
|
|
8
|
+
export declare function err<E>(error: E): Err<E>;
|
|
9
|
+
export declare function isOk<T, E>(result: Result<T, E>): result is Ok<T>;
|
|
10
|
+
export declare function isErr<T, E>(result: Result<T, E>): result is Err<E>;
|
|
11
|
+
export declare function to<T, E = unknown>(promise: Promise<T>): Promise<Result<Awaited<T>, E>>;
|
|
12
|
+
export declare function unwrap<S extends Result<any, any>>(result: S): S extends Ok<infer T> ? T : S extends Err<infer E> ? E : never;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { __exportAll as e } from "../_virtual/_rolldown/runtime.js";
|
|
2
|
+
//#region src/paradigm/go.ts
|
|
3
|
+
var t = /* @__PURE__ */ e({
|
|
4
|
+
err: () => r,
|
|
5
|
+
isErr: () => a,
|
|
6
|
+
isOk: () => i,
|
|
7
|
+
ok: () => n,
|
|
8
|
+
to: () => o,
|
|
9
|
+
unwrap: () => s
|
|
10
|
+
});
|
|
11
|
+
function n(e) {
|
|
12
|
+
return [null, e];
|
|
13
|
+
}
|
|
14
|
+
function r(e) {
|
|
15
|
+
return [e, null];
|
|
16
|
+
}
|
|
17
|
+
function i(e) {
|
|
18
|
+
return e[0] === null && e[1] !== null;
|
|
19
|
+
}
|
|
20
|
+
function a(e) {
|
|
21
|
+
return e[0] !== null && e[1] === null;
|
|
22
|
+
}
|
|
23
|
+
async function o(e) {
|
|
24
|
+
try {
|
|
25
|
+
return n(await e);
|
|
26
|
+
} catch (e) {
|
|
27
|
+
return r(e);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function s(e) {
|
|
31
|
+
let [t, n] = e;
|
|
32
|
+
return i(e) ? n : t;
|
|
33
|
+
}
|
|
34
|
+
//#endregion
|
|
35
|
+
export { r as err, t as go_exports, a as isErr, i as isOk, n as ok, o as to, s as unwrap };
|
|
36
|
+
|
|
37
|
+
//# sourceMappingURL=go.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"go.js","names":[],"sources":["../../src/paradigm/go.ts"],"sourcesContent":["/**\n * @description Go 范式,用于统一处理成功/失败返回值\n */\n\nexport type Ok<T> = readonly [null, T]\nexport type Err<E> = readonly [E, null]\nexport type Result<T, E> = Ok<T> | Err<E>\n\nexport function ok<T>(value: T): Ok<T> {\n return [null, value]\n}\n\nexport function err<E>(error: E): Err<E> {\n return [error, null]\n}\n\nexport function isOk<T, E>(result: Result<T, E>): result is Ok<T> {\n return result[0] === null && result[1] !== null\n}\n\nexport function isErr<T, E>(result: Result<T, E>): result is Err<E> {\n return result[0] !== null && result[1] === null\n}\n\nexport async function to<T, E = unknown>(promise: Promise<T>): Promise<Result<Awaited<T>, E>> {\n try {\n return ok(await promise)\n } catch (error) {\n return err(error as E)\n }\n}\n\nexport function unwrap<S extends Result<any, any>>(\n result: S\n): S extends Ok<infer T> ? T : S extends Err<infer E> ? E : never {\n const [error, value] = result\n return isOk(result) ? value : error\n}\n"],"mappings":";;;;;;;;;;AAQA,SAAgB,EAAM,GAAiB;CACrC,OAAO,CAAC,MAAM,CAAK;AACrB;AAEA,SAAgB,EAAO,GAAkB;CACvC,OAAO,CAAC,GAAO,IAAI;AACrB;AAEA,SAAgB,EAAW,GAAuC;CAChE,OAAO,EAAO,OAAO,QAAQ,EAAO,OAAO;AAC7C;AAEA,SAAgB,EAAY,GAAwC;CAClE,OAAO,EAAO,OAAO,QAAQ,EAAO,OAAO;AAC7C;AAEA,eAAsB,EAAmB,GAAqD;CAC5F,IAAI;EACF,OAAO,EAAG,MAAM,CAAO;CACzB,SAAS,GAAO;EACd,OAAO,EAAI,CAAU;CACvB;AACF;AAEA,SAAgB,EACd,GACgE;CAChE,IAAM,CAAC,GAAO,KAAS;CACvB,OAAO,EAAK,CAAM,IAAI,IAAQ;AAChC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Rust 范式,用于统一处理成功/失败返回值
|
|
3
|
+
*/
|
|
4
|
+
export type Ok<T> = {
|
|
5
|
+
readonly ok: true;
|
|
6
|
+
readonly value: T;
|
|
7
|
+
};
|
|
8
|
+
export type Err<E> = {
|
|
9
|
+
readonly ok: false;
|
|
10
|
+
readonly error: E;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* 考虑到 T 或 E 其中一个为 never 的情况
|
|
14
|
+
* Result<T,never> 等价于 Ok<T>
|
|
15
|
+
* Result<never,E> 等价于 Err<E>
|
|
16
|
+
* 为什么是 [T] extends [never] ? 而不是 T extends never ?:
|
|
17
|
+
* 条件类型是分布式的,防止 T 为联合类型时对每项分别计算再合并结果
|
|
18
|
+
*/
|
|
19
|
+
export type Result<T, E> = Ok<T> | Err<E>;
|
|
20
|
+
export declare function ok<T>(value: T): Ok<T>;
|
|
21
|
+
export declare function err<E>(error: E): Err<E>;
|
|
22
|
+
export declare function isOk<T, E>(result: Result<T, E>): result is Ok<T>;
|
|
23
|
+
export declare function isErr<T, E>(result: Result<T, E>): result is Err<E>;
|
|
24
|
+
export declare function to<T, E = unknown>(promise: Promise<T>): Promise<Result<Awaited<T>, E>>;
|
|
25
|
+
export declare function unwrap<S extends Result<any, any>>(result: S): S extends Ok<infer T> ? T : S extends Err<infer E> ? E : never;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { __exportAll as e } from "../_virtual/_rolldown/runtime.js";
|
|
2
|
+
//#region src/paradigm/rust.ts
|
|
3
|
+
var t = /* @__PURE__ */ e({
|
|
4
|
+
err: () => r,
|
|
5
|
+
isErr: () => a,
|
|
6
|
+
isOk: () => i,
|
|
7
|
+
ok: () => n,
|
|
8
|
+
to: () => o,
|
|
9
|
+
unwrap: () => s
|
|
10
|
+
});
|
|
11
|
+
function n(e) {
|
|
12
|
+
return {
|
|
13
|
+
ok: !0,
|
|
14
|
+
value: e
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function r(e) {
|
|
18
|
+
return {
|
|
19
|
+
ok: !1,
|
|
20
|
+
error: e
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function i(e) {
|
|
24
|
+
return e.ok;
|
|
25
|
+
}
|
|
26
|
+
function a(e) {
|
|
27
|
+
return !e.ok;
|
|
28
|
+
}
|
|
29
|
+
async function o(e) {
|
|
30
|
+
try {
|
|
31
|
+
return n(await e);
|
|
32
|
+
} catch (e) {
|
|
33
|
+
return r(e);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function s(e) {
|
|
37
|
+
return e.ok ? e.value : e.error;
|
|
38
|
+
}
|
|
39
|
+
//#endregion
|
|
40
|
+
export { r as err, a as isErr, i as isOk, n as ok, t as rust_exports, o as to, s as unwrap };
|
|
41
|
+
|
|
42
|
+
//# sourceMappingURL=rust.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rust.js","names":[],"sources":["../../src/paradigm/rust.ts"],"sourcesContent":["/**\n * @description Rust 范式,用于统一处理成功/失败返回值\n */\n\nexport type Ok<T> = {\n readonly ok: true\n readonly value: T\n}\nexport type Err<E> = {\n readonly ok: false\n readonly error: E\n}\n/**\n * 考虑到 T 或 E 其中一个为 never 的情况\n * Result<T,never> 等价于 Ok<T>\n * Result<never,E> 等价于 Err<E>\n * 为什么是 [T] extends [never] ? 而不是 T extends never ?:\n * 条件类型是分布式的,防止 T 为联合类型时对每项分别计算再合并结果\n */\nexport type Result<T, E> = Ok<T> | Err<E>\n\nexport function ok<T>(value: T): Ok<T> {\n return { ok: true, value }\n}\n\nexport function err<E>(error: E): Err<E> {\n return { ok: false, error }\n}\n\nexport function isOk<T, E>(result: Result<T, E>): result is Ok<T> {\n return result.ok\n}\n\nexport function isErr<T, E>(result: Result<T, E>): result is Err<E> {\n return !result.ok\n}\n\nexport async function to<T, E = unknown>(promise: Promise<T>): Promise<Result<Awaited<T>, E>> {\n try {\n return ok(await promise)\n } catch (error) {\n return err(error as E)\n }\n}\n\nexport function unwrap<S extends Result<any, any>>(\n result: S\n): S extends Ok<infer T> ? T : S extends Err<infer E> ? E : never {\n return result.ok ? result.value : result.error\n}\n"],"mappings":";;;;;;;;;;AAqBA,SAAgB,EAAM,GAAiB;CACrC,OAAO;EAAE,IAAI;EAAM;CAAM;AAC3B;AAEA,SAAgB,EAAO,GAAkB;CACvC,OAAO;EAAE,IAAI;EAAO;CAAM;AAC5B;AAEA,SAAgB,EAAW,GAAuC;CAChE,OAAO,EAAO;AAChB;AAEA,SAAgB,EAAY,GAAwC;CAClE,OAAO,CAAC,EAAO;AACjB;AAEA,eAAsB,EAAmB,GAAqD;CAC5F,IAAI;EACF,OAAO,EAAG,MAAM,CAAO;CACzB,SAAS,GAAO;EACd,OAAO,EAAI,CAAU;CACvB;AACF;AAEA,SAAgB,EACd,GACgE;CAChE,OAAO,EAAO,KAAK,EAAO,QAAQ,EAAO;AAC3C"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { definePlugin as e } from "./core.js";
|
|
2
|
+
//#region src/plugin/batching-emitter.ts
|
|
3
|
+
function t(t) {
|
|
4
|
+
return e(() => {
|
|
5
|
+
let e = [], n = [], r = null;
|
|
6
|
+
async function i(i, o = 0) {
|
|
7
|
+
return o <= 0 ? (t && await t([i]), Promise.resolve([i])) : new Promise((t, s) => {
|
|
8
|
+
n.push(t), e.push(i) === 1 && (r = setTimeout(() => {
|
|
9
|
+
try {
|
|
10
|
+
a();
|
|
11
|
+
} catch (e) {
|
|
12
|
+
s(e);
|
|
13
|
+
}
|
|
14
|
+
}, o));
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
async function a() {
|
|
18
|
+
if (!e.length) return;
|
|
19
|
+
let i = [...e], a = [...n];
|
|
20
|
+
e = [], n = [], r &&= (clearTimeout(r), null), t && await t(i);
|
|
21
|
+
let o;
|
|
22
|
+
for (; o = a.shift();) o(i);
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
batchEmit: i,
|
|
26
|
+
flush: a
|
|
27
|
+
};
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
//#endregion
|
|
31
|
+
export { t as defineBatchEmitter };
|
|
32
|
+
|
|
33
|
+
//# sourceMappingURL=batching-emitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batching-emitter.js","names":[],"sources":["../../src/plugin/batching-emitter.ts"],"sourcesContent":["import { definePlugin } from './core'\n\ntype Resolve<S> = (queue: S[]) => void\n\nexport function defineBatchEmitter<S>(onFlushed?: (queue: S[]) => Promise<void>) {\n return definePlugin(() => {\n let queue: S[] = []\n let resolves: Resolve<S>[] = []\n let timerId: ReturnType<typeof setTimeout> | null = null\n\n /**\n * 批量发出,延迟执行\n */\n async function batchEmit(data: S, batchingDelay = 0): Promise<S[]> {\n if (batchingDelay <= 0) {\n if (onFlushed) await onFlushed([data])\n return Promise.resolve([data])\n }\n\n return new Promise((resolve, reject) => {\n resolves.push(resolve)\n\n if (queue.push(data) === 1) {\n timerId = setTimeout(() => {\n try {\n void flush()\n } catch (error) {\n reject(error)\n }\n }, batchingDelay)\n }\n })\n }\n\n /**\n * 立即清空并执行当前的队列\n */\n async function flush() {\n if (!queue.length) return\n\n // 先快照一份,防止后续 push 污染当前批次,消除异步重入(Re-entrancy)\n const currentQueue = [...queue]\n const currentResolves = [...resolves]\n queue = []\n resolves = []\n if (timerId) {\n clearTimeout(timerId)\n timerId = null\n }\n\n if (onFlushed) await onFlushed(currentQueue)\n\n let fn: Resolve<S> | undefined\n while ((fn = currentResolves.shift())) {\n fn(currentQueue)\n }\n }\n\n return { batchEmit, flush }\n })\n}\n"],"mappings":";;AAIA,SAAgB,EAAsB,GAA2C;CAC/E,OAAO,QAAmB;EACxB,IAAI,IAAa,CAAC,GACd,IAAyB,CAAC,GAC1B,IAAgD;EAKpD,eAAe,EAAU,GAAS,IAAgB,GAAiB;GAMjE,OALI,KAAiB,KACf,KAAW,MAAM,EAAU,CAAC,CAAI,CAAC,GAC9B,QAAQ,QAAQ,CAAC,CAAI,CAAC,KAGxB,IAAI,SAAS,GAAS,MAAW;IAGtC,AAFA,EAAS,KAAK,CAAO,GAEjB,EAAM,KAAK,CAAI,MAAM,MACvB,IAAU,iBAAiB;KACzB,IAAI;MACF,EAAW;KACb,SAAS,GAAO;MACd,EAAO,CAAK;KACd;IACF,GAAG,CAAa;GAEpB,CAAC;EACH;EAKA,eAAe,IAAQ;GACrB,IAAI,CAAC,EAAM,QAAQ;GAGnB,IAAM,IAAe,CAAC,GAAG,CAAK,GACxB,IAAkB,CAAC,GAAG,CAAQ;GAQpC,AAPA,IAAQ,CAAC,GACT,IAAW,CAAC,GACZ,AAEE,OADA,aAAa,CAAO,GACV,OAGR,KAAW,MAAM,EAAU,CAAY;GAE3C,IAAI;GACJ,OAAQ,IAAK,EAAgB,MAAM,IACjC,EAAG,CAAY;EAEnB;EAEA,OAAO;GAAE;GAAW;EAAM;CAC5B,CAAC;AACH"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface Plugin<C extends object, D extends object> {
|
|
2
|
+
readonly use: <U extends object, E extends object>(plugin: Plugin<U, E>) => Plugin<C & U, D & E>;
|
|
3
|
+
readonly make: <T extends D>(ctx?: T) => T & C;
|
|
4
|
+
}
|
|
5
|
+
export declare function definePlugin<C extends object, D extends object>(setup: (ctx: D) => C): Plugin<C, D>;
|
|
6
|
+
/**
|
|
7
|
+
* 提取插件实例化的类型 (C & D)
|
|
8
|
+
* T 可以是 Plugin 实例,也可以是返回 Plugin 实例的函数
|
|
9
|
+
*/
|
|
10
|
+
export type PluginMade<T> = T extends (...args: any[]) => Plugin<infer C, infer D> ? C & D : T extends Plugin<infer C, infer D> ? C & D : never;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region src/plugin/core.ts
|
|
2
|
+
function e(t) {
|
|
3
|
+
function n(n) {
|
|
4
|
+
return e((e) => n.make({
|
|
5
|
+
...e,
|
|
6
|
+
...t(e)
|
|
7
|
+
}));
|
|
8
|
+
}
|
|
9
|
+
function r(e = {}) {
|
|
10
|
+
return {
|
|
11
|
+
...e,
|
|
12
|
+
...t(e)
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
use: n,
|
|
17
|
+
make: r
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//#endregion
|
|
21
|
+
export { e as definePlugin };
|
|
22
|
+
|
|
23
|
+
//# sourceMappingURL=core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","names":[],"sources":["../../src/plugin/core.ts"],"sourcesContent":["export interface Plugin<C extends object, D extends object> {\n readonly use: <U extends object, E extends object>(plugin: Plugin<U, E>) => Plugin<C & U, D & E>\n readonly make: <T extends D>(ctx?: T) => T & C\n}\n\nexport function definePlugin<C extends object, D extends object>(setup: (ctx: D) => C): Plugin<C, D> {\n function use<U extends object, E extends object>(plugin: Plugin<U, E>): Plugin<C & U, D & E> {\n return definePlugin<C & U, D & E>(ctx => {\n return plugin.make({\n ...ctx,\n ...setup(ctx)\n })\n })\n }\n\n function make<T extends D>(ctx = {} as T): T & C {\n return {\n ...ctx,\n ...setup(ctx)\n }\n }\n\n return {\n use,\n make\n }\n}\n\n/**\n * 提取插件实例化的类型 (C & D)\n * T 可以是 Plugin 实例,也可以是返回 Plugin 实例的函数\n */\nexport type PluginMade<T> = T extends (...args: any[]) => Plugin<infer C, infer D>\n ? C & D\n : T extends Plugin<infer C, infer D>\n ? C & D\n : never\n"],"mappings":";AAKA,SAAgB,EAAiD,GAAoC;CACnG,SAAS,EAAwC,GAA4C;EAC3F,OAAO,GAA2B,MACzB,EAAO,KAAK;GACjB,GAAG;GACH,GAAG,EAAM,CAAG;EACd,CAAC,CACF;CACH;CAEA,SAAS,EAAkB,IAAM,CAAC,GAAe;EAC/C,OAAO;GACL,GAAG;GACH,GAAG,EAAM,CAAG;EACd;CACF;CAEA,OAAO;EACL;EACA;CACF;AACF"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function defineEventEmitter<E extends Record<string, unknown[]>>(): import('./core').Plugin<{
|
|
2
|
+
on<K extends keyof E>(type: K & string, handler: (...args: E[K]) => void, options?: AddEventListenerOptions): () => void;
|
|
3
|
+
emit<K extends keyof E>(type: K & string, ...args: E[K]): void;
|
|
4
|
+
}, object>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 随机整数 [min, max]
|
|
3
|
+
* @param min 最小值
|
|
4
|
+
* @param max 最大值
|
|
5
|
+
*/
|
|
6
|
+
export declare function random(min: number, max: number): number;
|
|
7
|
+
/**
|
|
8
|
+
* 随机浮点数 [min, max)
|
|
9
|
+
* @param min 最小值
|
|
10
|
+
* @param max 最大值
|
|
11
|
+
* @param precision 保留小数位,不传则返回原始浮点数
|
|
12
|
+
*/
|
|
13
|
+
export declare function randomFloat(min: number, max: number): number;
|
|
14
|
+
/**
|
|
15
|
+
* 生成随机的 RGB 颜色代码
|
|
16
|
+
* @returns RGB 颜色代码,例如 rgb(255, 0, 0)
|
|
17
|
+
*/
|
|
18
|
+
export declare function randomRgb(): string;
|
|
19
|
+
/**
|
|
20
|
+
* 生成随机的十六进制颜色代码
|
|
21
|
+
* @returns 十六进制颜色代码,例如 #ff0000
|
|
22
|
+
*/
|
|
23
|
+
export declare function randomHex(): string;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region src/random/index.ts
|
|
2
|
+
function e(e, t) {
|
|
3
|
+
return Math.floor(Math.random() * (t - e + 1)) + e;
|
|
4
|
+
}
|
|
5
|
+
function t(e, t) {
|
|
6
|
+
let n = Math.min(e, t);
|
|
7
|
+
return n + Math.random() * (Math.max(e, t) - n);
|
|
8
|
+
}
|
|
9
|
+
function n() {
|
|
10
|
+
return `rgb(${e(0, 255)}, ${e(0, 255)}, ${e(0, 255)})`;
|
|
11
|
+
}
|
|
12
|
+
function r() {
|
|
13
|
+
return "#" + Math.floor(Math.random() * 16777216).toString(16).padStart(6, "0");
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
export { e as random, t as randomFloat, r as randomHex, n as randomRgb };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/random/index.ts"],"sourcesContent":["/**\n * 随机整数 [min, max]\n * @param min 最小值\n * @param max 最大值\n */\nexport function random(min: number, max: number): number {\n return Math.floor(Math.random() * (max - min + 1)) + min\n}\n\n/**\n * 随机浮点数 [min, max)\n * @param min 最小值\n * @param max 最大值\n * @param precision 保留小数位,不传则返回原始浮点数\n */\nexport function randomFloat(min: number, max: number): number {\n const lower = Math.min(min, max)\n const upper = Math.max(min, max)\n return lower + Math.random() * (upper - lower)\n}\n\n/**\n * 生成随机的 RGB 颜色代码\n * @returns RGB 颜色代码,例如 rgb(255, 0, 0)\n */\nexport function randomRgb(): string {\n return `rgb(${random(0, 255)}, ${random(0, 255)}, ${random(0, 255)})`\n}\n\n/**\n * 生成随机的十六进制颜色代码\n * @returns 十六进制颜色代码,例如 #ff0000\n */\nexport function randomHex(): string {\n const color = Math.floor(Math.random() * 0x1000000).toString(16)\n return '#' + color.padStart(6, '0')\n}\n"],"mappings":";AAKA,SAAgB,EAAO,GAAa,GAAqB;CACvD,OAAO,KAAK,MAAM,KAAK,OAAO,KAAK,IAAM,IAAM,EAAE,IAAI;AACvD;AAQA,SAAgB,EAAY,GAAa,GAAqB;CAC5D,IAAM,IAAQ,KAAK,IAAI,GAAK,CAAG;CAE/B,OAAO,IAAQ,KAAK,OAAO,KADb,KAAK,IAAI,GAAK,CACI,IAAQ;AAC1C;AAMA,SAAgB,IAAoB;CAClC,OAAO,OAAO,EAAO,GAAG,GAAG,EAAE,IAAI,EAAO,GAAG,GAAG,EAAE,IAAI,EAAO,GAAG,GAAG,EAAE;AACrE;AAMA,SAAgB,IAAoB;CAElC,OAAO,MADO,KAAK,MAAM,KAAK,OAAO,IAAI,QAAS,CAAC,CAAC,SAAS,EAChD,CAAA,CAAM,SAAS,GAAG,GAAG;AACpC"}
|