@vlian/framework 1.2.19 → 1.2.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/analytics.umd.js +208 -2395
- package/dist/analytics.umd.js.map +1 -1
- package/dist/core/error/ErrorHandler.cjs.map +1 -1
- package/dist/core/error/ErrorHandler.d.ts +1 -1
- package/dist/core/error/ErrorHandler.js.map +1 -1
- package/dist/core/index.cjs +0 -1
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.ts +1 -2
- package/dist/core/index.js +0 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/initialization/index.cjs.map +1 -1
- package/dist/core/initialization/index.d.ts +1 -1
- package/dist/core/initialization/index.js.map +1 -1
- package/dist/core/initialization/initialization.cjs +2 -147
- package/dist/core/initialization/initialization.cjs.map +1 -1
- package/dist/core/initialization/initialization.d.ts +0 -57
- package/dist/core/initialization/initialization.js +2 -148
- package/dist/core/initialization/initialization.js.map +1 -1
- package/dist/core/kernel/startKernel.cjs +1 -2
- package/dist/core/kernel/startKernel.cjs.map +1 -1
- package/dist/core/kernel/startKernel.js +1 -2
- package/dist/core/kernel/startKernel.js.map +1 -1
- package/dist/core/plugin.cjs +16 -16
- package/dist/core/plugin.cjs.map +1 -1
- package/dist/core/plugin.d.ts +5 -1
- package/dist/core/plugin.js +17 -17
- package/dist/core/plugin.js.map +1 -1
- package/dist/core/router/monitoring/RouterMonitoring.cjs +1 -1
- package/dist/core/router/monitoring/RouterMonitoring.cjs.map +1 -1
- package/dist/core/router/monitoring/RouterMonitoring.js +1 -1
- package/dist/core/router/monitoring/RouterMonitoring.js.map +1 -1
- package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.cjs +13 -8
- package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.cjs.map +1 -1
- package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.js +13 -8
- package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.js.map +1 -1
- package/dist/core/router/utils/adapters/react-router/transform.cjs +4 -0
- package/dist/core/router/utils/adapters/react-router/transform.cjs.map +1 -1
- package/dist/core/router/utils/adapters/react-router/transform.js +4 -0
- package/dist/core/router/utils/adapters/react-router/transform.js.map +1 -1
- package/dist/core/startup/initializeServices.cjs +1 -1
- package/dist/core/startup/initializeServices.cjs.map +1 -1
- package/dist/core/startup/initializeServices.d.ts +1 -1
- package/dist/core/startup/initializeServices.js +1 -1
- package/dist/core/startup/initializeServices.js.map +1 -1
- package/dist/core/startup/performanceTracker.cjs.map +1 -1
- package/dist/core/startup/performanceTracker.d.ts +1 -1
- package/dist/core/startup/performanceTracker.js.map +1 -1
- package/dist/core/startup/renderApp.cjs +1 -1
- package/dist/core/startup/renderApp.cjs.map +1 -1
- package/dist/core/startup/renderApp.d.ts +1 -1
- package/dist/core/startup/renderApp.js +1 -1
- package/dist/core/startup/renderApp.js.map +1 -1
- package/dist/core/startup/startApp.cjs +2 -4
- package/dist/core/startup/startApp.cjs.map +1 -1
- package/dist/core/startup/startApp.js +3 -5
- package/dist/core/startup/startApp.js.map +1 -1
- package/dist/core/types.d.ts +2 -6
- package/dist/core/types.js.map +1 -1
- package/dist/index.cjs +15 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.js +5 -4
- package/dist/index.js.map +1 -1
- package/dist/index.umd.js +11758 -32895
- package/dist/index.umd.js.map +1 -1
- package/dist/kernel/constants.cjs +67 -0
- package/dist/kernel/constants.cjs.map +1 -0
- package/dist/kernel/constants.d.ts +5 -0
- package/dist/kernel/constants.js +43 -0
- package/dist/kernel/constants.js.map +1 -0
- package/dist/kernel/index.cjs +40 -0
- package/dist/kernel/index.cjs.map +1 -0
- package/dist/kernel/index.d.ts +3 -0
- package/dist/kernel/index.js +4 -0
- package/dist/kernel/index.js.map +1 -0
- package/dist/kernel/kernel.cjs +296 -0
- package/dist/kernel/kernel.cjs.map +1 -0
- package/dist/kernel/kernel.d.ts +40 -0
- package/dist/kernel/kernel.js +272 -0
- package/dist/kernel/kernel.js.map +1 -0
- package/dist/kernel/manager/cacheManager.cjs +46 -0
- package/dist/kernel/manager/cacheManager.cjs.map +1 -0
- package/dist/kernel/manager/cacheManager.d.ts +6 -0
- package/dist/kernel/manager/cacheManager.js +36 -0
- package/dist/kernel/manager/cacheManager.js.map +1 -0
- package/dist/kernel/manager/i18nManager.cjs +68 -0
- package/dist/kernel/manager/i18nManager.cjs.map +1 -0
- package/dist/kernel/manager/i18nManager.d.ts +8 -0
- package/dist/kernel/manager/i18nManager.js +58 -0
- package/dist/kernel/manager/i18nManager.js.map +1 -0
- package/dist/kernel/manager/index.cjs +30 -0
- package/dist/kernel/manager/index.cjs.map +1 -0
- package/dist/kernel/manager/index.d.ts +4 -0
- package/dist/kernel/manager/index.js +6 -0
- package/dist/kernel/manager/index.js.map +1 -0
- package/dist/kernel/manager/loggerManager.cjs +70 -0
- package/dist/kernel/manager/loggerManager.cjs.map +1 -0
- package/dist/kernel/manager/loggerManager.d.ts +14 -0
- package/dist/kernel/manager/loggerManager.js +60 -0
- package/dist/kernel/manager/loggerManager.js.map +1 -0
- package/dist/kernel/manager/persistence.cjs +93 -0
- package/dist/kernel/manager/persistence.cjs.map +1 -0
- package/dist/kernel/manager/persistence.d.ts +3 -0
- package/dist/kernel/manager/persistence.js +75 -0
- package/dist/kernel/manager/persistence.js.map +1 -0
- package/dist/kernel/manager/themeManager.cjs +85 -0
- package/dist/kernel/manager/themeManager.cjs.map +1 -0
- package/dist/kernel/manager/themeManager.d.ts +9 -0
- package/dist/kernel/manager/themeManager.js +75 -0
- package/dist/kernel/manager/themeManager.js.map +1 -0
- package/dist/kernel/types.cjs.map +1 -0
- package/dist/kernel/types.d.ts +72 -0
- package/dist/kernel/types.js.map +1 -0
- package/dist/library/storage/index.cjs +1 -1
- package/dist/library/storage/index.cjs.map +1 -1
- package/dist/library/storage/index.d.ts +1 -0
- package/dist/library/storage/index.js +1 -1
- package/dist/library/storage/index.js.map +1 -1
- package/dist/request/adapter.d.ts +1 -0
- package/dist/request/core.d.ts +1 -0
- package/dist/request/index.d.ts +1 -42
- package/dist/request/plugin/csrfPlugin.d.ts +2 -2
- package/dist/request/plugin/queue.d.ts +2 -2
- package/dist/request/plugin.d.ts +1 -0
- package/dist/request/runtime.d.ts +1 -0
- package/dist/request/types.d.ts +1 -394
- package/dist/request/utils.d.ts +1 -0
- package/dist/state.umd.js +1 -1
- package/dist/utils/csrf.cjs +13 -152
- package/dist/utils/csrf.cjs.map +1 -1
- package/dist/utils/csrf.d.ts +1 -72
- package/dist/utils/csrf.js +1 -142
- package/dist/utils/csrf.js.map +1 -1
- package/dist/utils/errors/ErrorCodes.cjs +6 -76
- package/dist/utils/errors/ErrorCodes.cjs.map +1 -1
- package/dist/utils/errors/ErrorCodes.d.ts +1 -45
- package/dist/utils/errors/ErrorCodes.js +1 -84
- package/dist/utils/errors/ErrorCodes.js.map +1 -1
- package/dist/utils/errors.cjs +15 -344
- package/dist/utils/errors.cjs.map +1 -1
- package/dist/utils/errors.d.ts +1 -183
- package/dist/utils/errors.js +1 -352
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/logger.cjs +5 -374
- package/dist/utils/logger.cjs.map +1 -1
- package/dist/utils/logger.d.ts +2 -189
- package/dist/utils/logger.js +1 -379
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/logger.types.cjs +3 -12
- package/dist/utils/logger.types.cjs.map +1 -1
- package/dist/utils/logger.types.d.ts +2 -57
- package/dist/utils/logger.types.js +1 -10
- package/dist/utils/logger.types.js.map +1 -1
- package/dist/utils/monitoring.cjs +11 -302
- package/dist/utils/monitoring.cjs.map +1 -1
- package/dist/utils/monitoring.d.ts +1 -163
- package/dist/utils/monitoring.js +1 -294
- package/dist/utils/monitoring.js.map +1 -1
- package/dist/utils/performance.cjs +5 -352
- package/dist/utils/performance.cjs.map +1 -1
- package/dist/utils/performance.d.ts +2 -246
- package/dist/utils/performance.js +1 -354
- package/dist/utils/performance.js.map +1 -1
- package/dist/utils/resourceLoader.cjs +5 -303
- package/dist/utils/resourceLoader.cjs.map +1 -1
- package/dist/utils/resourceLoader.d.ts +2 -130
- package/dist/utils/resourceLoader.js +1 -305
- package/dist/utils/resourceLoader.js.map +1 -1
- package/dist/utils/runtimeSecurity.cjs +2 -140
- package/dist/utils/runtimeSecurity.cjs.map +1 -1
- package/dist/utils/runtimeSecurity.d.ts +2 -104
- package/dist/utils/runtimeSecurity.js +1 -141
- package/dist/utils/runtimeSecurity.js.map +1 -1
- package/dist/utils/security.cjs +3 -314
- package/dist/utils/security.cjs.map +1 -1
- package/dist/utils/security.d.ts +2 -80
- package/dist/utils/security.js +1 -311
- package/dist/utils/security.js.map +1 -1
- package/dist/utils/traceId.cjs +10 -111
- package/dist/utils/traceId.cjs.map +1 -1
- package/dist/utils/traceId.d.ts +1 -63
- package/dist/utils/traceId.js +1 -116
- package/dist/utils/traceId.js.map +1 -1
- package/dist/utils/validation.cjs +3 -173
- package/dist/utils/validation.cjs.map +1 -1
- package/dist/utils/validation.d.ts +2 -110
- package/dist/utils/validation.js +1 -175
- package/dist/utils/validation.js.map +1 -1
- package/package.json +98 -13
- package/dist/core/ui-adapter/adapters.cjs +0 -45
- package/dist/core/ui-adapter/adapters.cjs.map +0 -1
- package/dist/core/ui-adapter/adapters.d.ts +0 -4
- package/dist/core/ui-adapter/adapters.js +0 -27
- package/dist/core/ui-adapter/adapters.js.map +0 -1
- package/dist/core/ui-adapter/index.cjs +0 -21
- package/dist/core/ui-adapter/index.cjs.map +0 -1
- package/dist/core/ui-adapter/index.d.ts +0 -2
- package/dist/core/ui-adapter/index.js +0 -3
- package/dist/core/ui-adapter/index.js.map +0 -1
- package/dist/core/ui-adapter/types.cjs.map +0 -1
- package/dist/core/ui-adapter/types.d.ts +0 -24
- package/dist/core/ui-adapter/types.js.map +0 -1
- package/dist/request/adapter/RequestAdapter.cjs +0 -78
- package/dist/request/adapter/RequestAdapter.cjs.map +0 -1
- package/dist/request/adapter/axiosAdapter.cjs +0 -164
- package/dist/request/adapter/axiosAdapter.cjs.map +0 -1
- package/dist/request/adapter/fetchAdapter.cjs +0 -134
- package/dist/request/adapter/fetchAdapter.cjs.map +0 -1
- package/dist/request/adapter/index.cjs +0 -80
- package/dist/request/adapter/index.cjs.map +0 -1
- package/dist/request/adapter/kyAdapter.cjs +0 -191
- package/dist/request/adapter/kyAdapter.cjs.map +0 -1
- package/dist/request/adapter/undiciAdapter.cjs +0 -213
- package/dist/request/adapter/undiciAdapter.cjs.map +0 -1
- package/dist/request/core/RequestClient.cjs +0 -558
- package/dist/request/core/RequestClient.cjs.map +0 -1
- package/dist/request/core/index.cjs +0 -15
- package/dist/request/core/index.cjs.map +0 -1
- package/dist/request/index.cjs +0 -149
- package/dist/request/index.cjs.map +0 -1
- package/dist/request/plugin/RequestPlugin.cjs +0 -218
- package/dist/request/plugin/RequestPlugin.cjs.map +0 -1
- package/dist/request/plugin/cache.cjs +0 -269
- package/dist/request/plugin/cache.cjs.map +0 -1
- package/dist/request/plugin/csrfPlugin.cjs +0 -40
- package/dist/request/plugin/csrfPlugin.cjs.map +0 -1
- package/dist/request/plugin/index.cjs +0 -53
- package/dist/request/plugin/index.cjs.map +0 -1
- package/dist/request/plugin/monitoring.cjs +0 -216
- package/dist/request/plugin/monitoring.cjs.map +0 -1
- package/dist/request/plugin/queue.cjs +0 -140
- package/dist/request/plugin/queue.cjs.map +0 -1
- package/dist/request/plugin/retry.cjs +0 -98
- package/dist/request/plugin/retry.cjs.map +0 -1
- package/dist/request/plugin/validation.cjs +0 -121
- package/dist/request/plugin/validation.cjs.map +0 -1
- package/dist/request/runtime/RequestContext.cjs +0 -77
- package/dist/request/runtime/RequestContext.cjs.map +0 -1
- package/dist/request/runtime/index.cjs +0 -32
- package/dist/request/runtime/index.cjs.map +0 -1
- package/dist/request/types.cjs +0 -112
- package/dist/request/types.cjs.map +0 -1
- package/dist/request/utils/RequestQueueManager.cjs +0 -168
- package/dist/request/utils/RequestQueueManager.cjs.map +0 -1
- package/dist/request/utils/dependencyCheck.cjs +0 -237
- package/dist/request/utils/dependencyCheck.cjs.map +0 -1
- package/dist/request/utils/index.cjs +0 -30
- package/dist/request/utils/index.cjs.map +0 -1
- package/dist/request.umd.js +0 -5392
- package/dist/request.umd.js.map +0 -1
- /package/dist/{core/ui-adapter → kernel}/types.cjs +0 -0
- /package/dist/{core/ui-adapter → kernel}/types.js +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/request/adapter/undiciAdapter.ts"],"sourcesContent":["/**\n * Undici 适配器\n * \n * 基于 undici 库的适配器实现(Node.js 环境,高性能)\n */\n\nimport type { RequestAdapter } from './RequestAdapter';\nimport type { RequestOptions, Response } from '../types';\n\n/**\n * 创建 Undici 适配器\n */\nexport async function undiciAdapter(): Promise<RequestAdapter> {\n // 动态导入 undici(按需加载)\n // 使用多种方式尝试导入,以兼容不同的构建工具\n let undici: any;\n let importError: unknown = null;\n\n // 方法1:使用 Function 构造函数(避免构建时解析)\n try {\n // @ts-ignore - undici 是可选依赖\n undici = await new Function('return import(\"undici\")')();\n } catch (error) {\n importError = error;\n // 方法2:直接使用动态导入(某些构建工具可能需要这种方式)\n try {\n // @ts-ignore - undici 是可选依赖\n undici = await import('undici');\n } catch (error2) {\n importError = error2;\n }\n }\n\n // 如果两种方法都失败,检查是否是模块未找到错误\n if (!undici || !undici.request) {\n if (importError instanceof Error) {\n const errorMessage = importError.message.toLowerCase();\n // 检查是否是模块未找到相关的错误\n const isModuleNotFound = \n errorMessage.includes('cannot find module') ||\n errorMessage.includes('cannot resolve') ||\n errorMessage.includes('module not found') ||\n errorMessage.includes('failed to resolve') ||\n errorMessage.includes('does not exist') ||\n errorMessage.includes('failed to fetch dynamically imported module') ||\n errorMessage.includes('loading chunk') ||\n errorMessage.includes('networkerror') ||\n (errorMessage.includes('undici') && (\n errorMessage.includes('resolve') ||\n errorMessage.includes('find') ||\n errorMessage.includes('not found')\n ));\n\n if (isModuleNotFound) {\n // 模块未找到,抛出友好的依赖缺失错误\n const { createDependencyError } = await import('../utils/dependencyCheck');\n const errorMessage = createDependencyError('undici', {\n adapterName: 'undici',\n environment: 'node',\n });\n throw new Error(errorMessage);\n }\n }\n throw new Error('undici 库导入失败,请检查安装是否正确');\n }\n\n return {\n name: 'undici',\n capabilities: {\n supportsAbort: true,\n supportsTimeout: true,\n supportsProgress: false,\n supportsInterceptors: false,\n },\n\n async request<TResponse = unknown>(options: RequestOptions<TResponse>): Promise<Response<TResponse>> {\n const { url, method = 'GET', headers = {}, query, body, timeout, signal } = options;\n\n // 构建完整 URL\n let fullUrl = url;\n if (query) {\n const searchParams = new URLSearchParams();\n for (const [key, value] of Object.entries(query)) {\n if (value !== null && value !== undefined) {\n searchParams.append(key, String(value));\n }\n }\n const queryString = searchParams.toString();\n if (queryString) {\n fullUrl += (fullUrl.includes('?') ? '&' : '?') + queryString;\n }\n }\n\n // 构建请求头\n const requestHeaders: Record<string, string> = {};\n for (const [key, value] of Object.entries(headers)) {\n requestHeaders[key] = String(value);\n }\n\n // 构建请求体\n let requestBody: string | Buffer | undefined;\n if (body !== undefined && body !== null) {\n if (typeof body === 'string') {\n requestBody = body;\n } else if (body instanceof ArrayBuffer) {\n requestBody = Buffer.from(body);\n } else if (Buffer.isBuffer(body)) {\n requestBody = body;\n } else {\n // 对象转换为 JSON\n requestHeaders['Content-Type'] = requestHeaders['Content-Type'] || 'application/json';\n requestBody = JSON.stringify(body);\n }\n }\n\n // 构建 undici 选项\n // @ts-ignore - undici 类型定义\n const undiciOptions: any = {\n method: method as any,\n headers: requestHeaders,\n body: requestBody,\n signal: signal,\n };\n\n // 如果设置了超时,使用 AbortController\n let abortController: AbortController | undefined;\n let timeoutId: NodeJS.Timeout | undefined;\n\n if (timeout && timeout > 0) {\n abortController = new AbortController();\n timeoutId = setTimeout(() => {\n abortController!.abort();\n }, timeout);\n undiciOptions.signal = abortController.signal;\n }\n\n try {\n // 执行请求\n const undiciResponse = await undici.request(fullUrl, undiciOptions);\n\n // 解析响应数据\n let data: TResponse;\n const responseType = options.responseType || 'json';\n\n switch (responseType) {\n case 'text':\n data = (await undiciResponse.body.text()) as TResponse;\n break;\n case 'blob':\n data = (await undiciResponse.body.blob()) as TResponse;\n break;\n case 'arrayBuffer':\n data = (await undiciResponse.body.arrayBuffer()) as TResponse;\n break;\n case 'formData':\n data = (await undiciResponse.body.formData()) as TResponse;\n break;\n case 'json':\n default:\n try {\n data = await undiciResponse.body.json() as TResponse;\n } catch {\n // 如果 JSON 解析失败,返回空对象\n data = {} as TResponse;\n }\n break;\n }\n\n // 构建响应头对象\n const responseHeaders: Record<string, string> = {};\n for (const [key, value] of Object.entries(undiciResponse.headers)) {\n responseHeaders[key] = Array.isArray(value) ? value.join(', ') : String(value);\n }\n\n // 检查 HTTP 状态码\n if (undiciResponse.statusCode >= 400) {\n throw new Error(`HTTP ${undiciResponse.statusCode} ${undiciResponse.statusText || ''}`);\n }\n\n // 返回响应对象\n return {\n data,\n status: undiciResponse.statusCode,\n statusText: undiciResponse.statusText || '',\n headers: responseHeaders,\n raw: undiciResponse,\n };\n } catch (error) {\n // 清理超时定时器\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n // 重新抛出错误\n throw error;\n }\n },\n };\n}\n"],"names":["undiciAdapter","undici","importError","Function","error","error2","request","Error","errorMessage","message","toLowerCase","isModuleNotFound","includes","createDependencyError","adapterName","environment","name","capabilities","supportsAbort","supportsTimeout","supportsProgress","supportsInterceptors","options","url","method","headers","query","body","timeout","signal","fullUrl","searchParams","URLSearchParams","key","value","Object","entries","undefined","append","String","queryString","toString","requestHeaders","requestBody","ArrayBuffer","Buffer","from","isBuffer","JSON","stringify","undiciOptions","abortController","timeoutId","AbortController","setTimeout","abort","undiciResponse","data","responseType","text","blob","arrayBuffer","formData","json","responseHeaders","Array","isArray","join","statusCode","statusText","status","raw","clearTimeout"],"mappings":"AAAA;;;;CAIC;;;;+BAQqBA;;;eAAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAf,eAAeA;IACpB,oBAAoB;IACpB,wBAAwB;IACxB,IAAIC;IACJ,IAAIC,cAAuB;IAE3B,gCAAgC;IAChC,IAAI;QACF,4BAA4B;QAC5BD,SAAS,MAAM,IAAIE,SAAS;IAC9B,EAAE,OAAOC,OAAO;QACdF,cAAcE;QACd,+BAA+B;QAC/B,IAAI;YACF,4BAA4B;YAC5BH,SAAS,MAAM,mEAAA,QAAO;QACxB,EAAE,OAAOI,QAAQ;YACfH,cAAcG;QAChB;IACF;IAEA,yBAAyB;IACzB,IAAI,CAACJ,UAAU,CAACA,OAAOK,OAAO,EAAE;QAC9B,IAAIJ,uBAAuBK,OAAO;YAChC,MAAMC,eAAeN,YAAYO,OAAO,CAACC,WAAW;YACpD,kBAAkB;YAClB,MAAMC,mBACJH,aAAaI,QAAQ,CAAC,yBACtBJ,aAAaI,QAAQ,CAAC,qBACtBJ,aAAaI,QAAQ,CAAC,uBACtBJ,aAAaI,QAAQ,CAAC,wBACtBJ,aAAaI,QAAQ,CAAC,qBACtBJ,aAAaI,QAAQ,CAAC,kDACtBJ,aAAaI,QAAQ,CAAC,oBACtBJ,aAAaI,QAAQ,CAAC,mBACrBJ,aAAaI,QAAQ,CAAC,aACrBJ,CAAAA,aAAaI,QAAQ,CAAC,cACtBJ,aAAaI,QAAQ,CAAC,WACtBJ,aAAaI,QAAQ,CAAC,YAAW;YAGrC,IAAID,kBAAkB;gBACpB,oBAAoB;gBACpB,MAAM,EAAEE,qBAAqB,EAAE,GAAG,MAAM,mEAAA,QAAO;gBAC/C,MAAML,eAAeK,sBAAsB,UAAU;oBACnDC,aAAa;oBACbC,aAAa;gBACf;gBACA,MAAM,IAAIR,MAAMC;YAClB;QACF;QACA,MAAM,IAAID,MAAM;IAClB;IAEA,OAAO;QACLS,MAAM;QACNC,cAAc;YACZC,eAAe;YACfC,iBAAiB;YACjBC,kBAAkB;YAClBC,sBAAsB;QACxB;QAEA,MAAMf,SAA6BgB,OAAkC;YACnE,MAAM,EAAEC,GAAG,EAAEC,SAAS,KAAK,EAAEC,UAAU,CAAC,CAAC,EAAEC,KAAK,EAAEC,IAAI,EAAEC,OAAO,EAAEC,MAAM,EAAE,GAAGP;YAE5E,WAAW;YACX,IAAIQ,UAAUP;YACd,IAAIG,OAAO;gBACT,MAAMK,eAAe,IAAIC;gBACzB,KAAK,MAAM,CAACC,KAAKC,MAAM,IAAIC,OAAOC,OAAO,CAACV,OAAQ;oBAChD,IAAIQ,UAAU,QAAQA,UAAUG,WAAW;wBACzCN,aAAaO,MAAM,CAACL,KAAKM,OAAOL;oBAClC;gBACF;gBACA,MAAMM,cAAcT,aAAaU,QAAQ;gBACzC,IAAID,aAAa;oBACfV,WAAW,AAACA,CAAAA,QAAQlB,QAAQ,CAAC,OAAO,MAAM,GAAE,IAAK4B;gBACnD;YACF;YAEA,QAAQ;YACR,MAAME,iBAAyC,CAAC;YAChD,KAAK,MAAM,CAACT,KAAKC,MAAM,IAAIC,OAAOC,OAAO,CAACX,SAAU;gBAClDiB,cAAc,CAACT,IAAI,GAAGM,OAAOL;YAC/B;YAEA,QAAQ;YACR,IAAIS;YACJ,IAAIhB,SAASU,aAAaV,SAAS,MAAM;gBACvC,IAAI,OAAOA,SAAS,UAAU;oBAC5BgB,cAAchB;gBAChB,OAAO,IAAIA,gBAAgBiB,aAAa;oBACtCD,cAAcE,OAAOC,IAAI,CAACnB;gBAC5B,OAAO,IAAIkB,OAAOE,QAAQ,CAACpB,OAAO;oBAChCgB,cAAchB;gBAChB,OAAO;oBACL,aAAa;oBACbe,cAAc,CAAC,eAAe,GAAGA,cAAc,CAAC,eAAe,IAAI;oBACnEC,cAAcK,KAAKC,SAAS,CAACtB;gBAC/B;YACF;YAEA,eAAe;YACf,2BAA2B;YAC3B,MAAMuB,gBAAqB;gBACzB1B,QAAQA;gBACRC,SAASiB;gBACTf,MAAMgB;gBACNd,QAAQA;YACV;YAEA,6BAA6B;YAC7B,IAAIsB;YACJ,IAAIC;YAEJ,IAAIxB,WAAWA,UAAU,GAAG;gBAC1BuB,kBAAkB,IAAIE;gBACtBD,YAAYE,WAAW;oBACrBH,gBAAiBI,KAAK;gBACxB,GAAG3B;gBACHsB,cAAcrB,MAAM,GAAGsB,gBAAgBtB,MAAM;YAC/C;YAEA,IAAI;gBACF,OAAO;gBACP,MAAM2B,iBAAiB,MAAMvD,OAAOK,OAAO,CAACwB,SAASoB;gBAErD,SAAS;gBACT,IAAIO;gBACJ,MAAMC,eAAepC,QAAQoC,YAAY,IAAI;gBAE7C,OAAQA;oBACN,KAAK;wBACHD,OAAQ,MAAMD,eAAe7B,IAAI,CAACgC,IAAI;wBACtC;oBACF,KAAK;wBACHF,OAAQ,MAAMD,eAAe7B,IAAI,CAACiC,IAAI;wBACtC;oBACF,KAAK;wBACHH,OAAQ,MAAMD,eAAe7B,IAAI,CAACkC,WAAW;wBAC7C;oBACF,KAAK;wBACHJ,OAAQ,MAAMD,eAAe7B,IAAI,CAACmC,QAAQ;wBAC1C;oBACF,KAAK;oBACL;wBACE,IAAI;4BACFL,OAAO,MAAMD,eAAe7B,IAAI,CAACoC,IAAI;wBACvC,EAAE,OAAM;4BACN,qBAAqB;4BACrBN,OAAO,CAAC;wBACV;wBACA;gBACJ;gBAEA,UAAU;gBACV,MAAMO,kBAA0C,CAAC;gBACjD,KAAK,MAAM,CAAC/B,KAAKC,MAAM,IAAIC,OAAOC,OAAO,CAACoB,eAAe/B,OAAO,EAAG;oBACjEuC,eAAe,CAAC/B,IAAI,GAAGgC,MAAMC,OAAO,CAAChC,SAASA,MAAMiC,IAAI,CAAC,QAAQ5B,OAAOL;gBAC1E;gBAEA,cAAc;gBACd,IAAIsB,eAAeY,UAAU,IAAI,KAAK;oBACpC,MAAM,IAAI7D,MAAM,CAAC,KAAK,EAAEiD,eAAeY,UAAU,CAAC,CAAC,EAAEZ,eAAea,UAAU,IAAI,IAAI;gBACxF;gBAEA,SAAS;gBACT,OAAO;oBACLZ;oBACAa,QAAQd,eAAeY,UAAU;oBACjCC,YAAYb,eAAea,UAAU,IAAI;oBACzC5C,SAASuC;oBACTO,KAAKf;gBACP;YACF,EAAE,OAAOpD,OAAO;gBACd,UAAU;gBACV,IAAIgD,WAAW;oBACboB,aAAapB;gBACf;gBAEA,SAAS;gBACT,MAAMhD;YACR;QACF;IACF;AACF"}
|
|
@@ -1,558 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 请求客户端核心实现
|
|
3
|
-
*
|
|
4
|
-
* 这是请求库的核心,负责协调适配器和插件系统
|
|
5
|
-
*/ "use strict";
|
|
6
|
-
Object.defineProperty(exports, "__esModule", {
|
|
7
|
-
value: true
|
|
8
|
-
});
|
|
9
|
-
Object.defineProperty(exports, "RequestClient", {
|
|
10
|
-
enumerable: true,
|
|
11
|
-
get: function() {
|
|
12
|
-
return RequestClient;
|
|
13
|
-
}
|
|
14
|
-
});
|
|
15
|
-
const _types = require("../types");
|
|
16
|
-
const _RequestAdapter = require("../adapter/RequestAdapter");
|
|
17
|
-
const _RequestPlugin = require("../plugin/RequestPlugin");
|
|
18
|
-
const _RequestContext = require("../runtime/RequestContext");
|
|
19
|
-
const _RequestQueueManager = require("../utils/RequestQueueManager");
|
|
20
|
-
function _define_property(obj, key, value) {
|
|
21
|
-
if (key in obj) {
|
|
22
|
-
Object.defineProperty(obj, key, {
|
|
23
|
-
value: value,
|
|
24
|
-
enumerable: true,
|
|
25
|
-
configurable: true,
|
|
26
|
-
writable: true
|
|
27
|
-
});
|
|
28
|
-
} else {
|
|
29
|
-
obj[key] = value;
|
|
30
|
-
}
|
|
31
|
-
return obj;
|
|
32
|
-
}
|
|
33
|
-
function _getRequireWildcardCache(nodeInterop) {
|
|
34
|
-
if (typeof WeakMap !== "function") return null;
|
|
35
|
-
var cacheBabelInterop = new WeakMap();
|
|
36
|
-
var cacheNodeInterop = new WeakMap();
|
|
37
|
-
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
38
|
-
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
39
|
-
})(nodeInterop);
|
|
40
|
-
}
|
|
41
|
-
function _interop_require_wildcard(obj, nodeInterop) {
|
|
42
|
-
if (!nodeInterop && obj && obj.__esModule) {
|
|
43
|
-
return obj;
|
|
44
|
-
}
|
|
45
|
-
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
46
|
-
return {
|
|
47
|
-
default: obj
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
var cache = _getRequireWildcardCache(nodeInterop);
|
|
51
|
-
if (cache && cache.has(obj)) {
|
|
52
|
-
return cache.get(obj);
|
|
53
|
-
}
|
|
54
|
-
var newObj = {
|
|
55
|
-
__proto__: null
|
|
56
|
-
};
|
|
57
|
-
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
58
|
-
for(var key in obj){
|
|
59
|
-
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
60
|
-
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
61
|
-
if (desc && (desc.get || desc.set)) {
|
|
62
|
-
Object.defineProperty(newObj, key, desc);
|
|
63
|
-
} else {
|
|
64
|
-
newObj[key] = obj[key];
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
newObj.default = obj;
|
|
69
|
-
if (cache) {
|
|
70
|
-
cache.set(obj, newObj);
|
|
71
|
-
}
|
|
72
|
-
return newObj;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* 适配器环境要求映射
|
|
76
|
-
*
|
|
77
|
-
* 注意:axios 可以在浏览器和 Node.js 环境中使用,因此不在此映射中限制
|
|
78
|
-
*/ const ADAPTER_ENVIRONMENT_MAP = {
|
|
79
|
-
fetch: 'browser',
|
|
80
|
-
ky: 'browser',
|
|
81
|
-
undici: 'node'
|
|
82
|
-
};
|
|
83
|
-
/**
|
|
84
|
-
* 检测当前运行环境
|
|
85
|
-
*
|
|
86
|
-
* @returns 运行环境类型
|
|
87
|
-
*/ function detectEnvironment() {
|
|
88
|
-
const isBrowser = typeof window !== 'undefined';
|
|
89
|
-
const isNode = typeof process !== 'undefined' && process.versions?.node;
|
|
90
|
-
if (isBrowser) {
|
|
91
|
-
return 'browser';
|
|
92
|
-
} else if (isNode) {
|
|
93
|
-
return 'node';
|
|
94
|
-
}
|
|
95
|
-
return 'unknown';
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* 获取适配器的推荐替代方案
|
|
99
|
-
*
|
|
100
|
-
* @param currentEnv - 当前环境
|
|
101
|
-
* @returns 推荐的适配器列表
|
|
102
|
-
*/ function getRecommendedAdapters(currentEnv) {
|
|
103
|
-
if (currentEnv === 'browser') {
|
|
104
|
-
return [
|
|
105
|
-
'fetch',
|
|
106
|
-
'ky',
|
|
107
|
-
'axios'
|
|
108
|
-
];
|
|
109
|
-
} else if (currentEnv === 'node') {
|
|
110
|
-
return [
|
|
111
|
-
'axios',
|
|
112
|
-
'undici'
|
|
113
|
-
];
|
|
114
|
-
}
|
|
115
|
-
return [];
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* 创建环境不匹配错误消息
|
|
119
|
-
*
|
|
120
|
-
* @param adapterName - 适配器名称
|
|
121
|
-
* @param adapterEnv - 适配器要求的环境
|
|
122
|
-
* @param currentEnv - 当前环境
|
|
123
|
-
* @returns 错误消息
|
|
124
|
-
*/ function createEnvironmentMismatchError(adapterName, adapterEnv, currentEnv) {
|
|
125
|
-
const recommendedAdapters = getRecommendedAdapters(currentEnv);
|
|
126
|
-
const recommendedList = recommendedAdapters.length > 0 ? recommendedAdapters.map((name)=>`"${name}"`).join(' 或 ') : '其他适配器';
|
|
127
|
-
const adapterEnvName = adapterEnv === 'browser' ? '浏览器' : 'Node.js';
|
|
128
|
-
const currentEnvName = currentEnv === 'browser' ? '浏览器' : currentEnv === 'node' ? 'Node.js' : '未知';
|
|
129
|
-
const firstRecommended = recommendedAdapters[0] || 'fetch';
|
|
130
|
-
const firstRecommendedFactory = firstRecommended === 'fetch' ? 'fetchAdapter' : firstRecommended === 'ky' ? 'kyAdapter' : firstRecommended === 'axios' ? 'axiosAdapter' : 'undiciAdapter';
|
|
131
|
-
let message = `\n❌ 适配器环境不匹配\n\n`;
|
|
132
|
-
message += `适配器 "${adapterName}" 要求运行在 ${adapterEnvName} 环境中,\n`;
|
|
133
|
-
message += `但当前运行在 ${currentEnvName} 环境中。\n\n`;
|
|
134
|
-
message += `💡 建议:请使用适合当前环境的适配器,如 ${recommendedList}。\n\n`;
|
|
135
|
-
message += `📝 使用示例:\n\n`;
|
|
136
|
-
message += ` // 方式 1:使用适配器名称字符串\n`;
|
|
137
|
-
message += ` import { createRequestClient } from '@vlian/framework/request';\n\n`;
|
|
138
|
-
message += ` const client = await createRequestClient({\n`;
|
|
139
|
-
message += ` defaultAdapter: '${firstRecommended}',\n`;
|
|
140
|
-
message += ` });\n\n`;
|
|
141
|
-
message += ` // 方式 2:使用适配器工厂函数\n`;
|
|
142
|
-
message += ` import { createRequestClient, ${firstRecommendedFactory} } from '@vlian/framework/request';\n\n`;
|
|
143
|
-
message += ` const client = await createRequestClient({\n`;
|
|
144
|
-
message += ` defaultAdapter: ${firstRecommendedFactory},\n`;
|
|
145
|
-
message += ` });\n`;
|
|
146
|
-
return message;
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* 验证适配器环境是否匹配
|
|
150
|
-
*
|
|
151
|
-
* @param adapterName - 适配器名称
|
|
152
|
-
* @throws 如果环境不匹配,抛出包含友好提示的错误
|
|
153
|
-
*/ function validateAdapterEnvironment(adapterName) {
|
|
154
|
-
const adapterEnv = ADAPTER_ENVIRONMENT_MAP[adapterName];
|
|
155
|
-
if (!adapterEnv) {
|
|
156
|
-
// 未知适配器,不进行环境检查
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
const currentEnv = detectEnvironment();
|
|
160
|
-
if (currentEnv === 'unknown') {
|
|
161
|
-
// 无法检测环境,跳过检查
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
if (adapterEnv !== currentEnv) {
|
|
165
|
-
const errorMessage = createEnvironmentMismatchError(adapterName, adapterEnv, currentEnv);
|
|
166
|
-
throw new Error(errorMessage);
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
let RequestClient = class RequestClient {
|
|
170
|
-
/**
|
|
171
|
-
* 获取当前适配器名称
|
|
172
|
-
*/ getAdapterName() {
|
|
173
|
-
return this.adapterName;
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* 初始化客户端
|
|
177
|
-
*/ async initialize() {
|
|
178
|
-
// 加载默认适配器
|
|
179
|
-
await this.loadAdapter();
|
|
180
|
-
// 执行插件初始化钩子
|
|
181
|
-
const context = (0, _RequestContext.createRequestContext)({
|
|
182
|
-
url: ''
|
|
183
|
-
}, {});
|
|
184
|
-
await this.pluginManager.executeHook(_RequestPlugin.PluginLifecycleStage.INIT, context);
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* 加载适配器
|
|
188
|
-
*/ async loadAdapter() {
|
|
189
|
-
if (this.adapter) {
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
const adapterConfig = this.config.defaultAdapter;
|
|
193
|
-
if (typeof adapterConfig === 'string') {
|
|
194
|
-
// 检查适配器环境是否匹配
|
|
195
|
-
validateAdapterEnvironment(adapterConfig);
|
|
196
|
-
// 从注册表加载
|
|
197
|
-
this.adapter = await _RequestAdapter.adapterRegistry.get(adapterConfig);
|
|
198
|
-
this.adapterName = adapterConfig;
|
|
199
|
-
// 再次验证(适配器可能返回不同的名称)
|
|
200
|
-
if (this.adapter.name !== adapterConfig) {
|
|
201
|
-
validateAdapterEnvironment(this.adapter.name);
|
|
202
|
-
}
|
|
203
|
-
} else if (typeof adapterConfig === 'function') {
|
|
204
|
-
// 使用工厂函数加载
|
|
205
|
-
this.adapter = await adapterConfig();
|
|
206
|
-
this.adapterName = this.adapter.name;
|
|
207
|
-
// 验证适配器环境
|
|
208
|
-
validateAdapterEnvironment(this.adapter.name);
|
|
209
|
-
} else {
|
|
210
|
-
// 自动检测环境(自动检测的适配器不需要验证,因为已经根据环境选择了)
|
|
211
|
-
const detectedAdapter = await this.detectAdapter();
|
|
212
|
-
this.adapter = detectedAdapter.adapter;
|
|
213
|
-
this.adapterName = detectedAdapter.name;
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
/**
|
|
217
|
-
* 自动检测适配器
|
|
218
|
-
*/ async detectAdapter() {
|
|
219
|
-
// 检测运行环境
|
|
220
|
-
const isBrowser = typeof window !== 'undefined';
|
|
221
|
-
const isNode = typeof process !== 'undefined' && process.versions?.node;
|
|
222
|
-
if (isBrowser) {
|
|
223
|
-
// 浏览器环境:尝试加载 ky 适配器
|
|
224
|
-
try {
|
|
225
|
-
const { kyAdapter } = await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("../adapter/kyAdapter")));
|
|
226
|
-
const adapter = await kyAdapter();
|
|
227
|
-
return {
|
|
228
|
-
adapter,
|
|
229
|
-
name: 'ky'
|
|
230
|
-
};
|
|
231
|
-
} catch {
|
|
232
|
-
// 如果 ky 不可用,使用 fetch 适配器
|
|
233
|
-
const { fetchAdapter } = await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("../adapter/fetchAdapter")));
|
|
234
|
-
const adapter = await fetchAdapter();
|
|
235
|
-
return {
|
|
236
|
-
adapter,
|
|
237
|
-
name: 'fetch'
|
|
238
|
-
};
|
|
239
|
-
}
|
|
240
|
-
} else if (isNode) {
|
|
241
|
-
// Node.js 环境:尝试加载 axios 适配器
|
|
242
|
-
try {
|
|
243
|
-
const { axiosAdapter } = await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("../adapter/axiosAdapter")));
|
|
244
|
-
const adapter = await axiosAdapter();
|
|
245
|
-
return {
|
|
246
|
-
adapter,
|
|
247
|
-
name: 'axios'
|
|
248
|
-
};
|
|
249
|
-
} catch {
|
|
250
|
-
// 如果 axios 不可用,使用 undici 适配器
|
|
251
|
-
try {
|
|
252
|
-
const { undiciAdapter } = await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("../adapter/undiciAdapter")));
|
|
253
|
-
const adapter = await undiciAdapter();
|
|
254
|
-
return {
|
|
255
|
-
adapter,
|
|
256
|
-
name: 'undici'
|
|
257
|
-
};
|
|
258
|
-
} catch {
|
|
259
|
-
throw new Error('无法找到可用的适配器,请手动指定适配器');
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
throw new Error('无法检测运行环境');
|
|
264
|
-
}
|
|
265
|
-
/**
|
|
266
|
-
* 设置适配器
|
|
267
|
-
*
|
|
268
|
-
* @param adapter - 适配器实例或名称
|
|
269
|
-
*/ async setAdapter(adapter) {
|
|
270
|
-
if (typeof adapter === 'string') {
|
|
271
|
-
// 检查适配器环境是否匹配
|
|
272
|
-
validateAdapterEnvironment(adapter);
|
|
273
|
-
this.adapter = await _RequestAdapter.adapterRegistry.get(adapter);
|
|
274
|
-
this.adapterName = adapter;
|
|
275
|
-
// 再次验证(适配器可能返回不同的名称)
|
|
276
|
-
if (this.adapter.name !== adapter) {
|
|
277
|
-
validateAdapterEnvironment(this.adapter.name);
|
|
278
|
-
}
|
|
279
|
-
} else {
|
|
280
|
-
// 验证适配器环境
|
|
281
|
-
validateAdapterEnvironment(adapter.name);
|
|
282
|
-
this.adapter = adapter;
|
|
283
|
-
this.adapterName = adapter.name;
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
/**
|
|
287
|
-
* 注册插件
|
|
288
|
-
*
|
|
289
|
-
* @param plugin - 请求插件
|
|
290
|
-
*/ use(plugin) {
|
|
291
|
-
this.pluginManager.register(plugin);
|
|
292
|
-
}
|
|
293
|
-
/**
|
|
294
|
-
* 注销插件
|
|
295
|
-
*
|
|
296
|
-
* @param name - 插件名称
|
|
297
|
-
*/ unuse(name) {
|
|
298
|
-
this.pluginManager.unregister(name);
|
|
299
|
-
}
|
|
300
|
-
/**
|
|
301
|
-
* 执行请求
|
|
302
|
-
*
|
|
303
|
-
* @template TResponse - 响应数据类型
|
|
304
|
-
* @param options - 请求配置选项
|
|
305
|
-
* @returns Promise 解析为响应对象
|
|
306
|
-
*/ async request(options) {
|
|
307
|
-
// 确保适配器已加载
|
|
308
|
-
if (!this.adapter) {
|
|
309
|
-
await this.loadAdapter();
|
|
310
|
-
}
|
|
311
|
-
if (!this.adapter) {
|
|
312
|
-
throw new Error('适配器未初始化');
|
|
313
|
-
}
|
|
314
|
-
// 合并配置
|
|
315
|
-
const mergedOptions = this.mergeOptions(options);
|
|
316
|
-
// 检查队列状态,如果队列已暂停,将请求放入队列
|
|
317
|
-
const queueManager = (0, _RequestQueueManager.getRequestQueueManager)();
|
|
318
|
-
if (queueManager.isPaused()) {
|
|
319
|
-
return queueManager.enqueue(mergedOptions, ()=>this.executeRequest(mergedOptions));
|
|
320
|
-
}
|
|
321
|
-
// 正常执行请求
|
|
322
|
-
return this.executeRequest(mergedOptions);
|
|
323
|
-
}
|
|
324
|
-
/**
|
|
325
|
-
* 执行实际的请求逻辑
|
|
326
|
-
*
|
|
327
|
-
* @template TResponse - 响应数据类型
|
|
328
|
-
* @param options - 请求配置选项
|
|
329
|
-
* @returns Promise 解析为响应对象
|
|
330
|
-
*/ async executeRequest(options) {
|
|
331
|
-
// 创建请求上下文
|
|
332
|
-
const context = (0, _RequestContext.createRequestContext)(options, {});
|
|
333
|
-
try {
|
|
334
|
-
// 执行请求前钩子
|
|
335
|
-
const beforeResult = await this.pluginManager.executeHook(_RequestPlugin.PluginLifecycleStage.BEFORE_REQUEST, context);
|
|
336
|
-
// 如果插件返回了修改后的请求配置,使用它
|
|
337
|
-
if (beforeResult && typeof beforeResult === 'object' && 'url' in beforeResult) {
|
|
338
|
-
context.request = beforeResult;
|
|
339
|
-
}
|
|
340
|
-
// 检查是否已取消(可能是缓存命中)
|
|
341
|
-
if (context.cancelled) {
|
|
342
|
-
// 如果有缓存的响应,直接返回
|
|
343
|
-
if (context.response) {
|
|
344
|
-
return context.response;
|
|
345
|
-
}
|
|
346
|
-
throw this.createError('请求已取消', _types.RequestErrorType.ABORT_ERROR, _types.RequestErrorCode.REQUEST_ABORTED, {
|
|
347
|
-
request: context.request
|
|
348
|
-
});
|
|
349
|
-
}
|
|
350
|
-
// 执行请求
|
|
351
|
-
let response;
|
|
352
|
-
try {
|
|
353
|
-
if (!this.adapter) {
|
|
354
|
-
throw new Error('适配器未初始化');
|
|
355
|
-
}
|
|
356
|
-
response = await this.adapter.request(context.request);
|
|
357
|
-
} catch (error) {
|
|
358
|
-
// 适配器错误转换为框架错误
|
|
359
|
-
throw this.normalizeError(error, context.request);
|
|
360
|
-
}
|
|
361
|
-
// 更新上下文
|
|
362
|
-
(0, _RequestContext.completeRequestContext)(context, response);
|
|
363
|
-
// 执行请求后钩子
|
|
364
|
-
const afterResult = await this.pluginManager.executeHook(_RequestPlugin.PluginLifecycleStage.AFTER_REQUEST, context);
|
|
365
|
-
// 如果插件返回了修改后的响应,使用它
|
|
366
|
-
if (afterResult && typeof afterResult === 'object' && 'data' in afterResult) {
|
|
367
|
-
response = afterResult;
|
|
368
|
-
}
|
|
369
|
-
return response;
|
|
370
|
-
} catch (error) {
|
|
371
|
-
// 更新上下文
|
|
372
|
-
const requestError = error instanceof _types.RequestError ? error : this.normalizeError(error, context.request);
|
|
373
|
-
(0, _RequestContext.failRequestContext)(context, requestError);
|
|
374
|
-
// 执行错误处理钩子
|
|
375
|
-
const errorHandled = await this.pluginManager.executeHook(_RequestPlugin.PluginLifecycleStage.ON_ERROR, context);
|
|
376
|
-
// 如果错误未被处理,继续抛出
|
|
377
|
-
if (errorHandled !== true) {
|
|
378
|
-
throw requestError;
|
|
379
|
-
}
|
|
380
|
-
// 如果错误已被处理,返回一个默认响应(由插件决定)
|
|
381
|
-
if (context.response) {
|
|
382
|
-
return context.response;
|
|
383
|
-
}
|
|
384
|
-
throw requestError;
|
|
385
|
-
} finally{
|
|
386
|
-
// 执行最终钩子
|
|
387
|
-
await this.pluginManager.executeHook(_RequestPlugin.PluginLifecycleStage.FINALLY, context);
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
/**
|
|
391
|
-
* GET 请求
|
|
392
|
-
*
|
|
393
|
-
* @template TResponse - 响应数据类型
|
|
394
|
-
* @param url - 请求 URL
|
|
395
|
-
* @param options - 请求配置选项
|
|
396
|
-
* @returns Promise 解析为响应对象
|
|
397
|
-
*/ async get(url, options) {
|
|
398
|
-
return this.request({
|
|
399
|
-
...options,
|
|
400
|
-
url,
|
|
401
|
-
method: 'GET'
|
|
402
|
-
});
|
|
403
|
-
}
|
|
404
|
-
/**
|
|
405
|
-
* POST 请求
|
|
406
|
-
*
|
|
407
|
-
* @template TResponse - 响应数据类型
|
|
408
|
-
* @param url - 请求 URL
|
|
409
|
-
* @param body - 请求体
|
|
410
|
-
* @param options - 请求配置选项
|
|
411
|
-
* @returns Promise 解析为响应对象
|
|
412
|
-
*/ async post(url, body, options) {
|
|
413
|
-
return this.request({
|
|
414
|
-
...options,
|
|
415
|
-
url,
|
|
416
|
-
method: 'POST',
|
|
417
|
-
body
|
|
418
|
-
});
|
|
419
|
-
}
|
|
420
|
-
/**
|
|
421
|
-
* PUT 请求
|
|
422
|
-
*
|
|
423
|
-
* @template TResponse - 响应数据类型
|
|
424
|
-
* @param url - 请求 URL
|
|
425
|
-
* @param body - 请求体
|
|
426
|
-
* @param options - 请求配置选项
|
|
427
|
-
* @returns Promise 解析为响应对象
|
|
428
|
-
*/ async put(url, body, options) {
|
|
429
|
-
return this.request({
|
|
430
|
-
...options,
|
|
431
|
-
url,
|
|
432
|
-
method: 'PUT',
|
|
433
|
-
body
|
|
434
|
-
});
|
|
435
|
-
}
|
|
436
|
-
/**
|
|
437
|
-
* PATCH 请求
|
|
438
|
-
*
|
|
439
|
-
* @template TResponse - 响应数据类型
|
|
440
|
-
* @param url - 请求 URL
|
|
441
|
-
* @param body - 请求体
|
|
442
|
-
* @param options - 请求配置选项
|
|
443
|
-
* @returns Promise 解析为响应对象
|
|
444
|
-
*/ async patch(url, body, options) {
|
|
445
|
-
return this.request({
|
|
446
|
-
...options,
|
|
447
|
-
url,
|
|
448
|
-
method: 'PATCH',
|
|
449
|
-
body
|
|
450
|
-
});
|
|
451
|
-
}
|
|
452
|
-
/**
|
|
453
|
-
* DELETE 请求
|
|
454
|
-
*
|
|
455
|
-
* @template TResponse - 响应数据类型
|
|
456
|
-
* @param url - 请求 URL
|
|
457
|
-
* @param options - 请求配置选项
|
|
458
|
-
* @returns Promise 解析为响应对象
|
|
459
|
-
*/ async delete(url, options) {
|
|
460
|
-
return this.request({
|
|
461
|
-
...options,
|
|
462
|
-
url,
|
|
463
|
-
method: 'DELETE'
|
|
464
|
-
});
|
|
465
|
-
}
|
|
466
|
-
/**
|
|
467
|
-
* 合并请求配置
|
|
468
|
-
*
|
|
469
|
-
* @param options - 请求配置选项
|
|
470
|
-
* @returns 合并后的配置
|
|
471
|
-
*/ mergeOptions(options) {
|
|
472
|
-
const baseURL = this.config.baseURL || '';
|
|
473
|
-
const url = baseURL ? `${baseURL}${options.url}` : options.url;
|
|
474
|
-
return {
|
|
475
|
-
...options,
|
|
476
|
-
url,
|
|
477
|
-
headers: {
|
|
478
|
-
...this.config.defaultHeaders,
|
|
479
|
-
...options.headers
|
|
480
|
-
},
|
|
481
|
-
timeout: options.timeout ?? this.config.defaultTimeout
|
|
482
|
-
};
|
|
483
|
-
}
|
|
484
|
-
/**
|
|
485
|
-
* 创建请求错误
|
|
486
|
-
*/ createError(message, type, code, options) {
|
|
487
|
-
return new _types.RequestError(message, type, code, options);
|
|
488
|
-
}
|
|
489
|
-
/**
|
|
490
|
-
* 标准化错误
|
|
491
|
-
*/ normalizeError(error, request) {
|
|
492
|
-
if (error instanceof _types.RequestError) {
|
|
493
|
-
return error;
|
|
494
|
-
}
|
|
495
|
-
// 处理 AbortError
|
|
496
|
-
if (error instanceof Error && error.name === 'AbortError') {
|
|
497
|
-
return this.createError('请求已取消', _types.RequestErrorType.ABORT_ERROR, _types.RequestErrorCode.REQUEST_ABORTED, {
|
|
498
|
-
cause: error,
|
|
499
|
-
request
|
|
500
|
-
});
|
|
501
|
-
}
|
|
502
|
-
// 处理超时错误
|
|
503
|
-
if (error instanceof Error && (error.message.includes('timeout') || error.message.includes('Timeout'))) {
|
|
504
|
-
return this.createError('请求超时', _types.RequestErrorType.TIMEOUT_ERROR, _types.RequestErrorCode.REQUEST_TIMEOUT, {
|
|
505
|
-
cause: error,
|
|
506
|
-
request
|
|
507
|
-
});
|
|
508
|
-
}
|
|
509
|
-
// 处理网络错误
|
|
510
|
-
if (error instanceof Error && (error.message.includes('network') || error.message.includes('Network'))) {
|
|
511
|
-
return this.createError('网络连接失败', _types.RequestErrorType.NETWORK_ERROR, _types.RequestErrorCode.NETWORK_CONNECTION_FAILED, {
|
|
512
|
-
cause: error,
|
|
513
|
-
request
|
|
514
|
-
});
|
|
515
|
-
}
|
|
516
|
-
// 处理 HTTP 错误(需要适配器提供)
|
|
517
|
-
if (error && typeof error === 'object' && 'status' in error) {
|
|
518
|
-
const status = error.status;
|
|
519
|
-
const isServerError = status >= 500;
|
|
520
|
-
return this.createError(`HTTP ${status} 错误`, _types.RequestErrorType.HTTP_ERROR, isServerError ? _types.RequestErrorCode.SERVER_ERROR : _types.RequestErrorCode.CLIENT_ERROR, {
|
|
521
|
-
status,
|
|
522
|
-
cause: error,
|
|
523
|
-
request
|
|
524
|
-
});
|
|
525
|
-
}
|
|
526
|
-
// 未知错误
|
|
527
|
-
return this.createError(error instanceof Error ? error.message : '未知错误', _types.RequestErrorType.UNKNOWN_ERROR, _types.RequestErrorCode.NETWORK_CONNECTION_FAILED, {
|
|
528
|
-
cause: error,
|
|
529
|
-
request
|
|
530
|
-
});
|
|
531
|
-
}
|
|
532
|
-
/**
|
|
533
|
-
* 销毁客户端
|
|
534
|
-
*/ async destroy() {
|
|
535
|
-
if (this.adapter?.destroy) {
|
|
536
|
-
await this.adapter.destroy();
|
|
537
|
-
}
|
|
538
|
-
this.pluginManager.clear();
|
|
539
|
-
this.adapter = null;
|
|
540
|
-
this.adapterName = null;
|
|
541
|
-
}
|
|
542
|
-
constructor(config = {}){
|
|
543
|
-
_define_property(this, "config", void 0);
|
|
544
|
-
_define_property(this, "pluginManager", void 0);
|
|
545
|
-
_define_property(this, "adapter", null);
|
|
546
|
-
_define_property(this, "adapterName", null);
|
|
547
|
-
this.config = config;
|
|
548
|
-
this.pluginManager = new _RequestPlugin.PluginManager();
|
|
549
|
-
// 注册插件
|
|
550
|
-
if (config.plugins) {
|
|
551
|
-
for (const plugin of config.plugins){
|
|
552
|
-
this.pluginManager.register(plugin);
|
|
553
|
-
}
|
|
554
|
-
}
|
|
555
|
-
}
|
|
556
|
-
};
|
|
557
|
-
|
|
558
|
-
//# sourceMappingURL=RequestClient.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/request/core/RequestClient.ts"],"sourcesContent":["/**\n * 请求客户端核心实现\n * \n * 这是请求库的核心,负责协调适配器和插件系统\n */\n\nimport type {\n RequestOptions,\n Response,\n RequestClientConfig,\n} from '../types';\nimport {\n RequestError,\n RequestErrorType,\n RequestErrorCode,\n} from '../types';\nimport type { RequestAdapter } from '../adapter/RequestAdapter';\nimport { adapterRegistry } from '../adapter/RequestAdapter';\nimport { PluginManager, PluginLifecycleStage } from '../plugin/RequestPlugin';\nimport { createRequestContext, completeRequestContext, failRequestContext } from '../runtime/RequestContext';\nimport { getRequestQueueManager } from '../utils/RequestQueueManager';\n\n/**\n * 运行环境类型\n */\ntype RuntimeEnvironment = 'browser' | 'node' | 'unknown';\n\n/**\n * 适配器环境要求映射\n * \n * 注意:axios 可以在浏览器和 Node.js 环境中使用,因此不在此映射中限制\n */\nconst ADAPTER_ENVIRONMENT_MAP: Record<string, RuntimeEnvironment> = {\n fetch: 'browser',\n ky: 'browser',\n undici: 'node',\n};\n\n/**\n * 检测当前运行环境\n * \n * @returns 运行环境类型\n */\nfunction detectEnvironment(): RuntimeEnvironment {\n const isBrowser = typeof window !== 'undefined';\n const isNode = typeof process !== 'undefined' && process.versions?.node;\n\n if (isBrowser) {\n return 'browser';\n } else if (isNode) {\n return 'node';\n }\n return 'unknown';\n}\n\n/**\n * 获取适配器的推荐替代方案\n * \n * @param currentEnv - 当前环境\n * @returns 推荐的适配器列表\n */\nfunction getRecommendedAdapters(currentEnv: RuntimeEnvironment): string[] {\n if (currentEnv === 'browser') {\n return ['fetch', 'ky', 'axios'];\n } else if (currentEnv === 'node') {\n return ['axios', 'undici'];\n }\n return [];\n}\n\n/**\n * 创建环境不匹配错误消息\n * \n * @param adapterName - 适配器名称\n * @param adapterEnv - 适配器要求的环境\n * @param currentEnv - 当前环境\n * @returns 错误消息\n */\nfunction createEnvironmentMismatchError(\n adapterName: string,\n adapterEnv: RuntimeEnvironment,\n currentEnv: RuntimeEnvironment\n): string {\n const recommendedAdapters = getRecommendedAdapters(currentEnv);\n const recommendedList = recommendedAdapters.length > 0\n ? recommendedAdapters.map(name => `\"${name}\"`).join(' 或 ')\n : '其他适配器';\n\n const adapterEnvName = adapterEnv === 'browser' ? '浏览器' : 'Node.js';\n const currentEnvName = currentEnv === 'browser' ? '浏览器' : currentEnv === 'node' ? 'Node.js' : '未知';\n const firstRecommended = recommendedAdapters[0] || 'fetch';\n const firstRecommendedFactory = firstRecommended === 'fetch' ? 'fetchAdapter' : firstRecommended === 'ky' ? 'kyAdapter' : firstRecommended === 'axios' ? 'axiosAdapter' : 'undiciAdapter';\n\n let message = `\\n❌ 适配器环境不匹配\\n\\n`;\n message += `适配器 \"${adapterName}\" 要求运行在 ${adapterEnvName} 环境中,\\n`;\n message += `但当前运行在 ${currentEnvName} 环境中。\\n\\n`;\n message += `💡 建议:请使用适合当前环境的适配器,如 ${recommendedList}。\\n\\n`;\n message += `📝 使用示例:\\n\\n`;\n message += ` // 方式 1:使用适配器名称字符串\\n`;\n message += ` import { createRequestClient } from '@vlian/framework/request';\\n\\n`;\n message += ` const client = await createRequestClient({\\n`;\n message += ` defaultAdapter: '${firstRecommended}',\\n`;\n message += ` });\\n\\n`;\n message += ` // 方式 2:使用适配器工厂函数\\n`;\n message += ` import { createRequestClient, ${firstRecommendedFactory} } from '@vlian/framework/request';\\n\\n`;\n message += ` const client = await createRequestClient({\\n`;\n message += ` defaultAdapter: ${firstRecommendedFactory},\\n`;\n message += ` });\\n`;\n\n return message;\n}\n\n/**\n * 验证适配器环境是否匹配\n * \n * @param adapterName - 适配器名称\n * @throws 如果环境不匹配,抛出包含友好提示的错误\n */\nfunction validateAdapterEnvironment(adapterName: string): void {\n const adapterEnv = ADAPTER_ENVIRONMENT_MAP[adapterName];\n if (!adapterEnv) {\n // 未知适配器,不进行环境检查\n return;\n }\n\n const currentEnv = detectEnvironment();\n if (currentEnv === 'unknown') {\n // 无法检测环境,跳过检查\n return;\n }\n\n if (adapterEnv !== currentEnv) {\n const errorMessage = createEnvironmentMismatchError(adapterName, adapterEnv, currentEnv);\n throw new Error(errorMessage);\n }\n}\n\n/**\n * 请求客户端类\n */\nexport class RequestClient {\n private config: RequestClientConfig;\n private pluginManager: PluginManager;\n private adapter: RequestAdapter | null = null;\n private adapterName: string | null = null;\n\n /**\n * 获取当前适配器名称\n */\n getAdapterName(): string | null {\n return this.adapterName;\n }\n\n constructor(config: RequestClientConfig = {}) {\n this.config = config;\n this.pluginManager = new PluginManager();\n\n // 注册插件\n if (config.plugins) {\n for (const plugin of config.plugins) {\n this.pluginManager.register(plugin);\n }\n }\n }\n\n /**\n * 初始化客户端\n */\n async initialize(): Promise<void> {\n // 加载默认适配器\n await this.loadAdapter();\n\n // 执行插件初始化钩子\n const context = createRequestContext<RequestOptions, Response, Record<string, unknown>>(\n { url: '' },\n {}\n );\n await this.pluginManager.executeHook(PluginLifecycleStage.INIT, context);\n }\n\n /**\n * 加载适配器\n */\n private async loadAdapter(): Promise<void> {\n if (this.adapter) {\n return;\n }\n\n const adapterConfig = this.config.defaultAdapter;\n\n if (typeof adapterConfig === 'string') {\n // 检查适配器环境是否匹配\n validateAdapterEnvironment(adapterConfig);\n \n // 从注册表加载\n this.adapter = await adapterRegistry.get(adapterConfig);\n this.adapterName = adapterConfig;\n \n // 再次验证(适配器可能返回不同的名称)\n if (this.adapter.name !== adapterConfig) {\n validateAdapterEnvironment(this.adapter.name);\n }\n } else if (typeof adapterConfig === 'function') {\n // 使用工厂函数加载\n this.adapter = await adapterConfig();\n this.adapterName = this.adapter.name;\n \n // 验证适配器环境\n validateAdapterEnvironment(this.adapter.name);\n } else {\n // 自动检测环境(自动检测的适配器不需要验证,因为已经根据环境选择了)\n const detectedAdapter = await this.detectAdapter();\n this.adapter = detectedAdapter.adapter;\n this.adapterName = detectedAdapter.name;\n }\n }\n\n /**\n * 自动检测适配器\n */\n private async detectAdapter(): Promise<{ adapter: RequestAdapter; name: string }> {\n // 检测运行环境\n const isBrowser = typeof window !== 'undefined';\n const isNode = typeof process !== 'undefined' && process.versions?.node;\n\n if (isBrowser) {\n // 浏览器环境:尝试加载 ky 适配器\n try {\n const { kyAdapter } = await import('../adapter/kyAdapter');\n const adapter = await kyAdapter();\n return { adapter, name: 'ky' };\n } catch {\n // 如果 ky 不可用,使用 fetch 适配器\n const { fetchAdapter } = await import('../adapter/fetchAdapter');\n const adapter = await fetchAdapter();\n return { adapter, name: 'fetch' };\n }\n } else if (isNode) {\n // Node.js 环境:尝试加载 axios 适配器\n try {\n const { axiosAdapter } = await import('../adapter/axiosAdapter');\n const adapter = await axiosAdapter();\n return { adapter, name: 'axios' };\n } catch {\n // 如果 axios 不可用,使用 undici 适配器\n try {\n const { undiciAdapter } = await import('../adapter/undiciAdapter');\n const adapter = await undiciAdapter();\n return { adapter, name: 'undici' };\n } catch {\n throw new Error('无法找到可用的适配器,请手动指定适配器');\n }\n }\n }\n\n throw new Error('无法检测运行环境');\n }\n\n /**\n * 设置适配器\n * \n * @param adapter - 适配器实例或名称\n */\n async setAdapter(adapter: RequestAdapter | string): Promise<void> {\n if (typeof adapter === 'string') {\n // 检查适配器环境是否匹配\n validateAdapterEnvironment(adapter);\n \n this.adapter = await adapterRegistry.get(adapter);\n this.adapterName = adapter;\n \n // 再次验证(适配器可能返回不同的名称)\n if (this.adapter.name !== adapter) {\n validateAdapterEnvironment(this.adapter.name);\n }\n } else {\n // 验证适配器环境\n validateAdapterEnvironment(adapter.name);\n \n this.adapter = adapter;\n this.adapterName = adapter.name;\n }\n }\n\n /**\n * 注册插件\n * \n * @param plugin - 请求插件\n */\n use(plugin: import('../plugin/RequestPlugin').RequestPlugin): void {\n this.pluginManager.register(plugin);\n }\n\n /**\n * 注销插件\n * \n * @param name - 插件名称\n */\n unuse(name: string): void {\n this.pluginManager.unregister(name);\n }\n\n /**\n * 执行请求\n * \n * @template TResponse - 响应数据类型\n * @param options - 请求配置选项\n * @returns Promise 解析为响应对象\n */\n async request<TResponse = unknown>(options: RequestOptions<TResponse>): Promise<Response<TResponse>> {\n // 确保适配器已加载\n if (!this.adapter) {\n await this.loadAdapter();\n }\n\n if (!this.adapter) {\n throw new Error('适配器未初始化');\n }\n\n // 合并配置\n const mergedOptions = this.mergeOptions(options);\n\n // 检查队列状态,如果队列已暂停,将请求放入队列\n const queueManager = getRequestQueueManager();\n if (queueManager.isPaused()) {\n return queueManager.enqueue(mergedOptions, () => this.executeRequest(mergedOptions));\n }\n\n // 正常执行请求\n return this.executeRequest(mergedOptions);\n }\n\n /**\n * 执行实际的请求逻辑\n * \n * @template TResponse - 响应数据类型\n * @param options - 请求配置选项\n * @returns Promise 解析为响应对象\n */\n private async executeRequest<TResponse = unknown>(options: RequestOptions<TResponse>): Promise<Response<TResponse>> {\n // 创建请求上下文\n const context = createRequestContext<RequestOptions<TResponse>, Response<TResponse>, Record<string, unknown>>(\n options,\n {}\n );\n\n try {\n // 执行请求前钩子\n const beforeResult = await this.pluginManager.executeHook(\n PluginLifecycleStage.BEFORE_REQUEST,\n context\n );\n\n // 如果插件返回了修改后的请求配置,使用它\n if (beforeResult && typeof beforeResult === 'object' && 'url' in beforeResult) {\n context.request = beforeResult as RequestOptions<TResponse>;\n }\n\n // 检查是否已取消(可能是缓存命中)\n if (context.cancelled) {\n // 如果有缓存的响应,直接返回\n if (context.response) {\n return context.response;\n }\n throw this.createError(\n '请求已取消',\n RequestErrorType.ABORT_ERROR,\n RequestErrorCode.REQUEST_ABORTED,\n { request: context.request }\n );\n }\n\n // 执行请求\n let response: Response<TResponse>;\n try {\n if (!this.adapter) {\n throw new Error('适配器未初始化');\n }\n response = await this.adapter.request<TResponse>(context.request);\n } catch (error) {\n // 适配器错误转换为框架错误\n throw this.normalizeError(error, context.request);\n }\n\n // 更新上下文\n completeRequestContext(context, response);\n\n // 执行请求后钩子\n const afterResult = await this.pluginManager.executeHook(\n PluginLifecycleStage.AFTER_REQUEST,\n context\n );\n\n // 如果插件返回了修改后的响应,使用它\n if (afterResult && typeof afterResult === 'object' && 'data' in afterResult) {\n response = afterResult as Response<TResponse>;\n }\n\n return response;\n } catch (error) {\n // 更新上下文\n const requestError = error instanceof RequestError ? error : this.normalizeError(error, context.request);\n failRequestContext(context, requestError);\n\n // 执行错误处理钩子\n const errorHandled = await this.pluginManager.executeHook(\n PluginLifecycleStage.ON_ERROR,\n context\n );\n\n // 如果错误未被处理,继续抛出\n if (errorHandled !== true) {\n throw requestError;\n }\n\n // 如果错误已被处理,返回一个默认响应(由插件决定)\n if (context.response) {\n return context.response as Response<TResponse>;\n }\n\n throw requestError;\n } finally {\n // 执行最终钩子\n await this.pluginManager.executeHook(PluginLifecycleStage.FINALLY, context);\n }\n }\n\n /**\n * GET 请求\n * \n * @template TResponse - 响应数据类型\n * @param url - 请求 URL\n * @param options - 请求配置选项\n * @returns Promise 解析为响应对象\n */\n async get<TResponse = unknown>(\n url: string,\n options?: Omit<RequestOptions<TResponse>, 'url' | 'method'>\n ): Promise<Response<TResponse>> {\n return this.request<TResponse>({\n ...options,\n url,\n method: 'GET',\n });\n }\n\n /**\n * POST 请求\n * \n * @template TResponse - 响应数据类型\n * @param url - 请求 URL\n * @param body - 请求体\n * @param options - 请求配置选项\n * @returns Promise 解析为响应对象\n */\n async post<TResponse = unknown>(\n url: string,\n body?: RequestOptions<TResponse>['body'],\n options?: Omit<RequestOptions<TResponse>, 'url' | 'method' | 'body'>\n ): Promise<Response<TResponse>> {\n return this.request<TResponse>({\n ...options,\n url,\n method: 'POST',\n body,\n });\n }\n\n /**\n * PUT 请求\n * \n * @template TResponse - 响应数据类型\n * @param url - 请求 URL\n * @param body - 请求体\n * @param options - 请求配置选项\n * @returns Promise 解析为响应对象\n */\n async put<TResponse = unknown>(\n url: string,\n body?: RequestOptions<TResponse>['body'],\n options?: Omit<RequestOptions<TResponse>, 'url' | 'method' | 'body'>\n ): Promise<Response<TResponse>> {\n return this.request<TResponse>({\n ...options,\n url,\n method: 'PUT',\n body,\n });\n }\n\n /**\n * PATCH 请求\n * \n * @template TResponse - 响应数据类型\n * @param url - 请求 URL\n * @param body - 请求体\n * @param options - 请求配置选项\n * @returns Promise 解析为响应对象\n */\n async patch<TResponse = unknown>(\n url: string,\n body?: RequestOptions<TResponse>['body'],\n options?: Omit<RequestOptions<TResponse>, 'url' | 'method' | 'body'>\n ): Promise<Response<TResponse>> {\n return this.request<TResponse>({\n ...options,\n url,\n method: 'PATCH',\n body,\n });\n }\n\n /**\n * DELETE 请求\n * \n * @template TResponse - 响应数据类型\n * @param url - 请求 URL\n * @param options - 请求配置选项\n * @returns Promise 解析为响应对象\n */\n async delete<TResponse = unknown>(\n url: string,\n options?: Omit<RequestOptions<TResponse>, 'url' | 'method'>\n ): Promise<Response<TResponse>> {\n return this.request<TResponse>({\n ...options,\n url,\n method: 'DELETE',\n });\n }\n\n /**\n * 合并请求配置\n * \n * @param options - 请求配置选项\n * @returns 合并后的配置\n */\n private mergeOptions<TResponse>(options: RequestOptions<TResponse>): RequestOptions<TResponse> {\n const baseURL = this.config.baseURL || '';\n const url = baseURL ? `${baseURL}${options.url}` : options.url;\n\n return {\n ...options,\n url,\n headers: {\n ...this.config.defaultHeaders,\n ...options.headers,\n },\n timeout: options.timeout ?? this.config.defaultTimeout,\n };\n }\n\n /**\n * 创建请求错误\n */\n private createError(\n message: string,\n type: RequestErrorType,\n code: RequestErrorCode,\n options?: {\n status?: number;\n cause?: unknown;\n request?: RequestOptions;\n response?: Response;\n context?: Record<string, unknown>;\n }\n ): RequestError {\n return new RequestError(message, type, code, options);\n }\n\n /**\n * 标准化错误\n */\n private normalizeError(error: unknown, request?: RequestOptions): RequestError {\n if (error instanceof RequestError) {\n return error;\n }\n\n // 处理 AbortError\n if (error instanceof Error && error.name === 'AbortError') {\n return this.createError(\n '请求已取消',\n RequestErrorType.ABORT_ERROR,\n RequestErrorCode.REQUEST_ABORTED,\n { cause: error, request }\n );\n }\n\n // 处理超时错误\n if (error instanceof Error && (error.message.includes('timeout') || error.message.includes('Timeout'))) {\n return this.createError(\n '请求超时',\n RequestErrorType.TIMEOUT_ERROR,\n RequestErrorCode.REQUEST_TIMEOUT,\n { cause: error, request }\n );\n }\n\n // 处理网络错误\n if (error instanceof Error && (error.message.includes('network') || error.message.includes('Network'))) {\n return this.createError(\n '网络连接失败',\n RequestErrorType.NETWORK_ERROR,\n RequestErrorCode.NETWORK_CONNECTION_FAILED,\n { cause: error, request }\n );\n }\n\n // 处理 HTTP 错误(需要适配器提供)\n if (error && typeof error === 'object' && 'status' in error) {\n const status = (error as { status: number }).status;\n const isServerError = status >= 500;\n return this.createError(\n `HTTP ${status} 错误`,\n RequestErrorType.HTTP_ERROR,\n isServerError ? RequestErrorCode.SERVER_ERROR : RequestErrorCode.CLIENT_ERROR,\n { status, cause: error, request }\n );\n }\n\n // 未知错误\n return this.createError(\n error instanceof Error ? error.message : '未知错误',\n RequestErrorType.UNKNOWN_ERROR,\n RequestErrorCode.NETWORK_CONNECTION_FAILED,\n { cause: error, request }\n );\n }\n\n /**\n * 销毁客户端\n */\n async destroy(): Promise<void> {\n if (this.adapter?.destroy) {\n await this.adapter.destroy();\n }\n this.pluginManager.clear();\n this.adapter = null;\n this.adapterName = null;\n }\n}\n"],"names":["RequestClient","ADAPTER_ENVIRONMENT_MAP","fetch","ky","undici","detectEnvironment","isBrowser","window","isNode","process","versions","node","getRecommendedAdapters","currentEnv","createEnvironmentMismatchError","adapterName","adapterEnv","recommendedAdapters","recommendedList","length","map","name","join","adapterEnvName","currentEnvName","firstRecommended","firstRecommendedFactory","message","validateAdapterEnvironment","errorMessage","Error","getAdapterName","initialize","loadAdapter","context","createRequestContext","url","pluginManager","executeHook","PluginLifecycleStage","INIT","adapter","adapterConfig","config","defaultAdapter","adapterRegistry","get","detectedAdapter","detectAdapter","kyAdapter","fetchAdapter","axiosAdapter","undiciAdapter","setAdapter","use","plugin","register","unuse","unregister","request","options","mergedOptions","mergeOptions","queueManager","getRequestQueueManager","isPaused","enqueue","executeRequest","beforeResult","BEFORE_REQUEST","cancelled","response","createError","RequestErrorType","ABORT_ERROR","RequestErrorCode","REQUEST_ABORTED","error","normalizeError","completeRequestContext","afterResult","AFTER_REQUEST","requestError","RequestError","failRequestContext","errorHandled","ON_ERROR","FINALLY","method","post","body","put","patch","delete","baseURL","headers","defaultHeaders","timeout","defaultTimeout","type","code","cause","includes","TIMEOUT_ERROR","REQUEST_TIMEOUT","NETWORK_ERROR","NETWORK_CONNECTION_FAILED","status","isServerError","HTTP_ERROR","SERVER_ERROR","CLIENT_ERROR","UNKNOWN_ERROR","destroy","clear","PluginManager","plugins"],"mappings":"AAAA;;;;CAIC;;;;+BAwIYA;;;eAAAA;;;uBA7HN;gCAEyB;+BACoB;gCAC6B;qCAC1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOvC;;;;CAIC,GACD,MAAMC,0BAA8D;IAClEC,OAAO;IACPC,IAAI;IACJC,QAAQ;AACV;AAEA;;;;CAIC,GACD,SAASC;IACP,MAAMC,YAAY,OAAOC,WAAW;IACpC,MAAMC,SAAS,OAAOC,YAAY,eAAeA,QAAQC,QAAQ,EAAEC;IAEnE,IAAIL,WAAW;QACb,OAAO;IACT,OAAO,IAAIE,QAAQ;QACjB,OAAO;IACT;IACA,OAAO;AACT;AAEA;;;;;CAKC,GACD,SAASI,uBAAuBC,UAA8B;IAC5D,IAAIA,eAAe,WAAW;QAC5B,OAAO;YAAC;YAAS;YAAM;SAAQ;IACjC,OAAO,IAAIA,eAAe,QAAQ;QAChC,OAAO;YAAC;YAAS;SAAS;IAC5B;IACA,OAAO,EAAE;AACX;AAEA;;;;;;;CAOC,GACD,SAASC,+BACPC,WAAmB,EACnBC,UAA8B,EAC9BH,UAA8B;IAE9B,MAAMI,sBAAsBL,uBAAuBC;IACnD,MAAMK,kBAAkBD,oBAAoBE,MAAM,GAAG,IACjDF,oBAAoBG,GAAG,CAACC,CAAAA,OAAQ,CAAC,CAAC,EAAEA,KAAK,CAAC,CAAC,EAAEC,IAAI,CAAC,SAClD;IAEJ,MAAMC,iBAAiBP,eAAe,YAAY,QAAQ;IAC1D,MAAMQ,iBAAiBX,eAAe,YAAY,QAAQA,eAAe,SAAS,YAAY;IAC9F,MAAMY,mBAAmBR,mBAAmB,CAAC,EAAE,IAAI;IACnD,MAAMS,0BAA0BD,qBAAqB,UAAU,iBAAiBA,qBAAqB,OAAO,cAAcA,qBAAqB,UAAU,iBAAiB;IAE1K,IAAIE,UAAU,CAAC,gBAAgB,CAAC;IAChCA,WAAW,CAAC,KAAK,EAAEZ,YAAY,QAAQ,EAAEQ,eAAe,OAAO,CAAC;IAChEI,WAAW,CAAC,OAAO,EAAEH,eAAe,SAAS,CAAC;IAC9CG,WAAW,CAAC,sBAAsB,EAAET,gBAAgB,KAAK,CAAC;IAC1DS,WAAW,CAAC,YAAY,CAAC;IACzBA,WAAW,CAAC,sBAAsB,CAAC;IACnCA,WAAW,CAAC,qEAAqE,CAAC;IAClFA,WAAW,CAAC,8CAA8C,CAAC;IAC3DA,WAAW,CAAC,qBAAqB,EAAEF,iBAAiB,IAAI,CAAC;IACzDE,WAAW,CAAC,SAAS,CAAC;IACtBA,WAAW,CAAC,qBAAqB,CAAC;IAClCA,WAAW,CAAC,gCAAgC,EAAED,wBAAwB,uCAAuC,CAAC;IAC9GC,WAAW,CAAC,8CAA8C,CAAC;IAC3DA,WAAW,CAAC,oBAAoB,EAAED,wBAAwB,GAAG,CAAC;IAC9DC,WAAW,CAAC,OAAO,CAAC;IAEpB,OAAOA;AACT;AAEA;;;;;CAKC,GACD,SAASC,2BAA2Bb,WAAmB;IACrD,MAAMC,aAAaf,uBAAuB,CAACc,YAAY;IACvD,IAAI,CAACC,YAAY;QACf,gBAAgB;QAChB;IACF;IAEA,MAAMH,aAAaR;IACnB,IAAIQ,eAAe,WAAW;QAC5B,cAAc;QACd;IACF;IAEA,IAAIG,eAAeH,YAAY;QAC7B,MAAMgB,eAAef,+BAA+BC,aAAaC,YAAYH;QAC7E,MAAM,IAAIiB,MAAMD;IAClB;AACF;AAKO,IAAA,AAAM7B,gBAAN,MAAMA;IAMX;;GAEC,GACD+B,iBAAgC;QAC9B,OAAO,IAAI,CAAChB,WAAW;IACzB;IAcA;;GAEC,GACD,MAAMiB,aAA4B;QAChC,UAAU;QACV,MAAM,IAAI,CAACC,WAAW;QAEtB,YAAY;QACZ,MAAMC,UAAUC,IAAAA,oCAAoB,EAClC;YAAEC,KAAK;QAAG,GACV,CAAC;QAEH,MAAM,IAAI,CAACC,aAAa,CAACC,WAAW,CAACC,mCAAoB,CAACC,IAAI,EAAEN;IAClE;IAEA;;GAEC,GACD,MAAcD,cAA6B;QACzC,IAAI,IAAI,CAACQ,OAAO,EAAE;YAChB;QACF;QAEA,MAAMC,gBAAgB,IAAI,CAACC,MAAM,CAACC,cAAc;QAEhD,IAAI,OAAOF,kBAAkB,UAAU;YACrC,cAAc;YACdd,2BAA2Bc;YAE3B,SAAS;YACT,IAAI,CAACD,OAAO,GAAG,MAAMI,+BAAe,CAACC,GAAG,CAACJ;YACzC,IAAI,CAAC3B,WAAW,GAAG2B;YAEnB,qBAAqB;YACrB,IAAI,IAAI,CAACD,OAAO,CAACpB,IAAI,KAAKqB,eAAe;gBACvCd,2BAA2B,IAAI,CAACa,OAAO,CAACpB,IAAI;YAC9C;QACF,OAAO,IAAI,OAAOqB,kBAAkB,YAAY;YAC9C,WAAW;YACX,IAAI,CAACD,OAAO,GAAG,MAAMC;YACrB,IAAI,CAAC3B,WAAW,GAAG,IAAI,CAAC0B,OAAO,CAACpB,IAAI;YAEpC,UAAU;YACVO,2BAA2B,IAAI,CAACa,OAAO,CAACpB,IAAI;QAC9C,OAAO;YACL,oCAAoC;YACpC,MAAM0B,kBAAkB,MAAM,IAAI,CAACC,aAAa;YAChD,IAAI,CAACP,OAAO,GAAGM,gBAAgBN,OAAO;YACtC,IAAI,CAAC1B,WAAW,GAAGgC,gBAAgB1B,IAAI;QACzC;IACF;IAEA;;GAEC,GACD,MAAc2B,gBAAoE;QAChF,SAAS;QACT,MAAM1C,YAAY,OAAOC,WAAW;QACpC,MAAMC,SAAS,OAAOC,YAAY,eAAeA,QAAQC,QAAQ,EAAEC;QAEnE,IAAIL,WAAW;YACb,oBAAoB;YACpB,IAAI;gBACF,MAAM,EAAE2C,SAAS,EAAE,GAAG,MAAM,mEAAA,QAAO;gBACnC,MAAMR,UAAU,MAAMQ;gBACtB,OAAO;oBAAER;oBAASpB,MAAM;gBAAK;YAC/B,EAAE,OAAM;gBACN,yBAAyB;gBACzB,MAAM,EAAE6B,YAAY,EAAE,GAAG,MAAM,mEAAA,QAAO;gBACtC,MAAMT,UAAU,MAAMS;gBACtB,OAAO;oBAAET;oBAASpB,MAAM;gBAAQ;YAClC;QACF,OAAO,IAAIb,QAAQ;YACjB,4BAA4B;YAC5B,IAAI;gBACF,MAAM,EAAE2C,YAAY,EAAE,GAAG,MAAM,mEAAA,QAAO;gBACtC,MAAMV,UAAU,MAAMU;gBACtB,OAAO;oBAAEV;oBAASpB,MAAM;gBAAQ;YAClC,EAAE,OAAM;gBACN,6BAA6B;gBAC7B,IAAI;oBACF,MAAM,EAAE+B,aAAa,EAAE,GAAG,MAAM,mEAAA,QAAO;oBACvC,MAAMX,UAAU,MAAMW;oBACtB,OAAO;wBAAEX;wBAASpB,MAAM;oBAAS;gBACnC,EAAE,OAAM;oBACN,MAAM,IAAIS,MAAM;gBAClB;YACF;QACF;QAEA,MAAM,IAAIA,MAAM;IAClB;IAEA;;;;GAIC,GACD,MAAMuB,WAAWZ,OAAgC,EAAiB;QAChE,IAAI,OAAOA,YAAY,UAAU;YAC/B,cAAc;YACdb,2BAA2Ba;YAE3B,IAAI,CAACA,OAAO,GAAG,MAAMI,+BAAe,CAACC,GAAG,CAACL;YACzC,IAAI,CAAC1B,WAAW,GAAG0B;YAEnB,qBAAqB;YACrB,IAAI,IAAI,CAACA,OAAO,CAACpB,IAAI,KAAKoB,SAAS;gBACjCb,2BAA2B,IAAI,CAACa,OAAO,CAACpB,IAAI;YAC9C;QACF,OAAO;YACL,UAAU;YACVO,2BAA2Ba,QAAQpB,IAAI;YAEvC,IAAI,CAACoB,OAAO,GAAGA;YACf,IAAI,CAAC1B,WAAW,GAAG0B,QAAQpB,IAAI;QACjC;IACF;IAEA;;;;GAIC,GACDiC,IAAIC,MAAuD,EAAQ;QACjE,IAAI,CAAClB,aAAa,CAACmB,QAAQ,CAACD;IAC9B;IAEA;;;;GAIC,GACDE,MAAMpC,IAAY,EAAQ;QACxB,IAAI,CAACgB,aAAa,CAACqB,UAAU,CAACrC;IAChC;IAEA;;;;;;GAMC,GACD,MAAMsC,QAA6BC,OAAkC,EAAgC;QACnG,WAAW;QACX,IAAI,CAAC,IAAI,CAACnB,OAAO,EAAE;YACjB,MAAM,IAAI,CAACR,WAAW;QACxB;QAEA,IAAI,CAAC,IAAI,CAACQ,OAAO,EAAE;YACjB,MAAM,IAAIX,MAAM;QAClB;QAEA,OAAO;QACP,MAAM+B,gBAAgB,IAAI,CAACC,YAAY,CAACF;QAExC,yBAAyB;QACzB,MAAMG,eAAeC,IAAAA,2CAAsB;QAC3C,IAAID,aAAaE,QAAQ,IAAI;YAC3B,OAAOF,aAAaG,OAAO,CAACL,eAAe,IAAM,IAAI,CAACM,cAAc,CAACN;QACvE;QAEA,SAAS;QACT,OAAO,IAAI,CAACM,cAAc,CAACN;IAC7B;IAEA;;;;;;GAMC,GACD,MAAcM,eAAoCP,OAAkC,EAAgC;QAClH,UAAU;QACV,MAAM1B,UAAUC,IAAAA,oCAAoB,EAClCyB,SACA,CAAC;QAGH,IAAI;YACF,UAAU;YACV,MAAMQ,eAAe,MAAM,IAAI,CAAC/B,aAAa,CAACC,WAAW,CACvDC,mCAAoB,CAAC8B,cAAc,EACnCnC;YAGF,sBAAsB;YACtB,IAAIkC,gBAAgB,OAAOA,iBAAiB,YAAY,SAASA,cAAc;gBAC7ElC,QAAQyB,OAAO,GAAGS;YACpB;YAEA,mBAAmB;YACnB,IAAIlC,QAAQoC,SAAS,EAAE;gBACrB,gBAAgB;gBAChB,IAAIpC,QAAQqC,QAAQ,EAAE;oBACpB,OAAOrC,QAAQqC,QAAQ;gBACzB;gBACA,MAAM,IAAI,CAACC,WAAW,CACpB,SACAC,uBAAgB,CAACC,WAAW,EAC5BC,uBAAgB,CAACC,eAAe,EAChC;oBAAEjB,SAASzB,QAAQyB,OAAO;gBAAC;YAE/B;YAEA,OAAO;YACP,IAAIY;YACJ,IAAI;gBACF,IAAI,CAAC,IAAI,CAAC9B,OAAO,EAAE;oBACjB,MAAM,IAAIX,MAAM;gBAClB;gBACAyC,WAAW,MAAM,IAAI,CAAC9B,OAAO,CAACkB,OAAO,CAAYzB,QAAQyB,OAAO;YAClE,EAAE,OAAOkB,OAAO;gBACd,eAAe;gBACf,MAAM,IAAI,CAACC,cAAc,CAACD,OAAO3C,QAAQyB,OAAO;YAClD;YAEA,QAAQ;YACRoB,IAAAA,sCAAsB,EAAC7C,SAASqC;YAEhC,UAAU;YACV,MAAMS,cAAc,MAAM,IAAI,CAAC3C,aAAa,CAACC,WAAW,CACtDC,mCAAoB,CAAC0C,aAAa,EAClC/C;YAGF,oBAAoB;YACpB,IAAI8C,eAAe,OAAOA,gBAAgB,YAAY,UAAUA,aAAa;gBAC3ET,WAAWS;YACb;YAEA,OAAOT;QACT,EAAE,OAAOM,OAAO;YACd,QAAQ;YACR,MAAMK,eAAeL,iBAAiBM,mBAAY,GAAGN,QAAQ,IAAI,CAACC,cAAc,CAACD,OAAO3C,QAAQyB,OAAO;YACvGyB,IAAAA,kCAAkB,EAAClD,SAASgD;YAE5B,WAAW;YACX,MAAMG,eAAe,MAAM,IAAI,CAAChD,aAAa,CAACC,WAAW,CACvDC,mCAAoB,CAAC+C,QAAQ,EAC7BpD;YAGF,gBAAgB;YAChB,IAAImD,iBAAiB,MAAM;gBACzB,MAAMH;YACR;YAEA,2BAA2B;YAC3B,IAAIhD,QAAQqC,QAAQ,EAAE;gBACpB,OAAOrC,QAAQqC,QAAQ;YACzB;YAEA,MAAMW;QACR,SAAU;YACR,SAAS;YACT,MAAM,IAAI,CAAC7C,aAAa,CAACC,WAAW,CAACC,mCAAoB,CAACgD,OAAO,EAAErD;QACrE;IACF;IAEA;;;;;;;GAOC,GACD,MAAMY,IACJV,GAAW,EACXwB,OAA2D,EAC7B;QAC9B,OAAO,IAAI,CAACD,OAAO,CAAY;YAC7B,GAAGC,OAAO;YACVxB;YACAoD,QAAQ;QACV;IACF;IAEA;;;;;;;;GAQC,GACD,MAAMC,KACJrD,GAAW,EACXsD,IAAwC,EACxC9B,OAAoE,EACtC;QAC9B,OAAO,IAAI,CAACD,OAAO,CAAY;YAC7B,GAAGC,OAAO;YACVxB;YACAoD,QAAQ;YACRE;QACF;IACF;IAEA;;;;;;;;GAQC,GACD,MAAMC,IACJvD,GAAW,EACXsD,IAAwC,EACxC9B,OAAoE,EACtC;QAC9B,OAAO,IAAI,CAACD,OAAO,CAAY;YAC7B,GAAGC,OAAO;YACVxB;YACAoD,QAAQ;YACRE;QACF;IACF;IAEA;;;;;;;;GAQC,GACD,MAAME,MACJxD,GAAW,EACXsD,IAAwC,EACxC9B,OAAoE,EACtC;QAC9B,OAAO,IAAI,CAACD,OAAO,CAAY;YAC7B,GAAGC,OAAO;YACVxB;YACAoD,QAAQ;YACRE;QACF;IACF;IAEA;;;;;;;GAOC,GACD,MAAMG,OACJzD,GAAW,EACXwB,OAA2D,EAC7B;QAC9B,OAAO,IAAI,CAACD,OAAO,CAAY;YAC7B,GAAGC,OAAO;YACVxB;YACAoD,QAAQ;QACV;IACF;IAEA;;;;;GAKC,GACD,AAAQ1B,aAAwBF,OAAkC,EAA6B;QAC7F,MAAMkC,UAAU,IAAI,CAACnD,MAAM,CAACmD,OAAO,IAAI;QACvC,MAAM1D,MAAM0D,UAAU,GAAGA,UAAUlC,QAAQxB,GAAG,EAAE,GAAGwB,QAAQxB,GAAG;QAE9D,OAAO;YACL,GAAGwB,OAAO;YACVxB;YACA2D,SAAS;gBACP,GAAG,IAAI,CAACpD,MAAM,CAACqD,cAAc;gBAC7B,GAAGpC,QAAQmC,OAAO;YACpB;YACAE,SAASrC,QAAQqC,OAAO,IAAI,IAAI,CAACtD,MAAM,CAACuD,cAAc;QACxD;IACF;IAEA;;GAEC,GACD,AAAQ1B,YACN7C,OAAe,EACfwE,IAAsB,EACtBC,IAAsB,EACtBxC,OAMC,EACa;QACd,OAAO,IAAIuB,mBAAY,CAACxD,SAASwE,MAAMC,MAAMxC;IAC/C;IAEA;;GAEC,GACD,AAAQkB,eAAeD,KAAc,EAAElB,OAAwB,EAAgB;QAC7E,IAAIkB,iBAAiBM,mBAAY,EAAE;YACjC,OAAON;QACT;QAEA,gBAAgB;QAChB,IAAIA,iBAAiB/C,SAAS+C,MAAMxD,IAAI,KAAK,cAAc;YACzD,OAAO,IAAI,CAACmD,WAAW,CACrB,SACAC,uBAAgB,CAACC,WAAW,EAC5BC,uBAAgB,CAACC,eAAe,EAChC;gBAAEyB,OAAOxB;gBAAOlB;YAAQ;QAE5B;QAEA,SAAS;QACT,IAAIkB,iBAAiB/C,SAAU+C,CAAAA,MAAMlD,OAAO,CAAC2E,QAAQ,CAAC,cAAczB,MAAMlD,OAAO,CAAC2E,QAAQ,CAAC,UAAS,GAAI;YACtG,OAAO,IAAI,CAAC9B,WAAW,CACrB,QACAC,uBAAgB,CAAC8B,aAAa,EAC9B5B,uBAAgB,CAAC6B,eAAe,EAChC;gBAAEH,OAAOxB;gBAAOlB;YAAQ;QAE5B;QAEA,SAAS;QACT,IAAIkB,iBAAiB/C,SAAU+C,CAAAA,MAAMlD,OAAO,CAAC2E,QAAQ,CAAC,cAAczB,MAAMlD,OAAO,CAAC2E,QAAQ,CAAC,UAAS,GAAI;YACtG,OAAO,IAAI,CAAC9B,WAAW,CACrB,UACAC,uBAAgB,CAACgC,aAAa,EAC9B9B,uBAAgB,CAAC+B,yBAAyB,EAC1C;gBAAEL,OAAOxB;gBAAOlB;YAAQ;QAE5B;QAEA,sBAAsB;QACtB,IAAIkB,SAAS,OAAOA,UAAU,YAAY,YAAYA,OAAO;YAC3D,MAAM8B,SAAS,AAAC9B,MAA6B8B,MAAM;YACnD,MAAMC,gBAAgBD,UAAU;YAChC,OAAO,IAAI,CAACnC,WAAW,CACrB,CAAC,KAAK,EAAEmC,OAAO,GAAG,CAAC,EACnBlC,uBAAgB,CAACoC,UAAU,EAC3BD,gBAAgBjC,uBAAgB,CAACmC,YAAY,GAAGnC,uBAAgB,CAACoC,YAAY,EAC7E;gBAAEJ;gBAAQN,OAAOxB;gBAAOlB;YAAQ;QAEpC;QAEA,OAAO;QACP,OAAO,IAAI,CAACa,WAAW,CACrBK,iBAAiB/C,QAAQ+C,MAAMlD,OAAO,GAAG,QACzC8C,uBAAgB,CAACuC,aAAa,EAC9BrC,uBAAgB,CAAC+B,yBAAyB,EAC1C;YAAEL,OAAOxB;YAAOlB;QAAQ;IAE5B;IAEA;;GAEC,GACD,MAAMsD,UAAyB;QAC7B,IAAI,IAAI,CAACxE,OAAO,EAAEwE,SAAS;YACzB,MAAM,IAAI,CAACxE,OAAO,CAACwE,OAAO;QAC5B;QACA,IAAI,CAAC5E,aAAa,CAAC6E,KAAK;QACxB,IAAI,CAACzE,OAAO,GAAG;QACf,IAAI,CAAC1B,WAAW,GAAG;IACrB;IAteA,YAAY4B,SAA8B,CAAC,CAAC,CAAE;QAZ9C,uBAAQA,UAAR,KAAA;QACA,uBAAQN,iBAAR,KAAA;QACA,uBAAQI,WAAiC;QACzC,uBAAQ1B,eAA6B;QAUnC,IAAI,CAAC4B,MAAM,GAAGA;QACd,IAAI,CAACN,aAAa,GAAG,IAAI8E,4BAAa;QAEtC,OAAO;QACP,IAAIxE,OAAOyE,OAAO,EAAE;YAClB,KAAK,MAAM7D,UAAUZ,OAAOyE,OAAO,CAAE;gBACnC,IAAI,CAAC/E,aAAa,CAACmB,QAAQ,CAACD;YAC9B;QACF;IACF;AA6dF"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 请求核心模块导出
|
|
3
|
-
*/ "use strict";
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
Object.defineProperty(exports, "RequestClient", {
|
|
8
|
-
enumerable: true,
|
|
9
|
-
get: function() {
|
|
10
|
-
return _RequestClient.RequestClient;
|
|
11
|
-
}
|
|
12
|
-
});
|
|
13
|
-
const _RequestClient = require("./RequestClient");
|
|
14
|
-
|
|
15
|
-
//# sourceMappingURL=index.js.map
|