hyper-scheduler 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 (76) hide show
  1. package/.editorconfig +21 -0
  2. package/.eslintrc.cjs +26 -0
  3. package/GEMINI.md +1 -0
  4. package/README.md +38 -0
  5. package/docs/.vitepress/config.ts +52 -0
  6. package/docs/README.md +120 -0
  7. package/docs/api/devtools.md +232 -0
  8. package/docs/api/index.md +178 -0
  9. package/docs/api/scheduler.md +322 -0
  10. package/docs/api/task.md +439 -0
  11. package/docs/api/types.md +365 -0
  12. package/docs/examples/index.md +295 -0
  13. package/docs/guide/best-practices.md +436 -0
  14. package/docs/guide/core-concepts.md +363 -0
  15. package/docs/guide/getting-started.md +138 -0
  16. package/docs/index.md +33 -0
  17. package/docs/public/logo.svg +54 -0
  18. package/examples/browser/index.html +354 -0
  19. package/examples/node/simple.js +36 -0
  20. package/examples/react-demo/index.html +12 -0
  21. package/examples/react-demo/package.json +23 -0
  22. package/examples/react-demo/src/App.css +212 -0
  23. package/examples/react-demo/src/App.jsx +160 -0
  24. package/examples/react-demo/src/main.jsx +9 -0
  25. package/examples/react-demo/vite.config.ts +12 -0
  26. package/examples/react-demo/yarn.lock +752 -0
  27. package/examples/vue-demo/index.html +12 -0
  28. package/examples/vue-demo/package.json +21 -0
  29. package/examples/vue-demo/src/App.vue +373 -0
  30. package/examples/vue-demo/src/main.ts +4 -0
  31. package/examples/vue-demo/vite.config.ts +13 -0
  32. package/examples/vue-demo/yarn.lock +375 -0
  33. package/package.json +51 -0
  34. package/src/constants.ts +18 -0
  35. package/src/core/retry-strategy.ts +28 -0
  36. package/src/core/scheduler.ts +601 -0
  37. package/src/core/task-registry.ts +58 -0
  38. package/src/index.ts +74 -0
  39. package/src/platform/browser/browser-timer.ts +66 -0
  40. package/src/platform/browser/main-thread-timer.ts +16 -0
  41. package/src/platform/browser/worker.ts +31 -0
  42. package/src/platform/node/debug-cli.ts +19 -0
  43. package/src/platform/node/node-timer.ts +15 -0
  44. package/src/platform/timer-strategy.ts +19 -0
  45. package/src/plugins/dev-tools.ts +101 -0
  46. package/src/types.ts +115 -0
  47. package/src/ui/components/devtools.ts +525 -0
  48. package/src/ui/components/floating-trigger.ts +102 -0
  49. package/src/ui/components/icons.ts +16 -0
  50. package/src/ui/components/resizer.ts +129 -0
  51. package/src/ui/components/task-detail.ts +228 -0
  52. package/src/ui/components/task-header.ts +319 -0
  53. package/src/ui/components/task-list.ts +416 -0
  54. package/src/ui/components/timeline.ts +364 -0
  55. package/src/ui/debug-panel.ts +56 -0
  56. package/src/ui/i18n/en.ts +76 -0
  57. package/src/ui/i18n/index.ts +42 -0
  58. package/src/ui/i18n/zh.ts +76 -0
  59. package/src/ui/store/dev-tools-store.ts +191 -0
  60. package/src/ui/styles/theme.css.ts +56 -0
  61. package/src/ui/styles.ts +43 -0
  62. package/src/utils/cron-lite.ts +221 -0
  63. package/src/utils/cron.ts +20 -0
  64. package/src/utils/id.ts +10 -0
  65. package/src/utils/schedule.ts +93 -0
  66. package/src/vite-env.d.ts +1 -0
  67. package/stats.html +4949 -0
  68. package/tests/integration/Debug.test.ts +58 -0
  69. package/tests/unit/Plugin.test.ts +16 -0
  70. package/tests/unit/RetryStrategy.test.ts +21 -0
  71. package/tests/unit/Scheduler.test.ts +38 -0
  72. package/tests/unit/schedule.test.ts +70 -0
  73. package/tests/unit/ui/DevToolsStore.test.ts +67 -0
  74. package/tsconfig.json +28 -0
  75. package/vite.config.ts +51 -0
  76. package/vitest.config.ts +24 -0
@@ -0,0 +1,375 @@
1
+ # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2
+ # yarn lockfile v1
3
+
4
+
5
+ "@babel/helper-string-parser@^7.27.1":
6
+ version "7.27.1"
7
+ resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz"
8
+ integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==
9
+
10
+ "@babel/helper-validator-identifier@^7.28.5":
11
+ version "7.28.5"
12
+ resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz"
13
+ integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==
14
+
15
+ "@babel/parser@^7.28.5":
16
+ version "7.28.5"
17
+ resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz"
18
+ integrity sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==
19
+ dependencies:
20
+ "@babel/types" "^7.28.5"
21
+
22
+ "@babel/types@^7.28.5":
23
+ version "7.28.5"
24
+ resolved "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz"
25
+ integrity sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==
26
+ dependencies:
27
+ "@babel/helper-string-parser" "^7.27.1"
28
+ "@babel/helper-validator-identifier" "^7.28.5"
29
+
30
+ "@esbuild/darwin-arm64@0.21.5":
31
+ version "0.21.5"
32
+ resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz"
33
+ integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==
34
+
35
+ "@jridgewell/sourcemap-codec@^1.5.5":
36
+ version "1.5.5"
37
+ resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz"
38
+ integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==
39
+
40
+ "@rollup/rollup-darwin-arm64@4.53.3":
41
+ version "4.53.3"
42
+ resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.3.tgz"
43
+ integrity sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==
44
+
45
+ "@types/estree@1.0.8":
46
+ version "1.0.8"
47
+ resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz"
48
+ integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==
49
+
50
+ "@vitejs/plugin-vue@^5.0.0":
51
+ version "5.2.4"
52
+ resolved "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz"
53
+ integrity sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==
54
+
55
+ "@volar/language-core@2.4.15":
56
+ version "2.4.15"
57
+ resolved "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.15.tgz"
58
+ integrity sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==
59
+ dependencies:
60
+ "@volar/source-map" "2.4.15"
61
+
62
+ "@volar/source-map@2.4.15":
63
+ version "2.4.15"
64
+ resolved "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.15.tgz"
65
+ integrity sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==
66
+
67
+ "@volar/typescript@2.4.15":
68
+ version "2.4.15"
69
+ resolved "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.15.tgz"
70
+ integrity sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==
71
+ dependencies:
72
+ "@volar/language-core" "2.4.15"
73
+ path-browserify "^1.0.1"
74
+ vscode-uri "^3.0.8"
75
+
76
+ "@vue/compiler-core@3.5.25":
77
+ version "3.5.25"
78
+ resolved "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.25.tgz"
79
+ integrity sha512-vay5/oQJdsNHmliWoZfHPoVZZRmnSWhug0BYT34njkYTPqClh3DNWLkZNJBVSjsNMrg0CCrBfoKkjZQPM/QVUw==
80
+ dependencies:
81
+ "@babel/parser" "^7.28.5"
82
+ "@vue/shared" "3.5.25"
83
+ entities "^4.5.0"
84
+ estree-walker "^2.0.2"
85
+ source-map-js "^1.2.1"
86
+
87
+ "@vue/compiler-dom@^3.5.0", "@vue/compiler-dom@3.5.25":
88
+ version "3.5.25"
89
+ resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.25.tgz"
90
+ integrity sha512-4We0OAcMZsKgYoGlMjzYvaoErltdFI2/25wqanuTu+S4gismOTRTBPi4IASOjxWdzIwrYSjnqONfKvuqkXzE2Q==
91
+ dependencies:
92
+ "@vue/compiler-core" "3.5.25"
93
+ "@vue/shared" "3.5.25"
94
+
95
+ "@vue/compiler-sfc@3.5.25":
96
+ version "3.5.25"
97
+ resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.25.tgz"
98
+ integrity sha512-PUgKp2rn8fFsI++lF2sO7gwO2d9Yj57Utr5yEsDf3GNaQcowCLKL7sf+LvVFvtJDXUp/03+dC6f2+LCv5aK1ag==
99
+ dependencies:
100
+ "@babel/parser" "^7.28.5"
101
+ "@vue/compiler-core" "3.5.25"
102
+ "@vue/compiler-dom" "3.5.25"
103
+ "@vue/compiler-ssr" "3.5.25"
104
+ "@vue/shared" "3.5.25"
105
+ estree-walker "^2.0.2"
106
+ magic-string "^0.30.21"
107
+ postcss "^8.5.6"
108
+ source-map-js "^1.2.1"
109
+
110
+ "@vue/compiler-ssr@3.5.25":
111
+ version "3.5.25"
112
+ resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.25.tgz"
113
+ integrity sha512-ritPSKLBcParnsKYi+GNtbdbrIE1mtuFEJ4U1sWeuOMlIziK5GtOL85t5RhsNy4uWIXPgk+OUdpnXiTdzn8o3A==
114
+ dependencies:
115
+ "@vue/compiler-dom" "3.5.25"
116
+ "@vue/shared" "3.5.25"
117
+
118
+ "@vue/compiler-vue2@^2.7.16":
119
+ version "2.7.16"
120
+ resolved "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz"
121
+ integrity sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==
122
+ dependencies:
123
+ de-indent "^1.0.2"
124
+ he "^1.2.0"
125
+
126
+ "@vue/language-core@2.2.12":
127
+ version "2.2.12"
128
+ resolved "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.12.tgz"
129
+ integrity sha512-IsGljWbKGU1MZpBPN+BvPAdr55YPkj2nB/TBNGNC32Vy2qLG25DYu/NBN2vNtZqdRbTRjaoYrahLrToim2NanA==
130
+ dependencies:
131
+ "@volar/language-core" "2.4.15"
132
+ "@vue/compiler-dom" "^3.5.0"
133
+ "@vue/compiler-vue2" "^2.7.16"
134
+ "@vue/shared" "^3.5.0"
135
+ alien-signals "^1.0.3"
136
+ minimatch "^9.0.3"
137
+ muggle-string "^0.4.1"
138
+ path-browserify "^1.0.1"
139
+
140
+ "@vue/reactivity@3.5.25":
141
+ version "3.5.25"
142
+ resolved "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.25.tgz"
143
+ integrity sha512-5xfAypCQepv4Jog1U4zn8cZIcbKKFka3AgWHEFQeK65OW+Ys4XybP6z2kKgws4YB43KGpqp5D/K3go2UPPunLA==
144
+ dependencies:
145
+ "@vue/shared" "3.5.25"
146
+
147
+ "@vue/runtime-core@3.5.25":
148
+ version "3.5.25"
149
+ resolved "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.25.tgz"
150
+ integrity sha512-Z751v203YWwYzy460bzsYQISDfPjHTl+6Zzwo/a3CsAf+0ccEjQ8c+0CdX1WsumRTHeywvyUFtW6KvNukT/smA==
151
+ dependencies:
152
+ "@vue/reactivity" "3.5.25"
153
+ "@vue/shared" "3.5.25"
154
+
155
+ "@vue/runtime-dom@3.5.25":
156
+ version "3.5.25"
157
+ resolved "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.25.tgz"
158
+ integrity sha512-a4WrkYFbb19i9pjkz38zJBg8wa/rboNERq3+hRRb0dHiJh13c+6kAbgqCPfMaJ2gg4weWD3APZswASOfmKwamA==
159
+ dependencies:
160
+ "@vue/reactivity" "3.5.25"
161
+ "@vue/runtime-core" "3.5.25"
162
+ "@vue/shared" "3.5.25"
163
+ csstype "^3.1.3"
164
+
165
+ "@vue/server-renderer@3.5.25":
166
+ version "3.5.25"
167
+ resolved "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.25.tgz"
168
+ integrity sha512-UJaXR54vMG61i8XNIzTSf2Q7MOqZHpp8+x3XLGtE3+fL+nQd+k7O5+X3D/uWrnQXOdMw5VPih+Uremcw+u1woQ==
169
+ dependencies:
170
+ "@vue/compiler-ssr" "3.5.25"
171
+ "@vue/shared" "3.5.25"
172
+
173
+ "@vue/shared@^3.5.0", "@vue/shared@3.5.25":
174
+ version "3.5.25"
175
+ resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.5.25.tgz"
176
+ integrity sha512-AbOPdQQnAnzs58H2FrrDxYj/TJfmeS2jdfEEhgiKINy+bnOANmVizIEgq1r+C5zsbs6l1CCQxtcj71rwNQ4jWg==
177
+
178
+ alien-signals@^1.0.3:
179
+ version "1.0.13"
180
+ resolved "https://registry.npmjs.org/alien-signals/-/alien-signals-1.0.13.tgz"
181
+ integrity sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==
182
+
183
+ balanced-match@^1.0.0:
184
+ version "1.0.2"
185
+ resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz"
186
+ integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
187
+
188
+ brace-expansion@^2.0.1:
189
+ version "2.0.2"
190
+ resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz"
191
+ integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==
192
+ dependencies:
193
+ balanced-match "^1.0.0"
194
+
195
+ csstype@^3.1.3:
196
+ version "3.2.3"
197
+ resolved "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz"
198
+ integrity sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==
199
+
200
+ de-indent@^1.0.2:
201
+ version "1.0.2"
202
+ resolved "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz"
203
+ integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==
204
+
205
+ entities@^4.5.0:
206
+ version "4.5.0"
207
+ resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz"
208
+ integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
209
+
210
+ esbuild@^0.21.3:
211
+ version "0.21.5"
212
+ resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz"
213
+ integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==
214
+ optionalDependencies:
215
+ "@esbuild/aix-ppc64" "0.21.5"
216
+ "@esbuild/android-arm" "0.21.5"
217
+ "@esbuild/android-arm64" "0.21.5"
218
+ "@esbuild/android-x64" "0.21.5"
219
+ "@esbuild/darwin-arm64" "0.21.5"
220
+ "@esbuild/darwin-x64" "0.21.5"
221
+ "@esbuild/freebsd-arm64" "0.21.5"
222
+ "@esbuild/freebsd-x64" "0.21.5"
223
+ "@esbuild/linux-arm" "0.21.5"
224
+ "@esbuild/linux-arm64" "0.21.5"
225
+ "@esbuild/linux-ia32" "0.21.5"
226
+ "@esbuild/linux-loong64" "0.21.5"
227
+ "@esbuild/linux-mips64el" "0.21.5"
228
+ "@esbuild/linux-ppc64" "0.21.5"
229
+ "@esbuild/linux-riscv64" "0.21.5"
230
+ "@esbuild/linux-s390x" "0.21.5"
231
+ "@esbuild/linux-x64" "0.21.5"
232
+ "@esbuild/netbsd-x64" "0.21.5"
233
+ "@esbuild/openbsd-x64" "0.21.5"
234
+ "@esbuild/sunos-x64" "0.21.5"
235
+ "@esbuild/win32-arm64" "0.21.5"
236
+ "@esbuild/win32-ia32" "0.21.5"
237
+ "@esbuild/win32-x64" "0.21.5"
238
+
239
+ estree-walker@^2.0.2:
240
+ version "2.0.2"
241
+ resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz"
242
+ integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
243
+
244
+ fsevents@~2.3.2, fsevents@~2.3.3:
245
+ version "2.3.3"
246
+ resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz"
247
+ integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
248
+
249
+ he@^1.2.0:
250
+ version "1.2.0"
251
+ resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz"
252
+ integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
253
+
254
+ "hyper-scheduler@file:../../":
255
+ version "1.0.0"
256
+ resolved "file:../.."
257
+
258
+ magic-string@^0.30.21:
259
+ version "0.30.21"
260
+ resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz"
261
+ integrity sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==
262
+ dependencies:
263
+ "@jridgewell/sourcemap-codec" "^1.5.5"
264
+
265
+ minimatch@^9.0.3:
266
+ version "9.0.5"
267
+ resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz"
268
+ integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==
269
+ dependencies:
270
+ brace-expansion "^2.0.1"
271
+
272
+ muggle-string@^0.4.1:
273
+ version "0.4.1"
274
+ resolved "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz"
275
+ integrity sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==
276
+
277
+ nanoid@^3.3.11:
278
+ version "3.3.11"
279
+ resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz"
280
+ integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==
281
+
282
+ path-browserify@^1.0.1:
283
+ version "1.0.1"
284
+ resolved "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz"
285
+ integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==
286
+
287
+ picocolors@^1.1.1:
288
+ version "1.1.1"
289
+ resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz"
290
+ integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
291
+
292
+ postcss@^8.4.43, postcss@^8.5.6:
293
+ version "8.5.6"
294
+ resolved "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz"
295
+ integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==
296
+ dependencies:
297
+ nanoid "^3.3.11"
298
+ picocolors "^1.1.1"
299
+ source-map-js "^1.2.1"
300
+
301
+ rollup@^4.20.0:
302
+ version "4.53.3"
303
+ resolved "https://registry.npmjs.org/rollup/-/rollup-4.53.3.tgz"
304
+ integrity sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==
305
+ dependencies:
306
+ "@types/estree" "1.0.8"
307
+ optionalDependencies:
308
+ "@rollup/rollup-android-arm-eabi" "4.53.3"
309
+ "@rollup/rollup-android-arm64" "4.53.3"
310
+ "@rollup/rollup-darwin-arm64" "4.53.3"
311
+ "@rollup/rollup-darwin-x64" "4.53.3"
312
+ "@rollup/rollup-freebsd-arm64" "4.53.3"
313
+ "@rollup/rollup-freebsd-x64" "4.53.3"
314
+ "@rollup/rollup-linux-arm-gnueabihf" "4.53.3"
315
+ "@rollup/rollup-linux-arm-musleabihf" "4.53.3"
316
+ "@rollup/rollup-linux-arm64-gnu" "4.53.3"
317
+ "@rollup/rollup-linux-arm64-musl" "4.53.3"
318
+ "@rollup/rollup-linux-loong64-gnu" "4.53.3"
319
+ "@rollup/rollup-linux-ppc64-gnu" "4.53.3"
320
+ "@rollup/rollup-linux-riscv64-gnu" "4.53.3"
321
+ "@rollup/rollup-linux-riscv64-musl" "4.53.3"
322
+ "@rollup/rollup-linux-s390x-gnu" "4.53.3"
323
+ "@rollup/rollup-linux-x64-gnu" "4.53.3"
324
+ "@rollup/rollup-linux-x64-musl" "4.53.3"
325
+ "@rollup/rollup-openharmony-arm64" "4.53.3"
326
+ "@rollup/rollup-win32-arm64-msvc" "4.53.3"
327
+ "@rollup/rollup-win32-ia32-msvc" "4.53.3"
328
+ "@rollup/rollup-win32-x64-gnu" "4.53.3"
329
+ "@rollup/rollup-win32-x64-msvc" "4.53.3"
330
+ fsevents "~2.3.2"
331
+
332
+ source-map-js@^1.2.1:
333
+ version "1.2.1"
334
+ resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz"
335
+ integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
336
+
337
+ typescript@*, typescript@^5.2.0, typescript@>=5.0.0:
338
+ version "5.9.3"
339
+ resolved "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz"
340
+ integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==
341
+
342
+ vite@^5.0.0, "vite@^5.0.0 || ^6.0.0":
343
+ version "5.4.21"
344
+ resolved "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz"
345
+ integrity sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==
346
+ dependencies:
347
+ esbuild "^0.21.3"
348
+ postcss "^8.4.43"
349
+ rollup "^4.20.0"
350
+ optionalDependencies:
351
+ fsevents "~2.3.3"
352
+
353
+ vscode-uri@^3.0.8:
354
+ version "3.1.0"
355
+ resolved "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz"
356
+ integrity sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==
357
+
358
+ vue-tsc@^2.0.0:
359
+ version "2.2.12"
360
+ resolved "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.2.12.tgz"
361
+ integrity sha512-P7OP77b2h/Pmk+lZdJ0YWs+5tJ6J2+uOQPo7tlBnY44QqQSPYvS0qVT4wqDJgwrZaLe47etJLLQRFia71GYITw==
362
+ dependencies:
363
+ "@volar/typescript" "2.4.15"
364
+ "@vue/language-core" "2.2.12"
365
+
366
+ vue@^3.2.25, vue@^3.4.0, vue@3.5.25:
367
+ version "3.5.25"
368
+ resolved "https://registry.npmjs.org/vue/-/vue-3.5.25.tgz"
369
+ integrity sha512-YLVdgv2K13WJ6n+kD5owehKtEXwdwXuj2TTyJMsO7pSeKw2bfRNZGjhB7YzrpbMYj5b5QsUebHpOqR3R3ziy/g==
370
+ dependencies:
371
+ "@vue/compiler-dom" "3.5.25"
372
+ "@vue/compiler-sfc" "3.5.25"
373
+ "@vue/runtime-dom" "3.5.25"
374
+ "@vue/server-renderer" "3.5.25"
375
+ "@vue/shared" "3.5.25"
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "hyper-scheduler",
3
+ "version": "1.0.0",
4
+ "description": "A lightweight, dependency-free (core) JavaScript task scheduler supporting Cron expressions and Web Workers.",
5
+ "type": "module",
6
+ "main": "./dist/index.umd.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "require": "./dist/index.cjs"
13
+ }
14
+ },
15
+ "scripts": {
16
+ "dev": "vite",
17
+ "docs:dev": "vitepress dev docs",
18
+ "docs:build": "vitepress build docs",
19
+ "example:node": "node examples/node/simple.js",
20
+ "example:browser": "vite examples/browser",
21
+ "example:vue": "npm install --prefix examples/vue-demo && npm run dev --prefix examples/vue-demo",
22
+ "example:react": "npm install --prefix examples/react-demo && npm run dev --prefix examples/react-demo",
23
+ "build": "tsc && vite build",
24
+ "test": "vitest",
25
+ "lint": "eslint . --ext .ts"
26
+ },
27
+ "keywords": [
28
+ "scheduler",
29
+ "cron",
30
+ "task",
31
+ "timer",
32
+ "worker"
33
+ ],
34
+ "author": "",
35
+ "license": "MIT",
36
+ "devDependencies": {
37
+ "@types/node": "^20.0.0",
38
+ "@typescript-eslint/eslint-plugin": "^8.48.0",
39
+ "@typescript-eslint/parser": "^8.48.0",
40
+ "@vitest/coverage-v8": "^4.0.14",
41
+ "eslint": "^8.0.0",
42
+ "jsdom": "^27.2.0",
43
+ "rollup-plugin-visualizer": "^6.0.5",
44
+ "terser": "^5.44.1",
45
+ "typescript": "^5.0.0",
46
+ "vite": "^5.0.0",
47
+ "vite-plugin-compression": "^0.5.1",
48
+ "vitepress": "^1.6.4",
49
+ "vitest": "^4.0.14"
50
+ }
51
+ }
@@ -0,0 +1,18 @@
1
+ export const TaskStatus = {
2
+ IDLE: 'idle',
3
+ RUNNING: 'running',
4
+ STOPPED: 'stopped',
5
+ ERROR: 'error',
6
+ } as const;
7
+
8
+ export const SchedulerEvents = {
9
+ TASK_REGISTERED: 'task_registered',
10
+ TASK_STARTED: 'task_started',
11
+ TASK_COMPLETED: 'task_completed',
12
+ TASK_FAILED: 'task_failed',
13
+ TASK_STOPPED: 'task_stopped',
14
+ TASK_REMOVED: 'task_removed',
15
+ TASK_UPDATED: 'task_updated',
16
+ SCHEDULER_STARTED: 'scheduler_started',
17
+ SCHEDULER_STOPPED: 'scheduler_stopped',
18
+ } as const;
@@ -0,0 +1,28 @@
1
+ import { TaskOptions } from '../types';
2
+
3
+ /**
4
+ * 重试策略工具类。
5
+ * 提供指数退避等重试延迟计算逻辑。
6
+ */
7
+ export class RetryStrategy {
8
+ /**
9
+ * 计算下一次重试的延迟时间。
10
+ * 采用指数退避算法 (Exponential Backoff)。
11
+ * @param attempt 当前重试次数 (从 0 开始,0 表示第一次重试)
12
+ * @param options 任务的重试配置
13
+ * @returns 延迟毫秒数,如果超过最大尝试次数则返回 -1
14
+ */
15
+ static getDelay(attempt: number, options?: TaskOptions['retry']): number {
16
+ if (!options) {
17
+ return -1;
18
+ }
19
+
20
+ const { maxAttempts, initialDelay, factor = 2 } = options;
21
+
22
+ if (attempt >= maxAttempts) {
23
+ return -1;
24
+ }
25
+
26
+ return initialDelay * Math.pow(factor, attempt);
27
+ }
28
+ }