uniky 1.0.10 → 1.0.13

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 (51) hide show
  1. package/README.md +103 -0
  2. package/dist/index.js +388 -0
  3. package/dist/index.js.map +1 -0
  4. package/dist/lib/hook/index.d.ts +2 -0
  5. package/dist/lib/hook/index.d.ts.map +1 -0
  6. package/dist/lib/hook/index.js +3 -0
  7. package/dist/lib/hook/index.js.map +1 -0
  8. package/dist/lib/hook/useParam.d.ts +19 -0
  9. package/dist/lib/hook/useParam.d.ts.map +1 -0
  10. package/dist/lib/hook/useParam.js +102 -0
  11. package/dist/lib/hook/useParam.js.map +1 -0
  12. package/dist/lib/http/index.d.ts +2 -0
  13. package/dist/lib/http/index.d.ts.map +1 -0
  14. package/dist/lib/http/index.js +3 -0
  15. package/dist/lib/http/index.js.map +1 -0
  16. package/dist/lib/http/ky.d.ts +53 -0
  17. package/dist/lib/http/ky.d.ts.map +1 -0
  18. package/dist/lib/http/ky.js +323 -0
  19. package/dist/lib/http/ky.js.map +1 -0
  20. package/dist/lib/index.d.ts +3 -0
  21. package/dist/lib/index.d.ts.map +1 -0
  22. package/dist/lib/index.js +4 -0
  23. package/dist/lib/index.js.map +1 -0
  24. package/dist/plugin/global.defined.d.ts +3 -0
  25. package/dist/plugin/global.defined.d.ts.map +1 -0
  26. package/dist/plugin/global.defined.js +284 -0
  27. package/dist/plugin/global.defined.js.map +1 -0
  28. package/dist/plugin/index.d.ts +11 -0
  29. package/dist/plugin/index.d.ts.map +1 -0
  30. package/dist/plugin/index.js +16 -0
  31. package/dist/plugin/index.js.map +1 -0
  32. package/dist/plugin/lib.defined.d.ts +2 -0
  33. package/dist/plugin/lib.defined.d.ts.map +1 -0
  34. package/dist/plugin/lib.defined.js +2 -0
  35. package/dist/plugin/lib.defined.js.map +1 -0
  36. package/dist/plugin/pages.defined.d.ts +6 -0
  37. package/dist/plugin/pages.defined.d.ts.map +1 -0
  38. package/dist/plugin/pages.defined.js +230 -0
  39. package/dist/plugin/pages.defined.js.map +1 -0
  40. package/package.json +19 -11
  41. package/src/lib/hook/index.ts +0 -2
  42. package/src/lib/hook/useParam.ts +0 -114
  43. package/src/lib/http/index.ts +0 -2
  44. package/src/lib/http/ky.ts +0 -454
  45. package/src/lib/index.ts +0 -3
  46. package/src/plugin/_pages.md +0 -37
  47. package/src/plugin/global.defined.ts +0 -333
  48. package/src/plugin/index.ts +0 -29
  49. package/src/plugin/lib.defined.ts +0 -2
  50. package/src/plugin/pages.defined.ts +0 -275
  51. package/src/types/uni-app.d.ts +0 -75
package/README.md CHANGED
@@ -102,6 +102,109 @@ import { installGlobals } from './autoGen/global.install';
102
102
  installGlobals();
103
103
  ```
104
104
 
105
+ ## 故障排除
106
+
107
+ ### ESM 相关错误
108
+
109
+ 如果遇到类似以下错误:
110
+
111
+ ```
112
+ ERROR: [plugin: externalize-deps] Failed to resolve "uniky/plugin".
113
+ This package is ESM only but it was tried to load by `require`.
114
+ ```
115
+
116
+ **解决方案:**
117
+
118
+ 1. **确保项目 package.json 配置正确**
119
+
120
+ 在使用 `uniky` 的项目中,确保 `package.json` 包含:
121
+
122
+ ```json
123
+ {
124
+ "type": "module"
125
+ }
126
+ ```
127
+
128
+ 2. **确保 vite.config.ts 使用 ES 模块语法**
129
+
130
+ ```typescript
131
+ // ✅ 正确 - 使用 import
132
+ import { defineConfig } from 'vite';
133
+ import uni from '@dcloudio/vite-plugin-uni';
134
+ import { unikyPlugin } from 'uniky/plugin';
135
+
136
+ export default defineConfig({
137
+ plugins: [uni(), ...unikyPlugin()]
138
+ });
139
+
140
+ // ❌ 错误 - 不要使用 require
141
+ const { unikyPlugin } = require('uniky/plugin');
142
+ ```
143
+
144
+ 3. **配置 Vite 以正确处理 TypeScript 源码**
145
+
146
+ 如果使用的是 TypeScript 源码版本,确保 `vite.config.ts` 中正确配置:
147
+
148
+ ```typescript
149
+ import { defineConfig } from 'vite';
150
+ import uni from '@dcloudio/vite-plugin-uni';
151
+ import { unikyPlugin } from 'uniky/plugin';
152
+
153
+ export default defineConfig({
154
+ plugins: [uni(), ...unikyPlugin()],
155
+ optimizeDeps: {
156
+ // 排除 uniky 包,让 Vite 直接处理其 TS 源码
157
+ exclude: ['uniky']
158
+ }
159
+ });
160
+ ```
161
+
162
+ 4. **检查 tsconfig.json 配置**
163
+
164
+ 确保项目的 `tsconfig.json` 支持 ESM:
165
+
166
+ ```json
167
+ {
168
+ "compilerOptions": {
169
+ "module": "ESNext",
170
+ "moduleResolution": "bundler",
171
+ "esModuleInterop": true,
172
+ "allowSyntheticDefaultImports": true
173
+ }
174
+ }
175
+ ```
176
+
177
+ 5. **检查 Node.js 版本**
178
+
179
+ 确保使用 Node.js 16+ 版本,该版本对 ESM 支持更好。
180
+
181
+ 6. **清除缓存后重试**
182
+
183
+ ```bash
184
+ # 清除 node_modules 和 lock 文件
185
+ rm -rf node_modules package-lock.json
186
+ npm install
187
+
188
+ # 或使用 pnpm/yarn
189
+ rm -rf node_modules pnpm-lock.yaml
190
+ pnpm install
191
+
192
+ # 清除 Vite 缓存
193
+ rm -rf node_modules/.vite
194
+ ```
195
+
196
+ 7. **本地开发时使用 npm link**
197
+
198
+ 如果是本地开发调试 `uniky` 包:
199
+
200
+ ```bash
201
+ # 在 uniky 目录
202
+ npm link
203
+
204
+ # 在使用项目目录
205
+ npm link uniky
206
+ ```
207
+
105
208
  ## 架构说明
106
209
 
107
210
  本库直接发布 TypeScript 源码,不进行编译。这样做的好处:
package/dist/index.js ADDED
@@ -0,0 +1,388 @@
1
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
2
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
3
+ }) : x)(function(x) {
4
+ if (typeof require !== "undefined") return require.apply(this, arguments);
5
+ throw Error('Dynamic require of "' + x + '" is not supported');
6
+ });
7
+
8
+ // src/lib/hook/useParam.ts
9
+ var useParam = (callBack) => {
10
+ const { ref } = __require("vue");
11
+ const { onLoad } = __require("@dcloudio/uni-app");
12
+ const query = ref({});
13
+ const json = ref({});
14
+ const param = ref({});
15
+ onLoad((op) => {
16
+ let jsonObj = {};
17
+ let queryObj = {};
18
+ if (!op || Object.keys(op).length === 0) {
19
+ param.value = {};
20
+ query.value = {};
21
+ json.value = {};
22
+ callBack?.({ option: {}, query: {}, json: {} });
23
+ return;
24
+ }
25
+ const decodedOp = {};
26
+ for (const key in op) {
27
+ if (typeof op[key] === "string") {
28
+ if (key === "json") {
29
+ try {
30
+ decodedOp[key] = JSON.parse(decodeURIComponent(op[key]));
31
+ jsonObj = decodedOp[key];
32
+ json.value = jsonObj;
33
+ } catch (e) {
34
+ }
35
+ continue;
36
+ }
37
+ decodedOp[key] = decodeURIComponent(op[key]);
38
+ } else {
39
+ decodedOp[key] = op[key];
40
+ }
41
+ }
42
+ try {
43
+ queryObj = { ...decodedOp };
44
+ delete queryObj.json;
45
+ query.value = queryObj;
46
+ } catch (e) {
47
+ }
48
+ param.value = { ...jsonObj, ...queryObj };
49
+ callBack?.({ option: param.value, query: query.value, json: json.value });
50
+ });
51
+ return {
52
+ query,
53
+ param,
54
+ json
55
+ };
56
+ };
57
+ var useMountedLoad = (callBack) => {
58
+ const { ref, onMounted } = __require("vue");
59
+ const { onLoad } = __require("@dcloudio/uni-app");
60
+ const query = ref({});
61
+ const json = ref({});
62
+ const param = ref({});
63
+ onLoad((op) => {
64
+ let jsonObj = {};
65
+ let queryObj = {};
66
+ if (!op || Object.keys(op).length === 0) {
67
+ param.value = {};
68
+ query.value = {};
69
+ json.value = {};
70
+ return;
71
+ }
72
+ const decodedOp = {};
73
+ for (const key in op) {
74
+ if (typeof op[key] === "string") {
75
+ if (key === "json") {
76
+ try {
77
+ decodedOp[key] = JSON.parse(decodeURIComponent(op[key]));
78
+ jsonObj = decodedOp[key];
79
+ json.value = jsonObj;
80
+ } catch (e) {
81
+ }
82
+ continue;
83
+ }
84
+ decodedOp[key] = decodeURIComponent(op[key]);
85
+ } else {
86
+ decodedOp[key] = op[key];
87
+ }
88
+ }
89
+ try {
90
+ queryObj = { ...decodedOp };
91
+ delete queryObj.json;
92
+ query.value = queryObj;
93
+ } catch (e) {
94
+ }
95
+ param.value = { ...jsonObj, ...queryObj };
96
+ });
97
+ onMounted(() => {
98
+ callBack?.({
99
+ option: param.value || {},
100
+ query: query.value || {},
101
+ json: json.value || {}
102
+ });
103
+ });
104
+ return {
105
+ query,
106
+ param,
107
+ json
108
+ };
109
+ };
110
+
111
+ // src/lib/http/ky.ts
112
+ var UniKyBase = class {
113
+ constructor(options = {}) {
114
+ this.defaultOptions = {
115
+ prefixUrl: "",
116
+ timeout: 6e4,
117
+ headers: {},
118
+ retry: 0,
119
+ hooks: {
120
+ beforeRequest: [],
121
+ afterResponse: []
122
+ },
123
+ ...options
124
+ };
125
+ }
126
+ async request(url, options = {}) {
127
+ const mergedOptions = this.mergeOptions(options);
128
+ const fullUrl = this.getFullUrl(url, mergedOptions);
129
+ if (mergedOptions.hud) {
130
+ mergedOptions.hud.start();
131
+ }
132
+ let request = {
133
+ url: fullUrl,
134
+ method: (options.method || "GET").toUpperCase(),
135
+ headers: mergedOptions.headers || {},
136
+ body: options.data,
137
+ timeout: mergedOptions.timeout
138
+ };
139
+ if (mergedOptions.hooks?.beforeRequest?.length) {
140
+ for (const hook of mergedOptions.hooks.beforeRequest) {
141
+ const result = await hook(request, mergedOptions);
142
+ if (result !== void 0 && result !== null) {
143
+ request = result;
144
+ }
145
+ }
146
+ }
147
+ const requestOptions = {
148
+ url: request.url,
149
+ method: request.method,
150
+ header: request.headers,
151
+ data: request.body,
152
+ timeout: request.timeout
153
+ };
154
+ try {
155
+ let retries = mergedOptions.retry || 0;
156
+ let response;
157
+ while (true) {
158
+ try {
159
+ response = await this.makeRequest(requestOptions, request.url);
160
+ break;
161
+ } catch (error) {
162
+ if (retries <= 0) {
163
+ response = error;
164
+ break;
165
+ }
166
+ retries--;
167
+ }
168
+ }
169
+ if (mergedOptions.hooks?.afterResponse?.length) {
170
+ let processedResponse = response;
171
+ for (const hook of mergedOptions.hooks.afterResponse) {
172
+ const result = await hook(processedResponse, request, mergedOptions);
173
+ if (result !== void 0 && result !== null) {
174
+ processedResponse = result;
175
+ }
176
+ }
177
+ if (mergedOptions.hud) {
178
+ mergedOptions.hud.end(
179
+ processedResponse.ok,
180
+ !processedResponse.ok ? processedResponse : void 0
181
+ );
182
+ }
183
+ if (!processedResponse.ok) {
184
+ throw processedResponse;
185
+ }
186
+ return processedResponse.data;
187
+ }
188
+ if (mergedOptions.hud) {
189
+ mergedOptions.hud.end(response.ok, !response.ok ? response : void 0);
190
+ }
191
+ if (!response.ok) {
192
+ throw response;
193
+ }
194
+ return response.data;
195
+ } catch (error) {
196
+ if (mergedOptions.hud && !error.statusCode) {
197
+ mergedOptions.hud.end(false, error);
198
+ }
199
+ throw error;
200
+ }
201
+ }
202
+ makeRequest(options, originalUrl) {
203
+ return new Promise((resolve, reject) => {
204
+ uni.request({
205
+ ...options,
206
+ success: (res) => {
207
+ const response = {
208
+ data: res.data,
209
+ statusCode: res.statusCode,
210
+ header: res.header,
211
+ cookies: res.cookies || [],
212
+ ok: res.statusCode >= 200 && res.statusCode < 300,
213
+ redirected: res.statusCode === 301 || res.statusCode === 302,
214
+ url: originalUrl
215
+ };
216
+ if (response.ok) {
217
+ resolve(response);
218
+ } else {
219
+ reject(response);
220
+ }
221
+ },
222
+ fail: (err) => {
223
+ reject({
224
+ ...err,
225
+ ok: false,
226
+ statusCode: 0,
227
+ header: {},
228
+ cookies: [],
229
+ redirected: false,
230
+ url: originalUrl,
231
+ data: null
232
+ });
233
+ }
234
+ });
235
+ });
236
+ }
237
+ mergeOptions(options) {
238
+ const mergedHooks = {
239
+ beforeRequest: [...this.defaultOptions.hooks?.beforeRequest || []],
240
+ afterResponse: [...this.defaultOptions.hooks?.afterResponse || []]
241
+ };
242
+ if (options.hooks?.beforeRequest) {
243
+ if (Array.isArray(options.hooks.beforeRequest)) {
244
+ mergedHooks.beforeRequest.push(...options.hooks.beforeRequest);
245
+ } else {
246
+ mergedHooks.beforeRequest.push(options.hooks.beforeRequest);
247
+ }
248
+ }
249
+ if (options.hooks?.afterResponse) {
250
+ if (Array.isArray(options.hooks.afterResponse)) {
251
+ mergedHooks.afterResponse.push(...options.hooks.afterResponse);
252
+ } else {
253
+ mergedHooks.afterResponse.push(options.hooks.afterResponse);
254
+ }
255
+ }
256
+ return {
257
+ ...this.defaultOptions,
258
+ ...options,
259
+ headers: {
260
+ ...this.defaultOptions.headers,
261
+ ...options.headers
262
+ },
263
+ hooks: mergedHooks
264
+ };
265
+ }
266
+ addSearchParams(url, searchParams) {
267
+ if (!searchParams) {
268
+ return url;
269
+ }
270
+ let queryString = "";
271
+ if (typeof searchParams === "string") {
272
+ queryString = searchParams.startsWith("?") ? searchParams.substring(1) : searchParams;
273
+ } else if (typeof URLSearchParams !== "undefined" && searchParams instanceof URLSearchParams) {
274
+ queryString = searchParams.toString();
275
+ } else if (searchParams && typeof searchParams === "object") {
276
+ const params = [];
277
+ for (const [key, value] of Object.entries(searchParams)) {
278
+ if (value !== void 0 && value !== null) {
279
+ params.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);
280
+ }
281
+ }
282
+ queryString = params.join("&");
283
+ }
284
+ const hasQueryString = url.includes("?");
285
+ if (queryString) {
286
+ return url + (hasQueryString ? "&" : "?") + queryString;
287
+ }
288
+ return url;
289
+ }
290
+ getFullUrl(url, options) {
291
+ const prefixUrl = options.prefixUrl ? options.prefixUrl.replace(/\/$/, "") : "";
292
+ if (url.startsWith("http://") || url.startsWith("https://")) {
293
+ return this.addSearchParams(url, options.searchParams);
294
+ }
295
+ const normalizedUrl = url.startsWith("/") ? url : `/${url}`;
296
+ const fullUrl = `${prefixUrl}${normalizedUrl}`;
297
+ return this.addSearchParams(fullUrl, options.searchParams);
298
+ }
299
+ // 创建具有 json 方法的 Promise
300
+ createUniKyPromise(promise) {
301
+ const uniKyPromise = promise;
302
+ uniKyPromise.json = function() {
303
+ return this.then((data) => {
304
+ if (typeof data === "string") {
305
+ try {
306
+ return JSON.parse(data);
307
+ } catch (e) {
308
+ return data;
309
+ }
310
+ }
311
+ return data;
312
+ });
313
+ };
314
+ return uniKyPromise;
315
+ }
316
+ get(url, options = {}) {
317
+ return this.createUniKyPromise(this.request(url, { ...options, method: "GET" }));
318
+ }
319
+ post(url, options = {}) {
320
+ return this.createUniKyPromise(this.request(url, { ...options, method: "POST" }));
321
+ }
322
+ put(url, options = {}) {
323
+ return this.createUniKyPromise(this.request(url, { ...options, method: "PUT" }));
324
+ }
325
+ delete(url, options = {}) {
326
+ return this.createUniKyPromise(this.request(url, { ...options, method: "DELETE" }));
327
+ }
328
+ patch(url, options = {}) {
329
+ return this.createUniKyPromise(this.request(url, { ...options, method: "PATCH" }));
330
+ }
331
+ head(url, options = {}) {
332
+ return this.createUniKyPromise(this.request(url, { ...options, method: "HEAD" }));
333
+ }
334
+ options(url, options = {}) {
335
+ return this.createUniKyPromise(this.request(url, { ...options, method: "OPTIONS" }));
336
+ }
337
+ };
338
+ function createUniKy(defaultOptions = {}) {
339
+ const base = new UniKyBase(defaultOptions);
340
+ const uniKyFunction = (url, options = {}) => {
341
+ return base["createUniKyPromise"](base["request"](url, options));
342
+ };
343
+ uniKyFunction.get = base.get.bind(base);
344
+ uniKyFunction.post = base.post.bind(base);
345
+ uniKyFunction.put = base.put.bind(base);
346
+ uniKyFunction.delete = base.delete.bind(base);
347
+ uniKyFunction.patch = base.patch.bind(base);
348
+ uniKyFunction.head = base.head.bind(base);
349
+ uniKyFunction.options = base.options.bind(base);
350
+ uniKyFunction.create = (options) => {
351
+ const mergedHooks = {
352
+ beforeRequest: [...defaultOptions.hooks?.beforeRequest || []],
353
+ afterResponse: [...defaultOptions.hooks?.afterResponse || []]
354
+ };
355
+ if (options.hooks?.beforeRequest) {
356
+ if (Array.isArray(options.hooks.beforeRequest)) {
357
+ mergedHooks.beforeRequest.push(...options.hooks.beforeRequest);
358
+ } else {
359
+ mergedHooks.beforeRequest.push(options.hooks.beforeRequest);
360
+ }
361
+ }
362
+ if (options.hooks?.afterResponse) {
363
+ if (Array.isArray(options.hooks.afterResponse)) {
364
+ mergedHooks.afterResponse.push(...options.hooks.afterResponse);
365
+ } else {
366
+ mergedHooks.afterResponse.push(options.hooks.afterResponse);
367
+ }
368
+ }
369
+ return createUniKy({
370
+ ...defaultOptions,
371
+ ...options,
372
+ hooks: mergedHooks,
373
+ headers: {
374
+ ...defaultOptions.headers,
375
+ ...options.headers
376
+ }
377
+ });
378
+ };
379
+ uniKyFunction.extend = (options) => {
380
+ return uniKyFunction.create(options);
381
+ };
382
+ return uniKyFunction;
383
+ }
384
+ var uniKy = createUniKy();
385
+
386
+ export { uniKy, useMountedLoad, useParam };
387
+ //# sourceMappingURL=index.js.map
388
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/hook/useParam.ts","../src/lib/http/ky.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { Ref } from 'vue'\n\ntype AnyObject = Record<string, any>\n\ninterface UseParamReturn<Q, J> {\n query: Ref<Partial<Q>>\n param: Ref<Partial<Q & J>>\n json: Ref<Partial<J>>\n}\n\nexport const useParam = <Q extends object = {}, J extends object = {}>(\n callBack?: (params: { option: Partial<Q & J>; query: Partial<Q>; json: Partial<J> }) => void,\n): UseParamReturn<Q, J> => {\n const { ref } = require('vue') as any\n const { onLoad } = require('@dcloudio/uni-app') as any\n\n const query = ref<Partial<Q>>({})\n const json = ref<Partial<J>>({})\n const param = ref<Partial<Q & J>>({})\n\n onLoad((op?: AnyObject) => {\n let jsonObj: any = {}\n let queryObj: any = {}\n\n if (!op || Object.keys(op).length === 0) {\n param.value = {} as any\n query.value = {} as any\n json.value = {} as any\n callBack?.({ option: {} as any, query: {} as any, json: {} as any })\n return\n }\n\n const decodedOp: { [k: string]: any } = {}\n for (const key in op) {\n if (typeof op[key] === 'string') {\n if (key === 'json') {\n try {\n decodedOp[key] = JSON.parse(decodeURIComponent(op[key]))\n jsonObj = decodedOp[key]\n json.value = jsonObj\n } catch (e) {}\n continue\n }\n decodedOp[key] = decodeURIComponent(op[key])\n } else {\n decodedOp[key] = op[key]\n }\n }\n\n try {\n queryObj = { ...decodedOp }\n delete queryObj.json\n query.value = queryObj\n } catch (e) {}\n\n param.value = { ...jsonObj, ...queryObj }\n callBack?.({ option: param.value as any, query: query.value as any, json: json.value as any })\n })\n\n return {\n query,\n param,\n json,\n }\n}\n\nexport const useMountedLoad = <Q extends object = {}, J extends object = {}>(\n callBack?: (params: { option: Partial<Q & J>; query: Partial<Q>; json: Partial<J> }) => void,\n): UseParamReturn<Q, J> => {\n const { ref, onMounted } = require('vue') as any\n const { onLoad } = require('@dcloudio/uni-app') as any\n\n const query = ref<Partial<Q>>({})\n const json = ref<Partial<J>>({})\n const param = ref<Partial<Q & J>>({})\n\n onLoad((op?: AnyObject) => {\n let jsonObj: any = {}\n let queryObj: any = {}\n\n if (!op || Object.keys(op).length === 0) {\n param.value = {} as any\n query.value = {} as any\n json.value = {} as any\n return\n }\n\n const decodedOp: { [k: string]: any } = {}\n for (const key in op) {\n if (typeof op[key] === 'string') {\n if (key === 'json') {\n try {\n decodedOp[key] = JSON.parse(decodeURIComponent(op[key]))\n jsonObj = decodedOp[key]\n json.value = jsonObj\n } catch (e) {}\n continue\n }\n decodedOp[key] = decodeURIComponent(op[key])\n } else {\n decodedOp[key] = op[key]\n }\n }\n\n try {\n queryObj = { ...decodedOp }\n delete queryObj.json\n query.value = queryObj\n } catch (e) {}\n\n param.value = { ...jsonObj, ...queryObj }\n })\n\n onMounted(() => {\n callBack?.({\n option: (param.value || {}) as any,\n query: (query.value || {}) as any,\n json: (json.value || {}) as any\n })\n })\n\n return {\n query,\n param,\n json,\n }\n}","// uniKy.ts\n\n// 类型定义\nexport interface UniKyRequest {\n url: string\n method: string\n headers: Record<string, string>\n body?: any\n timeout?: number\n}\n\n// 添加 ActiveHud 接口定义\nexport interface ActiveHud {\n start(info?: any):void\n\n end(success: boolean, message?: any):void\n}\n\nexport interface UniKyOptions {\n prefixUrl?: string\n timeout?: number\n headers?: Record<string, string>\n retry?: number\n method?: string\n data?: any\n searchParams?: Record<string, any> | URLSearchParams | string\n hud?: ActiveHud // 添加 hud 属性\n hooks?: {\n beforeRequest?: Array<\n (\n request: UniKyRequest,\n options: UniKyOptions,\n ) => UniKyRequest | void | Promise<UniKyRequest | void>\n >\n afterResponse?: Array<\n (\n response: UniKyResponse,\n request: UniKyRequest,\n options: UniKyOptions,\n ) => any | void | Promise<any | void>\n >\n }\n\n [key: string]: any\n}\n\nexport interface UniKyResponse<T = any> {\n data: T\n statusCode: number\n header: Record<string, string>\n cookies: string[]\n ok: boolean\n redirected: boolean\n message?: string\n url: string\n}\n\nexport interface UniKyPromise<T = any> extends Promise<T> {\n json<R = T>(): Promise<R>\n}\n\nexport interface UniKyInstance {\n <T = any>(url: string, options?: UniKyOptions): UniKyPromise<T>\n\n get: <T = any>(url: string, options?: UniKyOptions) => UniKyPromise<T>\n post: <T = any>(url: string, options?: UniKyOptions) => UniKyPromise<T>\n put: <T = any>(url: string, options?: UniKyOptions) => UniKyPromise<T>\n delete: <T = any>(url: string, options?: UniKyOptions) => UniKyPromise<T>\n patch: <T = any>(url: string, options?: UniKyOptions) => UniKyPromise<T>\n head: <T = any>(url: string, options?: UniKyOptions) => UniKyPromise<T>\n options: <T = any>(url: string, options?: UniKyOptions) => UniKyPromise<T>\n create: (defaultOptions: UniKyOptions) => UniKyInstance\n extend: (options: UniKyOptions) => UniKyInstance\n}\n\n// 创建一个基础类实现所有方法\nclass UniKyBase {\n protected defaultOptions: UniKyOptions\n\n constructor(options: UniKyOptions = {}) {\n this.defaultOptions = {\n prefixUrl: '',\n timeout: 60000,\n headers: {},\n retry: 0,\n hooks: {\n beforeRequest: [],\n afterResponse: [],\n },\n ...options,\n }\n }\n\n protected async request<T = any>(url: string, options: UniKyOptions = {}): Promise<T> {\n const mergedOptions = this.mergeOptions(options)\n const fullUrl = this.getFullUrl(url, mergedOptions)\n\n // 如果有 hud,则调用 start 方法\n if (mergedOptions.hud) {\n mergedOptions.hud.start()\n }\n\n // 创建请求对象\n let request: UniKyRequest = {\n url: fullUrl,\n method: (options.method || 'GET').toUpperCase(),\n headers: mergedOptions.headers || {},\n body: options.data,\n timeout: mergedOptions.timeout,\n }\n\n // 执行请求前拦截器\n if (mergedOptions.hooks?.beforeRequest?.length) {\n for (const hook of mergedOptions.hooks.beforeRequest) {\n const result = await hook(request, mergedOptions)\n // 如果拦截器返回了新的请求对象,则使用它\n if (result !== undefined && result !== null) {\n request = result as UniKyRequest\n }\n // 如果拦截器没有返回值(void),则继续使用当前的请求对象\n }\n }\n\n // 转换为 uni.request 需要的格式\n const requestOptions: UniApp.RequestOptions = {\n url: request.url,\n method: request.method as\n | 'GET'\n | 'POST'\n | 'PUT'\n | 'DELETE'\n | 'CONNECT'\n | 'HEAD'\n | 'OPTIONS'\n | 'TRACE',\n header: request.headers,\n data: request.body,\n timeout: request.timeout,\n }\n\n try {\n let retries = mergedOptions.retry || 0\n let response: any\n\n while (true) {\n try {\n response = await this.makeRequest(requestOptions, request.url)\n break\n } catch (error) {\n if (retries <= 0) {\n // 如果是请求失败(网络错误等),直接使用错误对象\n response = error\n break\n }\n retries--\n }\n }\n\n // 无论成功还是HTTP错误(如404),都执行响应后拦截器\n if (mergedOptions.hooks?.afterResponse?.length) {\n let processedResponse = response\n for (const hook of mergedOptions.hooks.afterResponse) {\n const result = await hook(processedResponse, request, mergedOptions)\n // 如果拦截器返回了新的响应对象,则使用它\n if (result !== undefined && result !== null) {\n processedResponse = result\n }\n }\n\n // 只在这里调用一次 hud.end\n if (mergedOptions.hud) {\n mergedOptions.hud.end(\n processedResponse.ok,\n !processedResponse.ok ? processedResponse : undefined,\n )\n }\n\n // 如果是HTTP错误且没有被拦截器处理成功响应,则抛出\n if (!processedResponse.ok) {\n throw processedResponse\n }\n\n return processedResponse.data\n }\n\n // 只在这里调用一次 hud.end\n if (mergedOptions.hud) {\n mergedOptions.hud.end(response.ok, !response.ok ? response : undefined)\n }\n\n // 如果没有拦截器但有HTTP错误,抛出\n if (!response.ok) {\n throw response\n }\n\n return response.data\n } catch (error:any) {\n // 移除这里的 hud.end 调用,因为已经在上面调用过了\n // 如果是网络错误等未捕获的异常,才在这里调用 hud.end\n if (mergedOptions.hud && !error.statusCode) {\n mergedOptions.hud.end(false, error)\n }\n throw error\n }\n }\n\n protected makeRequest(\n options: UniApp.RequestOptions,\n originalUrl: string,\n ): Promise<UniKyResponse> {\n return new Promise((resolve, reject) => {\n uni.request({\n ...options,\n success: (res) => {\n const response: UniKyResponse = {\n data: res.data,\n statusCode: res.statusCode,\n header: res.header,\n cookies: res.cookies || [],\n ok: res.statusCode >= 200 && res.statusCode < 300,\n redirected: res.statusCode === 301 || res.statusCode === 302,\n url: originalUrl,\n }\n\n // 处理非2xx状态码\n if (response.ok) {\n resolve(response)\n } else {\n reject(response)\n }\n },\n fail: (err) => {\n reject({\n ...err,\n ok: false,\n statusCode: 0,\n header: {},\n cookies: [],\n redirected: false,\n url: originalUrl,\n data: null,\n })\n },\n })\n })\n }\n\n protected mergeOptions(options: UniKyOptions): UniKyOptions {\n // 创建新的 hooks 对象,确保不修改原始对象\n const mergedHooks = {\n beforeRequest: [...(this.defaultOptions.hooks?.beforeRequest || [])],\n afterResponse: [...(this.defaultOptions.hooks?.afterResponse || [])],\n }\n\n // 添加传入的 hooks\n if (options.hooks?.beforeRequest) {\n if (Array.isArray(options.hooks.beforeRequest)) {\n mergedHooks.beforeRequest.push(...options.hooks.beforeRequest)\n } else {\n // 如果不是数组,转换为数组\n mergedHooks.beforeRequest.push(options.hooks.beforeRequest as any)\n }\n }\n\n if (options.hooks?.afterResponse) {\n if (Array.isArray(options.hooks.afterResponse)) {\n mergedHooks.afterResponse.push(...options.hooks.afterResponse)\n } else {\n // 如果不是数组,转换为数组\n mergedHooks.afterResponse.push(options.hooks.afterResponse as any)\n }\n }\n\n return {\n ...this.defaultOptions,\n ...options,\n headers: {\n ...this.defaultOptions.headers,\n ...options.headers,\n },\n hooks: mergedHooks,\n }\n }\n\n protected addSearchParams(\n url: string,\n searchParams?: Record<string, any> | URLSearchParams | string,\n ): string {\n if (!searchParams) {\n return url\n }\n\n // 准备查询字符串\n let queryString = ''\n\n if (typeof searchParams === 'string') {\n // 如果是字符串,直接使用\n queryString = searchParams.startsWith('?') ? searchParams.substring(1) : searchParams\n } else if (typeof URLSearchParams !== 'undefined' && searchParams instanceof URLSearchParams) {\n // 如果是 URLSearchParams 实例,转为字符串\n queryString = searchParams.toString()\n } else if (searchParams && typeof searchParams === 'object') {\n // 如果是对象,手动构建查询字符串\n const params = []\n for (const [key, value] of Object.entries(searchParams)) {\n if (value !== undefined && value !== null) {\n // @ts-ignore\n params.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`)\n }\n }\n queryString = params.join('&')\n }\n\n // 添加到 URL\n const hasQueryString = url.includes('?')\n if (queryString) {\n return url + (hasQueryString ? '&' : '?') + queryString\n }\n\n return url\n }\n\n protected getFullUrl(url: string, options: UniKyOptions): string {\n const prefixUrl = options.prefixUrl ? options.prefixUrl.replace(/\\/$/, '') : ''\n\n // 首先判断是否是完整URL\n if (url.startsWith('http://') || url.startsWith('https://')) {\n // 对完整URL添加查询参数\n return this.addSearchParams(url, options.searchParams)\n }\n\n // 处理相对路径\n const normalizedUrl = url.startsWith('/') ? url : `/${url}`\n const fullUrl = `${prefixUrl}${normalizedUrl}`\n\n // 添加查询参数\n return this.addSearchParams(fullUrl, options.searchParams)\n }\n\n // 创建具有 json 方法的 Promise\n protected createUniKyPromise<T>(promise: Promise<T>): UniKyPromise<T> {\n const uniKyPromise = promise as UniKyPromise<T>\n\n uniKyPromise.json = function <R = T>() {\n return this.then((data) => {\n if (typeof data === 'string') {\n try {\n return JSON.parse(data)\n } catch (e) {\n return data as unknown as R\n }\n }\n return data as unknown as R\n })\n }\n\n return uniKyPromise\n }\n\n get<T = any>(url: string, options: UniKyOptions = {}): UniKyPromise<T> {\n return this.createUniKyPromise(this.request<T>(url, { ...options, method: 'GET' }))\n }\n\n post<T = any>(url: string, options: UniKyOptions = {}): UniKyPromise<T> {\n return this.createUniKyPromise(this.request<T>(url, { ...options, method: 'POST' }))\n }\n\n put<T = any>(url: string, options: UniKyOptions = {}): UniKyPromise<T> {\n return this.createUniKyPromise(this.request<T>(url, { ...options, method: 'PUT' }))\n }\n\n delete<T = any>(url: string, options: UniKyOptions = {}): UniKyPromise<T> {\n return this.createUniKyPromise(this.request<T>(url, { ...options, method: 'DELETE' }))\n }\n\n patch<T = any>(url: string, options: UniKyOptions = {}): UniKyPromise<T> {\n return this.createUniKyPromise(this.request<T>(url, { ...options, method: 'PATCH' }))\n }\n\n head<T = any>(url: string, options: UniKyOptions = {}): UniKyPromise<T> {\n return this.createUniKyPromise(this.request<T>(url, { ...options, method: 'HEAD' }))\n }\n\n options<T = any>(url: string, options: UniKyOptions = {}): UniKyPromise<T> {\n return this.createUniKyPromise(this.request<T>(url, { ...options, method: 'OPTIONS' }))\n }\n}\n\n// 使用函数工厂模式创建符合 UniKyInstance 接口的实例\nfunction createUniKy(defaultOptions: UniKyOptions = {}): UniKyInstance {\n const base = new UniKyBase(defaultOptions)\n\n // 创建主函数\n const uniKyFunction = <T = any>(url: string, options: UniKyOptions = {}): UniKyPromise<T> => {\n return base['createUniKyPromise'](base['request']<T>(url, options))\n }\n\n // 添加所有方法\n uniKyFunction.get = base.get.bind(base)\n uniKyFunction.post = base.post.bind(base)\n uniKyFunction.put = base.put.bind(base)\n uniKyFunction.delete = base.delete.bind(base)\n uniKyFunction.patch = base.patch.bind(base)\n uniKyFunction.head = base.head.bind(base)\n uniKyFunction.options = base.options.bind(base)\n\n // 添加 create 方法\n uniKyFunction.create = (options: UniKyOptions): UniKyInstance => {\n // 深度合并 hooks\n const mergedHooks = {\n beforeRequest: [...(defaultOptions.hooks?.beforeRequest || [])],\n afterResponse: [...(defaultOptions.hooks?.afterResponse || [])],\n }\n\n // 添加传入的 hooks\n if (options.hooks?.beforeRequest) {\n if (Array.isArray(options.hooks.beforeRequest)) {\n mergedHooks.beforeRequest.push(...options.hooks.beforeRequest)\n } else {\n // 如果不是数组,转换为数组\n mergedHooks.beforeRequest.push(options.hooks.beforeRequest as any)\n }\n }\n\n if (options.hooks?.afterResponse) {\n if (Array.isArray(options.hooks.afterResponse)) {\n mergedHooks.afterResponse.push(...options.hooks.afterResponse)\n } else {\n // 如果不是数组,转换为数组\n mergedHooks.afterResponse.push(options.hooks.afterResponse as any)\n }\n }\n\n return createUniKy({\n ...defaultOptions,\n ...options,\n hooks: mergedHooks,\n headers: {\n ...defaultOptions.headers,\n ...options.headers,\n },\n })\n }\n\n // 添加 extend 方法\n uniKyFunction.extend = (options: UniKyOptions): UniKyInstance => {\n return uniKyFunction.create(options)\n }\n\n return uniKyFunction\n}\n\n// 默认导出实例\nexport const uniKy = createUniKy()\n"]}
@@ -0,0 +1,2 @@
1
+ export * from './useParam.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/hook/index.ts"],"names":[],"mappings":"AACA,cAAc,eAAe,CAAC"}
@@ -0,0 +1,3 @@
1
+ // created by zhuxietong on 2026-01-30 16:37
2
+ export * from './useParam.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/hook/index.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,cAAc,eAAe,CAAC"}
@@ -0,0 +1,19 @@
1
+ export declare const useParam: <Q extends object = {}, J extends object = {}>(callBack?: (params: {
2
+ option: Partial<Q & J>;
3
+ query: Partial<Q>;
4
+ json: Partial<J>;
5
+ }) => void) => {
6
+ query: [Partial<Q>] extends [import("vue").Ref<any, any>] ? import("@vue/shared").IfAny<import("vue").Ref<any, any> & Partial<Q>, import("vue").Ref<import("vue").Ref<any, any> & Partial<Q>, import("vue").Ref<any, any> & Partial<Q>>, import("vue").Ref<any, any> & Partial<Q>> : import("vue").Ref<import("vue").UnwrapRef<Partial<Q>>, Partial<Q> | import("vue").UnwrapRef<Partial<Q>>>;
7
+ param: [Partial<Q & J>] extends [import("vue").Ref<any, any>] ? import("@vue/shared").IfAny<import("vue").Ref<any, any> & Partial<Q & J>, import("vue").Ref<import("vue").Ref<any, any> & Partial<Q & J>, import("vue").Ref<any, any> & Partial<Q & J>>, import("vue").Ref<any, any> & Partial<Q & J>> : import("vue").Ref<import("vue").UnwrapRef<Partial<Q & J>>, Partial<Q & J> | import("vue").UnwrapRef<Partial<Q & J>>>;
8
+ json: [Partial<J>] extends [import("vue").Ref<any, any>] ? import("@vue/shared").IfAny<import("vue").Ref<any, any> & Partial<J>, import("vue").Ref<import("vue").Ref<any, any> & Partial<J>, import("vue").Ref<any, any> & Partial<J>>, import("vue").Ref<any, any> & Partial<J>> : import("vue").Ref<import("vue").UnwrapRef<Partial<J>>, Partial<J> | import("vue").UnwrapRef<Partial<J>>>;
9
+ };
10
+ export declare const useMountedLoad: <Q extends object = {}, J extends object = {}>(callBack?: (params: {
11
+ option: Partial<Q & J>;
12
+ query: Partial<Q>;
13
+ json: Partial<J>;
14
+ }) => void) => {
15
+ query: [Partial<Q>] extends [import("vue").Ref<any, any>] ? import("@vue/shared").IfAny<import("vue").Ref<any, any> & Partial<Q>, import("vue").Ref<import("vue").Ref<any, any> & Partial<Q>, import("vue").Ref<any, any> & Partial<Q>>, import("vue").Ref<any, any> & Partial<Q>> : import("vue").Ref<import("vue").UnwrapRef<Partial<Q>>, Partial<Q> | import("vue").UnwrapRef<Partial<Q>>>;
16
+ param: [Partial<Q & J>] extends [import("vue").Ref<any, any>] ? import("@vue/shared").IfAny<import("vue").Ref<any, any> & Partial<Q & J>, import("vue").Ref<import("vue").Ref<any, any> & Partial<Q & J>, import("vue").Ref<any, any> & Partial<Q & J>>, import("vue").Ref<any, any> & Partial<Q & J>> : import("vue").Ref<import("vue").UnwrapRef<Partial<Q & J>>, Partial<Q & J> | import("vue").UnwrapRef<Partial<Q & J>>>;
17
+ json: [Partial<J>] extends [import("vue").Ref<any, any>] ? import("@vue/shared").IfAny<import("vue").Ref<any, any> & Partial<J>, import("vue").Ref<import("vue").Ref<any, any> & Partial<J>, import("vue").Ref<any, any> & Partial<J>>, import("vue").Ref<any, any> & Partial<J>> : import("vue").Ref<import("vue").UnwrapRef<Partial<J>>, Partial<J> | import("vue").UnwrapRef<Partial<J>>>;
18
+ };
19
+ //# sourceMappingURL=useParam.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useParam.d.ts","sourceRoot":"","sources":["../../../src/lib/hook/useParam.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,MAAM,GAAG,EAAE,EAAE,CAAC,SAAS,MAAM,GAAG,EAAE,EACnE,WAAW,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;CAAE,KAAK,IAAI;;;;CAkD7F,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,MAAM,GAAG,EAAE,EAAE,CAAC,SAAS,MAAM,GAAG,EAAE,EACzE,WAAW,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;CAAE,KAAK,IAAI;;;;CAwD7F,CAAA"}