surgio 3.19.0 → 4.0.0-beta.2

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 (443) hide show
  1. package/bin/dev +5 -9
  2. package/bin/package.json +4 -0
  3. package/bin/run +2 -5
  4. package/build/base-command.d.ts +4 -4
  5. package/build/base-command.js +22 -24
  6. package/build/base-command.js.map +1 -1
  7. package/build/cache/cloudflare.d.ts +1 -0
  8. package/build/cache/cloudflare.js +2 -0
  9. package/build/cache/cloudflare.js.map +1 -0
  10. package/build/cache/configured-store.d.ts +2 -0
  11. package/build/cache/configured-store.js +26 -0
  12. package/build/cache/configured-store.js.map +1 -0
  13. package/build/cache/core.d.ts +2 -0
  14. package/build/cache/core.js +3 -0
  15. package/build/cache/core.js.map +1 -0
  16. package/build/cache/filesystem.d.ts +1 -0
  17. package/build/cache/filesystem.js +2 -0
  18. package/build/cache/filesystem.js.map +1 -0
  19. package/build/cache/index.d.ts +6 -0
  20. package/build/cache/index.js +7 -0
  21. package/build/cache/index.js.map +1 -0
  22. package/build/cache/singleton.d.ts +3 -0
  23. package/build/cache/singleton.js +8 -0
  24. package/build/cache/singleton.js.map +1 -0
  25. package/build/cache/stores/cloudflare-kv.d.ts +33 -0
  26. package/build/cache/stores/cloudflare-kv.js +45 -0
  27. package/build/cache/stores/cloudflare-kv.js.map +1 -0
  28. package/build/cache/stores/filesystem.d.ts +15 -0
  29. package/build/cache/stores/filesystem.js +84 -0
  30. package/build/cache/stores/filesystem.js.map +1 -0
  31. package/build/cache/stores/upstash.d.ts +28 -0
  32. package/build/cache/stores/upstash.js +66 -0
  33. package/build/cache/stores/upstash.js.map +1 -0
  34. package/build/cache/stores/utils.d.ts +5 -0
  35. package/build/cache/stores/utils.js +6 -0
  36. package/build/cache/stores/utils.js.map +1 -0
  37. package/build/cache/ttl-cache.d.ts +24 -0
  38. package/build/cache/ttl-cache.js +154 -0
  39. package/build/cache/ttl-cache.js.map +1 -0
  40. package/build/cache/types.d.ts +16 -0
  41. package/build/cache/types.js +2 -0
  42. package/build/cache/types.js.map +1 -0
  43. package/build/cache/upstash.d.ts +1 -0
  44. package/build/cache/upstash.js +2 -0
  45. package/build/cache/upstash.js.map +1 -0
  46. package/build/commands/check.d.ts +2 -2
  47. package/build/commands/check.js +24 -58
  48. package/build/commands/check.js.map +1 -1
  49. package/build/commands/clean-cache.d.ts +1 -1
  50. package/build/commands/clean-cache.js +16 -21
  51. package/build/commands/clean-cache.js.map +1 -1
  52. package/build/commands/doctor.d.ts +1 -1
  53. package/build/commands/doctor.js +6 -11
  54. package/build/commands/doctor.js.map +1 -1
  55. package/build/commands/generate.d.ts +1 -1
  56. package/build/commands/generate.js +31 -33
  57. package/build/commands/generate.js.map +1 -1
  58. package/build/commands/lint.d.ts +1 -1
  59. package/build/commands/lint.js +9 -14
  60. package/build/commands/lint.js.map +1 -1
  61. package/build/commands/new.d.ts +14 -1
  62. package/build/commands/new.js +252 -25
  63. package/build/commands/new.js.map +1 -1
  64. package/build/commands/subscriptions.d.ts +1 -1
  65. package/build/commands/subscriptions.js +20 -54
  66. package/build/commands/subscriptions.js.map +1 -1
  67. package/build/commands/upload.d.ts +1 -1
  68. package/build/commands/upload.js +21 -74
  69. package/build/commands/upload.js.map +1 -1
  70. package/build/config-normalize.d.ts +102 -0
  71. package/build/config-normalize.js +39 -0
  72. package/build/config-normalize.js.map +1 -0
  73. package/build/config.d.ts +9 -2
  74. package/build/config.js +78 -113
  75. package/build/config.js.map +1 -1
  76. package/build/configurables.d.ts +3 -84
  77. package/build/configurables.js +14 -39
  78. package/build/configurables.js.map +1 -1
  79. package/build/constant/constant.d.ts +26 -26
  80. package/build/constant/constant.js +39 -32
  81. package/build/constant/constant.js.map +1 -1
  82. package/build/constant/env.js +9 -12
  83. package/build/constant/env.js.map +1 -1
  84. package/build/constant/error.js +1 -4
  85. package/build/constant/error.js.map +1 -1
  86. package/build/constant/index.d.ts +3 -3
  87. package/build/constant/index.js +3 -19
  88. package/build/constant/index.js.map +1 -1
  89. package/build/filters/classes.d.ts +1 -1
  90. package/build/filters/classes.js +5 -13
  91. package/build/filters/classes.js.map +1 -1
  92. package/build/filters/filters.d.ts +1 -1
  93. package/build/filters/filters.js +58 -85
  94. package/build/filters/filters.js.map +1 -1
  95. package/build/filters/index.d.ts +2 -2
  96. package/build/filters/index.js +2 -41
  97. package/build/filters/index.js.map +1 -1
  98. package/build/filters/utils.d.ts +1 -1
  99. package/build/filters/utils.js +35 -56
  100. package/build/filters/utils.js.map +1 -1
  101. package/build/generator/artifact.d.ts +78 -72
  102. package/build/generator/artifact.js +71 -281
  103. package/build/generator/artifact.js.map +1 -1
  104. package/build/generator/index.d.ts +4 -3
  105. package/build/generator/index.js +3 -24
  106. package/build/generator/index.js.map +1 -1
  107. package/build/generator/json-extend.d.ts +20 -0
  108. package/build/generator/json-extend.js +37 -0
  109. package/build/generator/json-extend.js.map +1 -0
  110. package/build/generator/template-filters.d.ts +6 -0
  111. package/build/generator/template-filters.js +104 -0
  112. package/build/generator/template-filters.js.map +1 -0
  113. package/build/generator/template.d.ts +8 -7
  114. package/build/generator/template.js +40 -222
  115. package/build/generator/template.js.map +1 -1
  116. package/build/hooks/init.js +3 -38
  117. package/build/hooks/init.js.map +1 -1
  118. package/build/index.d.ts +66 -65
  119. package/build/index.js +20 -68
  120. package/build/index.js.map +1 -1
  121. package/build/internal.d.ts +4 -3
  122. package/build/internal.js +6 -24
  123. package/build/internal.js.map +1 -1
  124. package/build/misc/deprecation.js +10 -13
  125. package/build/misc/deprecation.js.map +1 -1
  126. package/build/misc/flag_cn.d.ts +53 -53
  127. package/build/misc/flag_cn.js +4 -7
  128. package/build/misc/flag_cn.js.map +1 -1
  129. package/build/project/authoring.d.ts +71 -0
  130. package/build/project/authoring.js +14 -0
  131. package/build/project/authoring.js.map +1 -0
  132. package/build/project/core.d.ts +3 -0
  133. package/build/project/core.js +17 -0
  134. package/build/project/core.js.map +1 -0
  135. package/build/project/editor.d.ts +8 -0
  136. package/build/project/editor.js +243 -0
  137. package/build/project/editor.js.map +1 -0
  138. package/build/project/file.d.ts +5 -0
  139. package/build/project/file.js +20 -0
  140. package/build/project/file.js.map +1 -0
  141. package/build/project/index.d.ts +5 -0
  142. package/build/project/index.js +7 -0
  143. package/build/project/index.js.map +1 -0
  144. package/build/project/internal.d.ts +8 -0
  145. package/build/project/internal.js +9 -0
  146. package/build/project/internal.js.map +1 -0
  147. package/build/project/node.d.ts +14 -0
  148. package/build/project/node.js +51 -0
  149. package/build/project/node.js.map +1 -0
  150. package/build/project/types.d.ts +22 -0
  151. package/build/project/types.js +2 -0
  152. package/build/project/types.js.map +1 -0
  153. package/build/provider/ClashProvider.d.ts +8 -5
  154. package/build/provider/ClashProvider.js +110 -115
  155. package/build/provider/ClashProvider.js.map +1 -1
  156. package/build/provider/CustomProvider.d.ts +3 -3
  157. package/build/provider/CustomProvider.js +52 -58
  158. package/build/provider/CustomProvider.js.map +1 -1
  159. package/build/provider/Provider.d.ts +8 -6
  160. package/build/provider/Provider.js +49 -83
  161. package/build/provider/Provider.js.map +1 -1
  162. package/build/provider/ShadowsocksSubscribeProvider.d.ts +5 -4
  163. package/build/provider/ShadowsocksSubscribeProvider.js +26 -33
  164. package/build/provider/ShadowsocksSubscribeProvider.js.map +1 -1
  165. package/build/provider/ShadowsocksrSubscribeProvider.d.ts +5 -4
  166. package/build/provider/ShadowsocksrSubscribeProvider.js +31 -40
  167. package/build/provider/ShadowsocksrSubscribeProvider.js.map +1 -1
  168. package/build/provider/TrojanProvider.d.ts +6 -7
  169. package/build/provider/TrojanProvider.js +35 -48
  170. package/build/provider/TrojanProvider.js.map +1 -1
  171. package/build/provider/V2rayNSubscribeProvider.d.ts +23 -14
  172. package/build/provider/V2rayNSubscribeProvider.js +58 -146
  173. package/build/provider/V2rayNSubscribeProvider.js.map +1 -1
  174. package/build/provider/create-provider.d.ts +4 -0
  175. package/build/provider/create-provider.js +36 -0
  176. package/build/provider/create-provider.js.map +1 -0
  177. package/build/provider/index.d.ts +16 -16
  178. package/build/provider/index.js +19 -51
  179. package/build/provider/index.js.map +1 -1
  180. package/build/provider/node-runtime.d.ts +1 -0
  181. package/build/provider/node-runtime.js +26 -0
  182. package/build/provider/node-runtime.js.map +1 -0
  183. package/build/provider/types.d.ts +11 -14
  184. package/build/provider/types.js +1 -2
  185. package/build/provider/v2rayn-subscription.d.ts +12 -0
  186. package/build/provider/v2rayn-subscription.js +782 -0
  187. package/build/provider/v2rayn-subscription.js.map +1 -0
  188. package/build/runtime/artifact.d.ts +122 -0
  189. package/build/runtime/artifact.js +232 -0
  190. package/build/runtime/artifact.js.map +1 -0
  191. package/build/runtime/dns.d.ts +3 -0
  192. package/build/runtime/dns.js +37 -0
  193. package/build/runtime/dns.js.map +1 -0
  194. package/build/runtime/format.d.ts +4 -0
  195. package/build/runtime/format.js +45 -0
  196. package/build/runtime/format.js.map +1 -0
  197. package/build/runtime/http-client.d.ts +9 -0
  198. package/build/runtime/http-client.js +49 -0
  199. package/build/runtime/http-client.js.map +1 -0
  200. package/build/runtime/index.d.ts +4 -0
  201. package/build/runtime/index.js +2 -0
  202. package/build/runtime/index.js.map +1 -0
  203. package/build/runtime/node.d.ts +8 -0
  204. package/build/runtime/node.js +181 -0
  205. package/build/runtime/node.js.map +1 -0
  206. package/build/runtime/provider-context.d.ts +3 -0
  207. package/build/runtime/provider-context.js +11 -0
  208. package/build/runtime/provider-context.js.map +1 -0
  209. package/build/runtime/public.d.ts +59 -0
  210. package/build/runtime/public.js +2 -0
  211. package/build/runtime/public.js.map +1 -0
  212. package/build/runtime/renderer.d.ts +13 -0
  213. package/build/runtime/renderer.js +38 -0
  214. package/build/runtime/renderer.js.map +1 -0
  215. package/build/runtime/ruleset.d.ts +1 -0
  216. package/build/runtime/ruleset.js +34 -0
  217. package/build/runtime/ruleset.js.map +1 -0
  218. package/build/runtime/snippet-interpreter.d.ts +6 -0
  219. package/build/runtime/snippet-interpreter.js +136 -0
  220. package/build/runtime/snippet-interpreter.js.map +1 -0
  221. package/build/runtime/subscription.d.ts +2 -0
  222. package/build/runtime/subscription.js +18 -0
  223. package/build/runtime/subscription.js.map +1 -0
  224. package/build/runtime/types.d.ts +35 -0
  225. package/build/runtime/types.js +2 -0
  226. package/build/runtime/types.js.map +1 -0
  227. package/build/runtime/user-agent.d.ts +1 -0
  228. package/build/runtime/user-agent.js +3 -0
  229. package/build/runtime/user-agent.js.map +1 -0
  230. package/build/types.d.ts +17 -33
  231. package/build/types.js +4 -10
  232. package/build/types.js.map +1 -1
  233. package/build/utils/clash.d.ts +4 -3
  234. package/build/utils/clash.js +78 -82
  235. package/build/utils/clash.js.map +1 -1
  236. package/build/utils/constant.d.ts +1 -1
  237. package/build/utils/constant.js +1 -17
  238. package/build/utils/constant.js.map +1 -1
  239. package/build/utils/dns.js +17 -35
  240. package/build/utils/dns.js.map +1 -1
  241. package/build/utils/doctor.js +12 -22
  242. package/build/utils/doctor.js.map +1 -1
  243. package/build/utils/env-flag.js +23 -38
  244. package/build/utils/env-flag.js.map +1 -1
  245. package/build/utils/error-helper.d.ts +1 -1
  246. package/build/utils/error-helper.js +28 -34
  247. package/build/utils/error-helper.js.map +1 -1
  248. package/build/utils/errors.d.ts +1 -1
  249. package/build/utils/errors.js +10 -16
  250. package/build/utils/errors.js.map +1 -1
  251. package/build/utils/flag.js +12 -21
  252. package/build/utils/flag.js.map +1 -1
  253. package/build/utils/index.d.ts +13 -78
  254. package/build/utils/index.js +53 -516
  255. package/build/utils/index.js.map +1 -1
  256. package/build/utils/linter.js +53 -24
  257. package/build/utils/linter.js.map +1 -1
  258. package/build/utils/loon.d.ts +3 -2
  259. package/build/utils/loon.js +73 -61
  260. package/build/utils/loon.js.map +1 -1
  261. package/build/utils/module-loader.d.ts +1 -0
  262. package/build/utils/module-loader.js +13 -0
  263. package/build/utils/module-loader.js.map +1 -0
  264. package/build/utils/object-storage.d.ts +16 -0
  265. package/build/utils/object-storage.js +136 -0
  266. package/build/utils/object-storage.js.map +1 -0
  267. package/build/utils/portable.d.ts +27 -0
  268. package/build/utils/portable.js +141 -0
  269. package/build/utils/portable.js.map +1 -0
  270. package/build/utils/quantumult.d.ts +4 -3
  271. package/build/utils/quantumult.js +45 -52
  272. package/build/utils/quantumult.js.map +1 -1
  273. package/build/utils/relayable-url.js +1 -4
  274. package/build/utils/relayable-url.js.map +1 -1
  275. package/build/utils/remote-snippet.d.ts +12 -2
  276. package/build/utils/remote-snippet.js +51 -188
  277. package/build/utils/remote-snippet.js.map +1 -1
  278. package/build/utils/singbox-rules.d.ts +40 -0
  279. package/build/utils/singbox-rules.js +295 -0
  280. package/build/utils/singbox-rules.js.map +1 -0
  281. package/build/utils/singbox.d.ts +5 -3
  282. package/build/utils/singbox.js +210 -149
  283. package/build/utils/singbox.js.map +1 -1
  284. package/build/utils/ss.d.ts +4 -2
  285. package/build/utils/ss.js +58 -21
  286. package/build/utils/ss.js.map +1 -1
  287. package/build/utils/ssr.d.ts +3 -2
  288. package/build/utils/ssr.js +11 -16
  289. package/build/utils/ssr.js.map +1 -1
  290. package/build/utils/subscription.d.ts +3 -2
  291. package/build/utils/subscription.js +14 -41
  292. package/build/utils/subscription.js.map +1 -1
  293. package/build/utils/surfboard.d.ts +4 -3
  294. package/build/utils/surfboard.js +34 -39
  295. package/build/utils/surfboard.js.map +1 -1
  296. package/build/utils/surge.d.ts +4 -3
  297. package/build/utils/surge.js +62 -120
  298. package/build/utils/surge.js.map +1 -1
  299. package/build/utils/time.js +1 -5
  300. package/build/utils/time.js.map +1 -1
  301. package/build/utils/useragent.js +19 -31
  302. package/build/utils/useragent.js.map +1 -1
  303. package/build/utils/v2rayn.d.ts +3 -0
  304. package/build/utils/v2rayn.js +485 -0
  305. package/build/utils/v2rayn.js.map +1 -0
  306. package/build/validators/anytls.d.ts +23 -37
  307. package/build/validators/anytls.js +14 -17
  308. package/build/validators/anytls.js.map +1 -1
  309. package/build/validators/artifact.d.ts +20 -8
  310. package/build/validators/artifact.js +21 -23
  311. package/build/validators/artifact.js.map +1 -1
  312. package/build/validators/common.d.ts +28 -56
  313. package/build/validators/common.js +54 -61
  314. package/build/validators/common.js.map +1 -1
  315. package/build/validators/filter.d.ts +2 -2
  316. package/build/validators/filter.js +3 -6
  317. package/build/validators/filter.js.map +1 -1
  318. package/build/validators/hooks.d.ts +3 -3
  319. package/build/validators/hooks.js +3 -6
  320. package/build/validators/hooks.js.map +1 -1
  321. package/build/validators/http.d.ts +42 -70
  322. package/build/validators/http.js +17 -20
  323. package/build/validators/http.js.map +1 -1
  324. package/build/validators/hysteria2.d.ts +122 -36
  325. package/build/validators/hysteria2.js +19 -14
  326. package/build/validators/hysteria2.js.map +1 -1
  327. package/build/validators/index.d.ts +21 -21
  328. package/build/validators/index.js +21 -37
  329. package/build/validators/index.js.map +1 -1
  330. package/build/validators/masque.d.ts +109 -153
  331. package/build/validators/masque.js +30 -33
  332. package/build/validators/masque.js.map +1 -1
  333. package/build/validators/provider.d.ts +49 -52
  334. package/build/validators/provider.js +30 -34
  335. package/build/validators/provider.js.map +1 -1
  336. package/build/validators/shadowsocks.d.ts +31 -45
  337. package/build/validators/shadowsocks.js +23 -26
  338. package/build/validators/shadowsocks.js.map +1 -1
  339. package/build/validators/shadowsocksr.d.ts +26 -40
  340. package/build/validators/shadowsocksr.js +14 -17
  341. package/build/validators/shadowsocksr.js.map +1 -1
  342. package/build/validators/snell.d.ts +21 -35
  343. package/build/validators/snell.js +12 -15
  344. package/build/validators/snell.js.map +1 -1
  345. package/build/validators/socks5.d.ts +21 -35
  346. package/build/validators/socks5.js +10 -13
  347. package/build/validators/socks5.js.map +1 -1
  348. package/build/validators/surgio-config.d.ts +406 -112
  349. package/build/validators/surgio-config.js +112 -79
  350. package/build/validators/surgio-config.js.map +1 -1
  351. package/build/validators/tailscale.d.ts +25 -39
  352. package/build/validators/tailscale.js +20 -23
  353. package/build/validators/tailscale.js.map +1 -1
  354. package/build/validators/trojan.d.ts +29 -43
  355. package/build/validators/trojan.js +11 -14
  356. package/build/validators/trojan.js.map +1 -1
  357. package/build/validators/trust-tunnel.d.ts +64 -86
  358. package/build/validators/trust-tunnel.js +22 -25
  359. package/build/validators/trust-tunnel.js.map +1 -1
  360. package/build/validators/tuic.d.ts +96 -140
  361. package/build/validators/tuic.js +16 -17
  362. package/build/validators/tuic.js.map +1 -1
  363. package/build/validators/vless.d.ts +70 -84
  364. package/build/validators/vless.js +41 -44
  365. package/build/validators/vless.js.map +1 -1
  366. package/build/validators/vmess.d.ts +80 -94
  367. package/build/validators/vmess.js +59 -62
  368. package/build/validators/vmess.js.map +1 -1
  369. package/build/validators/wireguard.d.ts +35 -49
  370. package/build/validators/wireguard.js +20 -23
  371. package/build/validators/wireguard.js.map +1 -1
  372. package/build/worker/build.d.ts +9 -0
  373. package/build/worker/build.js +120 -0
  374. package/build/worker/build.js.map +1 -0
  375. package/build/worker/config.d.ts +5 -0
  376. package/build/worker/config.js +18 -0
  377. package/build/worker/config.js.map +1 -0
  378. package/build/worker/index.d.ts +4 -0
  379. package/build/worker/index.js +3 -0
  380. package/build/worker/index.js.map +1 -0
  381. package/build/worker/normalize-config.d.ts +3 -0
  382. package/build/worker/normalize-config.js +12 -0
  383. package/build/worker/normalize-config.js.map +1 -0
  384. package/build/worker/precompiled-environment.d.ts +33 -0
  385. package/build/worker/precompiled-environment.js +211 -0
  386. package/build/worker/precompiled-environment.js.map +1 -0
  387. package/build/worker/runtime.d.ts +2 -0
  388. package/build/worker/runtime.js +206 -0
  389. package/build/worker/runtime.js.map +1 -0
  390. package/build/worker/template-engine.d.ts +6 -0
  391. package/build/worker/template-engine.js +22 -0
  392. package/build/worker/template-engine.js.map +1 -0
  393. package/build/worker/types.d.ts +27 -0
  394. package/build/worker/types.js +2 -0
  395. package/build/worker/types.js.map +1 -0
  396. package/package.json +177 -161
  397. package/build/generator/json-template.d.ts +0 -11
  398. package/build/generator/json-template.js +0 -74
  399. package/build/generator/json-template.js.map +0 -1
  400. package/build/provider/BlackSSLProvider.d.ts +0 -12
  401. package/build/provider/BlackSSLProvider.js +0 -103
  402. package/build/provider/BlackSSLProvider.js.map +0 -1
  403. package/build/provider/ShadowsocksJsonSubscribeProvider.d.ts +0 -12
  404. package/build/provider/ShadowsocksJsonSubscribeProvider.js +0 -92
  405. package/build/provider/ShadowsocksJsonSubscribeProvider.js.map +0 -1
  406. package/build/provider/SsdProvider.d.ts +0 -40
  407. package/build/provider/SsdProvider.js +0 -150
  408. package/build/provider/SsdProvider.js.map +0 -1
  409. package/build/redis.d.ts +0 -9
  410. package/build/redis.js +0 -63
  411. package/build/redis.js.map +0 -1
  412. package/build/utils/cache.d.ts +0 -23
  413. package/build/utils/cache.js +0 -98
  414. package/build/utils/cache.js.map +0 -1
  415. package/build/utils/http-client.d.ts +0 -3
  416. package/build/utils/http-client.js +0 -60
  417. package/build/utils/http-client.js.map +0 -1
  418. package/build/utils/tmp-helper.d.ts +0 -30
  419. package/build/utils/tmp-helper.js +0 -102
  420. package/build/utils/tmp-helper.js.map +0 -1
  421. package/build/utils/trojan.d.ts +0 -2
  422. package/build/utils/trojan.js +0 -38
  423. package/build/utils/trojan.js.map +0 -1
  424. package/config.d.ts +0 -1
  425. package/config.js +0 -1
  426. package/constant.d.ts +0 -1
  427. package/constant.js +0 -1
  428. package/generator.d.ts +0 -1
  429. package/generator.js +0 -1
  430. package/hygen-template/artifact/new/index.js +0 -68
  431. package/hygen-template/artifact/new/template.ejs.t +0 -18
  432. package/hygen-template/provider/new/index.js +0 -81
  433. package/hygen-template/provider/new/template.ejs.t +0 -25
  434. package/hygen-template/template/new/index.js +0 -13
  435. package/hygen-template/template/new/template.ejs.t +0 -4
  436. package/index.d.ts +0 -1
  437. package/index.js +0 -1
  438. package/internal.d.ts +0 -1
  439. package/internal.js +0 -1
  440. package/provider.d.ts +0 -1
  441. package/provider.js +0 -1
  442. package/utils.d.ts +0 -1
  443. package/utils.js +0 -1
package/bin/dev CHANGED
@@ -9,16 +9,12 @@ const envPath = path.resolve(process.cwd(), './.env')
9
9
  const project = path.join(__dirname, '..', 'tsconfig.json');
10
10
 
11
11
  if (fs.existsSync(envPath)) {
12
- dotenv.config({ path: envPath })
12
+ dotenv.config({ path: envPath, quiet: true })
13
13
  }
14
14
 
15
- // In dev mode -> use ts-node and dev plugins
16
- process.env.NODE_ENV = 'development';
17
-
18
15
  require('ts-node').register({ project });
19
16
 
20
- // In dev mode, always show stack traces
21
- oclif.settings.debug = true;
22
-
23
- // Start the CLI
24
- oclif.run().then(oclif.flush).catch(oclif.Errors.handle);
17
+ void oclif.execute({
18
+ development: true,
19
+ dir: path.join(__dirname, '..'),
20
+ });
@@ -0,0 +1,4 @@
1
+ {
2
+ "private": true,
3
+ "type": "commonjs"
4
+ }
package/bin/run CHANGED
@@ -8,10 +8,7 @@ const fs = require('fs-extra');
8
8
  const envPath = resolve(process.cwd(), './.env')
9
9
 
10
10
  if (fs.existsSync(envPath)) {
11
- dotenv.config({ path: envPath })
11
+ dotenv.config({ path: envPath, quiet: true })
12
12
  }
13
13
 
14
- oclif
15
- .run()
16
- .then(require('@oclif/core/flush'))
17
- .catch(require('@oclif/core/handle'));
14
+ void oclif.execute({ dir: resolve(__dirname, '..') });
@@ -1,14 +1,14 @@
1
- import 'source-map-support/register';
2
1
  import { Command, Interfaces, Config } from '@oclif/core';
3
- import ora from 'ora';
4
- import { CommandConfig } from './types';
2
+ import { CommandConfig } from './types.js';
3
+ import { type LoadedSurgioProject } from './project/index.js';
5
4
  export type Flags<T extends typeof Command> = Interfaces.InferredFlags<(typeof BaseCommand)['baseFlags'] & T['flags']>;
6
5
  export type Args<T extends typeof Command> = Interfaces.InferredArgs<T['args']>;
7
6
  declare abstract class BaseCommand<T extends typeof Command> extends Command {
8
7
  protected flags: Flags<T>;
9
8
  protected args: Args<T>;
10
9
  protected surgioConfig: CommandConfig;
11
- ora: ora.Ora;
10
+ protected surgioProject: LoadedSurgioProject;
11
+ ora: import("ora").Ora;
12
12
  projectDir: string;
13
13
  constructor(argv: string[], config: Config);
14
14
  init(): Promise<void>;
@@ -1,21 +1,18 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- require("source-map-support/register");
7
- const path_1 = require("path");
8
- const core_1 = require("@oclif/core");
9
- const logger_1 = require("@surgio/logger");
10
- const ora_1 = __importDefault(require("ora"));
11
- const redis_1 = __importDefault(require("./redis"));
12
- const config_1 = require("./config");
13
- const error_helper_1 = require("./utils/error-helper");
14
- class BaseCommand extends core_1.Command {
1
+ import { resolve } from 'path';
2
+ import { Command, Flags } from '@oclif/core';
3
+ import { setLogLevel } from '@surgio/logger';
4
+ import ora from 'ora';
5
+ import { unifiedCache } from './cache/singleton.js';
6
+ import { loadSurgioProject } from './project/index.js';
7
+ import { errorHandler } from './utils/error-helper.js';
8
+ import { loadModuleSync } from './utils/module-loader.js';
9
+ loadModuleSync('source-map-support/register.js');
10
+ class BaseCommand extends Command {
15
11
  flags;
16
12
  args;
17
13
  surgioConfig;
18
- ora = (0, ora_1.default)({
14
+ surgioProject;
15
+ ora = ora({
19
16
  stream: process.stdout,
20
17
  });
21
18
  projectDir;
@@ -32,25 +29,26 @@ class BaseCommand extends core_1.Command {
32
29
  });
33
30
  this.flags = flags;
34
31
  this.args = args;
35
- // istanbul ignore next
32
+ /* istanbul ignore next -- @preserve */
36
33
  if (flags.verbose) {
37
- logger_1.transports.console.level = 'debug';
34
+ setLogLevel('debug');
38
35
  }
39
36
  if (flags.project.startsWith('.')) {
40
- flags.project = (0, path_1.resolve)(process.cwd(), flags.project);
37
+ flags.project = resolve(process.cwd(), flags.project);
41
38
  }
42
39
  this.projectDir = flags.project;
43
- this.surgioConfig = (0, config_1.loadConfig)(this.projectDir);
40
+ this.surgioProject = await loadSurgioProject(this.projectDir);
41
+ this.surgioConfig = this.surgioProject.config;
44
42
  }
45
43
  async catch(err) {
46
44
  if (this.ora.isSpinning) {
47
45
  this.ora.fail();
48
46
  }
49
- await error_helper_1.errorHandler.call(this, err);
47
+ await errorHandler.call(this, err);
50
48
  this.exit(err.exitCode || 1);
51
49
  }
52
50
  async cleanup() {
53
- await redis_1.default.destroyRedis();
51
+ await unifiedCache.close();
54
52
  if (this.ora.isSpinning) {
55
53
  this.ora.succeed();
56
54
  }
@@ -58,18 +56,18 @@ class BaseCommand extends core_1.Command {
58
56
  }
59
57
  BaseCommand.enableJsonFlag = true;
60
58
  BaseCommand.baseFlags = {
61
- project: core_1.Flags.string({
59
+ project: Flags.string({
62
60
  char: 'p',
63
61
  description: 'Surgio 配置目录',
64
62
  default: './',
65
63
  helpGroup: 'GLOBAL',
66
64
  }),
67
- verbose: core_1.Flags.boolean({
65
+ verbose: Flags.boolean({
68
66
  char: 'V',
69
67
  description: '打印调试日志',
70
68
  default: false,
71
69
  helpGroup: 'GLOBAL',
72
70
  }),
73
71
  };
74
- exports.default = BaseCommand;
72
+ export default BaseCommand;
75
73
  //# sourceMappingURL=base-command.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"base-command.js","sourceRoot":"","sources":["../src/base-command.ts"],"names":[],"mappings":";;;;;AAAA,uCAAoC;AACpC,+BAA8B;AAC9B,sCAAgE;AAChE,2CAA2C;AAC3C,8CAAqB;AAErB,oDAA2B;AAE3B,qCAAqC;AACrC,uDAAmD;AAOnD,MAAe,WAAsC,SAAQ,cAAO;IACxD,KAAK,CAAW;IAChB,IAAI,CAAU;IACd,YAAY,CAAgB;IAC/B,GAAG,GAAG,IAAA,aAAG,EAAC;QACf,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAA;IACK,UAAU,CAAS;IAE1B,YAAY,IAAc,EAAE,MAAc;QACxC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACrB,CAAC;IAEM,KAAK,CAAC,IAAI;QACf,MAAM,KAAK,CAAC,IAAI,EAAE,CAAA;QAElB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC;YACvC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK;YACtB,SAAS,EAAG,KAAK,CAAC,IAA2B,CAAC,SAAS;YACvD,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;YACpB,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;SACzB,CAAC,CAAA;QAEF,IAAI,CAAC,KAAK,GAAG,KAAiB,CAAA;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAe,CAAA;QAE3B,uBAAuB;QACvB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,mBAAU,CAAC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAA;QACpC,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,KAAK,CAAC,OAAO,GAAG,IAAA,cAAO,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;QACvD,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,CAAA;QAC/B,IAAI,CAAC,YAAY,GAAG,IAAA,mBAAU,EAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACjD,CAAC;IAES,KAAK,CAAC,KAAK,CAAC,GAAkC;QACtD,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;QACjB,CAAC;QACD,MAAM,2BAAY,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAClC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAA;IAC9B,CAAC;IAES,KAAK,CAAC,OAAO;QACrB,MAAM,eAAK,CAAC,YAAY,EAAE,CAAA;QAC1B,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;QACpB,CAAC;IACH,CAAC;CACF;AAED,WAAW,CAAC,cAAc,GAAG,IAAI,CAAA;AACjC,WAAW,CAAC,SAAS,GAAG;IACtB,OAAO,EAAE,YAAK,CAAC,MAAM,CAAC;QACpB,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,aAAa;QAC1B,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,QAAQ;KACpB,CAAC;IACF,OAAO,EAAE,YAAK,CAAC,OAAO,CAAC;QACrB,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,QAAQ;QACrB,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,QAAQ;KACpB,CAAC;CACH,CAAA;AAED,kBAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"base-command.js","sourceRoot":"","sources":["../src/base-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export * from './stores/cloudflare-kv.js';
@@ -0,0 +1,2 @@
1
+ export * from './stores/cloudflare-kv.js';
2
+ //# sourceMappingURL=cloudflare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../../src/cache/cloudflare.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAA"}
@@ -0,0 +1,2 @@
1
+ import type { PreparedKvStore } from './types.js';
2
+ export declare const createConfiguredStore: () => PreparedKvStore;
@@ -0,0 +1,26 @@
1
+ import { getConfig } from '../config.js';
2
+ import { createFilesystemStore } from './stores/filesystem.js';
3
+ import { createUpstashStore } from './stores/upstash.js';
4
+ export const createConfiguredStore = () => {
5
+ const config = getConfig().cache;
6
+ if (!config ||
7
+ config.type === undefined ||
8
+ config.type === 'default' ||
9
+ config.type === 'filesystem') {
10
+ return {
11
+ store: createFilesystemStore({ directory: config?.directory }),
12
+ type: 'filesystem',
13
+ };
14
+ }
15
+ switch (config.type) {
16
+ case 'upstash': {
17
+ const url = config.upstashRestUrl ?? process.env.UPSTASH_REDIS_REST_URL;
18
+ const token = config.upstashRestToken ?? process.env.UPSTASH_REDIS_REST_TOKEN;
19
+ if (!url || !token) {
20
+ throw new Error('Upstash cache requires UPSTASH_REDIS_REST_URL and UPSTASH_REDIS_REST_TOKEN');
21
+ }
22
+ return { store: createUpstashStore(url, token), type: 'upstash' };
23
+ }
24
+ }
25
+ };
26
+ //# sourceMappingURL=configured-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configured-store.js","sourceRoot":"","sources":["../../src/cache/configured-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAExC,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAIxD,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAoB,EAAE;IACzD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC,KAAK,CAAA;IAEhC,IACE,CAAC,MAAM;QACP,MAAM,CAAC,IAAI,KAAK,SAAS;QACzB,MAAM,CAAC,IAAI,KAAK,SAAS;QACzB,MAAM,CAAC,IAAI,KAAK,YAAY,EAC5B,CAAC;QACD,OAAO;YACL,KAAK,EAAE,qBAAqB,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;YAC9D,IAAI,EAAE,YAAY;SACnB,CAAA;IACH,CAAC;IAED,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,SAAS,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,MAAM,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAA;YACvE,MAAM,KAAK,GACT,MAAM,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAA;YAEjE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAA;YACH,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;QACnE,CAAC;IACH,CAAC;AACH,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './types.js';
2
+ export * from './ttl-cache.js';
@@ -0,0 +1,3 @@
1
+ export * from './types.js';
2
+ export * from './ttl-cache.js';
3
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/cache/core.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA"}
@@ -0,0 +1 @@
1
+ export * from './stores/filesystem.js';
@@ -0,0 +1,2 @@
1
+ export * from './stores/filesystem.js';
2
+ //# sourceMappingURL=filesystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../../src/cache/filesystem.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA"}
@@ -0,0 +1,6 @@
1
+ export * from './types.js';
2
+ export * from './ttl-cache.js';
3
+ export * from './stores/filesystem.js';
4
+ export * from './stores/upstash.js';
5
+ export * from './stores/cloudflare-kv.js';
6
+ export { unifiedCache as cache, cleanCaches } from './singleton.js';
@@ -0,0 +1,7 @@
1
+ export * from './types.js';
2
+ export * from './ttl-cache.js';
3
+ export * from './stores/filesystem.js';
4
+ export * from './stores/upstash.js';
5
+ export * from './stores/cloudflare-kv.js';
6
+ export { unifiedCache as cache, cleanCaches } from './singleton.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,wBAAwB,CAAA;AACtC,cAAc,qBAAqB,CAAA;AACnC,cAAc,2BAA2B,CAAA;AACzC,OAAO,EAAE,YAAY,IAAI,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { TtlCache } from './ttl-cache.js';
2
+ export declare const unifiedCache: TtlCache;
3
+ export declare const cleanCaches: () => Promise<void>;
@@ -0,0 +1,8 @@
1
+ import { createConfiguredStore } from './configured-store.js';
2
+ import { TtlCache } from './ttl-cache.js';
3
+ export const unifiedCache = new TtlCache({ createStore: createConfiguredStore });
4
+ /* istanbul ignore next -- @preserve */
5
+ export const cleanCaches = async () => {
6
+ await unifiedCache.reset();
7
+ };
8
+ //# sourceMappingURL=singleton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"singleton.js","sourceRoot":"","sources":["../../src/cache/singleton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,QAAQ,CAAC,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC,CAAA;AAEhF,uCAAuC;AACvC,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,IAAmB,EAAE;IACnD,MAAM,YAAY,CAAC,KAAK,EAAE,CAAA;AAC5B,CAAC,CAAA"}
@@ -0,0 +1,33 @@
1
+ import type { KvStore, KvStorePutOptions } from '../types.js';
2
+ export interface CloudflareKvNamespace {
3
+ get(key: string): Promise<string | null>;
4
+ put(key: string, value: string, options?: {
5
+ expiration?: number;
6
+ }): Promise<void>;
7
+ delete(key: string): Promise<void>;
8
+ list(options?: {
9
+ prefix?: string;
10
+ limit?: number;
11
+ cursor?: string;
12
+ }): Promise<{
13
+ keys: Array<{
14
+ name: string;
15
+ }>;
16
+ list_complete: boolean;
17
+ cursor?: string;
18
+ }>;
19
+ }
20
+ export interface CloudflareKvStoreOptions {
21
+ namespace?: string;
22
+ }
23
+ export declare class CloudflareKvStore implements KvStore {
24
+ #private;
25
+ readonly binding: CloudflareKvNamespace;
26
+ constructor(binding: CloudflareKvNamespace, options?: CloudflareKvStoreOptions);
27
+ get(key: string): Promise<string | undefined>;
28
+ put(key: string, value: string, options?: KvStorePutOptions): Promise<void>;
29
+ delete(key: string): Promise<void>;
30
+ list(prefix?: string): AsyncIterable<string>;
31
+ close(): Promise<void>;
32
+ }
33
+ export declare const createCloudflareKvStore: (binding: CloudflareKvNamespace, options?: CloudflareKvStoreOptions) => KvStore;
@@ -0,0 +1,45 @@
1
+ import { createPhysicalKey, createPhysicalPrefix, DEFAULT_CACHE_NAMESPACE, removePhysicalPrefix, } from './utils.js';
2
+ export class CloudflareKvStore {
3
+ binding;
4
+ #namespace;
5
+ constructor(binding, options = {}) {
6
+ this.binding = binding;
7
+ this.#namespace = options.namespace ?? DEFAULT_CACHE_NAMESPACE;
8
+ }
9
+ async get(key) {
10
+ return (await this.binding.get(this.#physicalKey(key))) ?? undefined;
11
+ }
12
+ async put(key, value, options) {
13
+ const expiration = options?.expiresAt === undefined
14
+ ? undefined
15
+ : Math.max(Math.ceil(options.expiresAt / 1000), Math.ceil(Date.now() / 1000) + 60);
16
+ await this.binding.put(this.#physicalKey(key), value, expiration === undefined ? undefined : { expiration });
17
+ }
18
+ async delete(key) {
19
+ await this.binding.delete(this.#physicalKey(key));
20
+ }
21
+ async *list(prefix = '') {
22
+ const physicalPrefix = createPhysicalPrefix(this.#namespace, prefix);
23
+ let cursor;
24
+ do {
25
+ const result = await this.binding.list({
26
+ prefix: physicalPrefix,
27
+ limit: 1000,
28
+ ...(cursor ? { cursor } : {}),
29
+ });
30
+ for (const key of result.keys) {
31
+ yield removePhysicalPrefix(this.#namespace, key.name);
32
+ }
33
+ cursor = result.list_complete ? undefined : result.cursor;
34
+ if (!result.list_complete && !cursor) {
35
+ throw new Error('Cloudflare KV list response is missing a cursor');
36
+ }
37
+ } while (cursor);
38
+ }
39
+ async close() { }
40
+ #physicalKey(key) {
41
+ return createPhysicalKey(this.#namespace, key);
42
+ }
43
+ }
44
+ export const createCloudflareKvStore = (binding, options) => new CloudflareKvStore(binding, options);
45
+ //# sourceMappingURL=cloudflare-kv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare-kv.js","sourceRoot":"","sources":["../../../src/cache/stores/cloudflare-kv.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,YAAY,CAAA;AA2BnB,MAAM,OAAO,iBAAiB;IAIjB,OAAO;IAHT,UAAU,CAAQ;IAE3B,YACW,OAA8B,EACvC,OAAO,GAA6B,EAAE;uBAD7B,OAAO;QAGhB,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,IAAI,uBAAuB,CAAA;IAChE,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,SAAS,CAAA;IACtE,CAAC;IAED,KAAK,CAAC,GAAG,CACP,GAAW,EACX,KAAa,EACb,OAA2B;QAE3B,MAAM,UAAU,GACd,OAAO,EAAE,SAAS,KAAK,SAAS;YAC9B,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,IAAI,CAAC,GAAG,CACN,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,EACnC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAClC,CAAA;QAEP,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CACpB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EACtB,KAAK,EACL,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CACtD,CAAA;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAA;IACnD,CAAC;IAED,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE;QACrB,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;QACpE,IAAI,MAA0B,CAAA;QAE9B,GAAG,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBACrC,MAAM,EAAE,cAAc;gBACtB,KAAK,EAAE,IAAI;gBACX,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9B,CAAC,CAAA;YAEF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC9B,MAAM,oBAAoB,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;YACvD,CAAC;YAED,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA;YACzD,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,CAAC,MAAM,EAAE,CAAC;gBACrC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;YACpE,CAAC;QACH,CAAC,QAAQ,MAAM,EAAC;IAClB,CAAC;IAED,KAAK,CAAC,KAAK,KAAmB,CAAC;IAE/B,YAAY,CAAC,GAAW;QACtB,OAAO,iBAAiB,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;IAChD,CAAC;CACF;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,OAA8B,EAC9B,OAAkC,EACzB,EAAE,CAAC,IAAI,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA"}
@@ -0,0 +1,15 @@
1
+ import type { KvStore, KvStorePutOptions } from '../types.js';
2
+ export interface FilesystemStoreOptions {
3
+ directory?: string;
4
+ namespace?: string;
5
+ }
6
+ export declare class FilesystemKvStore implements KvStore {
7
+ #private;
8
+ constructor(options?: FilesystemStoreOptions);
9
+ get(key: string): Promise<string | undefined>;
10
+ put(key: string, value: string, options?: KvStorePutOptions): Promise<void>;
11
+ delete(key: string): Promise<void>;
12
+ list(prefix?: string): AsyncIterable<string>;
13
+ close(): Promise<void>;
14
+ }
15
+ export declare const createFilesystemStore: (options?: FilesystemStoreOptions) => KvStore;
@@ -0,0 +1,84 @@
1
+ import crypto from 'node:crypto';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ import fs from 'fs-extra';
5
+ import { TMP_FOLDER_NAME } from '../../constant/index.js';
6
+ import { DEFAULT_CACHE_NAMESPACE } from './utils.js';
7
+ export class FilesystemKvStore {
8
+ #directory;
9
+ constructor(options = {}) {
10
+ this.#directory = path.join(options.directory ??
11
+ process.env.SURGIO_CACHE_DIRECTORY ??
12
+ path.join(os.tmpdir(), TMP_FOLDER_NAME, 'cache'), options.namespace ?? DEFAULT_CACHE_NAMESPACE);
13
+ }
14
+ async get(key) {
15
+ const filePath = this.#getFilePath(key);
16
+ if (!(await fs.pathExists(filePath))) {
17
+ return undefined;
18
+ }
19
+ try {
20
+ const record = (await fs.readJson(filePath));
21
+ if (record.expiresAt !== undefined && record.expiresAt <= Date.now()) {
22
+ await fs.remove(filePath);
23
+ return undefined;
24
+ }
25
+ return record.key === key && typeof record.value === 'string'
26
+ ? record.value
27
+ : undefined;
28
+ }
29
+ catch {
30
+ await fs.remove(filePath);
31
+ return undefined;
32
+ }
33
+ }
34
+ async put(key, value, options) {
35
+ await fs.ensureDir(this.#directory);
36
+ const target = this.#getFilePath(key);
37
+ const temporary = `${target}.${crypto.randomUUID()}.tmp`;
38
+ try {
39
+ await fs.writeJson(temporary, {
40
+ key,
41
+ value,
42
+ expiresAt: options?.expiresAt,
43
+ });
44
+ await fs.rename(temporary, target);
45
+ }
46
+ finally {
47
+ await fs.remove(temporary);
48
+ }
49
+ }
50
+ async delete(key) {
51
+ await fs.remove(this.#getFilePath(key));
52
+ }
53
+ async *list(prefix = '') {
54
+ if (!(await fs.pathExists(this.#directory))) {
55
+ return;
56
+ }
57
+ const entries = await fs.readdir(this.#directory);
58
+ for (const entry of entries) {
59
+ if (!entry.endsWith('.json')) {
60
+ continue;
61
+ }
62
+ try {
63
+ const record = (await fs.readJson(path.join(this.#directory, entry)));
64
+ if (record.expiresAt !== undefined && record.expiresAt <= Date.now()) {
65
+ await fs.remove(path.join(this.#directory, entry));
66
+ continue;
67
+ }
68
+ if (typeof record.key === 'string' && record.key.startsWith(prefix)) {
69
+ yield record.key;
70
+ }
71
+ }
72
+ catch {
73
+ await fs.remove(path.join(this.#directory, entry));
74
+ }
75
+ }
76
+ }
77
+ async close() { }
78
+ #getFilePath(key) {
79
+ const hash = crypto.createHash('sha256').update(key).digest('hex');
80
+ return path.join(this.#directory, `${hash}.json`);
81
+ }
82
+ }
83
+ export const createFilesystemStore = (options) => new FilesystemKvStore(options);
84
+ //# sourceMappingURL=filesystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../../../src/cache/stores/filesystem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { KvStore, KvStorePutOptions } from '../types.js';
2
+ export interface UpstashRedisClient {
3
+ get(key: string): Promise<unknown>;
4
+ set(key: string, value: string, options?: {
5
+ pxat?: number;
6
+ }): Promise<unknown>;
7
+ del(...keys: string[]): Promise<unknown>;
8
+ scan(cursor: number, options: {
9
+ match: string;
10
+ count: number;
11
+ }): Promise<[number | string, string[]]>;
12
+ }
13
+ export type UpstashRedisClientFactory = (url: string, token: string) => UpstashRedisClient | Promise<UpstashRedisClient>;
14
+ export interface UpstashStoreOptions {
15
+ namespace?: string;
16
+ client?: UpstashRedisClient;
17
+ createClient?: UpstashRedisClientFactory;
18
+ }
19
+ export declare class UpstashKvStore implements KvStore {
20
+ #private;
21
+ constructor(url: string, token: string, options?: UpstashStoreOptions);
22
+ get(key: string): Promise<string | undefined>;
23
+ put(key: string, value: string, options?: KvStorePutOptions): Promise<void>;
24
+ delete(key: string): Promise<void>;
25
+ list(prefix?: string): AsyncIterable<string>;
26
+ close(): Promise<void>;
27
+ }
28
+ export declare const createUpstashStore: (url: string, token: string, options?: UpstashStoreOptions) => KvStore;
@@ -0,0 +1,66 @@
1
+ import { createPhysicalKey, createPhysicalPrefix, DEFAULT_CACHE_NAMESPACE, removePhysicalPrefix, } from './utils.js';
2
+ const createUpstashRedisClient = async (url, token) => {
3
+ const { Redis } = await import('@upstash/redis');
4
+ return new Redis({ url, token, automaticDeserialization: false });
5
+ };
6
+ export class UpstashKvStore {
7
+ #namespace;
8
+ #url;
9
+ #token;
10
+ #createClient;
11
+ #client;
12
+ #clientPromise;
13
+ constructor(url, token, options = {}) {
14
+ this.#namespace = options.namespace ?? DEFAULT_CACHE_NAMESPACE;
15
+ this.#url = url;
16
+ this.#token = token;
17
+ this.#client = options.client;
18
+ this.#createClient = options.createClient ?? createUpstashRedisClient;
19
+ }
20
+ async get(key) {
21
+ const client = await this.#getClient();
22
+ const value = await client.get(this.#physicalKey(key));
23
+ return typeof value === 'string' ? value : undefined;
24
+ }
25
+ async put(key, value, options) {
26
+ const client = await this.#getClient();
27
+ await client.set(this.#physicalKey(key), value, options?.expiresAt === undefined
28
+ ? undefined
29
+ : { pxat: options.expiresAt });
30
+ }
31
+ async delete(key) {
32
+ const client = await this.#getClient();
33
+ await client.del(this.#physicalKey(key));
34
+ }
35
+ async *list(prefix = '') {
36
+ const client = await this.#getClient();
37
+ const physicalPrefix = createPhysicalPrefix(this.#namespace, prefix);
38
+ let cursor = 0;
39
+ do {
40
+ const result = await client.scan(Number(cursor), {
41
+ match: `${physicalPrefix}*`,
42
+ count: 1000,
43
+ });
44
+ cursor = result[0];
45
+ for (const key of result[1]) {
46
+ yield removePhysicalPrefix(this.#namespace, key);
47
+ }
48
+ } while (String(cursor) !== '0');
49
+ }
50
+ async close() { }
51
+ #physicalKey(key) {
52
+ return createPhysicalKey(this.#namespace, key);
53
+ }
54
+ async #getClient() {
55
+ if (this.#client) {
56
+ return this.#client;
57
+ }
58
+ this.#clientPromise ??= Promise.resolve(this.#createClient(this.#url, this.#token)).then((client) => {
59
+ this.#client = client;
60
+ return client;
61
+ });
62
+ return this.#clientPromise;
63
+ }
64
+ }
65
+ export const createUpstashStore = (url, token, options) => new UpstashKvStore(url, token, options);
66
+ //# sourceMappingURL=upstash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upstash.js","sourceRoot":"","sources":["../../../src/cache/stores/upstash.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare const DEFAULT_CACHE_NAMESPACE = "surgio";
2
+ export declare const KEY_SEPARATOR = ":";
3
+ export declare const createPhysicalKey: (namespace: string, key: string) => string;
4
+ export declare const createPhysicalPrefix: (namespace: string, prefix?: string) => string;
5
+ export declare const removePhysicalPrefix: (namespace: string, physicalKey: string) => string;
@@ -0,0 +1,6 @@
1
+ export const DEFAULT_CACHE_NAMESPACE = 'surgio';
2
+ export const KEY_SEPARATOR = ':';
3
+ export const createPhysicalKey = (namespace, key) => `${namespace}${KEY_SEPARATOR}${key}`;
4
+ export const createPhysicalPrefix = (namespace, prefix = '') => createPhysicalKey(namespace, prefix);
5
+ export const removePhysicalPrefix = (namespace, physicalKey) => physicalKey.slice(createPhysicalPrefix(namespace).length);
6
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/cache/stores/utils.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,uBAAuB,GAAG,QAAQ,CAAA;AAC/C,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAA;AAEhC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAAiB,EAAE,GAAW,EAAU,EAAE,CAC1E,GAAG,SAAS,GAAG,aAAa,GAAG,GAAG,EAAE,CAAA;AAEtC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,SAAiB,EAAE,MAAM,GAAG,EAAE,EAAU,EAAE,CAC7E,iBAAiB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;AAEtC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,SAAiB,EACjB,WAAmB,EACX,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAA"}
@@ -0,0 +1,24 @@
1
+ import type { CacheType, KvStore, PreparedKvStore } from './types.js';
2
+ export interface TtlCacheOptions {
3
+ createStore?: () => PreparedKvStore | Promise<PreparedKvStore>;
4
+ store?: KvStore;
5
+ type?: CacheType;
6
+ }
7
+ export declare class TtlCache {
8
+ #private;
9
+ constructor(options?: TtlCacheOptions);
10
+ useStore(store: KvStore, type?: CacheType): void;
11
+ prepare(): Promise<PreparedKvStore>;
12
+ getType(): Promise<CacheType>;
13
+ get<T>(key: string): Promise<T | undefined>;
14
+ set<T>(key: string, value: T, ttl?: number): Promise<void>;
15
+ del(key: string): Promise<void>;
16
+ reset(): Promise<void>;
17
+ wrap<T>(key: string, fn: () => T | Promise<T>, ttl?: number | ((value: T) => number)): Promise<T>;
18
+ keys(): Promise<string[]>;
19
+ mset(entries: [string, unknown][], ttl?: number): Promise<void>;
20
+ mget<T>(...keys: string[]): Promise<Array<T | undefined>>;
21
+ mdel(...keys: string[]): Promise<void>;
22
+ has(key: string): Promise<boolean>;
23
+ close(): Promise<void>;
24
+ }