@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.
Files changed (83) hide show
  1. package/.turbo/turbo-build.log +38 -0
  2. package/.turbo/turbo-test.log +87 -0
  3. package/README.CN.md +5 -0
  4. package/README.md +5 -0
  5. package/dist/_virtual/_rolldown/runtime.js +11 -0
  6. package/dist/fetch/compose.d.ts +3 -0
  7. package/dist/index.d.ts +7 -0
  8. package/dist/index.js +10 -0
  9. package/dist/node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/funnel.js +40 -0
  10. package/dist/node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/funnel.js.map +1 -0
  11. package/dist/node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/isNullish.js +8 -0
  12. package/dist/node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/isNullish.js.map +1 -0
  13. package/dist/node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/lazyDataLastImpl--3B10z3s.js +12 -0
  14. package/dist/node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/lazyDataLastImpl--3B10z3s.js.map +1 -0
  15. package/dist/node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/omitBy.js +14 -0
  16. package/dist/node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/omitBy.js.map +1 -0
  17. package/dist/node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/purry.js +12 -0
  18. package/dist/node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/purry.js.map +1 -0
  19. package/dist/number/index.d.ts +14 -0
  20. package/dist/number/index.js +13 -0
  21. package/dist/number/index.js.map +1 -0
  22. package/dist/paradigm/go.d.ts +12 -0
  23. package/dist/paradigm/go.js +37 -0
  24. package/dist/paradigm/go.js.map +1 -0
  25. package/dist/paradigm/index.d.ts +2 -0
  26. package/dist/paradigm/rust.d.ts +25 -0
  27. package/dist/paradigm/rust.js +42 -0
  28. package/dist/paradigm/rust.js.map +1 -0
  29. package/dist/plugin/batching-emitter.d.ts +4 -0
  30. package/dist/plugin/batching-emitter.js +33 -0
  31. package/dist/plugin/batching-emitter.js.map +1 -0
  32. package/dist/plugin/core.d.ts +10 -0
  33. package/dist/plugin/core.js +23 -0
  34. package/dist/plugin/core.js.map +1 -0
  35. package/dist/plugin/event-emitter.d.ts +4 -0
  36. package/dist/plugin/index.d.ts +2 -0
  37. package/dist/random/index.d.ts +23 -0
  38. package/dist/random/index.js +18 -0
  39. package/dist/random/index.js.map +1 -0
  40. package/dist/timer/controllable-interval.d.ts +34 -0
  41. package/dist/timer/controllable-interval.js +41 -0
  42. package/dist/timer/controllable-interval.js.map +1 -0
  43. package/dist/timer/debounce.d.ts +21 -0
  44. package/dist/timer/debounce.js +30 -0
  45. package/dist/timer/debounce.js.map +1 -0
  46. package/dist/timer/index.d.ts +2 -0
  47. package/dist/url/index.d.ts +9 -0
  48. package/dist/url/index.js +28 -0
  49. package/dist/url/index.js.map +1 -0
  50. package/dist/utility-types/index.d.ts +13 -0
  51. package/package.json +54 -0
  52. package/src/fetch/__tests__/compose.spec.ts +105 -0
  53. package/src/fetch/compose.ts +23 -0
  54. package/src/index.ts +7 -0
  55. package/src/number/__tests__/number.spec.ts +50 -0
  56. package/src/number/index.ts +22 -0
  57. package/src/paradigm/__tests__/go.spec.ts +63 -0
  58. package/src/paradigm/__tests__/rust.spec.ts +68 -0
  59. package/src/paradigm/go.ts +38 -0
  60. package/src/paradigm/index.ts +2 -0
  61. package/src/paradigm/rust.ts +50 -0
  62. package/src/plugin/__tests__/batch-emitter.spec.ts +48 -0
  63. package/src/plugin/__tests__/core.spec.ts +110 -0
  64. package/src/plugin/__tests__/event-emiiter.spec.ts +41 -0
  65. package/src/plugin/batching-emitter.ts +61 -0
  66. package/src/plugin/core.ts +37 -0
  67. package/src/plugin/event-emitter.ts +25 -0
  68. package/src/plugin/index.ts +2 -0
  69. package/src/random/__tests__/random.spec.ts +77 -0
  70. package/src/random/index.ts +37 -0
  71. package/src/timer/__tests__/controllable-interval.spec.ts +51 -0
  72. package/src/timer/controllable-interval.ts +86 -0
  73. package/src/timer/debounce.ts +92 -0
  74. package/src/timer/index.ts +2 -0
  75. package/src/url/README.md +0 -0
  76. package/src/url/__tests__/url.spec.ts +152 -0
  77. package/src/url/index.ts +44 -0
  78. package/src/utility-types/index.ts +19 -0
  79. package/tsconfig.app.json +11 -0
  80. package/tsconfig.json +8 -0
  81. package/tsconfig.node.json +18 -0
  82. package/tsconfig.vitest.json +10 -0
  83. 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
+ 
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
+  RUN  v4.1.9 /Users/bopan/VibeCoding/mono/packages/js-kit
7
+
8
+ [?2026h
9
+  ❯ src/plugin/__tests__/batch-emitter.spec.ts [queued]
10
+
11
+  Test Files 0 passed (10)
12
+  Tests 0 passed (0)
13
+  Start at 22:41:27
14
+  Duration 329ms
15
+ [?2026l[?2026h
16
+  ❯ src/paradigm/__tests__/rust.spec.ts [queued]
17
+  ❯ src/plugin/__tests__/batch-emitter.spec.ts [queued]
18
+  ❯ src/plugin/__tests__/core.spec.ts [queued]
19
+  ❯ src/plugin/__tests__/event-emiiter.spec.ts [queued]
20
+  ❯ src/random/__tests__/random.spec.ts [queued]
21
+
22
+  Test Files 0 passed (10)
23
+  Tests 0 passed (0)
24
+  Start at 22:41:27
25
+  Duration 537ms
26
+ [?2026l[?2026h ✓ src/paradigm/__tests__/rust.spec.ts (9 tests) 14ms
27
+ ✓ src/random/__tests__/random.spec.ts (7 tests) 16ms
28
+ stdout | src/plugin/__tests__/event-emiiter.spec.ts > EventEmitter 单元测试 > 应当支持注册和触发事件回调
29
+ Tom click 1
30
+ Tom click 2
31
+
32
+ ✓ src/plugin/__tests__/event-emiiter.spec.ts (2 tests) 6ms
33
+ stdout | src/plugin/__tests__/core.spec.ts > definePlugin 单元测试 > use > 应当正确组合 Store, Logger 和 Persist 逻辑
34
+ set a = 100.
35
+
36
+
37
+  ❯ src/plugin/__tests__/batch-emitter.spec.ts 1/4
38
+  ❯ src/plugin/__tests__/core.spec.ts 0/3
39
+  ❯ src/plugin/__tests__/event-emiiter.spec.ts 2/2
40
+  ❯ src/random/__tests__/random.spec.ts 7/7
41
+  ❯ src/timer/__tests__/controllable-interval.spec.ts [queued]
42
+  ❯ src/url/__tests__/url.spec.ts [queued]
43
+
44
+  Test Files 3 passed (10)
45
+  Tests 19 passed (25)
46
+  Start at 22:41:27
47
+  Duration 638ms
48
+ [?2026l[?2026h ✓ src/plugin/__tests__/batch-emitter.spec.ts (4 tests) 20ms
49
+ ✓ src/plugin/__tests__/core.spec.ts (3 tests) 40ms
50
+
51
+  ❯ src/plugin/__tests__/event-emiiter.spec.ts 2/2
52
+  ❯ src/random/__tests__/random.spec.ts 7/7
53
+  ❯ src/timer/__tests__/controllable-interval.spec.ts [queued]
54
+  ❯ src/url/__tests__/url.spec.ts 0/12
55
+
56
+  Test Files 5 passed (10)
57
+  Tests 25 passed (37)
58
+  Start at 22:41:27
59
+  Duration 914ms
60
+ [?2026l[?2026h ✓ src/url/__tests__/url.spec.ts (12 tests) 8ms
61
+
62
+  ❯ src/fetch/__tests__/compose.spec.ts [queued]
63
+  ❯ src/number/__tests__/number.spec.ts 0/8
64
+  ❯ src/timer/__tests__/controllable-interval.spec.ts 1/3
65
+
66
+  Test Files 6 passed (10)
67
+  Tests 38 passed (48)
68
+  Start at 22:41:27
69
+  Duration 1.01s
70
+ [?2026l[?2026h ✓ src/timer/__tests__/controllable-interval.spec.ts (3 tests) 8ms
71
+ ✓ src/number/__tests__/number.spec.ts (8 tests) 7ms
72
+ ✓ src/fetch/__tests__/compose.spec.ts (6 tests) 9ms
73
+
74
+  ❯ src/paradigm/__tests__/go.spec.ts 1/8
75
+
76
+  Test Files 9 passed (10)
77
+  Tests 55 passed (62)
78
+  Start at 22:41:27
79
+  Duration 1.12s
80
+ [?2026l ✓ src/paradigm/__tests__/go.spec.ts (8 tests) 6ms
81
+
82
+  Test Files  10 passed (10)
83
+  Tests  62 passed (62)
84
+  Start at  22:41:27
85
+  Duration  1.16s (transform 705ms, setup 0ms, import 1.53s, tests 135ms, environment 1ms)
86
+
87
+ [?25h
package/README.CN.md ADDED
@@ -0,0 +1,5 @@
1
+ [English](./README.md) | 简体中文
2
+
3
+ # 工具库
4
+
5
+ ## 线上地址
package/README.md ADDED
@@ -0,0 +1,5 @@
1
+ English | [简体中文](./README.CN.md)
2
+
3
+ # Utils
4
+
5
+ ## Online website
@@ -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 };
@@ -0,0 +1,3 @@
1
+ export type Next = () => Promise<void>;
2
+ export type Middleware<T = unknown> = (ctx: T, next: Next) => Promise<void>;
3
+ export declare function asyncCompose<T = unknown>(...fns: Middleware<T>[]): Middleware<T>;
@@ -0,0 +1,7 @@
1
+ export * from './number';
2
+ export * from './paradigm';
3
+ export * from './plugin';
4
+ export * from './random';
5
+ export * from './timer';
6
+ export * from './url';
7
+ export * from './utility-types';
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,8 @@
1
+ //#region ../../node_modules/.pnpm/remeda@2.39.0/node_modules/remeda/dist/isNullish.js
2
+ function e(e) {
3
+ return e == null;
4
+ }
5
+ //#endregion
6
+ export { e as isNullish };
7
+
8
+ //# sourceMappingURL=isNullish.js.map
@@ -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"}
@@ -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,2 @@
1
+ export * as go from './go';
2
+ export * as rust from './rust';
@@ -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,4 @@
1
+ export declare function defineBatchEmitter<S>(onFlushed?: (queue: S[]) => Promise<void>): import('./core').Plugin<{
2
+ batchEmit: (data: S, batchingDelay?: number) => Promise<S[]>;
3
+ flush: () => Promise<void>;
4
+ }, object>;
@@ -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,2 @@
1
+ export * from './batching-emitter';
2
+ export * from './core';
@@ -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"}