@snack-kit/lib 0.5.0 → 0.6.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 (37) hide show
  1. package/README.md +10 -0
  2. package/dist/cjs/{chunk-ZJMTV2GJ.cjs → chunk-HGUNPVKD.cjs} +23 -18
  3. package/dist/cjs/chunk-HGUNPVKD.cjs.map +1 -0
  4. package/dist/cjs/chunk-UM4J7HF4.cjs +123 -0
  5. package/dist/cjs/chunk-UM4J7HF4.cjs.map +1 -0
  6. package/dist/cjs/{chunk-XEQEQWDB.cjs → chunk-UNFUIZVY.cjs} +4 -109
  7. package/dist/cjs/chunk-UNFUIZVY.cjs.map +1 -0
  8. package/dist/cjs/debugger.cjs +4 -4
  9. package/dist/cjs/http.cjs +29 -29
  10. package/dist/cjs/index.cjs +35 -35
  11. package/dist/cjs/index.cjs.map +1 -1
  12. package/dist/es/chunk-2YYI2T2B.js +105 -0
  13. package/dist/es/chunk-2YYI2T2B.js.map +1 -0
  14. package/dist/es/{chunk-4SGFAIRT.js → chunk-FB42OGY3.js} +16 -15
  15. package/dist/es/chunk-FB42OGY3.js.map +1 -0
  16. package/dist/es/{chunk-YV6SGXUJ.js → chunk-M5R2NQYU.js} +6 -103
  17. package/dist/es/chunk-M5R2NQYU.js.map +1 -0
  18. package/dist/es/debugger.js +2 -2
  19. package/dist/es/http.js +2 -2
  20. package/dist/es/index.js +4 -4
  21. package/dist/es/index.js.map +1 -1
  22. package/dist/types/index.d.ts +1 -1
  23. package/dist/umd/debugger.global.js +32 -93
  24. package/dist/umd/debugger.global.js.map +1 -1
  25. package/dist/umd/http.global.js +2 -1
  26. package/dist/umd/http.global.js.map +1 -1
  27. package/dist/umd/index.global.js +15 -13
  28. package/dist/umd/index.global.js.map +1 -1
  29. package/package.json +1 -1
  30. package/dist/cjs/chunk-IMHC6CTK.cjs +0 -13
  31. package/dist/cjs/chunk-IMHC6CTK.cjs.map +0 -1
  32. package/dist/cjs/chunk-XEQEQWDB.cjs.map +0 -1
  33. package/dist/cjs/chunk-ZJMTV2GJ.cjs.map +0 -1
  34. package/dist/es/chunk-4SGFAIRT.js.map +0 -1
  35. package/dist/es/chunk-MHCY2PIP.js +0 -3
  36. package/dist/es/chunk-MHCY2PIP.js.map +0 -1
  37. package/dist/es/chunk-YV6SGXUJ.js.map +0 -1
@@ -1,6 +1,7 @@
1
- import axios, { isAxiosError } from 'axios';
1
+ import axios from 'axios';
2
2
 
3
3
  // src/http/context.ts
4
+ var _http = axios.create();
4
5
  var DEBUGGER_ACTIVE_KEY = "__snackkit_debugger__active";
5
6
  var HttpContext = class {
6
7
  constructor() {
@@ -45,7 +46,7 @@ var HttpContext = class {
45
46
  }
46
47
  if (typeof source === "string") {
47
48
  const url = `${source}/ngw/context`;
48
- const res = await axios.get(url, { timeout });
49
+ const res = await _http.get(url, { timeout });
49
50
  const data = res.data;
50
51
  if (data && typeof data === "object") {
51
52
  this._store.clear();
@@ -127,104 +128,6 @@ var _loc = typeof globalThis !== "undefined" ? globalThis["location"] : void 0;
127
128
  var Origin = _loc?.protocol && _loc?.host ? `${_loc.protocol}//${_loc.host}` : "";
128
129
  var Ctx = _loc?.pathname ? _loc.pathname.split("/")[1] ?? "" : "";
129
130
 
130
- // src/http/cancel.ts
131
- var registry = /* @__PURE__ */ new Map();
132
- function Register(id) {
133
- if (registry.has(id)) {
134
- registry.get(id).abort();
135
- }
136
- const controller = new AbortController();
137
- registry.set(id, controller);
138
- return controller;
139
- }
140
- function Cancel(id) {
141
- const controller = registry.get(id);
142
- if (!controller) return false;
143
- controller.abort();
144
- registry.delete(id);
145
- return true;
146
- }
147
- function CancelAll() {
148
- for (const controller of registry.values()) {
149
- controller.abort();
150
- }
151
- registry.clear();
152
- }
153
- function Unregister(id) {
154
- registry.delete(id);
155
- }
156
- function generateId() {
157
- if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
158
- return crypto.randomUUID();
159
- }
160
- return `${Date.now()}-${Math.random().toString(36).slice(2)}`;
161
- }
162
- async function Request(config) {
163
- const { ctx, cancelId: customCancelId, onCancelId, cache = false, ...axiosConfig } = config;
164
- if (ctx && Context.loaded) {
165
- const base = Context.get(ctx);
166
- if (base) {
167
- axiosConfig.baseURL = base;
168
- }
169
- }
170
- if (!cache) {
171
- const sep = (axiosConfig.url ?? "").includes("?") ? "&" : "?";
172
- axiosConfig.url = `${axiosConfig.url ?? ""}${sep}_=${Date.now()}`;
173
- }
174
- const cancelId = customCancelId ?? generateId();
175
- const controller = Register(cancelId);
176
- axiosConfig.signal = controller.signal;
177
- onCancelId?.(cancelId);
178
- try {
179
- const response = await axios.request({ ...axiosConfig });
180
- return response;
181
- } catch (err) {
182
- if (isAxiosError(err)) {
183
- return {
184
- error: {
185
- status: err.response?.status,
186
- message: err.message,
187
- data: err.response?.data
188
- }
189
- };
190
- }
191
- const message = err instanceof Error ? err.message : String(err);
192
- return { error: { message } };
193
- } finally {
194
- Unregister(cancelId);
195
- }
196
- }
197
- function Get(urlOrConfig, config) {
198
- if (typeof urlOrConfig === "string") {
199
- return Request({ ...config, method: "GET", url: urlOrConfig });
200
- }
201
- return Request({ ...urlOrConfig, method: "GET" });
202
- }
203
- function Post(urlOrConfig, data, config) {
204
- if (typeof urlOrConfig === "string") {
205
- return Request({ ...config, method: "POST", url: urlOrConfig, data });
206
- }
207
- return Request({ ...urlOrConfig, method: "POST" });
208
- }
209
- function Put(urlOrConfig, data, config) {
210
- if (typeof urlOrConfig === "string") {
211
- return Request({ ...config, method: "PUT", url: urlOrConfig, data });
212
- }
213
- return Request({ ...urlOrConfig, method: "PUT" });
214
- }
215
- function Patch(urlOrConfig, data, config) {
216
- if (typeof urlOrConfig === "string") {
217
- return Request({ ...config, method: "PATCH", url: urlOrConfig, data });
218
- }
219
- return Request({ ...urlOrConfig, method: "PATCH" });
220
- }
221
- function Del(urlOrConfig, config) {
222
- if (typeof urlOrConfig === "string") {
223
- return Request({ ...config, method: "DELETE", url: urlOrConfig });
224
- }
225
- return Request({ ...urlOrConfig, method: "DELETE" });
226
- }
227
-
228
- export { Cancel, CancelAll, Context, Ctx, DEBUGGER_ACTIVE_KEY, Del, Get, HttpContext, Origin, Patch, Post, Put, Request };
229
- //# sourceMappingURL=chunk-YV6SGXUJ.js.map
230
- //# sourceMappingURL=chunk-YV6SGXUJ.js.map
131
+ export { Context, Ctx, DEBUGGER_ACTIVE_KEY, HttpContext, Origin };
132
+ //# sourceMappingURL=chunk-M5R2NQYU.js.map
133
+ //# sourceMappingURL=chunk-M5R2NQYU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/http/context.ts"],"names":[],"mappings":"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","file":"chunk-M5R2NQYU.js","sourcesContent":["import axios from 'axios'\nimport type { ContextInfo } from './types'\n\n/**\n * Context 专用的隔离 axios 实例,不受用户添加的外部拦截器影响。\n */\nconst _http = axios.create()\n\n/**\n * globalThis 上的标志位 key,由 `Debugger.init()` 写入。\n * `Context.load()` 无参数调用时,若检测到此标志则跳过自动加载,\n * 由 Debugger 负责在用户选择服务后调用 `Context.load(origin)`。\n */\nexport const DEBUGGER_ACTIVE_KEY = '__snackkit_debugger__active'\n\n/** 网关 `/ngw/context` 原始响应格式(包含路由映射和 `$info` 元数据) */\ninterface ContextResponse {\n $info?: ContextInfo\n [key: string]: string | ContextInfo | undefined\n}\n\n/**\n * 管理服务地址映射的上下文单例\n *\n * 支持三种加载方式:\n * - **不传参数**:生产环境自动以当前页面 Origin 为网关,开发环境由 `Debugger` 接管\n * - **远程加载**:传入网关 URL,自动请求 `GET /ngw/context` 获取映射表\n * - **本地注入**:直接传入键值对象,不发起网络请求\n *\n * @example 生产环境不传参(推荐)\n * ```ts\n * import { Context } from '@snack-kit/lib/http'\n *\n * await Context.load()\n * Context.get('ngw') // 'https://app.example.com/ngw'\n * ```\n *\n * @example 远程加载(指定网关)\n * ```ts\n * await Context.load('http://172.16.32.155:20000')\n * Context.get('ngw') // 'http://172.16.32.155:20000/ngw'\n * Context.info // { version: '4.6.2-r10', domain: '...', ... }\n * ```\n *\n * @example 本地注入\n * ```ts\n * await Context.load({\n * 'user-svc': 'http://user.api.com',\n * 'order-svc': 'http://order.api.com',\n * })\n * ```\n */\nexport class HttpContext {\n private _store = new Map<string, string>()\n private _loaded = false\n private _info: ContextInfo | undefined\n\n /**\n * 加载服务地址映射\n *\n * 支持三种调用方式:\n * - **传入字符串**:作为网关地址,自动请求 `GET /ngw/context` 获取映射表\n * - **传入对象**:直接注入键值映射,不发起网络请求\n * - **不传参数**:\n * - 生产环境(`NODE_ENV === 'production'`):以当前页面 `Origin` 为网关地址自动加载\n * - 开发环境:立即返回,不做任何操作(应由 `Debugger.init()` 接管加载流程)\n *\n * 远程加载时,响应中的 `$info` 元数据字段会被单独存储,不计入路由映射表。\n *\n * @param source 网关 URL / 键值对象 / 省略\n * @param timeout 远程加载超时(ms),默认 5000\n *\n * @example 不传参——生产环境自动使用当前页面 Origin\n * ```ts\n * await Context.load()\n * ```\n *\n * @example 传入网关地址\n * ```ts\n * await Context.load('http://172.16.32.155:20000', 3000)\n * ```\n *\n * @example 本地注入\n * ```ts\n * await Context.load({ 'user-svc': 'http://user.api.com' })\n * ```\n */\n async load(source?: string | Record<string, string>, timeout = 5000): Promise<void> {\n if (source === undefined) {\n // Debugger 已激活时,由其负责加载,此处跳过\n if ((globalThis as Record<string, unknown>)[DEBUGGER_ACTIVE_KEY]) return\n // 生产环境:以当前页面 Origin 为网关地址\n if (!Origin) return\n source = Origin\n }\n if (typeof source === 'string') {\n const url = `${source}/ngw/context`\n const res = await _http.get<ContextResponse>(url, { timeout })\n const data = res.data\n if (data && typeof data === 'object') {\n this._store.clear()\n for (const [k, v] of Object.entries(data)) {\n if (k === '$info') {\n // 保存元数据,不计入路由映射\n this._info = v as ContextInfo\n } else if (typeof v === 'string') {\n this._store.set(k, v)\n }\n }\n }\n } else {\n this._store.clear()\n for (const [k, v] of Object.entries(source)) {\n this._store.set(k, v)\n }\n }\n this._loaded = true\n }\n\n /**\n * 获取指定 ctx key 对应的服务地址\n * @param key ctx key,例如 `'ngw'`、`'osc'`\n * @returns 服务地址,未找到时返回空字符串\n *\n * @example\n * ```ts\n * await Context.load('http://172.16.32.155:20000')\n * Context.get('osc') // 'http://172.16.32.155:20000/osc'\n * Context.get('none') // ''\n * ```\n */\n get(key: string): string {\n return this._store.get(key) ?? ''\n }\n\n /**\n * 网关元数据(仅远程加载后可用)\n *\n * @example\n * ```ts\n * await Context.load('http://172.16.32.155:20000')\n * Context.info?.version // '4.6.2-r10'\n * Context.info?.domain // 'http://172.16.32.155:20000'\n * ```\n */\n get info(): ContextInfo | undefined {\n return this._info\n }\n\n /**\n * Context 是否已加载\n *\n * @example\n * ```ts\n * Context.loaded // false\n * await Context.load({ 'user-svc': 'http://user.api.com' })\n * Context.loaded // true\n * ```\n */\n get loaded(): boolean {\n return this._loaded\n }\n\n /**\n * 清空所有映射并重置加载状态\n *\n * @example\n * ```ts\n * Context.clear()\n * Context.loaded // false\n * ```\n */\n clear(): void {\n this._store.clear()\n this._loaded = false\n this._info = undefined\n }\n}\n\n/** 模块级单例,避免全局 window 污染 */\nconst _instance = new HttpContext()\n\n/**\n * HttpContext 全局单例\n *\n * @example\n * ```ts\n * import { Context } from '@snack-kit/lib/http'\n *\n * await Context.load('http://172.16.32.155:20000')\n * Context.get('osc') // 'http://172.16.32.155:20000/osc'\n * ```\n */\nexport const Context: HttpContext = _instance\n\n/** 浏览器 location 对象(兼容 Node/SSR 环境) */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst _loc: { protocol?: string; host?: string; pathname?: string } | undefined =\n typeof globalThis !== 'undefined'\n ? ((globalThis as Record<string, unknown>)['location'] as typeof _loc)\n : undefined\n\n/**\n * 当前页面的 origin(`protocol + host`)\n *\n * 在非浏览器环境(如 SSR/Node)返回空字符串。\n *\n * @example\n * ```ts\n * import { Origin } from '@snack-kit/lib/http'\n * // 浏览器中:'https://app.example.com'\n * // Node 环境:''\n * ```\n */\nexport const Origin: string =\n _loc?.protocol && _loc?.host ? `${_loc.protocol}//${_loc.host}` : ''\n\n/**\n * 当前页面路径的首段,可直接用作 `ctx` 参数\n *\n * 例如 `/osc/employee` → `'osc'`,在非浏览器环境返回空字符串。\n *\n * @example\n * ```ts\n * import { Ctx, Get } from '@snack-kit/lib/http'\n *\n * // 当前路径为 /osc/... 时,Ctx === 'osc'\n * const result = await Get('/employee', { ctx: Ctx })\n * ```\n */\nexport const Ctx: string = _loc?.pathname ? (_loc.pathname.split('/')[1] ?? '') : ''\n"]}
@@ -1,4 +1,4 @@
1
- export { Debugger } from './chunk-4SGFAIRT.js';
2
- export { DEBUGGER_ACTIVE_KEY } from './chunk-YV6SGXUJ.js';
1
+ export { Debugger } from './chunk-FB42OGY3.js';
2
+ export { DEBUGGER_ACTIVE_KEY } from './chunk-M5R2NQYU.js';
3
3
  //# sourceMappingURL=debugger.js.map
4
4
  //# sourceMappingURL=debugger.js.map
package/dist/es/http.js CHANGED
@@ -1,4 +1,4 @@
1
- export { default as axios } from './chunk-MHCY2PIP.js';
2
- export { Cancel, CancelAll, Context, Ctx, Del, Get, HttpContext, Origin, Patch, Post, Put, Request } from './chunk-YV6SGXUJ.js';
1
+ export { Cancel, CancelAll, Del, Get, Patch, Post, Put, Request, default as axios } from './chunk-2YYI2T2B.js';
2
+ export { Context, Ctx, HttpContext, Origin } from './chunk-M5R2NQYU.js';
3
3
  //# sourceMappingURL=http.js.map
4
4
  //# sourceMappingURL=http.js.map
package/dist/es/index.js CHANGED
@@ -1,10 +1,10 @@
1
- export { default as axios } from './chunk-MHCY2PIP.js';
2
- export { Debugger } from './chunk-4SGFAIRT.js';
3
- export { Cancel, CancelAll, Context, Ctx, DEBUGGER_ACTIVE_KEY, Del, Get, HttpContext, Origin, Patch, Post, Put, Request } from './chunk-YV6SGXUJ.js';
1
+ export { Cancel, CancelAll, Del, Get, Patch, Post, Put, Request, default as axios } from './chunk-2YYI2T2B.js';
2
+ export { Debugger } from './chunk-FB42OGY3.js';
3
+ export { Context, Ctx, DEBUGGER_ACTIVE_KEY, HttpContext, Origin } from './chunk-M5R2NQYU.js';
4
4
  export { CleanObject, Debounce, DeepClone, Delay, FormatDate, GetDateOffset, GetDayRange, GetURLParam, GetURLParams, IsArray, IsBoolean, IsEmail, IsEqual, IsFunction, IsInteger, IsIpv4, IsNull, IsNumber, IsObject, IsPhone, IsPositiveInteger, IsRealNumber, IsString, IsUrl, Minus, ObjectToQuery, Omit, Pick, QueryToObject, REGEX, Throttle, UUID, Unique, UniqueByKey } from './chunk-WJX5Q3WL.js';
5
5
 
6
6
  // package.json
7
- var version = "0.5.0";
7
+ var version = "0.6.0";
8
8
 
9
9
  export { version as VERSION };
10
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../package.json"],"names":[],"mappings":";;;;;;AAEE,IAAA,OAAA,GAAW","file":"index.js","sourcesContent":["{\n \"name\": \"@snack-kit/lib\",\n \"version\": \"0.5.0\",\n \"description\": \"Enterprise-grade utility library\",\n \"keywords\": [],\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/types/index.d.ts\",\n \"import\": \"./dist/es/index.js\",\n \"require\": \"./dist/cjs/index.cjs\"\n },\n \"./http\": {\n \"types\": \"./dist/types/http.d.ts\",\n \"import\": \"./dist/es/http.js\",\n \"require\": \"./dist/cjs/http.cjs\"\n },\n \"./debugger\": {\n \"types\": \"./dist/types/debugger.d.ts\",\n \"import\": \"./dist/es/debugger.js\",\n \"require\": \"./dist/cjs/debugger.cjs\"\n },\n \"./utils\": {\n \"types\": \"./dist/types/utils.d.ts\",\n \"import\": \"./dist/es/utils.js\",\n \"require\": \"./dist/cjs/utils.cjs\"\n }\n },\n \"main\": \"./dist/cjs/index.cjs\",\n \"module\": \"./dist/es/index.js\",\n \"types\": \"./dist/types/index.d.ts\",\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"build:watch\": \"tsup --watch\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"test:coverage\": \"vitest run --coverage\",\n \"docs\": \"typedoc && cp -r docs/demo docs/api/demo\",\n \"docs:watch\": \"typedoc --watch\",\n \"lint\": \"tsc --noEmit\",\n \"prepublishOnly\": \"npm run build\",\n \"release\": \"npm run build && npm publish --access public\"\n },\n \"devDependencies\": {\n \"@vitest/coverage-v8\": \"^2.0.0\",\n \"tsup\": \"^8.0.0\",\n \"typedoc\": \"^0.26.0\",\n \"typescript\": \"^5.5.3\",\n \"vitest\": \"^2.0.0\"\n },\n \"dependencies\": {\n \"axios\": \"^1.13.6\"\n }\n}\n"]}
1
+ {"version":3,"sources":["../../package.json"],"names":[],"mappings":";;;;;;AAEE,IAAA,OAAA,GAAW","file":"index.js","sourcesContent":["{\n \"name\": \"@snack-kit/lib\",\n \"version\": \"0.6.0\",\n \"description\": \"Enterprise-grade utility library\",\n \"keywords\": [],\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/types/index.d.ts\",\n \"import\": \"./dist/es/index.js\",\n \"require\": \"./dist/cjs/index.cjs\"\n },\n \"./http\": {\n \"types\": \"./dist/types/http.d.ts\",\n \"import\": \"./dist/es/http.js\",\n \"require\": \"./dist/cjs/http.cjs\"\n },\n \"./debugger\": {\n \"types\": \"./dist/types/debugger.d.ts\",\n \"import\": \"./dist/es/debugger.js\",\n \"require\": \"./dist/cjs/debugger.cjs\"\n },\n \"./utils\": {\n \"types\": \"./dist/types/utils.d.ts\",\n \"import\": \"./dist/es/utils.js\",\n \"require\": \"./dist/cjs/utils.cjs\"\n }\n },\n \"main\": \"./dist/cjs/index.cjs\",\n \"module\": \"./dist/es/index.js\",\n \"types\": \"./dist/types/index.d.ts\",\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"build:watch\": \"tsup --watch\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"test:coverage\": \"vitest run --coverage\",\n \"docs\": \"typedoc && cp -r docs/demo docs/api/demo\",\n \"docs:watch\": \"typedoc --watch\",\n \"lint\": \"tsc --noEmit\",\n \"prepublishOnly\": \"npm run build\",\n \"release\": \"npm run build && npm publish --access public\"\n },\n \"devDependencies\": {\n \"@vitest/coverage-v8\": \"^2.0.0\",\n \"tsup\": \"^8.0.0\",\n \"typedoc\": \"^0.26.0\",\n \"typescript\": \"^5.5.3\",\n \"vitest\": \"^2.0.0\"\n },\n \"dependencies\": {\n \"axios\": \"^1.13.6\"\n }\n}\n"]}
@@ -4,6 +4,6 @@ export { AxiosError, AxiosInstance, AxiosRequestConfig, AxiosResponse, default a
4
4
  export { Debugger, DebuggerOptions } from './debugger.js';
5
5
  export { CleanObject, Debounce, DeepClone, Delay, FormatDate, GetDateOffset, GetDayRange, GetURLParam, GetURLParams, IsArray, IsBoolean, IsEmail, IsEqual, IsFunction, IsInteger, IsIpv4, IsNull, IsNumber, IsObject, IsPhone, IsPositiveInteger, IsRealNumber, IsString, IsUrl, Minus, ObjectToQuery, Omit, Pick, QueryToObject, REGEX, Throttle, UUID, Unique, UniqueByKey } from './utils.js';
6
6
 
7
- var version = "0.5.0";
7
+ var version = "0.6.0";
8
8
 
9
9
  export { version as VERSION };
@@ -1,9 +1,9 @@
1
- var SnackKit = (function (exports, crypto2, url, http, https, http2, util2, zlib, stream3, events) {
1
+ var SnackKit = (function (exports, crypto, url, http, https, http2, util2, zlib, stream3, events) {
2
2
  'use strict';
3
3
 
4
4
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
5
5
 
6
- var crypto2__default = /*#__PURE__*/_interopDefault(crypto2);
6
+ var crypto__default = /*#__PURE__*/_interopDefault(crypto);
7
7
  var url__default = /*#__PURE__*/_interopDefault(url);
8
8
  var http__default = /*#__PURE__*/_interopDefault(http);
9
9
  var https__default = /*#__PURE__*/_interopDefault(https);
@@ -9971,7 +9971,7 @@ var SnackKit = (function (exports, crypto2, url, http, https, http2, util2, zlib
9971
9971
  var parseUrl = __require("url").parse;
9972
9972
  var fs = __require("fs");
9973
9973
  var Stream = __require("stream").Stream;
9974
- var crypto3 = __require("crypto");
9974
+ var crypto2 = __require("crypto");
9975
9975
  var mime = require_mime_types();
9976
9976
  var asynckit = require_asynckit();
9977
9977
  var setToStringTag = require_es_set_tostringtag();
@@ -10177,7 +10177,7 @@ var SnackKit = (function (exports, crypto2, url, http, https, http2, util2, zlib
10177
10177
  return Buffer.concat([dataBuffer, Buffer.from(this._lastBoundary())]);
10178
10178
  };
10179
10179
  FormData3.prototype._generateBoundary = function() {
10180
- this._boundary = "--------------------------" + crypto3.randomBytes(12).toString("hex");
10180
+ this._boundary = "--------------------------" + crypto2.randomBytes(12).toString("hex");
10181
10181
  };
10182
10182
  FormData3.prototype.getLengthSync = function() {
10183
10183
  var knownLength = this._overheadLength + this._valueLength;
@@ -12403,7 +12403,7 @@ var SnackKit = (function (exports, crypto2, url, http, https, http2, util2, zlib
12403
12403
  let str = "";
12404
12404
  const { length } = alphabet;
12405
12405
  const randomValues = new Uint32Array(size);
12406
- crypto2__default.default.randomFillSync(randomValues);
12406
+ crypto__default.default.randomFillSync(randomValues);
12407
12407
  for (let i = 0; i < size; i++) {
12408
12408
  str += alphabet[randomValues[i] % length];
12409
12409
  }
@@ -14552,8 +14552,8 @@ var SnackKit = (function (exports, crypto2, url, http, https, http2, util2, zlib
14552
14552
  // node_modules/axios/lib/adapters/fetch.js
14553
14553
  var DEFAULT_CHUNK_SIZE = 64 * 1024;
14554
14554
  var { isFunction: isFunction2 } = utils_default;
14555
- var globalFetchAPI = (({ Request: Request2, Response }) => ({
14556
- Request: Request2,
14555
+ var globalFetchAPI = (({ Request, Response }) => ({
14556
+ Request,
14557
14557
  Response
14558
14558
  }))(utils_default.global);
14559
14559
  var { ReadableStream: ReadableStream2, TextEncoder: TextEncoder2 } = utils_default.global;
@@ -14572,18 +14572,18 @@ var SnackKit = (function (exports, crypto2, url, http, https, http2, util2, zlib
14572
14572
  globalFetchAPI,
14573
14573
  env
14574
14574
  );
14575
- const { fetch: envFetch, Request: Request2, Response } = env;
14575
+ const { fetch: envFetch, Request, Response } = env;
14576
14576
  const isFetchSupported = envFetch ? isFunction2(envFetch) : typeof fetch === "function";
14577
- const isRequestSupported = isFunction2(Request2);
14577
+ const isRequestSupported = isFunction2(Request);
14578
14578
  const isResponseSupported = isFunction2(Response);
14579
14579
  if (!isFetchSupported) {
14580
14580
  return false;
14581
14581
  }
14582
14582
  const isReadableStreamSupported = isFetchSupported && isFunction2(ReadableStream2);
14583
- const encodeText = isFetchSupported && (typeof TextEncoder2 === "function" ? /* @__PURE__ */ ((encoder) => (str) => encoder.encode(str))(new TextEncoder2()) : async (str) => new Uint8Array(await new Request2(str).arrayBuffer()));
14583
+ const encodeText = isFetchSupported && (typeof TextEncoder2 === "function" ? /* @__PURE__ */ ((encoder) => (str) => encoder.encode(str))(new TextEncoder2()) : async (str) => new Uint8Array(await new Request(str).arrayBuffer()));
14584
14584
  const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => {
14585
14585
  let duplexAccessed = false;
14586
- const hasContentType = new Request2(platform_default.origin, {
14586
+ const hasContentType = new Request(platform_default.origin, {
14587
14587
  body: new ReadableStream2(),
14588
14588
  method: "POST",
14589
14589
  get duplex() {
@@ -14620,7 +14620,7 @@ var SnackKit = (function (exports, crypto2, url, http, https, http2, util2, zlib
14620
14620
  return body.size;
14621
14621
  }
14622
14622
  if (utils_default.isSpecCompliantForm(body)) {
14623
- const _request = new Request2(platform_default.origin, {
14623
+ const _request = new Request(platform_default.origin, {
14624
14624
  method: "POST",
14625
14625
  body
14626
14626
  });
@@ -14668,7 +14668,7 @@ var SnackKit = (function (exports, crypto2, url, http, https, http2, util2, zlib
14668
14668
  let requestContentLength;
14669
14669
  try {
14670
14670
  if (onUploadProgress && supportsRequestStream && method !== "get" && method !== "head" && (requestContentLength = await resolveBodyLength(headers, data)) !== 0) {
14671
- let _request = new Request2(url2, {
14671
+ let _request = new Request(url2, {
14672
14672
  method: "POST",
14673
14673
  body: data,
14674
14674
  duplex: "half"
@@ -14688,7 +14688,7 @@ var SnackKit = (function (exports, crypto2, url, http, https, http2, util2, zlib
14688
14688
  if (!utils_default.isString(withCredentials)) {
14689
14689
  withCredentials = withCredentials ? "include" : "omit";
14690
14690
  }
14691
- const isCredentialsSupported = isRequestSupported && "credentials" in Request2.prototype;
14691
+ const isCredentialsSupported = isRequestSupported && "credentials" in Request.prototype;
14692
14692
  const resolvedOptions = {
14693
14693
  ...fetchOptions,
14694
14694
  signal: composedSignal,
@@ -14698,7 +14698,7 @@ var SnackKit = (function (exports, crypto2, url, http, https, http2, util2, zlib
14698
14698
  duplex: "half",
14699
14699
  credentials: isCredentialsSupported ? withCredentials : void 0
14700
14700
  };
14701
- request = isRequestSupported && new Request2(url2, resolvedOptions);
14701
+ request = isRequestSupported && new Request(url2, resolvedOptions);
14702
14702
  let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url2, resolvedOptions));
14703
14703
  const isStreamResponse = supportsResponseStream && (responseType === "stream" || responseType === "response");
14704
14704
  if (supportsResponseStream && (onDownloadProgress || isStreamResponse && unsubscribe)) {
@@ -14758,8 +14758,8 @@ var SnackKit = (function (exports, crypto2, url, http, https, http2, util2, zlib
14758
14758
  var seedCache = /* @__PURE__ */ new Map();
14759
14759
  var getFetch = (config) => {
14760
14760
  let env = config && config.env || {};
14761
- const { fetch: fetch2, Request: Request2, Response } = env;
14762
- const seeds = [Request2, Response, fetch2];
14761
+ const { fetch: fetch2, Request, Response } = env;
14762
+ const seeds = [Request, Response, fetch2];
14763
14763
  let len = seeds.length, i = len, seed, target, map = seedCache;
14764
14764
  while (i--) {
14765
14765
  seed = seeds[i];
@@ -15373,6 +15373,7 @@ var SnackKit = (function (exports, crypto2, url, http, https, http2, util2, zlib
15373
15373
  } = axios_default;
15374
15374
 
15375
15375
  // src/http/context.ts
15376
+ var _http = axios_default.create();
15376
15377
  var DEBUGGER_ACTIVE_KEY = "__snackkit_debugger__active";
15377
15378
  var HttpContext = class {
15378
15379
  constructor() {
@@ -15417,7 +15418,7 @@ var SnackKit = (function (exports, crypto2, url, http, https, http2, util2, zlib
15417
15418
  }
15418
15419
  if (typeof source === "string") {
15419
15420
  const url2 = `${source}/ngw/context`;
15420
- const res = await axios_default.get(url2, { timeout });
15421
+ const res = await _http.get(url2, { timeout });
15421
15422
  const data = res.data;
15422
15423
  if (data && typeof data === "object") {
15423
15424
  this._store.clear();
@@ -15499,70 +15500,8 @@ var SnackKit = (function (exports, crypto2, url, http, https, http2, util2, zlib
15499
15500
  var Origin = _loc?.protocol && _loc?.host ? `${_loc.protocol}//${_loc.host}` : "";
15500
15501
  _loc?.pathname ? _loc.pathname.split("/")[1] ?? "" : "";
15501
15502
 
15502
- // src/http/cancel.ts
15503
- var registry = /* @__PURE__ */ new Map();
15504
- function Register(id) {
15505
- if (registry.has(id)) {
15506
- registry.get(id).abort();
15507
- }
15508
- const controller = new AbortController();
15509
- registry.set(id, controller);
15510
- return controller;
15511
- }
15512
- function Unregister(id) {
15513
- registry.delete(id);
15514
- }
15515
-
15516
- // src/http/client.ts
15517
- function generateId() {
15518
- if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
15519
- return crypto.randomUUID();
15520
- }
15521
- return `${Date.now()}-${Math.random().toString(36).slice(2)}`;
15522
- }
15523
- async function Request(config) {
15524
- const { ctx, cancelId: customCancelId, onCancelId, cache = false, ...axiosConfig } = config;
15525
- if (ctx && Context.loaded) {
15526
- const base = Context.get(ctx);
15527
- if (base) {
15528
- axiosConfig.baseURL = base;
15529
- }
15530
- }
15531
- if (!cache) {
15532
- const sep = (axiosConfig.url ?? "").includes("?") ? "&" : "?";
15533
- axiosConfig.url = `${axiosConfig.url ?? ""}${sep}_=${Date.now()}`;
15534
- }
15535
- const cancelId = customCancelId ?? generateId();
15536
- const controller = Register(cancelId);
15537
- axiosConfig.signal = controller.signal;
15538
- onCancelId?.(cancelId);
15539
- try {
15540
- const response = await axios_default.request({ ...axiosConfig });
15541
- return response;
15542
- } catch (err) {
15543
- if (isAxiosError2(err)) {
15544
- return {
15545
- error: {
15546
- status: err.response?.status,
15547
- message: err.message,
15548
- data: err.response?.data
15549
- }
15550
- };
15551
- }
15552
- const message = err instanceof Error ? err.message : String(err);
15553
- return { error: { message } };
15554
- } finally {
15555
- Unregister(cancelId);
15556
- }
15557
- }
15558
- function Get(urlOrConfig, config) {
15559
- if (typeof urlOrConfig === "string") {
15560
- return Request({ ...config, method: "GET", url: urlOrConfig });
15561
- }
15562
- return Request({ ...urlOrConfig, method: "GET" });
15563
- }
15564
-
15565
15503
  // src/debugger/debugger.ts
15504
+ var _http2 = axios_default.create();
15566
15505
  var STORAGE_PREFIX = "__snackkit_debugger__";
15567
15506
  var KEY_GATEWAY = `${STORAGE_PREFIX}gateway`;
15568
15507
  var KEY_TYPE = `${STORAGE_PREFIX}type`;
@@ -16283,19 +16222,19 @@ var SnackKit = (function (exports, crypto2, url, http, https, http2, util2, zlib
16283
16222
  async loadServers(gwUrl) {
16284
16223
  this.setHeader("loading");
16285
16224
  this.setFooter(T.loading(), "");
16286
- const result = await Get(`${gwUrl}/web-debug/host/list`, {
16287
- cache: true,
16288
- timeout: this.options.timeout
16289
- });
16290
- if (result.error) {
16225
+ try {
16226
+ const res = await _http2.get(`${gwUrl}/web-debug/host/list`, {
16227
+ timeout: this.options.timeout
16228
+ });
16229
+ this.servers = res.data ?? [];
16230
+ this.renderTypeOptions();
16231
+ this.setHeader("ok");
16232
+ this.setFooter(T.loaded(this.servers.length), "ok");
16233
+ } catch (err) {
16234
+ const message = err instanceof Error ? err.message : String(err);
16291
16235
  this.setHeader("err");
16292
- this.setFooter(T.loadFailed(result.error.message), "err");
16293
- return;
16236
+ this.setFooter(T.loadFailed(message), "err");
16294
16237
  }
16295
- this.servers = result.data ?? [];
16296
- this.renderTypeOptions();
16297
- this.setHeader("ok");
16298
- this.setFooter(T.loaded(this.servers.length), "ok");
16299
16238
  }
16300
16239
  /** 渲染标签选项 */
16301
16240
  renderTypeOptions() {
@@ -16447,6 +16386,6 @@ var SnackKit = (function (exports, crypto2, url, http, https, http2, util2, zlib
16447
16386
 
16448
16387
  return exports;
16449
16388
 
16450
- })({}, crypto2, url, http, https, http2, util2, zlib, stream3, events);
16389
+ })({}, crypto, url, http, https, http2, util2, zlib, stream3, events);
16451
16390
  //# sourceMappingURL=debugger.global.js.map
16452
16391
  //# sourceMappingURL=debugger.global.js.map