@oiyo/framework 0.8.0 → 0.8.1
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/{index-D75LLisy.d.cts → index--TSUkNGq.d.cts} +65 -3
- package/dist/{index-D75LLisy.d.mts → index--TSUkNGq.d.mts} +65 -3
- package/dist/index.cjs +2 -2
- package/dist/index.d.cts +3 -3
- package/dist/index.d.mts +3 -3
- package/dist/index.mjs +2 -2
- package/dist/oiyo-CCQjEy5k.cjs +7 -0
- package/dist/oiyo-ZR-kfhVZ.mjs +7 -0
- package/dist/oiyo.cjs +2 -2
- package/dist/oiyo.d.cts +3 -3
- package/dist/oiyo.d.mts +3 -3
- package/dist/oiyo.mjs +2 -2
- package/dist/uni.cjs +1 -1
- package/dist/uni.d.cts +1 -1
- package/dist/uni.d.mts +1 -1
- package/dist/uni.mjs +1 -1
- package/dist/vue.cjs +1 -1
- package/dist/vue.d.cts +1 -1
- package/dist/vue.d.mts +1 -1
- package/dist/vue.mjs +1 -1
- package/package.json +5 -3
- package/dist/oiyo-CVxyc7ce.mjs +0 -7
- package/dist/oiyo-Cf0rDC-0.cjs +0 -7
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @oiyo/framework v0.8.
|
|
2
|
+
* @oiyo/framework v0.8.1
|
|
3
3
|
* Copyright (c) 2026 skiyee. All rights reserved.
|
|
4
4
|
* Commercial software. See LICENSE for terms.
|
|
5
5
|
* Official site: https://oiyo.js.org
|
|
@@ -244,7 +244,69 @@ interface HttpHooks<TOptions, TResponse> {
|
|
|
244
244
|
options: TOptions;
|
|
245
245
|
}) => MaybePromise<unknown>;
|
|
246
246
|
}
|
|
247
|
-
interface HttpConfig extends HttpCommonOptions, HttpHooks<HttpOptions, HttpResponse> {
|
|
247
|
+
interface HttpConfig extends HttpCommonOptions, HttpHooks<HttpOptions, HttpResponse> {
|
|
248
|
+
/**
|
|
249
|
+
* 传输适配器
|
|
250
|
+
* @description 整体替换或按动作覆盖底层传输实现;
|
|
251
|
+
* 未提供的动作回退默认 uni-app 适配器(多层配置间按动作浅合并)
|
|
252
|
+
*/
|
|
253
|
+
adapter?: Partial<HttpAdapter>;
|
|
254
|
+
}
|
|
255
|
+
//#endregion
|
|
256
|
+
//#region src/oiyo/http/types/adapter.d.ts
|
|
257
|
+
/**
|
|
258
|
+
* 传输适配器
|
|
259
|
+
*
|
|
260
|
+
* @description 每个传输动作对应一个适配器函数,由适配器对接具体传输通道;
|
|
261
|
+
* 默认实现 `UniAppAdapter` 基于 uni-app 原生接口,
|
|
262
|
+
* 可在 `HttpConfig.adapter` 中整体替换或按动作覆盖(如 XHR / Mock / 测试通道)。
|
|
263
|
+
*
|
|
264
|
+
* @contract
|
|
265
|
+
* - `url` 为已拼接 baseURL 与 query 的完整传输地址
|
|
266
|
+
* - `options` 为多层配置合并后的最终选项
|
|
267
|
+
* - 需返回 `HttpAdapterTask`,resolve 出与 uni 原生结构一致的响应
|
|
268
|
+
* (`{ statusCode, data, header?, errMsg?, ... }`),
|
|
269
|
+
* 后续 `responseType` 解析、`validateStatus` 判定、钩子与重试流程保持一致
|
|
270
|
+
*/
|
|
271
|
+
interface HttpAdapter {
|
|
272
|
+
/** 普通请求适配器 (默认对接 uni.request) */
|
|
273
|
+
request: HttpRequestAdapter;
|
|
274
|
+
/** 文件上传适配器 (默认对接 uni.uploadFile) */
|
|
275
|
+
upload: HttpUploadAdapter;
|
|
276
|
+
/** 文件下载适配器 (默认对接 uni.downloadFile) */
|
|
277
|
+
download: HttpDownloadAdapter;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* 适配器任务
|
|
281
|
+
*
|
|
282
|
+
* @description 响应 Promise 基础上可选挂载 task 方法;
|
|
283
|
+
* 挂载对应方法即可解锁对应能力,未挂载时相关选项会被忽略(不报错):
|
|
284
|
+
* - `abort` → 配合 `signal` 选项中断传输
|
|
285
|
+
* - `onHeadersReceived` / `offHeadersReceived` → 配合 `onHeaders` 选项
|
|
286
|
+
* - `onChunkReceived` / `offChunkReceived` → 配合 `onChunk` 选项 (仅 request)
|
|
287
|
+
* - `onProgressUpdate` / `offProgressUpdate` → 配合 `onProgress` 选项 (upload / download)
|
|
288
|
+
*/
|
|
289
|
+
interface HttpAdapterTask<TResponse = any> extends Promise<TResponse> {
|
|
290
|
+
abort?: () => void;
|
|
291
|
+
onHeadersReceived?: (callback: (data: UniAppOnHeadersData) => void) => void;
|
|
292
|
+
offHeadersReceived?: (callback?: (data: UniAppOnHeadersData) => void) => void;
|
|
293
|
+
onChunkReceived?: (callback: (data: UniAppRequestChunkData) => void) => void;
|
|
294
|
+
offChunkReceived?: (callback?: (data: UniAppRequestChunkData) => void) => void;
|
|
295
|
+
onProgressUpdate?: (callback: (data: UniAppUploadOnProgressData | UniAppDownloadOnProgressData) => void) => void;
|
|
296
|
+
offProgressUpdate?: (callback?: (data: UniAppUploadOnProgressData | UniAppDownloadOnProgressData) => void) => void;
|
|
297
|
+
}
|
|
298
|
+
type HttpRequestAdapter = (url: string, options: HttpRequestOptions) => HttpAdapterTask<UniAppRequestResponse>;
|
|
299
|
+
type HttpUploadAdapter = (url: string, options: HttpUploadOptions) => HttpAdapterTask<UniAppUploadResponse>;
|
|
300
|
+
type HttpDownloadAdapter = (url: string, options: HttpDownloadOptions) => HttpAdapterTask<UniAppDownloadResponse>;
|
|
301
|
+
//#endregion
|
|
302
|
+
//#region src/oiyo/http/adapter/uni-app.d.ts
|
|
303
|
+
/**
|
|
304
|
+
* 默认传输适配器
|
|
305
|
+
*
|
|
306
|
+
* @description 基于 uni-app 原生网络接口实现;
|
|
307
|
+
* `HttpConfig.adapter` 未提供的动作均回退到此适配器
|
|
308
|
+
*/
|
|
309
|
+
declare const UniAppAdapter: HttpAdapter;
|
|
248
310
|
//#endregion
|
|
249
311
|
//#region src/oiyo/http/types/core.d.ts
|
|
250
312
|
interface HttpRequest {
|
|
@@ -3409,4 +3471,4 @@ declare function goTo(to: string | RouteMiddlewareRedirectOptions, options?: Omi
|
|
|
3409
3471
|
*/
|
|
3410
3472
|
declare function abortNavigation(error?: unknown): RouteMiddlewareAbort;
|
|
3411
3473
|
//#endregion
|
|
3412
|
-
export { createHttpAborter as S,
|
|
3474
|
+
export { HttpDownloadResponse as C, ResponseBodyType as D, HttpUploadResponse as E, createHttpAborter as O, HttpUploadOptions as S, HttpResponse as T, HttpCommonOptions as _, toMiddlewareEntries as a, HttpOptions as b, isHttpError as c, UniAppAdapter as d, HttpAdapter as f, HttpUploadAdapter as g, HttpRequestAdapter as h, createOiyoMiddleware as i, createHttp as l, HttpDownloadAdapter as m, defineRouteMiddleware as n, RouteMiddleware as o, HttpAdapterTask as p, goTo as r, HttpError as s, abortNavigation as t, http as u, HttpConfig as v, HttpRequestResponse as w, HttpRequestOptions as x, HttpDownloadOptions as y };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @oiyo/framework v0.8.
|
|
2
|
+
* @oiyo/framework v0.8.1
|
|
3
3
|
* Copyright (c) 2026 skiyee. All rights reserved.
|
|
4
4
|
* Commercial software. See LICENSE for terms.
|
|
5
5
|
* Official site: https://oiyo.js.org
|
|
@@ -244,7 +244,69 @@ interface HttpHooks<TOptions, TResponse> {
|
|
|
244
244
|
options: TOptions;
|
|
245
245
|
}) => MaybePromise<unknown>;
|
|
246
246
|
}
|
|
247
|
-
interface HttpConfig extends HttpCommonOptions, HttpHooks<HttpOptions, HttpResponse> {
|
|
247
|
+
interface HttpConfig extends HttpCommonOptions, HttpHooks<HttpOptions, HttpResponse> {
|
|
248
|
+
/**
|
|
249
|
+
* 传输适配器
|
|
250
|
+
* @description 整体替换或按动作覆盖底层传输实现;
|
|
251
|
+
* 未提供的动作回退默认 uni-app 适配器(多层配置间按动作浅合并)
|
|
252
|
+
*/
|
|
253
|
+
adapter?: Partial<HttpAdapter>;
|
|
254
|
+
}
|
|
255
|
+
//#endregion
|
|
256
|
+
//#region src/oiyo/http/types/adapter.d.ts
|
|
257
|
+
/**
|
|
258
|
+
* 传输适配器
|
|
259
|
+
*
|
|
260
|
+
* @description 每个传输动作对应一个适配器函数,由适配器对接具体传输通道;
|
|
261
|
+
* 默认实现 `UniAppAdapter` 基于 uni-app 原生接口,
|
|
262
|
+
* 可在 `HttpConfig.adapter` 中整体替换或按动作覆盖(如 XHR / Mock / 测试通道)。
|
|
263
|
+
*
|
|
264
|
+
* @contract
|
|
265
|
+
* - `url` 为已拼接 baseURL 与 query 的完整传输地址
|
|
266
|
+
* - `options` 为多层配置合并后的最终选项
|
|
267
|
+
* - 需返回 `HttpAdapterTask`,resolve 出与 uni 原生结构一致的响应
|
|
268
|
+
* (`{ statusCode, data, header?, errMsg?, ... }`),
|
|
269
|
+
* 后续 `responseType` 解析、`validateStatus` 判定、钩子与重试流程保持一致
|
|
270
|
+
*/
|
|
271
|
+
interface HttpAdapter {
|
|
272
|
+
/** 普通请求适配器 (默认对接 uni.request) */
|
|
273
|
+
request: HttpRequestAdapter;
|
|
274
|
+
/** 文件上传适配器 (默认对接 uni.uploadFile) */
|
|
275
|
+
upload: HttpUploadAdapter;
|
|
276
|
+
/** 文件下载适配器 (默认对接 uni.downloadFile) */
|
|
277
|
+
download: HttpDownloadAdapter;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* 适配器任务
|
|
281
|
+
*
|
|
282
|
+
* @description 响应 Promise 基础上可选挂载 task 方法;
|
|
283
|
+
* 挂载对应方法即可解锁对应能力,未挂载时相关选项会被忽略(不报错):
|
|
284
|
+
* - `abort` → 配合 `signal` 选项中断传输
|
|
285
|
+
* - `onHeadersReceived` / `offHeadersReceived` → 配合 `onHeaders` 选项
|
|
286
|
+
* - `onChunkReceived` / `offChunkReceived` → 配合 `onChunk` 选项 (仅 request)
|
|
287
|
+
* - `onProgressUpdate` / `offProgressUpdate` → 配合 `onProgress` 选项 (upload / download)
|
|
288
|
+
*/
|
|
289
|
+
interface HttpAdapterTask<TResponse = any> extends Promise<TResponse> {
|
|
290
|
+
abort?: () => void;
|
|
291
|
+
onHeadersReceived?: (callback: (data: UniAppOnHeadersData) => void) => void;
|
|
292
|
+
offHeadersReceived?: (callback?: (data: UniAppOnHeadersData) => void) => void;
|
|
293
|
+
onChunkReceived?: (callback: (data: UniAppRequestChunkData) => void) => void;
|
|
294
|
+
offChunkReceived?: (callback?: (data: UniAppRequestChunkData) => void) => void;
|
|
295
|
+
onProgressUpdate?: (callback: (data: UniAppUploadOnProgressData | UniAppDownloadOnProgressData) => void) => void;
|
|
296
|
+
offProgressUpdate?: (callback?: (data: UniAppUploadOnProgressData | UniAppDownloadOnProgressData) => void) => void;
|
|
297
|
+
}
|
|
298
|
+
type HttpRequestAdapter = (url: string, options: HttpRequestOptions) => HttpAdapterTask<UniAppRequestResponse>;
|
|
299
|
+
type HttpUploadAdapter = (url: string, options: HttpUploadOptions) => HttpAdapterTask<UniAppUploadResponse>;
|
|
300
|
+
type HttpDownloadAdapter = (url: string, options: HttpDownloadOptions) => HttpAdapterTask<UniAppDownloadResponse>;
|
|
301
|
+
//#endregion
|
|
302
|
+
//#region src/oiyo/http/adapter/uni-app.d.ts
|
|
303
|
+
/**
|
|
304
|
+
* 默认传输适配器
|
|
305
|
+
*
|
|
306
|
+
* @description 基于 uni-app 原生网络接口实现;
|
|
307
|
+
* `HttpConfig.adapter` 未提供的动作均回退到此适配器
|
|
308
|
+
*/
|
|
309
|
+
declare const UniAppAdapter: HttpAdapter;
|
|
248
310
|
//#endregion
|
|
249
311
|
//#region src/oiyo/http/types/core.d.ts
|
|
250
312
|
interface HttpRequest {
|
|
@@ -3409,4 +3471,4 @@ declare function goTo(to: string | RouteMiddlewareRedirectOptions, options?: Omi
|
|
|
3409
3471
|
*/
|
|
3410
3472
|
declare function abortNavigation(error?: unknown): RouteMiddlewareAbort;
|
|
3411
3473
|
//#endregion
|
|
3412
|
-
export { createHttpAborter as S,
|
|
3474
|
+
export { HttpDownloadResponse as C, ResponseBodyType as D, HttpUploadResponse as E, createHttpAborter as O, HttpUploadOptions as S, HttpResponse as T, HttpCommonOptions as _, toMiddlewareEntries as a, HttpOptions as b, isHttpError as c, UniAppAdapter as d, HttpAdapter as f, HttpUploadAdapter as g, HttpRequestAdapter as h, createOiyoMiddleware as i, createHttp as l, HttpDownloadAdapter as m, defineRouteMiddleware as n, RouteMiddleware as o, HttpAdapterTask as p, goTo as r, HttpError as s, abortNavigation as t, http as u, HttpConfig as v, HttpRequestResponse as w, HttpRequestOptions as x, HttpDownloadOptions as y };
|
package/dist/index.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @oiyo/framework v0.8.
|
|
2
|
+
* @oiyo/framework v0.8.1
|
|
3
3
|
* Copyright (c) 2026 skiyee. All rights reserved.
|
|
4
4
|
* Commercial software. See LICENSE for terms.
|
|
5
5
|
* Official site: https://oiyo.js.org
|
|
6
6
|
*/
|
|
7
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./oiyo-
|
|
7
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./oiyo-CCQjEy5k.cjs");require("./uni.cjs"),require("./vue.cjs"),exports.HttpError=e.u,exports.UniAppAdapter=e.c,exports.abortNavigation=e.t,exports.createHttp=e.o,exports.createHttpAborter=e.l,exports.createOiyoMiddleware=e.i,exports.defineRouteMiddleware=e.n,exports.goTo=e.r,exports.http=e.s,exports.isHttpError=e.d,exports.toMiddlewareEntries=e.a;var t=require("@dcloudio/uni-app");Object.keys(t).forEach(function(e){e!=="default"&&!Object.prototype.hasOwnProperty.call(exports,e)&&Object.defineProperty(exports,e,{enumerable:!0,get:function(){return t[e]}})});var n=require("vue");Object.keys(n).forEach(function(e){e!=="default"&&!Object.prototype.hasOwnProperty.call(exports,e)&&Object.defineProperty(exports,e,{enumerable:!0,get:function(){return n[e]}})});
|
package/dist/index.d.cts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @oiyo/framework v0.8.
|
|
2
|
+
* @oiyo/framework v0.8.1
|
|
3
3
|
* Copyright (c) 2026 skiyee. All rights reserved.
|
|
4
4
|
* Commercial software. See LICENSE for terms.
|
|
5
5
|
* Official site: https://oiyo.js.org
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
7
|
+
import { C as HttpDownloadResponse, D as ResponseBodyType, E as HttpUploadResponse, O as createHttpAborter, S as HttpUploadOptions, T as HttpResponse, _ as HttpCommonOptions, a as toMiddlewareEntries, b as HttpOptions, c as isHttpError, d as UniAppAdapter, f as HttpAdapter, g as HttpUploadAdapter, h as HttpRequestAdapter, i as createOiyoMiddleware, l as createHttp, m as HttpDownloadAdapter, n as defineRouteMiddleware, o as RouteMiddleware, p as HttpAdapterTask, r as goTo, s as HttpError, t as abortNavigation, u as http, v as HttpConfig, w as HttpRequestResponse, x as HttpRequestOptions, y as HttpDownloadOptions } from "./index--TSUkNGq.cjs";
|
|
8
8
|
import "./uni.cjs";
|
|
9
9
|
import "./vue.cjs";
|
|
10
10
|
export * from "vue";
|
|
11
11
|
export * from "@dcloudio/uni-app";
|
|
12
|
-
export { type HttpCommonOptions, type HttpConfig, type HttpDownloadOptions, type HttpDownloadResponse, HttpError, type HttpOptions, type HttpRequestOptions, type HttpRequestResponse, type HttpResponse, type HttpUploadOptions, type HttpUploadResponse, type ResponseBodyType, type RouteMiddleware, abortNavigation, createHttp, createHttpAborter, createOiyoMiddleware, defineRouteMiddleware, goTo, http, isHttpError, toMiddlewareEntries };
|
|
12
|
+
export { type HttpAdapter, type HttpAdapterTask, type HttpCommonOptions, type HttpConfig, type HttpDownloadAdapter, type HttpDownloadOptions, type HttpDownloadResponse, HttpError, type HttpOptions, type HttpRequestAdapter, type HttpRequestOptions, type HttpRequestResponse, type HttpResponse, type HttpUploadAdapter, type HttpUploadOptions, type HttpUploadResponse, type ResponseBodyType, type RouteMiddleware, UniAppAdapter, abortNavigation, createHttp, createHttpAborter, createOiyoMiddleware, defineRouteMiddleware, goTo, http, isHttpError, toMiddlewareEntries };
|
package/dist/index.d.mts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @oiyo/framework v0.8.
|
|
2
|
+
* @oiyo/framework v0.8.1
|
|
3
3
|
* Copyright (c) 2026 skiyee. All rights reserved.
|
|
4
4
|
* Commercial software. See LICENSE for terms.
|
|
5
5
|
* Official site: https://oiyo.js.org
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
7
|
+
import { C as HttpDownloadResponse, D as ResponseBodyType, E as HttpUploadResponse, O as createHttpAborter, S as HttpUploadOptions, T as HttpResponse, _ as HttpCommonOptions, a as toMiddlewareEntries, b as HttpOptions, c as isHttpError, d as UniAppAdapter, f as HttpAdapter, g as HttpUploadAdapter, h as HttpRequestAdapter, i as createOiyoMiddleware, l as createHttp, m as HttpDownloadAdapter, n as defineRouteMiddleware, o as RouteMiddleware, p as HttpAdapterTask, r as goTo, s as HttpError, t as abortNavigation, u as http, v as HttpConfig, w as HttpRequestResponse, x as HttpRequestOptions, y as HttpDownloadOptions } from "./index--TSUkNGq.mjs";
|
|
8
8
|
import "./uni.mjs";
|
|
9
9
|
import "./vue.mjs";
|
|
10
10
|
export * from "@dcloudio/uni-app";
|
|
11
11
|
export * from "vue";
|
|
12
|
-
export { type HttpCommonOptions, type HttpConfig, type HttpDownloadOptions, type HttpDownloadResponse, HttpError, type HttpOptions, type HttpRequestOptions, type HttpRequestResponse, type HttpResponse, type HttpUploadOptions, type HttpUploadResponse, type ResponseBodyType, type RouteMiddleware, abortNavigation, createHttp, createHttpAborter, createOiyoMiddleware, defineRouteMiddleware, goTo, http, isHttpError, toMiddlewareEntries };
|
|
12
|
+
export { type HttpAdapter, type HttpAdapterTask, type HttpCommonOptions, type HttpConfig, type HttpDownloadAdapter, type HttpDownloadOptions, type HttpDownloadResponse, HttpError, type HttpOptions, type HttpRequestAdapter, type HttpRequestOptions, type HttpRequestResponse, type HttpResponse, type HttpUploadAdapter, type HttpUploadOptions, type HttpUploadResponse, type ResponseBodyType, type RouteMiddleware, UniAppAdapter, abortNavigation, createHttp, createHttpAborter, createOiyoMiddleware, defineRouteMiddleware, goTo, http, isHttpError, toMiddlewareEntries };
|
package/dist/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @oiyo/framework v0.8.
|
|
2
|
+
* @oiyo/framework v0.8.1
|
|
3
3
|
* Copyright (c) 2026 skiyee. All rights reserved.
|
|
4
4
|
* Commercial software. See LICENSE for terms.
|
|
5
5
|
* Official site: https://oiyo.js.org
|
|
6
6
|
*/
|
|
7
|
-
import{a as e,c as t,
|
|
7
|
+
import{a as e,c as t,d as n,i as r,l as i,n as a,o,r as s,s as c,t as l,u}from"./oiyo-ZR-kfhVZ.mjs";import"./uni.mjs";import"./vue.mjs";export*from"@dcloudio/uni-app";export*from"vue";export{u as HttpError,t as UniAppAdapter,l as abortNavigation,o as createHttp,i as createHttpAborter,r as createOiyoMiddleware,a as defineRouteMiddleware,s as goTo,c as http,n as isHttpError,e as toMiddlewareEntries};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @oiyo/framework v0.8.1
|
|
3
|
+
* Copyright (c) 2026 skiyee. All rights reserved.
|
|
4
|
+
* Commercial software. See LICENSE for terms.
|
|
5
|
+
* Official site: https://oiyo.js.org
|
|
6
|
+
*/
|
|
7
|
+
var e=class extends Error{static ABORT=`ABORT`;static FAIL=`FAIL`;static STATUS=`STATUS`;url;options;response;statusCode;statusMessage;data;constructor(e){super(e.message,{cause:e.cause}),this.name=e.name}};function t(t){return!!t&&typeof t==`object`&&t instanceof e}function n(t,n,r){let i=`[${n?.method||`GET`}] ${t}`,a=r?`${r.statusCode} ${r.errMsg||``}`:`<no response>`,o=r?JSON.stringify(r.data):`<no response body>`,s=`${i}: ${a}${r.data?` ${o}`:``}`,c=new e({name:e.STATUS,message:s});for(let e of[`url`,`options`,`response`,`statusCode`,`statusMessage`,`data`])Object.defineProperty(c,e,{get(){return{url:t,options:n,response:r,statusCode:r.statusCode,statusMessage:r.errMsg,data:r.data}[e]}});return c}function r(t=`The operation was aborted`){return new e({name:e.ABORT,message:t})}function i(t=`request failed`){return new e({name:e.FAIL,message:t})}var a=class{listeners=new Map;constructor(){}on(e,t){let n=this.listeners.get(e);Array.isArray(n)?n.push(t):this.listeners.set(e,[t])}off(e,t){let n=this.listeners.get(e);if(!n?.length)return;let r=n.indexOf(t);r!==-1&&n.splice(r,1)}emit(e,...t){let n=(this.listeners.get(e)||[]).slice();for(let e of n)e.call(this,...t)}remove(e){this.listeners.has(e)&&this.listeners.delete(e)}},o=class extends a{_aborted=!1;_reason=null;_onabortListener=()=>{};get aborted(){return this._aborted}get reason(){return this._reason}_abort(e){this._aborted||(this._aborted=!0,this._reason=e??r(),this.emit(`abort`))}throwIfAborted(){if(this.aborted)throw this.reason}},s=class{_signal=new o;constructor(){}get signal(){return this._signal}abort(e){this._signal._abort(e)}};function c(){return new s}function l(e){let t=new s;if(!e)return{signal:t.signal,dispose:()=>{}};if(e.aborted)return t.abort(e.reason),{signal:t.signal,dispose:()=>{}};let n=u(e,()=>{n=void 0,t.abort(e.reason)});return{signal:t.signal,dispose(){n?.(),n=void 0}}}function u(e,t){return e?e.aborted?(t(),()=>{}):(e.on(`abort`,t),()=>e.off(`abort`,t)):()=>{}}async function d(e){return new Promise(t=>setTimeout(t,e))}function f(){}function p(e){if(!e||typeof e!=`object`)return!1;let t=Object.getPrototypeOf(e);return t!==null&&t!==Object.prototype&&Object.getPrototypeOf(t)!==null?!1:Object.prototype.toString.call(e)===`[object Object]`}function m(e){return e===void 0}function ee(e,t){if(!t||t===`/`)return e;let n=t[t.length-1]===`/`?t.slice(0,-1):t;return e.startsWith(n)?e:te(t,e)}function te(e,t){return!e||ne(t)?t:`${e.replace(/\/+$/,``)}/${t.replace(/^\/+/,``)}`}function ne(e){return/^[a-z][a-z\d+\-.]*:\/\//i.test(e)||e.startsWith(`//`)}function re(e,t){if(!t||Object.keys(t).length===0)return e;let n=e.indexOf(`?`);if(n===-1){let n=Object.entries(t).filter(([,e])=>e!==void 0).flatMap(([e,t])=>(Array.isArray(t)?t:[t]).filter(e=>!m(e)).map(t=>g(e,t))).join(`&`);return n?`${e}?${n}`:e}let r=ie(e.slice(n+1)),i=e.slice(0,n);for(let[e,n]of Object.entries(t))if(n===void 0)r.delete(e);else if(Array.isArray(n))for(let t of n)m(t)||r.append(e,h(t));else r.set(e,h(n));let a=r.toString();return a?`${i}?${a}`:i}function h(e){return e===null?``:typeof e==`number`||typeof e==`boolean`?String(e):typeof e==`object`?JSON.stringify(e):String(e)}function g(e,t){return`${encodeURIComponent(e)}=${encodeURIComponent(h(t))}`}function ie(e){let t=[],n=new Map;for(let r of e.split(`&`)){if(!r)continue;let e=r.indexOf(`=`),i=_(e===-1?r:r.slice(0,e)),a=_(e===-1?``:r.slice(e+1));n.has(i)||(n.set(i,[]),t.push(i)),n.get(i).push(a)}return{set(e,r){n.has(e)||t.push(e),n.set(e,[r])},append(e,r){n.has(e)||(n.set(e,[]),t.push(e)),n.get(e).push(r)},delete(e){if(!n.delete(e))return;let r=t.indexOf(e);r!==-1&&t.splice(r,1)},toString(){return t.flatMap(e=>(n.get(e)??[]).map(t=>g(e,t))).join(`&`)}}}function _(e){try{return decodeURIComponent(e.replace(/\+/g,` `))}catch{return e}}function ae(e){return!e||e===`json`?`text`:e===`arrayBuffer`?`arraybuffer`:`text`}const v={request:(e,t)=>{let n={url:e,method:t.method,header:t.headers,data:t.body??{},timeout:t.timeout,dataType:t.dataType||`json`,responseType:ae(t.responseType),sslVerify:t.sslVerify,withCredentials:t.withCredentials,firstIpv4:t.firstIpv4,enableHttp2:t.enableHttp2,enableQuic:t.enableQuic,enableCache:t.enableCache,enableHttpDNS:t.enableHttpDNS,httpDNSServiceId:t.httpDNSServiceId,enableChunked:t.enableChunked,forceCellularNetwork:t.forceCellularNetwork,complete:f},r,i=new Promise((e,t)=>{n.success=t=>{e(t)},n.fail=e=>{t(e)},r=uni.request(n)});return y(i,r),i},upload:(e,t)=>{let n={url:e,fileType:t.fileType,file:t.file,filePath:t.filePath,name:t.name??`file`,files:t.files,header:t.headers,formData:t.body??{},timeout:t.timeout,complete:f},r,i=new Promise((e,t)=>{n.success=t=>{e(t)},n.fail=e=>{t(e)},r=uni.uploadFile(n)});return y(i,r),i},download:(e,t)=>{let n={url:e,filePath:t.filePath,header:t.headers,timeout:t.timeout,complete:f},r,i=new Promise((e,t)=>{n.success=t=>{e({...t,data:{tempFilePath:t.tempFilePath}})},n.fail=e=>{t(e)},r=uni.downloadFile(n)});return y(i,r),i}};function y(e,t){if(t&&e)for(let n of[`abort`,`onHeadersReceived`,`offHeadersReceived`,`onChunkReceived`,`offChunkReceived`,`onProgressUpdate`,`offProgressUpdate`])n in t&&Object.defineProperty(e,n,{value:t[n].bind(t),writable:!1,enumerable:!1,configurable:!1})}function oe(e){if(p(e)){let t=e;return t.errMsg||t.message||void 0}}function se(e){if(!e||typeof e!=`object`)return!1;let t=e.errMsg;return typeof t==`string`&&/(?:^|:)fail(?:ed)?\s+abort(?:ed)?$/i.test(t.trim())}const ce=[`onBeforeRequest`,`onRequestError`,`onResponseSuccess`,`onResponseError`];function b(...e){let t={};for(let n of e){if(!n)continue;let e=t.headers,r=t.query;Object.assign(t,n),t.headers={...e,...n.headers},t.query={...r,...n.query}}return t}function x(...e){let t={},n={};for(let r of e){if(!r)continue;for(let e of ce)w(n,e,r);let e=t.headers,i=t.query,a=t.adapter;Object.assign(t,C(r)),t.headers=S(e,r.headers),t.query=S(i,r.query),(a||r.adapter)&&(t.adapter=S(a,r.adapter))}return le(t,n),t}function le(e,t){for(let[n,r]of Object.entries(t))Object.assign(e,{[n]:async e=>{let t;for(let n of r){let r=await n(e);m(r)||(t=r)}return t}})}function S(e,t){let n={...e};for(let[e,r]of Object.entries(t??{}))m(r)||(n[e]=r);return n}function C(e){let t={};for(let[n,r]of Object.entries(e))m(r)||(t[n]=r);return t}function w(e,t,n){let r=n[t];typeof r==`function`&&(e[t]??=[],e[t].push(r))}function T(e,t,n,r=v){let i;i=e===`upload`?r.upload(t,n):e===`download`?r.download(t,n):r.request(t,n),n.signal?.throwIfAborted(),n.signal?.on(`abort`,()=>i.abort?.());let a=n.onHeaders;if(typeof a==`function`&&typeof i.onHeadersReceived==`function`){let e=!1,t=n=>{e||a(n,()=>{e||(e=!0,i.offHeadersReceived?.(t))})};i.onHeadersReceived(t)}let o=n.onChunk;if(n._action===`request`&&typeof o==`function`&&typeof i.onChunkReceived==`function`){let e=!1,t=n=>{e||o(n,()=>{e||(e=!0,i.offChunkReceived?.(t))})};i.onChunkReceived(t)}let s=n.onProgress;if((n._action===`download`||n._action===`upload`)&&typeof s==`function`&&typeof i.onProgressUpdate==`function`){let e=!1,t=n=>{e||s(n,()=>{e||(e=!0,i.offProgressUpdate?.(t))})};i.onProgressUpdate(t)}return i}async function E(e,t){return t.responseType===`json`||!t.responseType?{...e,data:await D(e.data,t)}:e}function D(e,t){return typeof e==`string`?t.parseResponse?t.parseResponse(e):e?JSON.parse(e):null:e}const O=[408,409,425,429,500,502,503,504],ue=new Set([`POST`,`PUT`,`DELETE`,`PATCH`]);async function de(e,t){let n=(e.retry??1)||0;(!e.method||n<=0||ue.has(e.method.toUpperCase()))&&(n=0);for(let r=0;;r++){let{signal:i,dispose:a}=l(e.signal),o={...e,signal:i};try{return await t(o)}catch(e){if(r>=n||!fe(e,o))throw e;let t=o.retryDelay??0;t>0&&await d(t)}finally{a()}}}function fe(n,r){return!t(n)||n.name===e.ABORT?!1:n.name===e.FAIL||(r.retryStatusCodes??O).includes(n.statusCode)}function k(e,t,n,r,i){return de(n,n=>pe(e,t,n,r,i))}async function pe(e,t,a,o,s){try{let e=await s.onBeforeRequest?.({url:t,options:a});p(e)&&(a=b(e,a)),a.signal?.throwIfAborted()}catch(e){let n=e,r=await s.onRequestError?.({url:t,options:a,error:n});if(!m(r))return r;throw n}let c;try{c=await T(e,re(ee(t,a.baseURL),a.query),a,o)}catch(e){let n=e;n=se(e)?r():i(oe(n));let o=await s.onRequestError?.({url:t,options:a,error:n});if(!m(o))return o;throw n}finally{a.signal?.remove(`abort`)}let l=await E(c,a);if(a.validateStatus?.(l.statusCode)){let e=await s.onResponseSuccess?.({url:t,options:a,response:l});return m(e)||(l=Object.assign({},l,e)),a.raw?l:l.data}let u=n(t,a,l),d=await s.onResponseError?.({url:t,options:a,response:l,error:u});if(!m(d))return d;throw u}const me={adapter:v,responseType:`json`,validateStatus:e=>e>=200&&e<300};function A(e={}){let t=x(me,e),n=t.adapter,r=he(t);return{request:(e,i)=>k(`request`,e,b(t,{method:`GET`},i,{_action:`request`}),n,r),upload:(e,i)=>k(`upload`,e,b(t,i,{method:`POST`,_action:`upload`}),n,r),download:(e,i)=>k(`download`,e,b(t,i,{method:`GET`,_action:`download`}),n,r),create:t=>A(x(e,t))}}function he(e){return{onBeforeRequest:e.onBeforeRequest,onRequestError:e.onRequestError,onResponseSuccess:e.onResponseSuccess,onResponseError:e.onResponseError}}const j=A(),M=`__oiyo_page_middleware_lifecycle__`,N={fullPath:`/`,meta:{},path:`/`,query:{}};function P(){let e={};return{issue(t){e[t]=(e[t]??0)+1},consume(t){let n=e[t]??0;return n<=0?!1:(e[t]=n-1,!0)},revoke(t){let n=e[t]??0;if(n<=1){delete e[t];return}e[t]=n-1}}}function F(e){let t=e.replace(/\\/g,`/`).replace(/^\/+|\/+$/g,``);return t?`/${t}`:`/`}function I(e,t){if(!t||Object.keys(t).length===0)return e;let n=Object.entries(t).filter(([,e])=>e!==void 0).map(([e,t])=>`${encodeURIComponent(e)}=${encodeURIComponent(String(t))}`).join(`&`);return n?`${e}${e.includes(`?`)?`&`:`?`}${n}`:e}function L(e){let t={};for(let n of e.split(`&`)){if(!n)continue;let[e,r=``]=n.split(`=`,2);t[R(e)]=R(r)}return t}function R(e){try{return decodeURIComponent(e.replace(/\+/g,` `))}catch{return e}}function z(e){return e===`undefined`}function B(e){return typeof e==`function`}function V(e){return Object.prototype.toString.call(e)===`[object Object]`}function ge(e){return typeof e==`string`}function H(e){return e==null?[]:Array.isArray(e)?e:[e]}function U(){return globalThis.uni??uni}function W(){try{let e=U();return typeof e.getCurrentPages==`function`?e.getCurrentPages()??[]:(globalThis.getCurrentPages??getCurrentPages)?.()??[]}catch{return[]}}function G(e,t){let n=t?` in \"${t}\"`:``;console.error(`[oiyo] Page middleware run failed${n}.`,e)}function K(e,t,n){let r={errMsg:`${e}:fail route middleware aborted navigation`,cause:n};t.fail?.(r),t.complete?.(r)}function _e(e){let{pages:t=[],subPackages:n=[],tabBar:r={}}=e,i=H(r.list),a=(e,t)=>{let{path:n,...r}=e,a=F([t,e.path].filter(Boolean).join(`/`)),o=ve(r.middleware,n,`middleware`);return{meta:{...r,middleware:o,isTab:!t&&i.some(t=>t.pagePath===e.path)},path:a}},o=t.map(e=>a(e)),s=n.flatMap(({root:e,pages:t})=>t.map(t=>a(t,e)));return[...o,...s]}function ve(e,t,n){if(z(e)===void 0)return[];let r=H(e);if(r.every(e=>ge(e)&&e.length>0))return r;throw Error(`[oiyo] Page ${t} ${n} must be a middleware name or an array of names.`)}function ye(e){let t=U();if(typeof t.addInterceptor==`function`)for(let n of[`navigateTo`,`redirectTo`,`reLaunch`,`switchTab`,`navigateBack`])t.addInterceptor(n,{invoke(t){return e.dispatchBypass.consume(n)?t:(e.dispatch(n,t).catch(e=>{G(e),K(n,t,e)}),!1)}})}function q(e,t,n){if(!t)return;let r=t.$page?.fullPath||t.$scope?.$page?.fullPath;if(r)return J(e,r);let i=t.$page?.route||t.$scope?.$page?.route||t.route||t.$scope?.route;if(!i)return;let a=t.options||t.$scope?.options;return J(e,I(i,V(n)?n:V(a)?a:{}))}function J(e,t){let[n,r=``]=t.replace(/^#/,``).split(`?`,2),i=F(n),a=e.find(({path:e})=>e===i);if(a)return{fullPath:r?`${i}?${r}`:i,meta:a.meta??{},path:i,query:L(r)}}function be(e){let t=W();return q(e,t[t.length-1])}function xe(e,t,n){if(t===`navigateBack`){let t=W(),r=Number(n.delta??1),i=Number.isFinite(r)?Math.max(1,r):1;return q(e,t[Math.max(0,t.length-1-i)])}if(typeof n.url==`string`&&n.url.length!==0)return J(e,n.url)}async function Y(e,t,n,r){let i=n.find(e=>e.path===t.path);if(!i)return{type:`abort`,error:Error(`未找到目标路由`)};let a=r.filter(e=>e.isGlobal?!0:(i?.meta.middleware||[]).includes(e.name));for(let n of a){let r;try{r=await n.handler(t,e)}catch(e){return G(e,n.name),{type:`abort`,error:e}}let i=Se(r);if(i.type!==`allow`)return i}return{type:`allow`}}function Se(e){if(e===!1)return{type:`abort`};if(typeof e==`string`)return{type:`redirect`,navigation:{path:e}};if(e&&typeof e==`object`&&`__scope`in e){if(e.__scope===`abort`)return{type:`abort`,error:e.error};if(e.__scope===`redirect`)return{type:`redirect`,navigation:e}}return{type:`allow`}}function X(e,t,n){e.dispatchBypass.issue(t);let r=U();r[t].call(r,n)}function Z(e,t){let{path:n,query:r,type:i}=t;if(typeof n!=`string`||n.length===0)return;let a=I(n,r),o=J(e,a);return i?{name:i,options:{url:a}}:{name:e.some(e=>e.meta.isTab&&e.path===o?.path)?`switchTab`:t.replace?`redirectTo`:`navigateTo`,options:{url:a}}}function Ce(e,t){t.mixin({onLoad(t){this[M]=!0,Q(e,this,t).catch(G)},onShow(){if(this.$mpType===`page`){if(this.__oiyo_page_middleware_lifecycle__){this[M]=!1;return}Q(e,this).catch(G)}}})}async function Q(e,t,n){let r=q(e.routes,t,n);if(!r||r.fullPath===e.currentRoute.fullPath)return;let i=e.currentRoute;if(e.currentRoute=r,e.lifecycleBypass.consume(r.fullPath))return;let a=await Y(i,r,e.routes,e.middlewares);if(a.type!==`allow`){if(i.path!==N.path){let[t,n]=[e.routes.some(e=>e.meta.isTab&&e.path===i.path),e.routes.some(e=>e.meta.isTab&&e.path===r.path)];!t&&n?await $(e,`reLaunch`,{url:i.fullPath},i):t&&n?await $(e,`switchTab`,{url:i.fullPath},i):console.log(`没有识别到的返回情况`)}if(a.type===`abort`){K(`nativeNavigate`,{},a.error);return}if(a.type===`redirect`){let t=Z(e.routes,a.navigation);if(!t){K(`nativeNavigate`,{},Error(`Middleware returned an invalid redirect.`));return}await e.dispatch(t.name,t.options,1)}}}async function $(e,t,n,r){return e.lifecycleBypass.issue(r.fullPath),await we(e,t,n)?!0:(e.lifecycleBypass.revoke(r.fullPath),!1)}function we(e,t,n){return new Promise(r=>{let i=!1,a=!0,o=e=>{i||(i=!0,r(e))};try{X(e,t,{...n,success:e=>{n.success?.(e),a=!0,o(!0)},fail:e=>{n.fail?.(e),a=!1,o(!1)},complete:e=>{n.complete?.(e),o(a)}})}catch(e){G(e),o(!1)}})}function Te(e){let t={routes:_e(e.config),middlewares:e.entries,dispatchBypass:P(),dispatch:(e,n,r=0)=>Ee(t,e,n,r),lifecycleBypass:P(),currentRoute:N};return t}async function Ee(e,t,n,r){if(r>10){let e=Error(`Route middleware exceeded the redirect limit.`);G(e),K(t,n,e);return}let i=xe(e.routes,t,n);if(!i){X(e,t,n);return}let a=await Y(be(e.routes)??e.currentRoute,i,e.routes,e.middlewares);if(a.type===`abort`){K(t,n,a.error);return}if(a.type===`redirect`){let i=Z(e.routes,a.navigation);if(!i){K(t,n,Error(`Middleware returned an invalid redirect.`));return}await e.dispatch(i.name,i.options,r+1);return}e.lifecycleBypass.issue(i.fullPath),X(e,t,n)}function De(e){return{install:t=>{let n=U();if(!n)return;let r=n.__oiyo_page_middleware_state__??Te(e);n.__oiyo_page_middleware_state__=r,ye(r),Ce(r,t)}}}function Oe(e){return e.filter(e=>!z(e.module)&&B(e.module.default)).map(e=>({name:e.useName,handler:e.module.default,isGlobal:e.isGlobal}))}function ke(e){return e}function Ae(e,t={}){return{__scope:`redirect`,...typeof e==`string`?{path:e}:e,...t}}function je(e){return{__scope:`abort`,error:e}}Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return Oe}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return De}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return ke}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return Ae}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return je}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return e}});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @oiyo/framework v0.8.1
|
|
3
|
+
* Copyright (c) 2026 skiyee. All rights reserved.
|
|
4
|
+
* Commercial software. See LICENSE for terms.
|
|
5
|
+
* Official site: https://oiyo.js.org
|
|
6
|
+
*/
|
|
7
|
+
var e=class extends Error{static ABORT=`ABORT`;static FAIL=`FAIL`;static STATUS=`STATUS`;url;options;response;statusCode;statusMessage;data;constructor(e){super(e.message,{cause:e.cause}),this.name=e.name}};function t(t){return!!t&&typeof t==`object`&&t instanceof e}function n(t,n,r){let i=`[${n?.method||`GET`}] ${t}`,a=r?`${r.statusCode} ${r.errMsg||``}`:`<no response>`,o=r?JSON.stringify(r.data):`<no response body>`,s=`${i}: ${a}${r.data?` ${o}`:``}`,c=new e({name:e.STATUS,message:s});for(let e of[`url`,`options`,`response`,`statusCode`,`statusMessage`,`data`])Object.defineProperty(c,e,{get(){return{url:t,options:n,response:r,statusCode:r.statusCode,statusMessage:r.errMsg,data:r.data}[e]}});return c}function r(t=`The operation was aborted`){return new e({name:e.ABORT,message:t})}function i(t=`request failed`){return new e({name:e.FAIL,message:t})}var a=class{listeners=new Map;constructor(){}on(e,t){let n=this.listeners.get(e);Array.isArray(n)?n.push(t):this.listeners.set(e,[t])}off(e,t){let n=this.listeners.get(e);if(!n?.length)return;let r=n.indexOf(t);r!==-1&&n.splice(r,1)}emit(e,...t){let n=(this.listeners.get(e)||[]).slice();for(let e of n)e.call(this,...t)}remove(e){this.listeners.has(e)&&this.listeners.delete(e)}},o=class extends a{_aborted=!1;_reason=null;_onabortListener=()=>{};get aborted(){return this._aborted}get reason(){return this._reason}_abort(e){this._aborted||(this._aborted=!0,this._reason=e??r(),this.emit(`abort`))}throwIfAborted(){if(this.aborted)throw this.reason}},s=class{_signal=new o;constructor(){}get signal(){return this._signal}abort(e){this._signal._abort(e)}};function c(){return new s}function l(e){let t=new s;if(!e)return{signal:t.signal,dispose:()=>{}};if(e.aborted)return t.abort(e.reason),{signal:t.signal,dispose:()=>{}};let n=u(e,()=>{n=void 0,t.abort(e.reason)});return{signal:t.signal,dispose(){n?.(),n=void 0}}}function u(e,t){return e?e.aborted?(t(),()=>{}):(e.on(`abort`,t),()=>e.off(`abort`,t)):()=>{}}async function d(e){return new Promise(t=>setTimeout(t,e))}function f(){}function p(e){if(!e||typeof e!=`object`)return!1;let t=Object.getPrototypeOf(e);return t!==null&&t!==Object.prototype&&Object.getPrototypeOf(t)!==null?!1:Object.prototype.toString.call(e)===`[object Object]`}function m(e){return e===void 0}function ee(e,t){if(!t||t===`/`)return e;let n=t[t.length-1]===`/`?t.slice(0,-1):t;return e.startsWith(n)?e:te(t,e)}function te(e,t){return!e||ne(t)?t:`${e.replace(/\/+$/,``)}/${t.replace(/^\/+/,``)}`}function ne(e){return/^[a-z][a-z\d+\-.]*:\/\//i.test(e)||e.startsWith(`//`)}function re(e,t){if(!t||Object.keys(t).length===0)return e;let n=e.indexOf(`?`);if(n===-1){let n=Object.entries(t).filter(([,e])=>e!==void 0).flatMap(([e,t])=>(Array.isArray(t)?t:[t]).filter(e=>!m(e)).map(t=>g(e,t))).join(`&`);return n?`${e}?${n}`:e}let r=ie(e.slice(n+1)),i=e.slice(0,n);for(let[e,n]of Object.entries(t))if(n===void 0)r.delete(e);else if(Array.isArray(n))for(let t of n)m(t)||r.append(e,h(t));else r.set(e,h(n));let a=r.toString();return a?`${i}?${a}`:i}function h(e){return e===null?``:typeof e==`number`||typeof e==`boolean`?String(e):typeof e==`object`?JSON.stringify(e):String(e)}function g(e,t){return`${encodeURIComponent(e)}=${encodeURIComponent(h(t))}`}function ie(e){let t=[],n=new Map;for(let r of e.split(`&`)){if(!r)continue;let e=r.indexOf(`=`),i=_(e===-1?r:r.slice(0,e)),a=_(e===-1?``:r.slice(e+1));n.has(i)||(n.set(i,[]),t.push(i)),n.get(i).push(a)}return{set(e,r){n.has(e)||t.push(e),n.set(e,[r])},append(e,r){n.has(e)||(n.set(e,[]),t.push(e)),n.get(e).push(r)},delete(e){if(!n.delete(e))return;let r=t.indexOf(e);r!==-1&&t.splice(r,1)},toString(){return t.flatMap(e=>(n.get(e)??[]).map(t=>g(e,t))).join(`&`)}}}function _(e){try{return decodeURIComponent(e.replace(/\+/g,` `))}catch{return e}}function ae(e){return!e||e===`json`?`text`:e===`arrayBuffer`?`arraybuffer`:`text`}const v={request:(e,t)=>{let n={url:e,method:t.method,header:t.headers,data:t.body??{},timeout:t.timeout,dataType:t.dataType||`json`,responseType:ae(t.responseType),sslVerify:t.sslVerify,withCredentials:t.withCredentials,firstIpv4:t.firstIpv4,enableHttp2:t.enableHttp2,enableQuic:t.enableQuic,enableCache:t.enableCache,enableHttpDNS:t.enableHttpDNS,httpDNSServiceId:t.httpDNSServiceId,enableChunked:t.enableChunked,forceCellularNetwork:t.forceCellularNetwork,complete:f},r,i=new Promise((e,t)=>{n.success=t=>{e(t)},n.fail=e=>{t(e)},r=uni.request(n)});return y(i,r),i},upload:(e,t)=>{let n={url:e,fileType:t.fileType,file:t.file,filePath:t.filePath,name:t.name??`file`,files:t.files,header:t.headers,formData:t.body??{},timeout:t.timeout,complete:f},r,i=new Promise((e,t)=>{n.success=t=>{e(t)},n.fail=e=>{t(e)},r=uni.uploadFile(n)});return y(i,r),i},download:(e,t)=>{let n={url:e,filePath:t.filePath,header:t.headers,timeout:t.timeout,complete:f},r,i=new Promise((e,t)=>{n.success=t=>{e({...t,data:{tempFilePath:t.tempFilePath}})},n.fail=e=>{t(e)},r=uni.downloadFile(n)});return y(i,r),i}};function y(e,t){if(t&&e)for(let n of[`abort`,`onHeadersReceived`,`offHeadersReceived`,`onChunkReceived`,`offChunkReceived`,`onProgressUpdate`,`offProgressUpdate`])n in t&&Object.defineProperty(e,n,{value:t[n].bind(t),writable:!1,enumerable:!1,configurable:!1})}function oe(e){if(p(e)){let t=e;return t.errMsg||t.message||void 0}}function se(e){if(!e||typeof e!=`object`)return!1;let t=e.errMsg;return typeof t==`string`&&/(?:^|:)fail(?:ed)?\s+abort(?:ed)?$/i.test(t.trim())}const ce=[`onBeforeRequest`,`onRequestError`,`onResponseSuccess`,`onResponseError`];function b(...e){let t={};for(let n of e){if(!n)continue;let e=t.headers,r=t.query;Object.assign(t,n),t.headers={...e,...n.headers},t.query={...r,...n.query}}return t}function x(...e){let t={},n={};for(let r of e){if(!r)continue;for(let e of ce)w(n,e,r);let e=t.headers,i=t.query,a=t.adapter;Object.assign(t,C(r)),t.headers=S(e,r.headers),t.query=S(i,r.query),(a||r.adapter)&&(t.adapter=S(a,r.adapter))}return le(t,n),t}function le(e,t){for(let[n,r]of Object.entries(t))Object.assign(e,{[n]:async e=>{let t;for(let n of r){let r=await n(e);m(r)||(t=r)}return t}})}function S(e,t){let n={...e};for(let[e,r]of Object.entries(t??{}))m(r)||(n[e]=r);return n}function C(e){let t={};for(let[n,r]of Object.entries(e))m(r)||(t[n]=r);return t}function w(e,t,n){let r=n[t];typeof r==`function`&&(e[t]??=[],e[t].push(r))}function T(e,t,n,r=v){let i;i=e===`upload`?r.upload(t,n):e===`download`?r.download(t,n):r.request(t,n),n.signal?.throwIfAborted(),n.signal?.on(`abort`,()=>i.abort?.());let a=n.onHeaders;if(typeof a==`function`&&typeof i.onHeadersReceived==`function`){let e=!1,t=n=>{e||a(n,()=>{e||(e=!0,i.offHeadersReceived?.(t))})};i.onHeadersReceived(t)}let o=n.onChunk;if(n._action===`request`&&typeof o==`function`&&typeof i.onChunkReceived==`function`){let e=!1,t=n=>{e||o(n,()=>{e||(e=!0,i.offChunkReceived?.(t))})};i.onChunkReceived(t)}let s=n.onProgress;if((n._action===`download`||n._action===`upload`)&&typeof s==`function`&&typeof i.onProgressUpdate==`function`){let e=!1,t=n=>{e||s(n,()=>{e||(e=!0,i.offProgressUpdate?.(t))})};i.onProgressUpdate(t)}return i}async function E(e,t){return t.responseType===`json`||!t.responseType?{...e,data:await D(e.data,t)}:e}function D(e,t){return typeof e==`string`?t.parseResponse?t.parseResponse(e):e?JSON.parse(e):null:e}const O=[408,409,425,429,500,502,503,504],ue=new Set([`POST`,`PUT`,`DELETE`,`PATCH`]);async function de(e,t){let n=(e.retry??1)||0;(!e.method||n<=0||ue.has(e.method.toUpperCase()))&&(n=0);for(let r=0;;r++){let{signal:i,dispose:a}=l(e.signal),o={...e,signal:i};try{return await t(o)}catch(e){if(r>=n||!fe(e,o))throw e;let t=o.retryDelay??0;t>0&&await d(t)}finally{a()}}}function fe(n,r){return!t(n)||n.name===e.ABORT?!1:n.name===e.FAIL||(r.retryStatusCodes??O).includes(n.statusCode)}function k(e,t,n,r,i){return de(n,n=>pe(e,t,n,r,i))}async function pe(e,t,a,o,s){try{let e=await s.onBeforeRequest?.({url:t,options:a});p(e)&&(a=b(e,a)),a.signal?.throwIfAborted()}catch(e){let n=e,r=await s.onRequestError?.({url:t,options:a,error:n});if(!m(r))return r;throw n}let c;try{c=await T(e,re(ee(t,a.baseURL),a.query),a,o)}catch(e){let n=e;n=se(e)?r():i(oe(n));let o=await s.onRequestError?.({url:t,options:a,error:n});if(!m(o))return o;throw n}finally{a.signal?.remove(`abort`)}let l=await E(c,a);if(a.validateStatus?.(l.statusCode)){let e=await s.onResponseSuccess?.({url:t,options:a,response:l});return m(e)||(l=Object.assign({},l,e)),a.raw?l:l.data}let u=n(t,a,l),d=await s.onResponseError?.({url:t,options:a,response:l,error:u});if(!m(d))return d;throw u}const me={adapter:v,responseType:`json`,validateStatus:e=>e>=200&&e<300};function A(e={}){let t=x(me,e),n=t.adapter,r=he(t);return{request:(e,i)=>k(`request`,e,b(t,{method:`GET`},i,{_action:`request`}),n,r),upload:(e,i)=>k(`upload`,e,b(t,i,{method:`POST`,_action:`upload`}),n,r),download:(e,i)=>k(`download`,e,b(t,i,{method:`GET`,_action:`download`}),n,r),create:t=>A(x(e,t))}}function he(e){return{onBeforeRequest:e.onBeforeRequest,onRequestError:e.onRequestError,onResponseSuccess:e.onResponseSuccess,onResponseError:e.onResponseError}}const j=A(),M=`__oiyo_page_middleware_lifecycle__`,N={fullPath:`/`,meta:{},path:`/`,query:{}};function P(){let e={};return{issue(t){e[t]=(e[t]??0)+1},consume(t){let n=e[t]??0;return n<=0?!1:(e[t]=n-1,!0)},revoke(t){let n=e[t]??0;if(n<=1){delete e[t];return}e[t]=n-1}}}function F(e){let t=e.replace(/\\/g,`/`).replace(/^\/+|\/+$/g,``);return t?`/${t}`:`/`}function I(e,t){if(!t||Object.keys(t).length===0)return e;let n=Object.entries(t).filter(([,e])=>e!==void 0).map(([e,t])=>`${encodeURIComponent(e)}=${encodeURIComponent(String(t))}`).join(`&`);return n?`${e}${e.includes(`?`)?`&`:`?`}${n}`:e}function L(e){let t={};for(let n of e.split(`&`)){if(!n)continue;let[e,r=``]=n.split(`=`,2);t[R(e)]=R(r)}return t}function R(e){try{return decodeURIComponent(e.replace(/\+/g,` `))}catch{return e}}function z(e){return e===`undefined`}function B(e){return typeof e==`function`}function V(e){return Object.prototype.toString.call(e)===`[object Object]`}function ge(e){return typeof e==`string`}function H(e){return e==null?[]:Array.isArray(e)?e:[e]}function U(){return globalThis.uni??uni}function W(){try{let e=U();return typeof e.getCurrentPages==`function`?e.getCurrentPages()??[]:(globalThis.getCurrentPages??getCurrentPages)?.()??[]}catch{return[]}}function G(e,t){let n=t?` in \"${t}\"`:``;console.error(`[oiyo] Page middleware run failed${n}.`,e)}function K(e,t,n){let r={errMsg:`${e}:fail route middleware aborted navigation`,cause:n};t.fail?.(r),t.complete?.(r)}function _e(e){let{pages:t=[],subPackages:n=[],tabBar:r={}}=e,i=H(r.list),a=(e,t)=>{let{path:n,...r}=e,a=F([t,e.path].filter(Boolean).join(`/`)),o=ve(r.middleware,n,`middleware`);return{meta:{...r,middleware:o,isTab:!t&&i.some(t=>t.pagePath===e.path)},path:a}},o=t.map(e=>a(e)),s=n.flatMap(({root:e,pages:t})=>t.map(t=>a(t,e)));return[...o,...s]}function ve(e,t,n){if(z(e)===void 0)return[];let r=H(e);if(r.every(e=>ge(e)&&e.length>0))return r;throw Error(`[oiyo] Page ${t} ${n} must be a middleware name or an array of names.`)}function ye(e){let t=U();if(typeof t.addInterceptor==`function`)for(let n of[`navigateTo`,`redirectTo`,`reLaunch`,`switchTab`,`navigateBack`])t.addInterceptor(n,{invoke(t){return e.dispatchBypass.consume(n)?t:(e.dispatch(n,t).catch(e=>{G(e),K(n,t,e)}),!1)}})}function q(e,t,n){if(!t)return;let r=t.$page?.fullPath||t.$scope?.$page?.fullPath;if(r)return J(e,r);let i=t.$page?.route||t.$scope?.$page?.route||t.route||t.$scope?.route;if(!i)return;let a=t.options||t.$scope?.options;return J(e,I(i,V(n)?n:V(a)?a:{}))}function J(e,t){let[n,r=``]=t.replace(/^#/,``).split(`?`,2),i=F(n),a=e.find(({path:e})=>e===i);if(a)return{fullPath:r?`${i}?${r}`:i,meta:a.meta??{},path:i,query:L(r)}}function be(e){let t=W();return q(e,t[t.length-1])}function xe(e,t,n){if(t===`navigateBack`){let t=W(),r=Number(n.delta??1),i=Number.isFinite(r)?Math.max(1,r):1;return q(e,t[Math.max(0,t.length-1-i)])}if(typeof n.url==`string`&&n.url.length!==0)return J(e,n.url)}async function Y(e,t,n,r){let i=n.find(e=>e.path===t.path);if(!i)return{type:`abort`,error:Error(`未找到目标路由`)};let a=r.filter(e=>e.isGlobal?!0:(i?.meta.middleware||[]).includes(e.name));for(let n of a){let r;try{r=await n.handler(t,e)}catch(e){return G(e,n.name),{type:`abort`,error:e}}let i=Se(r);if(i.type!==`allow`)return i}return{type:`allow`}}function Se(e){if(e===!1)return{type:`abort`};if(typeof e==`string`)return{type:`redirect`,navigation:{path:e}};if(e&&typeof e==`object`&&`__scope`in e){if(e.__scope===`abort`)return{type:`abort`,error:e.error};if(e.__scope===`redirect`)return{type:`redirect`,navigation:e}}return{type:`allow`}}function X(e,t,n){e.dispatchBypass.issue(t);let r=U();r[t].call(r,n)}function Z(e,t){let{path:n,query:r,type:i}=t;if(typeof n!=`string`||n.length===0)return;let a=I(n,r),o=J(e,a);return i?{name:i,options:{url:a}}:{name:e.some(e=>e.meta.isTab&&e.path===o?.path)?`switchTab`:t.replace?`redirectTo`:`navigateTo`,options:{url:a}}}function Ce(e,t){t.mixin({onLoad(t){this[M]=!0,Q(e,this,t).catch(G)},onShow(){if(this.$mpType===`page`){if(this.__oiyo_page_middleware_lifecycle__){this[M]=!1;return}Q(e,this).catch(G)}}})}async function Q(e,t,n){let r=q(e.routes,t,n);if(!r||r.fullPath===e.currentRoute.fullPath)return;let i=e.currentRoute;if(e.currentRoute=r,e.lifecycleBypass.consume(r.fullPath))return;let a=await Y(i,r,e.routes,e.middlewares);if(a.type!==`allow`){if(i.path!==N.path){let[t,n]=[e.routes.some(e=>e.meta.isTab&&e.path===i.path),e.routes.some(e=>e.meta.isTab&&e.path===r.path)];!t&&n?await $(e,`reLaunch`,{url:i.fullPath},i):t&&n?await $(e,`switchTab`,{url:i.fullPath},i):console.log(`没有识别到的返回情况`)}if(a.type===`abort`){K(`nativeNavigate`,{},a.error);return}if(a.type===`redirect`){let t=Z(e.routes,a.navigation);if(!t){K(`nativeNavigate`,{},Error(`Middleware returned an invalid redirect.`));return}await e.dispatch(t.name,t.options,1)}}}async function $(e,t,n,r){return e.lifecycleBypass.issue(r.fullPath),await we(e,t,n)?!0:(e.lifecycleBypass.revoke(r.fullPath),!1)}function we(e,t,n){return new Promise(r=>{let i=!1,a=!0,o=e=>{i||(i=!0,r(e))};try{X(e,t,{...n,success:e=>{n.success?.(e),a=!0,o(!0)},fail:e=>{n.fail?.(e),a=!1,o(!1)},complete:e=>{n.complete?.(e),o(a)}})}catch(e){G(e),o(!1)}})}function Te(e){let t={routes:_e(e.config),middlewares:e.entries,dispatchBypass:P(),dispatch:(e,n,r=0)=>Ee(t,e,n,r),lifecycleBypass:P(),currentRoute:N};return t}async function Ee(e,t,n,r){if(r>10){let e=Error(`Route middleware exceeded the redirect limit.`);G(e),K(t,n,e);return}let i=xe(e.routes,t,n);if(!i){X(e,t,n);return}let a=await Y(be(e.routes)??e.currentRoute,i,e.routes,e.middlewares);if(a.type===`abort`){K(t,n,a.error);return}if(a.type===`redirect`){let i=Z(e.routes,a.navigation);if(!i){K(t,n,Error(`Middleware returned an invalid redirect.`));return}await e.dispatch(i.name,i.options,r+1);return}e.lifecycleBypass.issue(i.fullPath),X(e,t,n)}function De(e){return{install:t=>{let n=U();if(!n)return;let r=n.__oiyo_page_middleware_state__??Te(e);n.__oiyo_page_middleware_state__=r,ye(r),Ce(r,t)}}}function Oe(e){return e.filter(e=>!z(e.module)&&B(e.module.default)).map(e=>({name:e.useName,handler:e.module.default,isGlobal:e.isGlobal}))}function ke(e){return e}function Ae(e,t={}){return{__scope:`redirect`,...typeof e==`string`?{path:e}:e,...t}}function je(e){return{__scope:`abort`,error:e}}export{Oe as a,v as c,t as d,De as i,c as l,ke as n,A as o,Ae as r,j as s,je as t,e as u};
|
package/dist/oiyo.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @oiyo/framework v0.8.
|
|
2
|
+
* @oiyo/framework v0.8.1
|
|
3
3
|
* Copyright (c) 2026 skiyee. All rights reserved.
|
|
4
4
|
* Commercial software. See LICENSE for terms.
|
|
5
5
|
* Official site: https://oiyo.js.org
|
|
6
6
|
*/
|
|
7
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./oiyo-
|
|
7
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./oiyo-CCQjEy5k.cjs");exports.HttpError=e.u,exports.UniAppAdapter=e.c,exports.abortNavigation=e.t,exports.createHttp=e.o,exports.createHttpAborter=e.l,exports.createOiyoMiddleware=e.i,exports.defineRouteMiddleware=e.n,exports.goTo=e.r,exports.http=e.s,exports.isHttpError=e.d,exports.toMiddlewareEntries=e.a;
|
package/dist/oiyo.d.cts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @oiyo/framework v0.8.
|
|
2
|
+
* @oiyo/framework v0.8.1
|
|
3
3
|
* Copyright (c) 2026 skiyee. All rights reserved.
|
|
4
4
|
* Commercial software. See LICENSE for terms.
|
|
5
5
|
* Official site: https://oiyo.js.org
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
8
|
-
export { type HttpCommonOptions, type HttpConfig, type HttpDownloadOptions, type HttpDownloadResponse, HttpError, type HttpOptions, type HttpRequestOptions, type HttpRequestResponse, type HttpResponse, type HttpUploadOptions, type HttpUploadResponse, type ResponseBodyType, type RouteMiddleware, abortNavigation, createHttp, createHttpAborter, createOiyoMiddleware, defineRouteMiddleware, goTo, http, isHttpError, toMiddlewareEntries };
|
|
7
|
+
import { C as HttpDownloadResponse, D as ResponseBodyType, E as HttpUploadResponse, O as createHttpAborter, S as HttpUploadOptions, T as HttpResponse, _ as HttpCommonOptions, a as toMiddlewareEntries, b as HttpOptions, c as isHttpError, d as UniAppAdapter, f as HttpAdapter, g as HttpUploadAdapter, h as HttpRequestAdapter, i as createOiyoMiddleware, l as createHttp, m as HttpDownloadAdapter, n as defineRouteMiddleware, o as RouteMiddleware, p as HttpAdapterTask, r as goTo, s as HttpError, t as abortNavigation, u as http, v as HttpConfig, w as HttpRequestResponse, x as HttpRequestOptions, y as HttpDownloadOptions } from "./index--TSUkNGq.cjs";
|
|
8
|
+
export { type HttpAdapter, type HttpAdapterTask, type HttpCommonOptions, type HttpConfig, type HttpDownloadAdapter, type HttpDownloadOptions, type HttpDownloadResponse, HttpError, type HttpOptions, type HttpRequestAdapter, type HttpRequestOptions, type HttpRequestResponse, type HttpResponse, type HttpUploadAdapter, type HttpUploadOptions, type HttpUploadResponse, type ResponseBodyType, type RouteMiddleware, UniAppAdapter, abortNavigation, createHttp, createHttpAborter, createOiyoMiddleware, defineRouteMiddleware, goTo, http, isHttpError, toMiddlewareEntries };
|
package/dist/oiyo.d.mts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @oiyo/framework v0.8.
|
|
2
|
+
* @oiyo/framework v0.8.1
|
|
3
3
|
* Copyright (c) 2026 skiyee. All rights reserved.
|
|
4
4
|
* Commercial software. See LICENSE for terms.
|
|
5
5
|
* Official site: https://oiyo.js.org
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
8
|
-
export { type HttpCommonOptions, type HttpConfig, type HttpDownloadOptions, type HttpDownloadResponse, HttpError, type HttpOptions, type HttpRequestOptions, type HttpRequestResponse, type HttpResponse, type HttpUploadOptions, type HttpUploadResponse, type ResponseBodyType, type RouteMiddleware, abortNavigation, createHttp, createHttpAborter, createOiyoMiddleware, defineRouteMiddleware, goTo, http, isHttpError, toMiddlewareEntries };
|
|
7
|
+
import { C as HttpDownloadResponse, D as ResponseBodyType, E as HttpUploadResponse, O as createHttpAborter, S as HttpUploadOptions, T as HttpResponse, _ as HttpCommonOptions, a as toMiddlewareEntries, b as HttpOptions, c as isHttpError, d as UniAppAdapter, f as HttpAdapter, g as HttpUploadAdapter, h as HttpRequestAdapter, i as createOiyoMiddleware, l as createHttp, m as HttpDownloadAdapter, n as defineRouteMiddleware, o as RouteMiddleware, p as HttpAdapterTask, r as goTo, s as HttpError, t as abortNavigation, u as http, v as HttpConfig, w as HttpRequestResponse, x as HttpRequestOptions, y as HttpDownloadOptions } from "./index--TSUkNGq.mjs";
|
|
8
|
+
export { type HttpAdapter, type HttpAdapterTask, type HttpCommonOptions, type HttpConfig, type HttpDownloadAdapter, type HttpDownloadOptions, type HttpDownloadResponse, HttpError, type HttpOptions, type HttpRequestAdapter, type HttpRequestOptions, type HttpRequestResponse, type HttpResponse, type HttpUploadAdapter, type HttpUploadOptions, type HttpUploadResponse, type ResponseBodyType, type RouteMiddleware, UniAppAdapter, abortNavigation, createHttp, createHttpAborter, createOiyoMiddleware, defineRouteMiddleware, goTo, http, isHttpError, toMiddlewareEntries };
|
package/dist/oiyo.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @oiyo/framework v0.8.
|
|
2
|
+
* @oiyo/framework v0.8.1
|
|
3
3
|
* Copyright (c) 2026 skiyee. All rights reserved.
|
|
4
4
|
* Commercial software. See LICENSE for terms.
|
|
5
5
|
* Official site: https://oiyo.js.org
|
|
6
6
|
*/
|
|
7
|
-
import{a as e,c as t,
|
|
7
|
+
import{a as e,c as t,d as n,i as r,l as i,n as a,o,r as s,s as c,t as l,u}from"./oiyo-ZR-kfhVZ.mjs";export{u as HttpError,t as UniAppAdapter,l as abortNavigation,o as createHttp,i as createHttpAborter,r as createOiyoMiddleware,a as defineRouteMiddleware,s as goTo,c as http,n as isHttpError,e as toMiddlewareEntries};
|
package/dist/uni.cjs
CHANGED
package/dist/uni.d.cts
CHANGED
package/dist/uni.d.mts
CHANGED
package/dist/uni.mjs
CHANGED
package/dist/vue.cjs
CHANGED
package/dist/vue.d.cts
CHANGED
package/dist/vue.d.mts
CHANGED
package/dist/vue.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oiyo/framework",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.8.
|
|
4
|
+
"version": "0.8.1",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "skiyee",
|
|
7
7
|
"email": "319619193@qq.com",
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
],
|
|
64
64
|
"peerDependencies": {
|
|
65
65
|
"vite": "5.2.8",
|
|
66
|
-
"@oiyo/core": "0.8.
|
|
66
|
+
"@oiyo/core": "0.8.1"
|
|
67
67
|
},
|
|
68
68
|
"dependencies": {
|
|
69
69
|
"@dcloudio/types": "3.4.31",
|
|
@@ -90,6 +90,8 @@
|
|
|
90
90
|
"vue": "3.4.21"
|
|
91
91
|
},
|
|
92
92
|
"scripts": {
|
|
93
|
-
"build": "tsdown"
|
|
93
|
+
"build": "tsdown",
|
|
94
|
+
"test": "vitest",
|
|
95
|
+
"test:run": "vitest run"
|
|
94
96
|
}
|
|
95
97
|
}
|
package/dist/oiyo-CVxyc7ce.mjs
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @oiyo/framework v0.8.0
|
|
3
|
-
* Copyright (c) 2026 skiyee. All rights reserved.
|
|
4
|
-
* Commercial software. See LICENSE for terms.
|
|
5
|
-
* Official site: https://oiyo.js.org
|
|
6
|
-
*/
|
|
7
|
-
var e=class extends Error{static ABORT=`ABORT`;static FAIL=`FAIL`;static STATUS=`STATUS`;url;options;response;statusCode;statusMessage;data;constructor(e){super(e.message,{cause:e.cause}),this.name=e.name}};function t(t){return!!t&&typeof t==`object`&&t instanceof e}function n(t,n,r){let i=`[${n?.method||`GET`}] ${t}`,a=r?`${r.statusCode} ${r.errMsg||``}`:`<no response>`,o=r?JSON.stringify(r.data):`<no response body>`,s=`${i}: ${a}${r.data?` ${o}`:``}`,c=new e({name:e.STATUS,message:s});for(let e of[`url`,`options`,`response`,`statusCode`,`statusMessage`,`data`])Object.defineProperty(c,e,{get(){return{url:t,options:n,response:r,statusCode:r.statusCode,statusMessage:r.errMsg,data:r.data}[e]}});return c}function r(t=`The operation was aborted`){return new e({name:e.ABORT,message:t})}function i(t=`request failed`){return new e({name:e.FAIL,message:t})}var a=class{listeners=new Map;constructor(){}on(e,t){let n=this.listeners.get(e);Array.isArray(n)?n.push(t):this.listeners.set(e,[t])}off(e,t){let n=this.listeners.get(e);if(!n?.length)return;let r=n.indexOf(t);r!==-1&&n.splice(r,1)}emit(e,...t){let n=(this.listeners.get(e)||[]).slice();for(let e of n)e.call(this,...t)}remove(e){this.listeners.has(e)&&this.listeners.delete(e)}},o=class extends a{_aborted=!1;_reason=null;_onabortListener=()=>{};get aborted(){return this._aborted}get reason(){return this._reason}_abort(e){this._aborted||(this._aborted=!0,this._reason=e??r(),this.emit(`abort`))}throwIfAborted(){if(this.aborted)throw this.reason}},s=class{_signal=new o;constructor(){}get signal(){return this._signal}abort(e){this._signal._abort(e)}};function c(){return new s}function l(e){let t=new s;if(!e)return{signal:t.signal,dispose:()=>{}};if(e.aborted)return t.abort(e.reason),{signal:t.signal,dispose:()=>{}};let n=ee(e,()=>{n=void 0,t.abort(e.reason)});return{signal:t.signal,dispose(){n?.(),n=void 0}}}function ee(e,t){return e?e.aborted?(t(),()=>{}):(e.on(`abort`,t),()=>e.off(`abort`,t)):()=>{}}function u(e){if(!e||typeof e!=`object`)return!1;let t=Object.getPrototypeOf(e);return t!==null&&t!==Object.prototype&&Object.getPrototypeOf(t)!==null?!1:Object.prototype.toString.call(e)===`[object Object]`}function d(e){return e===void 0}const te=[`onBeforeRequest`,`onRequestError`,`onResponseSuccess`,`onResponseError`];function f(...e){let t={},n={};for(let r of e){if(!r)continue;for(let e of te)ne(n,e,r);let e=t.headers,i=t.query;Object.assign(t,r),t.headers={...e,...r.headers},t.query={...i,...r.query}}for(let[e,r]of Object.entries(n))Object.assign(t,{[e]:async e=>{let t;for(let n of r){let r=await n(e);d(r)||(t=r)}return t}});return t}function ne(e,t,n){let r=n[t];typeof r==`function`&&(e[t]??=[],e[t].push(r))}async function p(e){return new Promise(t=>setTimeout(t,e))}function m(){}function re(e,t){if(!t||t===`/`)return e;let n=t[t.length-1]===`/`?t.slice(0,-1):t;return e.startsWith(n)?e:h(t,e)}function h(e,t){return!e||ie(t)?t:`${e.replace(/\/+$/,``)}/${t.replace(/^\/+/,``)}`}function ie(e){return/^[a-z][a-z\d+\-.]*:\/\//i.test(e)||e.startsWith(`//`)}function ae(e,t){if(!t||Object.keys(t).length===0)return e;let n=e.indexOf(`?`);if(n===-1){let n=Object.entries(t).filter(([,e])=>e!==void 0).flatMap(([e,t])=>(Array.isArray(t)?t:[t]).filter(e=>!d(e)).map(t=>_(e,t))).join(`&`);return n?`${e}?${n}`:e}let r=v(e.slice(n+1)),i=e.slice(0,n);for(let[e,n]of Object.entries(t))if(n===void 0)r.delete(e);else if(Array.isArray(n))for(let t of n)d(t)||r.append(e,g(t));else r.set(e,g(n));let a=r.toString();return a?`${i}?${a}`:i}function g(e){return e===null?``:typeof e==`number`||typeof e==`boolean`?String(e):typeof e==`object`?JSON.stringify(e):String(e)}function _(e,t){return`${encodeURIComponent(e)}=${encodeURIComponent(g(t))}`}function v(e){let t=[],n=new Map;for(let r of e.split(`&`)){if(!r)continue;let e=r.indexOf(`=`),i=y(e===-1?r:r.slice(0,e)),a=y(e===-1?``:r.slice(e+1));n.has(i)||(n.set(i,[]),t.push(i)),n.get(i).push(a)}return{set(e,r){n.has(e)||t.push(e),n.set(e,[r])},append(e,r){n.has(e)||(n.set(e,[]),t.push(e)),n.get(e).push(r)},delete(e){if(!n.delete(e))return;let r=t.indexOf(e);r!==-1&&t.splice(r,1)},toString(){return t.flatMap(e=>(n.get(e)??[]).map(t=>_(e,t))).join(`&`)}}}function y(e){try{return decodeURIComponent(e.replace(/\+/g,` `))}catch{return e}}function b(e){return!e||e===`json`?`text`:e===`arrayBuffer`?`arraybuffer`:`text`}function x(e,t){let n={url:e,method:t.method,header:t.headers,data:t.body??{},timeout:t.timeout,dataType:t.dataType||`json`,responseType:b(t.responseType),sslVerify:t.sslVerify,withCredentials:t.withCredentials,firstIpv4:t.firstIpv4,enableHttp2:t.enableHttp2,enableQuic:t.enableQuic,enableCache:t.enableCache,enableHttpDNS:t.enableHttpDNS,httpDNSServiceId:t.httpDNSServiceId,enableChunked:t.enableChunked,forceCellularNetwork:t.forceCellularNetwork,complete:m},r,i=new Promise((e,t)=>{n.success=t=>{e(t)},n.fail=e=>{t(e)},r=uni.request(n)});return w(i,r),i}function S(e,t){let n={url:e,fileType:t.fileType,file:t.file,filePath:t.filePath,name:t.name??`file`,files:t.files,header:t.headers,formData:t.body??{},timeout:t.timeout,complete:m},r,i=new Promise((e,t)=>{n.success=t=>{e(t)},n.fail=e=>{t(e)},r=uni.uploadFile(n)});return w(i,r),i}function C(e,t){let n={url:e,filePath:t.filePath,header:t.headers,timeout:t.timeout,complete:m},r,i=new Promise((e,t)=>{n.success=t=>{e({...t,data:{tempFilePath:t.tempFilePath}})},n.fail=e=>{t(e)},r=uni.downloadFile(n)});return w(i,r),i}function w(e,t){if(t&&e)for(let n of[`abort`,`onHeadersReceived`,`offHeadersReceived`,`onChunkReceived`,`offChunkReceived`,`onProgressUpdate`,`offProgressUpdate`])n in t&&Object.defineProperty(e,n,{value:t[n].bind(t),writable:!1,enumerable:!1,configurable:!1})}function T(e){if(u(e)){let t=e;return t.errMsg||t.message||void 0}}function E(e){if(!e||typeof e!=`object`)return!1;let t=e.errMsg;return typeof t==`string`&&/(?:^|:)fail(?:ed)?\s+abort(?:ed)?$/i.test(t.trim())}function D(e,t,n){let r;r=e===`upload`?S(t,n):e===`download`?C(t,n):x(t,n),n.signal?.throwIfAborted(),n.signal?.on(`abort`,()=>r.abort());let i=n.onHeaders;if(typeof i==`function`&&typeof r.onHeadersReceived==`function`){let e=!1,t=n=>{e||i(n,()=>{e||(e=!0,r.offHeadersReceived?.(t))})};r.onHeadersReceived(t)}let a=n.onChunk;if(n._action===`request`&&typeof a==`function`&&typeof r.onChunkReceived==`function`){let e=!1,t=n=>{e||a(n,()=>{e||(e=!0,r.offChunkReceived?.(t))})};r.onChunkReceived(t)}let o=n.onProgress;if((n._action===`download`||n._action===`upload`)&&typeof o==`function`&&typeof r.onProgressUpdate==`function`){let e=!1,t=n=>{e||o(n,()=>{e||(e=!0,r.offProgressUpdate?.(t))})};r.onProgressUpdate(t)}return r}async function oe(e,t){return t.responseType===`json`||!t.responseType?{...e,data:await se(e.data,t)}:e}function se(e,t){return typeof e==`string`?t.parseResponse?t.parseResponse(e):e?JSON.parse(e):null:e}const ce=[408,409,425,429,500,502,503,504],le=new Set([`POST`,`PUT`,`DELETE`,`PATCH`]);async function ue(e,t){let n=(e.retry??1)||0;(!e.method||n<=0||le.has(e.method.toUpperCase()))&&(n=0);for(let r=0;;r++){let{signal:i,dispose:a}=l(e.signal),o={...e,signal:i};try{return await t(o)}catch(e){if(r>=n||!de(e,o))throw e;let t=o.retryDelay??0;t>0&&await p(t)}finally{a()}}}function de(n,r){return!t(n)||n.name===e.ABORT?!1:n.name===e.FAIL||(r.retryStatusCodes??ce).includes(n.statusCode)}function O(e,t,n){return ue(n,n=>fe(e,t,n))}async function fe(e,t,a){try{let e=await a.onBeforeRequest?.({url:t,options:a});u(e)&&(a=f(e,a)),a.signal?.throwIfAborted()}catch(e){let n=e,r=await a.onRequestError?.({url:t,options:a,error:n});if(!d(r))return r;throw n}let o;try{o=await D(e,ae(re(t,a.baseURL),a.query),a)}catch(e){let n=e;n=E(e)?r():i(T(n));let o=await a.onRequestError?.({url:t,options:a,error:n});if(!d(o))return o;throw n}finally{a.signal?.remove(`abort`)}let s=await oe(o,a);if(a.validateStatus?.(s.statusCode)){let e=await a.onResponseSuccess?.({url:t,options:a,response:s});return d(e)||(s=Object.assign({},s,e)),a.raw?s:s.data}let c=n(t,a,s),l=await a.onResponseError?.({url:t,options:a,response:s,error:c});if(!d(l))return l;throw c}const k={responseType:`json`,validateStatus:e=>e>=200&&e<300};function A(e={}){let t=f(k,e);return{request:(e,n)=>O(`request`,e,f(t,{method:`GET`},n,{_action:`request`})),upload:(e,n)=>O(`upload`,e,f(t,n,{method:`POST`,_action:`upload`})),download:(e,n)=>O(`download`,e,f(t,n,{method:`GET`,_action:`download`})),create:t=>A(f(e,t))}}const j=A(),M=`__oiyo_page_middleware_lifecycle__`,N={fullPath:`/`,meta:{},path:`/`,query:{}};function P(){let e={};return{issue(t){e[t]=(e[t]??0)+1},consume(t){let n=e[t]??0;return n<=0?!1:(e[t]=n-1,!0)},revoke(t){let n=e[t]??0;if(n<=1){delete e[t];return}e[t]=n-1}}}function F(e){let t=e.replace(/\\/g,`/`).replace(/^\/+|\/+$/g,``);return t?`/${t}`:`/`}function I(e,t){if(!t||Object.keys(t).length===0)return e;let n=Object.entries(t).filter(([,e])=>e!==void 0).map(([e,t])=>`${encodeURIComponent(e)}=${encodeURIComponent(String(t))}`).join(`&`);return n?`${e}${e.includes(`?`)?`&`:`?`}${n}`:e}function L(e){let t={};for(let n of e.split(`&`)){if(!n)continue;let[e,r=``]=n.split(`=`,2);t[R(e)]=R(r)}return t}function R(e){try{return decodeURIComponent(e.replace(/\+/g,` `))}catch{return e}}function z(e){return e===`undefined`}function B(e){return typeof e==`function`}function V(e){return Object.prototype.toString.call(e)===`[object Object]`}function pe(e){return typeof e==`string`}function H(e){return e==null?[]:Array.isArray(e)?e:[e]}function U(){return globalThis.uni??uni}function W(){try{let e=U();return typeof e.getCurrentPages==`function`?e.getCurrentPages()??[]:(globalThis.getCurrentPages??getCurrentPages)?.()??[]}catch{return[]}}function G(e,t){let n=t?` in \"${t}\"`:``;console.error(`[oiyo] Page middleware run failed${n}.`,e)}function K(e,t,n){let r={errMsg:`${e}:fail route middleware aborted navigation`,cause:n};t.fail?.(r),t.complete?.(r)}function me(e){let{pages:t=[],subPackages:n=[],tabBar:r={}}=e,i=H(r.list),a=(e,t)=>{let{path:n,...r}=e,a=F([t,e.path].filter(Boolean).join(`/`)),o=he(r.middleware,n,`middleware`);return{meta:{...r,middleware:o,isTab:!t&&i.some(t=>t.pagePath===e.path)},path:a}},o=t.map(e=>a(e)),s=n.flatMap(({root:e,pages:t})=>t.map(t=>a(t,e)));return[...o,...s]}function he(e,t,n){if(z(e)===void 0)return[];let r=H(e);if(r.every(e=>pe(e)&&e.length>0))return r;throw Error(`[oiyo] Page ${t} ${n} must be a middleware name or an array of names.`)}function ge(e){let t=U();if(typeof t.addInterceptor==`function`)for(let n of[`navigateTo`,`redirectTo`,`reLaunch`,`switchTab`,`navigateBack`])t.addInterceptor(n,{invoke(t){return e.dispatchBypass.consume(n)?t:(e.dispatch(n,t).catch(e=>{G(e),K(n,t,e)}),!1)}})}function q(e,t,n){if(!t)return;let r=t.$page?.fullPath||t.$scope?.$page?.fullPath;if(r)return J(e,r);let i=t.$page?.route||t.$scope?.$page?.route||t.route||t.$scope?.route;if(!i)return;let a=t.options||t.$scope?.options;return J(e,I(i,V(n)?n:V(a)?a:{}))}function J(e,t){let[n,r=``]=t.replace(/^#/,``).split(`?`,2),i=F(n),a=e.find(({path:e})=>e===i);if(a)return{fullPath:r?`${i}?${r}`:i,meta:a.meta??{},path:i,query:L(r)}}function _e(e){let t=W();return q(e,t[t.length-1])}function ve(e,t,n){if(t===`navigateBack`){let t=W(),r=Number(n.delta??1),i=Number.isFinite(r)?Math.max(1,r):1;return q(e,t[Math.max(0,t.length-1-i)])}if(typeof n.url==`string`&&n.url.length!==0)return J(e,n.url)}async function Y(e,t,n,r){let i=n.find(e=>e.path===t.path);if(!i)return{type:`abort`,error:Error(`未找到目标路由`)};let a=r.filter(e=>e.isGlobal?!0:(i?.meta.middleware||[]).includes(e.name));for(let n of a){let r;try{r=await n.handler(t,e)}catch(e){return G(e,n.name),{type:`abort`,error:e}}let i=ye(r);if(i.type!==`allow`)return i}return{type:`allow`}}function ye(e){if(e===!1)return{type:`abort`};if(typeof e==`string`)return{type:`redirect`,navigation:{path:e}};if(e&&typeof e==`object`&&`__scope`in e){if(e.__scope===`abort`)return{type:`abort`,error:e.error};if(e.__scope===`redirect`)return{type:`redirect`,navigation:e}}return{type:`allow`}}function X(e,t,n){e.dispatchBypass.issue(t);let r=U();r[t].call(r,n)}function Z(e,t){let{path:n,query:r,type:i}=t;if(typeof n!=`string`||n.length===0)return;let a=I(n,r),o=J(e,a);return i?{name:i,options:{url:a}}:{name:e.some(e=>e.meta.isTab&&e.path===o?.path)?`switchTab`:t.replace?`redirectTo`:`navigateTo`,options:{url:a}}}function be(e,t){t.mixin({onLoad(t){this[M]=!0,Q(e,this,t).catch(G)},onShow(){if(this.$mpType===`page`){if(this.__oiyo_page_middleware_lifecycle__){this[M]=!1;return}Q(e,this).catch(G)}}})}async function Q(e,t,n){let r=q(e.routes,t,n);if(!r||r.fullPath===e.currentRoute.fullPath)return;let i=e.currentRoute;if(e.currentRoute=r,e.lifecycleBypass.consume(r.fullPath))return;let a=await Y(i,r,e.routes,e.middlewares);if(a.type!==`allow`){if(i.path!==N.path){let[t,n]=[e.routes.some(e=>e.meta.isTab&&e.path===i.path),e.routes.some(e=>e.meta.isTab&&e.path===r.path)];!t&&n?await $(e,`reLaunch`,{url:i.fullPath},i):t&&n?await $(e,`switchTab`,{url:i.fullPath},i):console.log(`没有识别到的返回情况`)}if(a.type===`abort`){K(`nativeNavigate`,{},a.error);return}if(a.type===`redirect`){let t=Z(e.routes,a.navigation);if(!t){K(`nativeNavigate`,{},Error(`Middleware returned an invalid redirect.`));return}await e.dispatch(t.name,t.options,1)}}}async function $(e,t,n,r){return e.lifecycleBypass.issue(r.fullPath),await xe(e,t,n)?!0:(e.lifecycleBypass.revoke(r.fullPath),!1)}function xe(e,t,n){return new Promise(r=>{let i=!1,a=!0,o=e=>{i||(i=!0,r(e))};try{X(e,t,{...n,success:e=>{n.success?.(e),a=!0,o(!0)},fail:e=>{n.fail?.(e),a=!1,o(!1)},complete:e=>{n.complete?.(e),o(a)}})}catch(e){G(e),o(!1)}})}function Se(e){let t={routes:me(e.config),middlewares:e.entries,dispatchBypass:P(),dispatch:(e,n,r=0)=>Ce(t,e,n,r),lifecycleBypass:P(),currentRoute:N};return t}async function Ce(e,t,n,r){if(r>10){let e=Error(`Route middleware exceeded the redirect limit.`);G(e),K(t,n,e);return}let i=ve(e.routes,t,n);if(!i){X(e,t,n);return}let a=await Y(_e(e.routes)??e.currentRoute,i,e.routes,e.middlewares);if(a.type===`abort`){K(t,n,a.error);return}if(a.type===`redirect`){let i=Z(e.routes,a.navigation);if(!i){K(t,n,Error(`Middleware returned an invalid redirect.`));return}await e.dispatch(i.name,i.options,r+1);return}e.lifecycleBypass.issue(i.fullPath),X(e,t,n)}function we(e){return{install:t=>{let n=U();if(!n)return;let r=n.__oiyo_page_middleware_state__??Se(e);n.__oiyo_page_middleware_state__=r,ge(r),be(r,t)}}}function Te(e){return e.filter(e=>!z(e.module)&&B(e.module.default)).map(e=>({name:e.useName,handler:e.module.default,isGlobal:e.isGlobal}))}function Ee(e){return e}function De(e,t={}){return{__scope:`redirect`,...typeof e==`string`?{path:e}:e,...t}}function Oe(e){return{__scope:`abort`,error:e}}export{Te as a,c,we as i,e as l,Ee as n,A as o,De as r,j as s,Oe as t,t as u};
|
package/dist/oiyo-Cf0rDC-0.cjs
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @oiyo/framework v0.8.0
|
|
3
|
-
* Copyright (c) 2026 skiyee. All rights reserved.
|
|
4
|
-
* Commercial software. See LICENSE for terms.
|
|
5
|
-
* Official site: https://oiyo.js.org
|
|
6
|
-
*/
|
|
7
|
-
var e=class extends Error{static ABORT=`ABORT`;static FAIL=`FAIL`;static STATUS=`STATUS`;url;options;response;statusCode;statusMessage;data;constructor(e){super(e.message,{cause:e.cause}),this.name=e.name}};function t(t){return!!t&&typeof t==`object`&&t instanceof e}function n(t,n,r){let i=`[${n?.method||`GET`}] ${t}`,a=r?`${r.statusCode} ${r.errMsg||``}`:`<no response>`,o=r?JSON.stringify(r.data):`<no response body>`,s=`${i}: ${a}${r.data?` ${o}`:``}`,c=new e({name:e.STATUS,message:s});for(let e of[`url`,`options`,`response`,`statusCode`,`statusMessage`,`data`])Object.defineProperty(c,e,{get(){return{url:t,options:n,response:r,statusCode:r.statusCode,statusMessage:r.errMsg,data:r.data}[e]}});return c}function r(t=`The operation was aborted`){return new e({name:e.ABORT,message:t})}function i(t=`request failed`){return new e({name:e.FAIL,message:t})}var a=class{listeners=new Map;constructor(){}on(e,t){let n=this.listeners.get(e);Array.isArray(n)?n.push(t):this.listeners.set(e,[t])}off(e,t){let n=this.listeners.get(e);if(!n?.length)return;let r=n.indexOf(t);r!==-1&&n.splice(r,1)}emit(e,...t){let n=(this.listeners.get(e)||[]).slice();for(let e of n)e.call(this,...t)}remove(e){this.listeners.has(e)&&this.listeners.delete(e)}},o=class extends a{_aborted=!1;_reason=null;_onabortListener=()=>{};get aborted(){return this._aborted}get reason(){return this._reason}_abort(e){this._aborted||(this._aborted=!0,this._reason=e??r(),this.emit(`abort`))}throwIfAborted(){if(this.aborted)throw this.reason}},s=class{_signal=new o;constructor(){}get signal(){return this._signal}abort(e){this._signal._abort(e)}};function c(){return new s}function l(e){let t=new s;if(!e)return{signal:t.signal,dispose:()=>{}};if(e.aborted)return t.abort(e.reason),{signal:t.signal,dispose:()=>{}};let n=ee(e,()=>{n=void 0,t.abort(e.reason)});return{signal:t.signal,dispose(){n?.(),n=void 0}}}function ee(e,t){return e?e.aborted?(t(),()=>{}):(e.on(`abort`,t),()=>e.off(`abort`,t)):()=>{}}function u(e){if(!e||typeof e!=`object`)return!1;let t=Object.getPrototypeOf(e);return t!==null&&t!==Object.prototype&&Object.getPrototypeOf(t)!==null?!1:Object.prototype.toString.call(e)===`[object Object]`}function d(e){return e===void 0}const te=[`onBeforeRequest`,`onRequestError`,`onResponseSuccess`,`onResponseError`];function f(...e){let t={},n={};for(let r of e){if(!r)continue;for(let e of te)ne(n,e,r);let e=t.headers,i=t.query;Object.assign(t,r),t.headers={...e,...r.headers},t.query={...i,...r.query}}for(let[e,r]of Object.entries(n))Object.assign(t,{[e]:async e=>{let t;for(let n of r){let r=await n(e);d(r)||(t=r)}return t}});return t}function ne(e,t,n){let r=n[t];typeof r==`function`&&(e[t]??=[],e[t].push(r))}async function p(e){return new Promise(t=>setTimeout(t,e))}function m(){}function re(e,t){if(!t||t===`/`)return e;let n=t[t.length-1]===`/`?t.slice(0,-1):t;return e.startsWith(n)?e:h(t,e)}function h(e,t){return!e||ie(t)?t:`${e.replace(/\/+$/,``)}/${t.replace(/^\/+/,``)}`}function ie(e){return/^[a-z][a-z\d+\-.]*:\/\//i.test(e)||e.startsWith(`//`)}function ae(e,t){if(!t||Object.keys(t).length===0)return e;let n=e.indexOf(`?`);if(n===-1){let n=Object.entries(t).filter(([,e])=>e!==void 0).flatMap(([e,t])=>(Array.isArray(t)?t:[t]).filter(e=>!d(e)).map(t=>_(e,t))).join(`&`);return n?`${e}?${n}`:e}let r=v(e.slice(n+1)),i=e.slice(0,n);for(let[e,n]of Object.entries(t))if(n===void 0)r.delete(e);else if(Array.isArray(n))for(let t of n)d(t)||r.append(e,g(t));else r.set(e,g(n));let a=r.toString();return a?`${i}?${a}`:i}function g(e){return e===null?``:typeof e==`number`||typeof e==`boolean`?String(e):typeof e==`object`?JSON.stringify(e):String(e)}function _(e,t){return`${encodeURIComponent(e)}=${encodeURIComponent(g(t))}`}function v(e){let t=[],n=new Map;for(let r of e.split(`&`)){if(!r)continue;let e=r.indexOf(`=`),i=y(e===-1?r:r.slice(0,e)),a=y(e===-1?``:r.slice(e+1));n.has(i)||(n.set(i,[]),t.push(i)),n.get(i).push(a)}return{set(e,r){n.has(e)||t.push(e),n.set(e,[r])},append(e,r){n.has(e)||(n.set(e,[]),t.push(e)),n.get(e).push(r)},delete(e){if(!n.delete(e))return;let r=t.indexOf(e);r!==-1&&t.splice(r,1)},toString(){return t.flatMap(e=>(n.get(e)??[]).map(t=>_(e,t))).join(`&`)}}}function y(e){try{return decodeURIComponent(e.replace(/\+/g,` `))}catch{return e}}function b(e){return!e||e===`json`?`text`:e===`arrayBuffer`?`arraybuffer`:`text`}function x(e,t){let n={url:e,method:t.method,header:t.headers,data:t.body??{},timeout:t.timeout,dataType:t.dataType||`json`,responseType:b(t.responseType),sslVerify:t.sslVerify,withCredentials:t.withCredentials,firstIpv4:t.firstIpv4,enableHttp2:t.enableHttp2,enableQuic:t.enableQuic,enableCache:t.enableCache,enableHttpDNS:t.enableHttpDNS,httpDNSServiceId:t.httpDNSServiceId,enableChunked:t.enableChunked,forceCellularNetwork:t.forceCellularNetwork,complete:m},r,i=new Promise((e,t)=>{n.success=t=>{e(t)},n.fail=e=>{t(e)},r=uni.request(n)});return w(i,r),i}function S(e,t){let n={url:e,fileType:t.fileType,file:t.file,filePath:t.filePath,name:t.name??`file`,files:t.files,header:t.headers,formData:t.body??{},timeout:t.timeout,complete:m},r,i=new Promise((e,t)=>{n.success=t=>{e(t)},n.fail=e=>{t(e)},r=uni.uploadFile(n)});return w(i,r),i}function C(e,t){let n={url:e,filePath:t.filePath,header:t.headers,timeout:t.timeout,complete:m},r,i=new Promise((e,t)=>{n.success=t=>{e({...t,data:{tempFilePath:t.tempFilePath}})},n.fail=e=>{t(e)},r=uni.downloadFile(n)});return w(i,r),i}function w(e,t){if(t&&e)for(let n of[`abort`,`onHeadersReceived`,`offHeadersReceived`,`onChunkReceived`,`offChunkReceived`,`onProgressUpdate`,`offProgressUpdate`])n in t&&Object.defineProperty(e,n,{value:t[n].bind(t),writable:!1,enumerable:!1,configurable:!1})}function T(e){if(u(e)){let t=e;return t.errMsg||t.message||void 0}}function E(e){if(!e||typeof e!=`object`)return!1;let t=e.errMsg;return typeof t==`string`&&/(?:^|:)fail(?:ed)?\s+abort(?:ed)?$/i.test(t.trim())}function D(e,t,n){let r;r=e===`upload`?S(t,n):e===`download`?C(t,n):x(t,n),n.signal?.throwIfAborted(),n.signal?.on(`abort`,()=>r.abort());let i=n.onHeaders;if(typeof i==`function`&&typeof r.onHeadersReceived==`function`){let e=!1,t=n=>{e||i(n,()=>{e||(e=!0,r.offHeadersReceived?.(t))})};r.onHeadersReceived(t)}let a=n.onChunk;if(n._action===`request`&&typeof a==`function`&&typeof r.onChunkReceived==`function`){let e=!1,t=n=>{e||a(n,()=>{e||(e=!0,r.offChunkReceived?.(t))})};r.onChunkReceived(t)}let o=n.onProgress;if((n._action===`download`||n._action===`upload`)&&typeof o==`function`&&typeof r.onProgressUpdate==`function`){let e=!1,t=n=>{e||o(n,()=>{e||(e=!0,r.offProgressUpdate?.(t))})};r.onProgressUpdate(t)}return r}async function oe(e,t){return t.responseType===`json`||!t.responseType?{...e,data:await se(e.data,t)}:e}function se(e,t){return typeof e==`string`?t.parseResponse?t.parseResponse(e):e?JSON.parse(e):null:e}const ce=[408,409,425,429,500,502,503,504],le=new Set([`POST`,`PUT`,`DELETE`,`PATCH`]);async function ue(e,t){let n=(e.retry??1)||0;(!e.method||n<=0||le.has(e.method.toUpperCase()))&&(n=0);for(let r=0;;r++){let{signal:i,dispose:a}=l(e.signal),o={...e,signal:i};try{return await t(o)}catch(e){if(r>=n||!de(e,o))throw e;let t=o.retryDelay??0;t>0&&await p(t)}finally{a()}}}function de(n,r){return!t(n)||n.name===e.ABORT?!1:n.name===e.FAIL||(r.retryStatusCodes??ce).includes(n.statusCode)}function O(e,t,n){return ue(n,n=>fe(e,t,n))}async function fe(e,t,a){try{let e=await a.onBeforeRequest?.({url:t,options:a});u(e)&&(a=f(e,a)),a.signal?.throwIfAborted()}catch(e){let n=e,r=await a.onRequestError?.({url:t,options:a,error:n});if(!d(r))return r;throw n}let o;try{o=await D(e,ae(re(t,a.baseURL),a.query),a)}catch(e){let n=e;n=E(e)?r():i(T(n));let o=await a.onRequestError?.({url:t,options:a,error:n});if(!d(o))return o;throw n}finally{a.signal?.remove(`abort`)}let s=await oe(o,a);if(a.validateStatus?.(s.statusCode)){let e=await a.onResponseSuccess?.({url:t,options:a,response:s});return d(e)||(s=Object.assign({},s,e)),a.raw?s:s.data}let c=n(t,a,s),l=await a.onResponseError?.({url:t,options:a,response:s,error:c});if(!d(l))return l;throw c}const k={responseType:`json`,validateStatus:e=>e>=200&&e<300};function A(e={}){let t=f(k,e);return{request:(e,n)=>O(`request`,e,f(t,{method:`GET`},n,{_action:`request`})),upload:(e,n)=>O(`upload`,e,f(t,n,{method:`POST`,_action:`upload`})),download:(e,n)=>O(`download`,e,f(t,n,{method:`GET`,_action:`download`})),create:t=>A(f(e,t))}}const j=A(),M=`__oiyo_page_middleware_lifecycle__`,N={fullPath:`/`,meta:{},path:`/`,query:{}};function P(){let e={};return{issue(t){e[t]=(e[t]??0)+1},consume(t){let n=e[t]??0;return n<=0?!1:(e[t]=n-1,!0)},revoke(t){let n=e[t]??0;if(n<=1){delete e[t];return}e[t]=n-1}}}function F(e){let t=e.replace(/\\/g,`/`).replace(/^\/+|\/+$/g,``);return t?`/${t}`:`/`}function I(e,t){if(!t||Object.keys(t).length===0)return e;let n=Object.entries(t).filter(([,e])=>e!==void 0).map(([e,t])=>`${encodeURIComponent(e)}=${encodeURIComponent(String(t))}`).join(`&`);return n?`${e}${e.includes(`?`)?`&`:`?`}${n}`:e}function L(e){let t={};for(let n of e.split(`&`)){if(!n)continue;let[e,r=``]=n.split(`=`,2);t[R(e)]=R(r)}return t}function R(e){try{return decodeURIComponent(e.replace(/\+/g,` `))}catch{return e}}function z(e){return e===`undefined`}function B(e){return typeof e==`function`}function V(e){return Object.prototype.toString.call(e)===`[object Object]`}function pe(e){return typeof e==`string`}function H(e){return e==null?[]:Array.isArray(e)?e:[e]}function U(){return globalThis.uni??uni}function W(){try{let e=U();return typeof e.getCurrentPages==`function`?e.getCurrentPages()??[]:(globalThis.getCurrentPages??getCurrentPages)?.()??[]}catch{return[]}}function G(e,t){let n=t?` in \"${t}\"`:``;console.error(`[oiyo] Page middleware run failed${n}.`,e)}function K(e,t,n){let r={errMsg:`${e}:fail route middleware aborted navigation`,cause:n};t.fail?.(r),t.complete?.(r)}function me(e){let{pages:t=[],subPackages:n=[],tabBar:r={}}=e,i=H(r.list),a=(e,t)=>{let{path:n,...r}=e,a=F([t,e.path].filter(Boolean).join(`/`)),o=he(r.middleware,n,`middleware`);return{meta:{...r,middleware:o,isTab:!t&&i.some(t=>t.pagePath===e.path)},path:a}},o=t.map(e=>a(e)),s=n.flatMap(({root:e,pages:t})=>t.map(t=>a(t,e)));return[...o,...s]}function he(e,t,n){if(z(e)===void 0)return[];let r=H(e);if(r.every(e=>pe(e)&&e.length>0))return r;throw Error(`[oiyo] Page ${t} ${n} must be a middleware name or an array of names.`)}function ge(e){let t=U();if(typeof t.addInterceptor==`function`)for(let n of[`navigateTo`,`redirectTo`,`reLaunch`,`switchTab`,`navigateBack`])t.addInterceptor(n,{invoke(t){return e.dispatchBypass.consume(n)?t:(e.dispatch(n,t).catch(e=>{G(e),K(n,t,e)}),!1)}})}function q(e,t,n){if(!t)return;let r=t.$page?.fullPath||t.$scope?.$page?.fullPath;if(r)return J(e,r);let i=t.$page?.route||t.$scope?.$page?.route||t.route||t.$scope?.route;if(!i)return;let a=t.options||t.$scope?.options;return J(e,I(i,V(n)?n:V(a)?a:{}))}function J(e,t){let[n,r=``]=t.replace(/^#/,``).split(`?`,2),i=F(n),a=e.find(({path:e})=>e===i);if(a)return{fullPath:r?`${i}?${r}`:i,meta:a.meta??{},path:i,query:L(r)}}function _e(e){let t=W();return q(e,t[t.length-1])}function ve(e,t,n){if(t===`navigateBack`){let t=W(),r=Number(n.delta??1),i=Number.isFinite(r)?Math.max(1,r):1;return q(e,t[Math.max(0,t.length-1-i)])}if(typeof n.url==`string`&&n.url.length!==0)return J(e,n.url)}async function Y(e,t,n,r){let i=n.find(e=>e.path===t.path);if(!i)return{type:`abort`,error:Error(`未找到目标路由`)};let a=r.filter(e=>e.isGlobal?!0:(i?.meta.middleware||[]).includes(e.name));for(let n of a){let r;try{r=await n.handler(t,e)}catch(e){return G(e,n.name),{type:`abort`,error:e}}let i=ye(r);if(i.type!==`allow`)return i}return{type:`allow`}}function ye(e){if(e===!1)return{type:`abort`};if(typeof e==`string`)return{type:`redirect`,navigation:{path:e}};if(e&&typeof e==`object`&&`__scope`in e){if(e.__scope===`abort`)return{type:`abort`,error:e.error};if(e.__scope===`redirect`)return{type:`redirect`,navigation:e}}return{type:`allow`}}function X(e,t,n){e.dispatchBypass.issue(t);let r=U();r[t].call(r,n)}function Z(e,t){let{path:n,query:r,type:i}=t;if(typeof n!=`string`||n.length===0)return;let a=I(n,r),o=J(e,a);return i?{name:i,options:{url:a}}:{name:e.some(e=>e.meta.isTab&&e.path===o?.path)?`switchTab`:t.replace?`redirectTo`:`navigateTo`,options:{url:a}}}function be(e,t){t.mixin({onLoad(t){this[M]=!0,Q(e,this,t).catch(G)},onShow(){if(this.$mpType===`page`){if(this.__oiyo_page_middleware_lifecycle__){this[M]=!1;return}Q(e,this).catch(G)}}})}async function Q(e,t,n){let r=q(e.routes,t,n);if(!r||r.fullPath===e.currentRoute.fullPath)return;let i=e.currentRoute;if(e.currentRoute=r,e.lifecycleBypass.consume(r.fullPath))return;let a=await Y(i,r,e.routes,e.middlewares);if(a.type!==`allow`){if(i.path!==N.path){let[t,n]=[e.routes.some(e=>e.meta.isTab&&e.path===i.path),e.routes.some(e=>e.meta.isTab&&e.path===r.path)];!t&&n?await $(e,`reLaunch`,{url:i.fullPath},i):t&&n?await $(e,`switchTab`,{url:i.fullPath},i):console.log(`没有识别到的返回情况`)}if(a.type===`abort`){K(`nativeNavigate`,{},a.error);return}if(a.type===`redirect`){let t=Z(e.routes,a.navigation);if(!t){K(`nativeNavigate`,{},Error(`Middleware returned an invalid redirect.`));return}await e.dispatch(t.name,t.options,1)}}}async function $(e,t,n,r){return e.lifecycleBypass.issue(r.fullPath),await xe(e,t,n)?!0:(e.lifecycleBypass.revoke(r.fullPath),!1)}function xe(e,t,n){return new Promise(r=>{let i=!1,a=!0,o=e=>{i||(i=!0,r(e))};try{X(e,t,{...n,success:e=>{n.success?.(e),a=!0,o(!0)},fail:e=>{n.fail?.(e),a=!1,o(!1)},complete:e=>{n.complete?.(e),o(a)}})}catch(e){G(e),o(!1)}})}function Se(e){let t={routes:me(e.config),middlewares:e.entries,dispatchBypass:P(),dispatch:(e,n,r=0)=>Ce(t,e,n,r),lifecycleBypass:P(),currentRoute:N};return t}async function Ce(e,t,n,r){if(r>10){let e=Error(`Route middleware exceeded the redirect limit.`);G(e),K(t,n,e);return}let i=ve(e.routes,t,n);if(!i){X(e,t,n);return}let a=await Y(_e(e.routes)??e.currentRoute,i,e.routes,e.middlewares);if(a.type===`abort`){K(t,n,a.error);return}if(a.type===`redirect`){let i=Z(e.routes,a.navigation);if(!i){K(t,n,Error(`Middleware returned an invalid redirect.`));return}await e.dispatch(i.name,i.options,r+1);return}e.lifecycleBypass.issue(i.fullPath),X(e,t,n)}function we(e){return{install:t=>{let n=U();if(!n)return;let r=n.__oiyo_page_middleware_state__??Se(e);n.__oiyo_page_middleware_state__=r,ge(r),be(r,t)}}}function Te(e){return e.filter(e=>!z(e.module)&&B(e.module.default)).map(e=>({name:e.useName,handler:e.module.default,isGlobal:e.isGlobal}))}function Ee(e){return e}function De(e,t={}){return{__scope:`redirect`,...typeof e==`string`?{path:e}:e,...t}}function Oe(e){return{__scope:`abort`,error:e}}Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return Te}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return we}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return e}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return Ee}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return De}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return Oe}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return t}});
|