transone 0.8.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/README.zh-CN.md +6 -0
- package/dist/core/app.d.ts +3 -1
- package/dist/core/cleanup.d.ts +7 -0
- package/dist/core/component/base.d.ts +16 -0
- package/dist/index-8qh91wft.js +12 -0
- package/dist/index-8qh91wft.js.map +27 -0
- package/dist/index-sg4er0f8.js +5 -0
- package/dist/{index-jq6fv0br.js.map → index-sg4er0f8.js.map} +4 -4
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +2 -2
- package/dist/request/index.js +1 -1
- package/dist/router/index.js +1 -1
- package/package.json +1 -1
- package/dist/index-5dxcnfw6.js +0 -12
- package/dist/index-5dxcnfw6.js.map +0 -26
- package/dist/index-jq6fv0br.js +0 -5
|
@@ -4,15 +4,15 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import type { RequestConfig, RequestResponse } from './types';\n\n/**\n * 统一请求错误码:\n * - NETWORK_ERROR:网络层失败(断网、DNS、连接被拒等)\n * - TIMEOUT:超时\n * - ABORTED:被 AbortSignal 取消\n * - BAD_REQUEST:配置非法(缺少 url、方法不支持等)\n * - UNSUPPORTED_PLATFORM:当前环境没有可用的请求 API,或指定了不支持的端\n * - UNKNOWN:无法归类的失败\n */\nexport type RequestErrorCode =\n | 'NETWORK_ERROR'\n | 'TIMEOUT'\n | 'ABORTED'\n | 'BAD_REQUEST'\n | 'UNSUPPORTED_PLATFORM'\n | 'UNKNOWN';\n\nexport interface RequestErrorOptions {\n code: RequestErrorCode;\n message: string;\n /** 出错的请求配置 */\n config: RequestConfig;\n /** 出错时已拿到的响应(如响应处理阶段失败) */\n response?: RequestResponse;\n /** 底层原因(原生异常 / 平台 fail 对象等) */\n cause?: unknown;\n}\n\n/**\n * 统一请求错误:适配器与拦截器抛出的错误全部归一化为该类型,\n * 便于调用方按 code 分支处理(超时重试、取消忽略、网络提示等)。\n */\nexport class RequestError extends Error {\n readonly code: RequestErrorCode;\n readonly config: RequestConfig;\n readonly response?: RequestResponse;\n readonly cause?: unknown;\n\n public constructor(options: RequestErrorOptions) {\n super(options.message);\n this.name = 'RequestError';\n this.code = options.code;\n this.config = options.config;\n this.response = options.response;\n this.cause = options.cause;\n }\n}\n\nexport function isRequestError(error: unknown): error is RequestError {\n return error instanceof RequestError;\n}\n",
|
|
6
6
|
"/**\n * request 模块纯函数工具:URL 拼接、query 序列化、请求头合并、请求体序列化。\n * 不依赖任何平台全局,便于单测。\n */\nimport type { HeaderValue, HttpMethod } from './types';\n\nconst HTTP_METHODS: ReadonlySet<string> = new Set([\n 'GET',\n 'POST',\n 'PUT',\n 'DELETE',\n 'PATCH',\n 'HEAD',\n 'OPTIONS',\n]);\n\n/** 归一化 HTTP 方法为大写;缺省为 GET,非法方法抛错 */\nexport function normalizeMethod(method: string | undefined): HttpMethod {\n if (method === undefined) {\n return 'GET';\n }\n const normalized = method.toUpperCase();\n if (!HTTP_METHODS.has(normalized)) {\n throw new Error(`Unsupported HTTP method: ${method}`);\n }\n return normalized as HttpMethod;\n}\n\nconst ABSOLUTE_URL_RE = /^[a-z][a-z\\d+.-]*:\\/\\//i;\n\n/** 是否为带协议的绝对地址(http:// / https:// 等) */\nexport function isAbsoluteURL(url: string): boolean {\n return ABSOLUTE_URL_RE.test(url);\n}\n\n/** 拼接 baseURL 与相对地址,去除重复斜杠;绝对地址直接返回 */\nexport function combineURLs(baseURL: string | undefined, url: string): string {\n if (!baseURL || isAbsoluteURL(url)) {\n return url;\n }\n return `${baseURL.replace(/\\/+$/, '')}/${url.replace(/^\\/+/, '')}`;\n}\n\nfunction formatParamValue(value: unknown): string {\n if (value instanceof Date) {\n return value.toISOString();\n }\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n return String(value);\n}\n\n/**\n * 序列化 query 参数:null / undefined 跳过,数组展开为重复键,\n * Date 转 ISO 字符串,对象 JSON 序列化。\n */\nexport function serializeParams(\n params: Record<string, unknown> | undefined\n): string {\n if (!params) {\n return '';\n }\n const parts: string[] = [];\n Object.keys(params).forEach((key) => {\n const value = params[key];\n if (value === undefined || value === null) {\n return;\n }\n const encodedKey = encodeURIComponent(key);\n if (Array.isArray(value)) {\n value.forEach((item) => {\n if (item === undefined || item === null) {\n return;\n }\n parts.push(\n `${encodedKey}=${encodeURIComponent(formatParamValue(item))}`\n );\n });\n return;\n }\n parts.push(`${encodedKey}=${encodeURIComponent(formatParamValue(value))}`);\n });\n return parts.join('&');\n}\n\n/** 拼接完整请求地址:baseURL + url + query 参数 */\nexport function buildURL(\n baseURL: string | undefined,\n url: string,\n params: Record<string, unknown> | undefined\n): string {\n const full = combineURLs(baseURL, url);\n const query = serializeParams(params);\n if (!query) {\n return full;\n }\n const separator = full.includes('?') ? '&' : '?';\n return `${full}${separator}${query}`;\n}\n\nfunction normalizeHeaderValue(value: HeaderValue): string | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n return String(value);\n}\n\n/**\n * 大小写不敏感合并请求头:多个来源按顺序合并,后出现的同名头(忽略大小写)\n * 覆盖先前的,键名保留后出现来源的原始写法。\n */\nexport function mergeHeaders(\n ...sources: Array<Record<string, HeaderValue> | undefined>\n): Record<string, string> {\n const merged: Record<string, string> = {};\n const lowerToKey = new Map<string, string>();\n\n sources.forEach((source) => {\n if (!source) {\n return;\n }\n Object.keys(source).forEach((key) => {\n const value = normalizeHeaderValue(source[key]);\n if (value === undefined) {\n return;\n }\n const lower = key.toLowerCase();\n const previous = lowerToKey.get(lower);\n if (previous !== undefined && previous !== key) {\n delete merged[previous];\n }\n lowerToKey.set(lower, key);\n merged[key] = value;\n });\n });\n\n return merged;\n}\n\nfunction hasHeader(headers: Record<string, string>, name: string): boolean {\n return Object.keys(headers).some(\n (key) => key.toLowerCase() === name.toLowerCase()\n );\n}\n\n/**\n * 序列化请求体(Web 端):\n * - GET / HEAD 无请求体\n * - 字符串、FormData、Blob、ArrayBuffer / TypedArray 原样透传\n * - 普通对象 / 数组 JSON 序列化,并自动设置 Content-Type: application/json\n */\nexport function serializeBody(\n data: unknown,\n headers: Record<string, string>,\n method: HttpMethod\n): BodyInit | undefined {\n if (method === 'GET' || method === 'HEAD') {\n return undefined;\n }\n if (data === undefined || data === null) {\n return undefined;\n }\n if (typeof data === 'string') {\n return data;\n }\n if (typeof FormData !== 'undefined' && data instanceof FormData) {\n return data;\n }\n if (typeof Blob !== 'undefined' && data instanceof Blob) {\n return data;\n }\n if (data instanceof ArrayBuffer || ArrayBuffer.isView(data)) {\n return data as BodyInit;\n }\n if (!hasHeader(headers, 'Content-Type')) {\n headers['Content-Type'] = 'application/json';\n }\n return JSON.stringify(data);\n}\n",
|
|
7
|
-
"import { RequestError } from '../errors';\nimport {\n buildURL,\n mergeHeaders,\n normalizeMethod,\n serializeBody,\n} from '../helpers';\nimport type { RequestAdapter, RequestConfig, RequestResponse } from '../types';\n\n/**\n * Web 端适配器(策略):基于 fetch。\n *\n * - 超时:AbortController + timer,超时归类 TIMEOUT\n * - 取消:config.signal 与超时共用同一个 AbortController,外部取消归类 ABORTED\n * - 响应体:arraybuffer 返回 ArrayBuffer;json(默认)尝试解析、失败回退原文;text 返回原文\n */\nexport class FetchAdapter implements RequestAdapter {\n public readonly platform = 'web' as const;\n\n public async request<T>(\n config: RequestConfig<T>\n ): Promise<RequestResponse<T>> {\n const method = normalizeMethod(config.method);\n const url = buildURL(config.baseURL, config.url, config.params);\n const headers = mergeHeaders(config.headers);\n const body = serializeBody(config.data, headers, method);\n const controller = new AbortController();\n let timedOut = false;\n let externalAborted = false;\n let timer: ReturnType<typeof setTimeout> | undefined;\n\n if (config.signal) {\n if (config.signal.aborted) {\n externalAborted = true;\n controller.abort();\n } else {\n config.signal.addEventListener(
|
|
7
|
+
"import { RequestError } from '../errors';\nimport {\n buildURL,\n mergeHeaders,\n normalizeMethod,\n serializeBody,\n} from '../helpers';\nimport type { RequestAdapter, RequestConfig, RequestResponse } from '../types';\n\n/**\n * Web 端适配器(策略):基于 fetch。\n *\n * - 超时:AbortController + timer,超时归类 TIMEOUT\n * - 取消:config.signal 与超时共用同一个 AbortController,外部取消归类 ABORTED\n * - 响应体:arraybuffer 返回 ArrayBuffer;json(默认)尝试解析、失败回退原文;text 返回原文\n */\nexport class FetchAdapter implements RequestAdapter {\n public readonly platform = 'web' as const;\n\n public async request<T>(\n config: RequestConfig<T>\n ): Promise<RequestResponse<T>> {\n const method = normalizeMethod(config.method);\n const url = buildURL(config.baseURL, config.url, config.params);\n const headers = mergeHeaders(config.headers);\n const body = serializeBody(config.data, headers, method);\n const controller = new AbortController();\n let timedOut = false;\n let externalAborted = false;\n let timer: ReturnType<typeof setTimeout> | undefined;\n\n const onExternalAbort = (): void => {\n externalAborted = true;\n controller.abort();\n };\n if (config.signal) {\n if (config.signal.aborted) {\n externalAborted = true;\n controller.abort();\n } else {\n config.signal.addEventListener('abort', onExternalAbort, {\n once: true,\n });\n }\n }\n\n if (typeof config.timeout === 'number' && config.timeout > 0) {\n timer = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, config.timeout);\n }\n\n const credentials: RequestCredentials =\n config.credentials ??\n (config.withCredentials === true ? 'include' : 'same-origin');\n\n try {\n const response = await fetch(url, {\n method,\n headers,\n body,\n signal: controller.signal,\n credentials,\n });\n\n const responseHeaders: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n responseHeaders[key] = value;\n });\n\n const data = await parseFetchData(response, config);\n return {\n data: data as T,\n statusCode: response.status,\n statusText: response.statusText,\n headers: responseHeaders,\n config,\n };\n } catch (error) {\n if (timedOut) {\n throw new RequestError({\n code: 'TIMEOUT',\n message: `Request timeout after ${String(config.timeout)}ms`,\n config,\n cause: error,\n });\n }\n if (externalAborted || controller.signal.aborted) {\n throw new RequestError({\n code: 'ABORTED',\n message: 'Request aborted',\n config,\n cause: error,\n });\n }\n throw new RequestError({\n code: 'NETWORK_ERROR',\n message: error instanceof Error ? error.message : String(error),\n config,\n cause: error,\n });\n } finally {\n config.signal?.removeEventListener('abort', onExternalAbort);\n if (timer !== undefined) {\n clearTimeout(timer);\n }\n }\n }\n}\n\nasync function parseFetchData(\n response: Response,\n config: RequestConfig\n): Promise<unknown> {\n if (config.responseType === 'arraybuffer') {\n return response.arrayBuffer();\n }\n const text = await response.text();\n if (config.dataType === 'text' || !text) {\n return text;\n }\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n",
|
|
8
8
|
"import type { DetectedPlatform } from '../types';\n\ntype Host = Record<string, unknown>;\n\n/** 各端安全访问全局对象:优先 globalThis(微信基础库 2.2.3+ 可用),兜底 self / global */\nfunction getHost(): Host {\n if (typeof globalThis !== 'undefined') {\n return globalThis as unknown as Host;\n }\n if (typeof self !== 'undefined') {\n return self as unknown as Host;\n }\n if (typeof global !== 'undefined') {\n return global as unknown as Host;\n }\n return {};\n}\n\n/** 小程序请求全局的公共形状(wx.request / my.request / tt.request) */\nexport interface MiniProgramRequestApi {\n request?: (options: Record<string, unknown>) => { abort?: () => void };\n}\n\n/**\n * 读取小程序请求全局(wx / my / tt)。\n * 通过全局对象属性访问而非直接引用全局名,避免污染全局声明、\n * 也避免与用户安装的小程序官方类型(如 miniprogram-api-typings)冲突。\n */\nexport function getMiniProgramApi(\n name: 'wx' | 'my' | 'tt'\n): MiniProgramRequestApi | null {\n const api = getHost()[name];\n return typeof api === 'object' && api !== null\n ? (api as MiniProgramRequestApi)\n : null;\n}\n\n/**\n * 运行时探测目标端:\n * 小程序全局优先(wx → my → tt),其次 Web fetch;均不可用返回 'unknown'。\n */\nexport function detectPlatform(): DetectedPlatform {\n if (hasRequestApi('wx')) {\n return 'weixin';\n }\n if (hasRequestApi('my')) {\n return 'alipay';\n }\n if (hasRequestApi('tt')) {\n return 'bytedance';\n }\n if (typeof fetch === 'function') {\n return 'web';\n }\n return 'unknown';\n}\n\nfunction hasRequestApi(name: 'wx' | 'my' | 'tt'): boolean {\n const api = getMiniProgramApi(name);\n return api !== null && typeof api.request === 'function';\n}\n",
|
|
9
|
-
"import { RequestError, type RequestErrorCode } from '../errors';\nimport { buildURL, mergeHeaders } from '../helpers';\nimport type {\n HeaderValue,\n RequestAdapter,\n RequestConfig,\n RequestResponse,\n} from '../types';\nimport { getMiniProgramApi } from './platform';\n\n/**\n * 小程序差异层:微信 / 阿里 / 字节的请求 API 语义一致(wx.request /\n * my.request / tt.request),仅字段名与回调形状不同。与 CLI 的 MpDialect\n * 同思路,把差异收敛为参数化方言,避免三个适配器重复实现。\n */\nexport interface MiniProgramDialect {\n /** 目标端标识 */\n platform: 'weixin' | 'alipay' | 'bytedance';\n /** 全局对象名:wx / my / tt */\n globalName: 'wx' | 'my' | 'tt';\n /** 请求参数中请求头字段名:微信/字节 header,阿里 headers */\n headerField: 'header' | 'headers';\n /** 成功回调中状态码字段:微信/字节 statusCode,阿里 status */\n statusField: 'statusCode' | 'status';\n /** 成功回调中响应头字段名:微信/字节 header,阿里 headers */\n responseHeaderField: 'header' | 'headers';\n}\n\nexport const WEIXIN_DIALECT: MiniProgramDialect = {\n platform: 'weixin',\n globalName: 'wx',\n headerField: 'header',\n statusField: 'statusCode',\n responseHeaderField: 'header',\n};\n\nexport const ALIPAY_DIALECT: MiniProgramDialect = {\n platform: 'alipay',\n globalName: 'my',\n headerField: 'headers',\n statusField: 'status',\n responseHeaderField: 'headers',\n};\n\nexport const BYTEDANCE_DIALECT: MiniProgramDialect = {\n platform: 'bytedance',\n globalName: 'tt',\n headerField: 'header',\n statusField: 'statusCode',\n responseHeaderField: 'header',\n};\n\n/**\n * 小程序端适配器(策略):wx.request / my.request / tt.request 的统一封装。\n *\n * - 超时:手动 timer + 底层任务 abort,三端行为一致;成功/失败回调都会清理 timer\n * - 取消:config.signal 触发时 abort 底层任务\n * - 失败归一化:按平台 errMsg 关键字归类 TIMEOUT / ABORTED / NETWORK_ERROR\n */\nexport class MiniProgramAdapter implements RequestAdapter {\n public readonly platform: 'weixin' | 'alipay' | 'bytedance';\n\n public constructor(private readonly dialect: MiniProgramDialect) {\n this.platform = dialect.platform;\n }\n\n public request<T>(config: RequestConfig<T>): Promise<RequestResponse<T>> {\n const api = getMiniProgramApi(this.dialect.globalName);\n if (!api || typeof api.request !== 'function') {\n return Promise.reject(\n new RequestError({\n code: 'UNSUPPORTED_PLATFORM',\n message: `${this.dialect.globalName}.request is not available in current environment`,\n config,\n })\n );\n }\n // 守卫后收窄为函数;Promise 执行器闭包内无法复用前面的窄化\n const requestFn = api.request;\n\n return new Promise<RequestResponse<T>>((resolve, reject) => {\n let
|
|
9
|
+
"import { RequestError, type RequestErrorCode } from '../errors';\nimport { buildURL, mergeHeaders } from '../helpers';\nimport type {\n HeaderValue,\n RequestAdapter,\n RequestConfig,\n RequestResponse,\n} from '../types';\nimport { getMiniProgramApi } from './platform';\n\n/**\n * 小程序差异层:微信 / 阿里 / 字节的请求 API 语义一致(wx.request /\n * my.request / tt.request),仅字段名与回调形状不同。与 CLI 的 MpDialect\n * 同思路,把差异收敛为参数化方言,避免三个适配器重复实现。\n */\nexport interface MiniProgramDialect {\n /** 目标端标识 */\n platform: 'weixin' | 'alipay' | 'bytedance';\n /** 全局对象名:wx / my / tt */\n globalName: 'wx' | 'my' | 'tt';\n /** 请求参数中请求头字段名:微信/字节 header,阿里 headers */\n headerField: 'header' | 'headers';\n /** 成功回调中状态码字段:微信/字节 statusCode,阿里 status */\n statusField: 'statusCode' | 'status';\n /** 成功回调中响应头字段名:微信/字节 header,阿里 headers */\n responseHeaderField: 'header' | 'headers';\n}\n\nexport const WEIXIN_DIALECT: MiniProgramDialect = {\n platform: 'weixin',\n globalName: 'wx',\n headerField: 'header',\n statusField: 'statusCode',\n responseHeaderField: 'header',\n};\n\nexport const ALIPAY_DIALECT: MiniProgramDialect = {\n platform: 'alipay',\n globalName: 'my',\n headerField: 'headers',\n statusField: 'status',\n responseHeaderField: 'headers',\n};\n\nexport const BYTEDANCE_DIALECT: MiniProgramDialect = {\n platform: 'bytedance',\n globalName: 'tt',\n headerField: 'header',\n statusField: 'statusCode',\n responseHeaderField: 'header',\n};\n\n/**\n * 小程序端适配器(策略):wx.request / my.request / tt.request 的统一封装。\n *\n * - 超时:手动 timer + 底层任务 abort,三端行为一致;成功/失败回调都会清理 timer\n * - 取消:config.signal 触发时 abort 底层任务\n * - 失败归一化:按平台 errMsg 关键字归类 TIMEOUT / ABORTED / NETWORK_ERROR\n */\nexport class MiniProgramAdapter implements RequestAdapter {\n public readonly platform: 'weixin' | 'alipay' | 'bytedance';\n\n public constructor(private readonly dialect: MiniProgramDialect) {\n this.platform = dialect.platform;\n }\n\n public request<T>(config: RequestConfig<T>): Promise<RequestResponse<T>> {\n const api = getMiniProgramApi(this.dialect.globalName);\n if (!api || typeof api.request !== 'function') {\n return Promise.reject(\n new RequestError({\n code: 'UNSUPPORTED_PLATFORM',\n message: `${this.dialect.globalName}.request is not available in current environment`,\n config,\n })\n );\n }\n // 守卫后收窄为函数;Promise 执行器闭包内无法复用前面的窄化\n const requestFn = api.request;\n\n return new Promise<RequestResponse<T>>((resolve, reject) => {\n let cancellation: 'TIMEOUT' | 'ABORTED' | undefined;\n let settled = false;\n let abortAttempted = false;\n let task: { abort?: () => void } | undefined;\n let timer: ReturnType<typeof setTimeout> | undefined;\n\n const networkError = (error: unknown): RequestError =>\n new RequestError({\n code: 'NETWORK_ERROR',\n message: error instanceof Error ? error.message : String(error),\n config,\n cause: error,\n });\n // Settle independently of host abort callbacks and detach shared signals\n // before invoking user-visible resolution or a potentially synchronous abort.\n const settle = (fn: () => void): void => {\n if (settled) return;\n settled = true;\n if (timer !== undefined) clearTimeout(timer);\n config.signal?.removeEventListener('abort', onExternalAbort);\n try {\n fn();\n } catch (error) {\n reject(networkError(error));\n }\n };\n const abortTask = (): void => {\n if (!task || abortAttempted) return;\n abortAttempted = true;\n try {\n task.abort?.();\n } catch {\n // Cancellation has already settled with its original TIMEOUT/ABORTED code.\n }\n };\n const cancel = (code: 'TIMEOUT' | 'ABORTED'): void => {\n if (settled) return;\n cancellation = code;\n settle(() =>\n reject(\n new RequestError({\n code,\n message:\n code === 'TIMEOUT'\n ? `Request timeout after ${String(config.timeout)}ms`\n : 'Request aborted',\n config,\n })\n )\n );\n abortTask();\n };\n const onExternalAbort = (): void => cancel('ABORTED');\n\n if (config.signal?.aborted) {\n cancel('ABORTED');\n return;\n }\n\n const options: Record<string, unknown> = {\n url: buildURL(config.baseURL, config.url, config.params),\n method: config.method ?? 'GET',\n data: config.data,\n [this.dialect.headerField]: normalizeHeaders(config.headers),\n dataType: config.dataType ?? 'json',\n ...(config.responseType !== undefined\n ? { responseType: config.responseType }\n : {}),\n ...(config.timeout !== undefined && config.timeout > 0\n ? { timeout: config.timeout }\n : {}),\n success: (res: Record<string, unknown>) => {\n settle(() => {\n const rawStatus = res[this.dialect.statusField];\n const statusCode = Number(rawStatus ?? res.statusCode ?? 0);\n const responseHeaders = normalizeResponseHeaders(\n res[this.dialect.responseHeaderField]\n );\n resolve({\n data: res.data as T,\n statusCode,\n headers: responseHeaders,\n config,\n ...(Array.isArray(res.cookies)\n ? { cookies: res.cookies as string[] }\n : {}),\n ...(typeof res.errMsg === 'string' ? { errMsg: res.errMsg } : {}),\n });\n });\n },\n fail: (err: Record<string, unknown>) => {\n settle(() => {\n const errMsg = extractFailMessage(err);\n reject(\n new RequestError({\n code: classifyMpError(errMsg),\n message: errMsg || 'Network request failed',\n config,\n cause: err,\n })\n );\n });\n },\n };\n\n config.signal?.addEventListener('abort', onExternalAbort, { once: true });\n if (config.timeout !== undefined && config.timeout > 0) {\n timer = setTimeout(() => cancel('TIMEOUT'), config.timeout);\n }\n try {\n task = requestFn(options) ?? undefined;\n // A host may synchronously abort the external signal before returning its task.\n if (cancellation) abortTask();\n } catch (error) {\n settle(() => reject(networkError(error)));\n }\n });\n }\n}\n\nfunction normalizeHeaders(\n headers: Record<string, HeaderValue> | undefined\n): Record<string, string> {\n return mergeHeaders(headers);\n}\n\nfunction normalizeResponseHeaders(value: unknown): Record<string, string> {\n if (typeof value !== 'object' || value === null) {\n return {};\n }\n const result: Record<string, string> = {};\n Object.keys(value as Record<string, unknown>).forEach((key) => {\n const item = (value as Record<string, unknown>)[key];\n if (item !== undefined && item !== null) {\n result[key] = String(item);\n }\n });\n return result;\n}\n\nfunction extractFailMessage(err: Record<string, unknown>): string {\n if (typeof err.errMsg === 'string') {\n return err.errMsg;\n }\n if (typeof err.errorMessage === 'string') {\n return err.errorMessage;\n }\n if (typeof err.error === 'string') {\n return err.error;\n }\n return '';\n}\n\n/** 按平台 errMsg 关键字归类错误码 */\nfunction classifyMpError(errMsg: string): RequestErrorCode {\n if (!errMsg) {\n return 'UNKNOWN';\n }\n if (/timeout/i.test(errMsg)) {\n return 'TIMEOUT';\n }\n if (/abort/i.test(errMsg)) {\n return 'ABORTED';\n }\n return 'NETWORK_ERROR';\n}\n",
|
|
10
10
|
"import { RequestError } from '../errors';\nimport type {\n DetectedPlatform,\n RequestAdapter,\n RequestAdapterResolver,\n RequestConfig,\n RequestPlatform,\n} from '../types';\nimport { FetchAdapter } from './fetch';\nimport {\n ALIPAY_DIALECT,\n BYTEDANCE_DIALECT,\n MiniProgramAdapter,\n WEIXIN_DIALECT,\n} from './mp';\nimport { detectPlatform } from './platform';\n\nexport { detectPlatform } from './platform';\nexport type { MiniProgramRequestApi } from './platform';\nexport type { MiniProgramDialect } from './mp';\n\n/** 各端适配器注册表:'auto' 不在此列,由运行时探测决定 */\nexport const adapters: Record<\n Exclude<RequestPlatform, 'auto'>,\n RequestAdapter\n> = {\n web: new FetchAdapter(),\n weixin: new MiniProgramAdapter(WEIXIN_DIALECT),\n alipay: new MiniProgramAdapter(ALIPAY_DIALECT),\n bytedance: new MiniProgramAdapter(BYTEDANCE_DIALECT),\n};\n\n/** 按目标端创建适配器;不支持的端抛 UNSUPPORTED_PLATFORM */\nexport function createAdapter(\n platform: Exclude<RequestPlatform, 'auto'>\n): RequestAdapter {\n const adapter = adapters[platform];\n if (!adapter) {\n throw new RequestError({\n code: 'UNSUPPORTED_PLATFORM',\n message: `Unsupported request platform: ${String(platform)}`,\n config: { url: '' },\n });\n }\n return adapter;\n}\n\n/**\n * 解析请求应使用的适配器(优先级从高到低):\n * 1. 请求级 config.platform(显式指定非 auto 时)\n * 2. 实例级自定义 adapter(对象或解析函数)\n * 3. 实例级默认 platform;仍为 auto 时运行时探测\n */\nexport async function resolveAdapter(\n config: RequestConfig,\n instanceAdapter?: RequestAdapter | RequestAdapterResolver,\n instancePlatform?: RequestPlatform\n): Promise<RequestAdapter> {\n if (config.platform !== undefined && config.platform !== 'auto') {\n return createAdapter(config.platform);\n }\n if (instanceAdapter !== undefined) {\n return typeof instanceAdapter === 'function'\n ? await instanceAdapter(config)\n : instanceAdapter;\n }\n if (instancePlatform !== undefined && instancePlatform !== 'auto') {\n return createAdapter(instancePlatform);\n }\n const detected: DetectedPlatform = detectPlatform();\n if (detected === 'unknown') {\n throw new RequestError({\n code: 'UNSUPPORTED_PLATFORM',\n message:\n 'No supported request platform detected (web fetch / wx.request / my.request / tt.request)',\n config,\n });\n }\n return createAdapter(detected);\n}\n",
|
|
11
11
|
"import type {\n InterceptorFulfilled,\n InterceptorHandler,\n InterceptorRejected,\n} from './types';\n\n/**\n * 拦截器管理器:维护同类型(请求 / 响应)拦截器列表。\n * - use 注册并返回 id,eject 按 id 移除(软删除,保留占位)\n * - forEach 跳过已移除的项\n */\nexport class InterceptorManager<T> {\n private readonly handlers: Array<InterceptorHandler<T> | null> = [];\n\n public use(\n onFulfilled?: InterceptorFulfilled<T>,\n onRejected?: InterceptorRejected\n ): number {\n this.handlers.push({ onFulfilled, onRejected });\n return this.handlers.length - 1;\n }\n\n public eject(id: number): void {\n if (this.handlers[id] !== undefined) {\n this.handlers[id] = null;\n }\n }\n\n public clear(): void {\n this.handlers.length = 0;\n }\n\n public forEach(\n fn: (handler: InterceptorHandler<T>, id: number) => void\n ): void {\n this.handlers.forEach((handler, id) => {\n if (handler !== null) {\n fn(handler, id);\n }\n });\n }\n}\n",
|
|
12
12
|
"import { resolveAdapter } from './adapters';\nimport { RequestError } from './errors';\nimport { mergeHeaders, normalizeMethod } from './helpers';\nimport { InterceptorManager } from './interceptors';\nimport type {\n RequestAdapter,\n RequestConfig,\n RequestOptions,\n RequestResponse,\n} from './types';\n\ntype ChainStep = (value: unknown) => unknown;\n\n/**\n * 统一请求客户端:跨端请求入口。\n *\n * 职责:\n * - 实例级默认值(baseURL / headers / timeout / platform 等)与单次配置合并\n * - 请求拦截器(注册顺序)→ 平台适配器 → 响应拦截器(后注册先执行)的链路编排\n * - 目标端解析:config.platform > 实例 adapter > 实例 platform > 运行时探测\n *\n * 用法:\n * ```ts\n * const http = createRequest({ baseURL: '/api', timeout: 10000 });\n * http.interceptors.request.use((config) => {\n * config.headers.Authorization = `Bearer ${token}`;\n * return config;\n * });\n * const res = await http.get<{ list: Item[] }>('/items');\n * ```\n */\nexport class Request {\n /** 请求 / 响应拦截器管理器 */\n public readonly interceptors: {\n request: InterceptorManager<RequestConfig>;\n response: InterceptorManager<RequestResponse>;\n } = {\n request: new InterceptorManager<RequestConfig>(),\n response: new InterceptorManager<RequestResponse>(),\n };\n\n private readonly instanceDefaults: RequestOptions;\n private readonly instanceAdapter?: RequestOptions['adapter'];\n private readonly instancePlatform?: RequestOptions['platform'];\n\n public constructor(options: RequestOptions = {}) {\n const {\n adapter: instanceAdapter,\n platform: instancePlatform,\n ...rest\n } = options;\n this.instanceAdapter = instanceAdapter;\n this.instancePlatform = instancePlatform;\n this.instanceDefaults = { ...rest };\n }\n\n /** 发起请求:合并配置 → 请求拦截器 → 适配器 → 响应拦截器 */\n public request<T = unknown>(\n config: RequestConfig<T>\n ): Promise<RequestResponse<T>> {\n let merged: RequestConfig<T>;\n try {\n merged = this.mergeConfig(config);\n } catch (error) {\n // 配置非法统一走 rejected promise,调用方用 .catch / try-await 即可处理\n return Promise.reject(error);\n }\n\n // 拦截器链:请求拦截器按注册顺序在最前,适配器居中进行实际请求,\n // 响应拦截器后注册的先执行(离调用方最近,最外层)。\n // 链以 (fulfilled, rejected) 成对消费;onRejected 捕获的是其之前链路的错误。\n const chain: Array<ChainStep | undefined> = [];\n this.interceptors.request.forEach((handler) => {\n chain.push(\n handler.onFulfilled as unknown as ChainStep,\n handler.onRejected as ChainStep | undefined\n );\n });\n chain.push(\n (value: unknown) => this.dispatch(value as RequestConfig<T>),\n undefined\n );\n const responseHandlers: Array<{\n onFulfilled?: ChainStep;\n onRejected?: ChainStep | undefined;\n }> = [];\n this.interceptors.response.forEach((handler) => {\n responseHandlers.push({\n onFulfilled: handler.onFulfilled as unknown as ChainStep,\n onRejected: handler.onRejected as ChainStep | undefined,\n });\n });\n for (let index = responseHandlers.length - 1; index >= 0; index -= 1) {\n const handler = responseHandlers[index];\n chain.push(handler.onFulfilled, handler.onRejected);\n }\n\n let promise: Promise<unknown> = Promise.resolve(merged);\n while (chain.length > 0) {\n const fulfilled = chain.shift();\n const rejected = chain.shift();\n promise = promise.then(\n fulfilled as ((value: unknown) => unknown) | undefined,\n rejected as ((reason: unknown) => unknown) | undefined\n );\n }\n return promise as Promise<RequestResponse<T>>;\n }\n\n public get<T = unknown>(\n url: string,\n config?: Omit<RequestConfig, 'url' | 'method'>\n ): Promise<RequestResponse<T>> {\n return this.request<T>({ ...config, url, method: 'GET' });\n }\n\n public delete<T = unknown>(\n url: string,\n config?: Omit<RequestConfig, 'url' | 'method'>\n ): Promise<RequestResponse<T>> {\n return this.request<T>({ ...config, url, method: 'DELETE' });\n }\n\n public head<T = unknown>(\n url: string,\n config?: Omit<RequestConfig, 'url' | 'method'>\n ): Promise<RequestResponse<T>> {\n return this.request<T>({ ...config, url, method: 'HEAD' });\n }\n\n public options<T = unknown>(\n url: string,\n config?: Omit<RequestConfig, 'url' | 'method'>\n ): Promise<RequestResponse<T>> {\n return this.request<T>({ ...config, url, method: 'OPTIONS' });\n }\n\n public post<T = unknown>(\n url: string,\n data?: T,\n config?: Omit<RequestConfig<T>, 'url' | 'method' | 'data'>\n ): Promise<RequestResponse<T>> {\n return this.request<T>({ ...config, url, method: 'POST', data });\n }\n\n public put<T = unknown>(\n url: string,\n data?: T,\n config?: Omit<RequestConfig<T>, 'url' | 'method' | 'data'>\n ): Promise<RequestResponse<T>> {\n return this.request<T>({ ...config, url, method: 'PUT', data });\n }\n\n public patch<T = unknown>(\n url: string,\n data?: T,\n config?: Omit<RequestConfig<T>, 'url' | 'method' | 'data'>\n ): Promise<RequestResponse<T>> {\n return this.request<T>({ ...config, url, method: 'PATCH', data });\n }\n\n private dispatch<T>(config: RequestConfig<T>): Promise<RequestResponse<T>> {\n return resolveAdapter(\n config,\n this.instanceAdapter,\n this.instancePlatform\n ).then((adapter: RequestAdapter) => adapter.request<T>(config));\n }\n\n /** 合并实例级默认值与单次配置,并校验 url / method */\n private mergeConfig<T>(config: RequestConfig<T>): RequestConfig<T> {\n if (!config || typeof config !== 'object') {\n throw new RequestError({\n code: 'BAD_REQUEST',\n message: 'Request config must be an object',\n config: config as RequestConfig,\n });\n }\n\n const runtime = globalThis as unknown as {\n getApp?: () => { __transoneConfig?: { host?: string } } | undefined;\n };\n const host = typeof runtime.getApp === 'function'\n ? runtime.getApp()?.__transoneConfig?.host\n : undefined;\n const merged: RequestConfig = {\n ...(host !== undefined ? { baseURL: host } : {}),\n ...this.instanceDefaults,\n ...config,\n headers: mergeHeaders(this.instanceDefaults.headers, config.headers),\n params: { ...this.instanceDefaults.params, ...config.params },\n };\n\n if (typeof merged.url !== 'string' || merged.url.length === 0) {\n throw new RequestError({\n code: 'BAD_REQUEST',\n message: 'Request url is required',\n config: merged,\n });\n }\n\n try {\n merged.method = normalizeMethod(merged.method);\n } catch (cause) {\n throw new RequestError({\n code: 'BAD_REQUEST',\n message: (cause as Error).message,\n config: merged,\n cause,\n });\n }\n\n return merged as RequestConfig<T>;\n }\n}\n",
|
|
13
13
|
"import { Request } from './request';\nimport type { RequestOptions } from './types';\n\n/** 创建独立请求实例;不传配置时等价于使用默认实例 */\nexport function createRequest(options: RequestOptions = {}): Request {\n return new Request(options);\n}\n\n/**\n * 全局默认请求实例:直接使用无需创建。\n * ```ts\n * import { request } from 'transone/request';\n * const res = await request.get('/api/items');\n * ```\n */\nexport const request: Request = new Request();\n\nexport { Request } from './request';\nexport { InterceptorManager } from './interceptors';\nexport { RequestError, isRequestError } from './errors';\nexport type { RequestErrorCode, RequestErrorOptions } from './errors';\nexport {\n adapters,\n createAdapter,\n detectPlatform,\n resolveAdapter,\n} from './adapters';\nexport type { MiniProgramDialect, MiniProgramRequestApi } from './adapters';\nexport type {\n DetectedPlatform,\n HeaderValue,\n HttpMethod,\n InterceptorFulfilled,\n InterceptorHandler,\n InterceptorRejected,\n RequestAdapter,\n RequestAdapterResolver,\n RequestConfig,\n RequestDataType,\n RequestOptions,\n RequestPlatform,\n RequestResponse,\n RequestResponseType,\n} from './types';\n"
|
|
14
14
|
],
|
|
15
|
-
"mappings": "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",
|
|
16
|
-
"debugId": "
|
|
15
|
+
"mappings": "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",
|
|
16
|
+
"debugId": "C93D9C89D93DECB864756E2164756E21",
|
|
17
17
|
"names": []
|
|
18
18
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,6 +4,6 @@ export * from './core';
|
|
|
4
4
|
export * from './router';
|
|
5
5
|
export * from './request';
|
|
6
6
|
export declare function createApp<TState extends object = Record<string, unknown>, TConfig extends object = Record<string, unknown>, TRootProps extends ComponentProps = ComponentProps>(options?: AppOptions<TState, TConfig, TRootProps>): OneApp<TState, TConfig, TRootProps>;
|
|
7
|
-
export declare const version = "0.
|
|
7
|
+
export declare const version = "0.9.0";
|
|
8
8
|
export declare const name = "transone";
|
|
9
9
|
export * from './platform';
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{$ as Ge,A as ge,Aa as mr,B as xe,Ba as xr,C as Re,Ca as u,D as Te,E as Ve,F as ye,G as be,H as Fe,I as Me,J as je,K as ke,L as he,M as ve,N as Ce,O as we,P as Ae,Q as Ee,R as Oe,S as Pe,T as Se,U as qe,V as Ie,W as Le,X as $e,Y as ze,Z as Be,_ as De,a as H,aa as He,b as J,ba as Je,c as K,ca as Ke,d as N,da as Ne,e as Q,ea as Qe,f as U,fa as Ue,g as W,ga as We,h as X,ha as Xe,i as Y,ia as Ye,j as Z,ja as Ze,k as _,ka as _e,l as ee,la as d,m as re,ma as er,n as te,na as rr,o as oe,oa as tr,p as ne,pa as or,q as ie,qa as nr,r as le,ra as ir,s as se,sa as lr,t as ae,ta as sr,u as de,ua as ar,v as ue,va as dr,w as pe,wa as ur,x as fe,xa as pr,y as ce,ya as fr,z as me,za as cr}from"./index-
|
|
1
|
+
import{$ as Ge,A as ge,Aa as mr,B as xe,Ba as xr,C as Re,Ca as u,D as Te,E as Ve,F as ye,G as be,H as Fe,I as Me,J as je,K as ke,L as he,M as ve,N as Ce,O as we,P as Ae,Q as Ee,R as Oe,S as Pe,T as Se,U as qe,V as Ie,W as Le,X as $e,Y as ze,Z as Be,_ as De,a as H,aa as He,b as J,ba as Je,c as K,ca as Ke,d as N,da as Ne,e as Q,ea as Qe,f as U,fa as Ue,g as W,ga as We,h as X,ha as Xe,i as Y,ia as Ye,j as Z,ja as Ze,k as _,ka as _e,l as ee,la as d,m as re,ma as er,n as te,na as rr,o as oe,oa as tr,p as ne,pa as or,q as ie,qa as nr,r as le,ra as ir,s as se,sa as lr,t as ae,ta as sr,u as de,ua as ar,v as ue,va as dr,w as pe,wa as ur,x as fe,xa as pr,y as ce,ya as fr,z as me,za as cr}from"./index-8qh91wft.js";import{Fa as gr}from"./index-ryj080w6.js";import{Ga as Rr,Ha as Tr,Ia as Vr,Ja as yr,Ka as br,La as Fr,Ma as Mr,Na as jr,Oa as kr,Pa as hr}from"./index-sg4er0f8.js";import{$a as $r,Qa as vr,Ra as Cr,Sa as wr,Ta as Ar,Ua as Er,Va as Or,Wa as Pr,Xa as Sr,Ya as qr,Za as Ir,_a as Lr,ab as zr,bb as Br,cb as Dr,db as Gr,eb as Hr}from"./index-fxpn7qkh.js";import{fb as G,gb as c}from"./index-dse0chhf.js";function p(e){return e instanceof Error?e.message:String(e)}function f(e,r,t){try{let n=e(r,t);if(n===!0)return;return n===!1?"Validation failed":n}catch(n){return p(n)}}function g(e="This field is required"){return(r)=>{if(r===null||r===void 0)return e;if(typeof r==="string"&&r.trim().length===0)return e;if(Array.isArray(r)&&r.length===0)return e;return!0}}function x(e,r=`Must be at least ${e} characters`){return(t)=>typeof t==="string"&&t.length>=e?!0:r}function R(e){return e}function T(e,r){let t={},n=(o)=>{let i=r[o]??[],l=d(e,o),s=i.map((a)=>f(a,l,e)).filter((a)=>a!==void 0);if(s.length===0)delete t[o];else t[o]=s;return{valid:s.length===0,errors:s}};return{model:e,errors:t,validate(){let o={};return Object.keys(r).forEach((i)=>{let l=n(i);if(!l.valid)o[i]=l.errors}),{valid:Object.keys(o).length===0,errors:o}},validateField:n,resetErrors(){Object.keys(t).forEach((o)=>delete t[o])}}}function P(e={}){return new u(e)}var S="0.9.0",q="transone";export{Le as A,Br as App,Gr as AppAndroid,Hr as AppHarmony,Dr as AppIos,ye as Article,be as Aside,mr as BaseComponent,Pe as Blockquote,ce as Button,wr as COMPONENT_PLATFORM_DEFINITIONS,Oe as Code,cr as Component,ur as ComponentRenderStrategy,ue as Div,sr as ElementRenderStrategy,we as Em,Te as Footer,ze as Form,Fe as H1,Me as H2,je as H3,ke as H4,he as H5,ve as H6,Re as Header,$e as Img,me as Input,Mr as InterceptorManager,Be as Label,Ie as Li,xe as Main,qr as Miniprogram,Lr as MiniprogramAlipay,$r as MiniprogramBytedance,Ir as MiniprogramWeixin,zr as MiniprogramXiaohongshu,rr as ModelBindingController,Ve as Nav,qe as Ol,u as OneApp,He as Option,fe as P,Cr as PLATFORM_DEFINITIONS,vr as Platform,Ee as Pre,N as ReactiveSystem,ar as RendererContext,jr as Request,Rr as RequestError,tr as Router,or as RouterLink,nr as RouterView,ge as Section,Ge as Select,pr as SlotRenderStrategy,Ae as Small,pe as Span,Ce as Strong,Je as Table,de as Tag,Ne as Tbody,We as Td,fr as TemplateEngine,dr as TextRenderStrategy,De as Textarea,Ue as Th,Ke as Thead,Qe as Tr,Se as Ul,Or as Web,Pr as WebMobile,Sr as WebPc,yr as adapters,G as bindComponentImplementations,X as computed,br as createAdapter,P as createApp,Xe as createComponent,c as createComponentInstance,T as createForm,kr as createRequest,ir as createRouter,Vr as detectPlatform,Ze as each,W as effect,K as flushSync,d as getModelValue,Er as getPlatformDefinition,ae as h,ie as isComponentNode,le as isHTMLNode,te as isReactive,oe as isReadonly,Z as isRef,Tr as isRequestError,se as isSlotProvider,x as minLength,_e as modelPath,q as name,J as nextTick,Ar as normalizePlatform,Q as reactive,H as reactiveScheduler,U as readonly,Y as ref,xr as renderHtmlDocument,gr as renderStyleSheet,hr as request,g as required,Fr as resolveAdapter,er as setModelValue,Ye as slot,ee as stop,ne as toChildren,_ as unref,lr as useRouter,R as validate,S as version,re as watch};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=493839FE9C41922664756E2164756E21
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
"sources": ["../lib/core/form.ts", "../lib/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import { getModelValue } from './model';\n\nexport type ValidationResult = boolean | string;\n\nexport type ValidationRule<T = unknown> = (\n value: T,\n model: object\n) => ValidationResult;\n\nexport type ValidationRules<TModel extends object> = {\n [TPath in keyof TModel & string]?: readonly ValidationRule[];\n} & Record<string, readonly ValidationRule[] | undefined>;\n\nexport interface FieldValidationResult {\n valid: boolean;\n errors: string[];\n}\n\nexport interface FormValidationResult {\n valid: boolean;\n errors: Record<string, string[]>;\n}\n\nexport interface FormController<TModel extends object> {\n readonly model: TModel;\n readonly errors: Record<string, string[]>;\n validate(): FormValidationResult;\n validateField(path: string): FieldValidationResult;\n resetErrors(): void;\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction runRule(\n rule: ValidationRule,\n value: unknown,\n model: object\n): string | undefined {\n try {\n const result = rule(value, model);\n if (result === true) {\n return undefined;\n }\n return result === false ? 'Validation failed' : result;\n } catch (error) {\n return errorMessage(error);\n }\n}\n\nexport function required(message = 'This field is required'): ValidationRule {\n return (value) => {\n if (value === null || value === undefined) {\n return message;\n }\n if (typeof value === 'string' && value.trim().length === 0) {\n return message;\n }\n if (Array.isArray(value) && value.length === 0) {\n return message;\n }\n return true;\n };\n}\n\nexport function minLength(\n length: number,\n message = `Must be at least ${length} characters`\n): ValidationRule {\n return (value) =>\n typeof value === 'string' && value.length >= length ? true : message;\n}\n\nexport function validate(rule: ValidationRule): ValidationRule {\n return rule;\n}\n\nexport function createForm<TModel extends object>(\n model: TModel,\n rules: ValidationRules<TModel>\n): FormController<TModel> {\n const errors: Record<string, string[]> = {};\n\n const validateField = (path: string): FieldValidationResult => {\n const fieldRules = rules[path] ?? [];\n const value = getModelValue(model as Record<string, unknown>, path);\n const fieldErrors = fieldRules\n .map((rule) => runRule(rule, value, model))\n .filter((message): message is string => message !== undefined);\n\n if (fieldErrors.length === 0) {\n delete errors[path];\n } else {\n errors[path] = fieldErrors;\n }\n\n return { valid: fieldErrors.length === 0, errors: fieldErrors };\n };\n\n return {\n model,\n errors,\n validate(): FormValidationResult {\n const allErrors: Record<string, string[]> = {};\n Object.keys(rules).forEach((path) => {\n const result = validateField(path);\n if (!result.valid) {\n allErrors[path] = result.errors;\n }\n });\n return { valid: Object.keys(allErrors).length === 0, errors: allErrors };\n },\n validateField,\n resetErrors(): void {\n Object.keys(errors).forEach((path) => delete errors[path]);\n },\n };\n}\n",
|
|
6
|
-
"import { OneApp, AppOptions } from './core/app';\nimport type { ComponentProps } from './core/component';\n\n// 导出核心功能\nexport * from './core';\n\n// 导出路由功能\nexport * from './router';\n\n// 导出跨端请求模块\nexport * from './request';\n\n// 创建应用实例的主函数\nexport function createApp<\n TState extends object = Record<string, unknown>,\n TConfig extends object = Record<string, unknown>,\n TRootProps extends ComponentProps = ComponentProps,\n>(\n options: AppOptions<TState, TConfig, TRootProps> = {}\n): OneApp<TState, TConfig, TRootProps> {\n return new OneApp(options);\n}\n\n// 导出框架名称和版本\nexport const version = '0.
|
|
6
|
+
"import { OneApp, AppOptions } from './core/app';\nimport type { ComponentProps } from './core/component';\n\n// 导出核心功能\nexport * from './core';\n\n// 导出路由功能\nexport * from './router';\n\n// 导出跨端请求模块\nexport * from './request';\n\n// 创建应用实例的主函数\nexport function createApp<\n TState extends object = Record<string, unknown>,\n TConfig extends object = Record<string, unknown>,\n TRootProps extends ComponentProps = ComponentProps,\n>(\n options: AppOptions<TState, TConfig, TRootProps> = {}\n): OneApp<TState, TConfig, TRootProps> {\n return new OneApp(options);\n}\n\n// 导出框架名称和版本\nexport const version = '0.9.0';\nexport const name = 'transone';\n\nexport * from './platform';\n"
|
|
7
7
|
],
|
|
8
8
|
"mappings": "ylCA+BA,SAAS,CAAY,CAAC,EAAwB,CAC5C,OAAO,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,EAG9D,SAAS,CAAO,CACd,EACA,EACA,EACoB,CACpB,GAAI,CACF,IAAM,EAAS,EAAK,EAAO,CAAK,EAChC,GAAI,IAAW,GACb,OAEF,OAAO,IAAW,GAAQ,oBAAsB,EAChD,MAAO,EAAO,CACd,OAAO,EAAa,CAAK,GAItB,SAAS,CAAQ,CAAC,EAAU,yBAA0C,CAC3E,MAAO,CAAC,IAAU,CAChB,GAAI,IAAU,MAAQ,IAAU,OAC9B,OAAO,EAET,GAAI,OAAO,IAAU,UAAY,EAAM,KAAK,EAAE,SAAW,EACvD,OAAO,EAET,GAAI,MAAM,QAAQ,CAAK,GAAK,EAAM,SAAW,EAC3C,OAAO,EAET,MAAO,IAIJ,SAAS,CAAS,CACvB,EACA,EAAU,oBAAoB,eACd,CAChB,MAAO,CAAC,IACN,OAAO,IAAU,UAAY,EAAM,QAAU,EAAS,GAAO,EAG1D,SAAS,CAAQ,CAAC,EAAsC,CAC7D,OAAO,EAGF,SAAS,CAAiC,CAC/C,EACA,EACwB,CACxB,IAAM,EAAmC,CAAC,EAEpC,EAAgB,CAAC,IAAwC,CAC7D,IAAM,EAAa,EAAM,IAAS,CAAC,EAC7B,EAAQ,EAAc,EAAkC,CAAI,EAC5D,EAAc,EACjB,IAAI,CAAC,IAAS,EAAQ,EAAM,EAAO,CAAK,CAAC,EACzC,OAAO,CAAC,IAA+B,IAAY,MAAS,EAE/D,GAAI,EAAY,SAAW,EACzB,OAAO,EAAO,GAEd,OAAO,GAAQ,EAGjB,MAAO,CAAE,MAAO,EAAY,SAAW,EAAG,OAAQ,CAAY,GAGhE,MAAO,CACL,QACA,SACA,QAAQ,EAAyB,CAC/B,IAAM,EAAsC,CAAC,EAO7C,OANA,OAAO,KAAK,CAAK,EAAE,QAAQ,CAAC,IAAS,CACnC,IAAM,EAAS,EAAc,CAAI,EACjC,GAAI,CAAC,EAAO,MACV,EAAU,GAAQ,EAAO,OAE5B,EACM,CAAE,MAAO,OAAO,KAAK,CAAS,EAAE,SAAW,EAAG,OAAQ,CAAU,GAEzE,gBACA,WAAW,EAAS,CAClB,OAAO,KAAK,CAAM,EAAE,QAAQ,CAAC,IAAS,OAAO,EAAO,EAAK,EAE7D,ECxGK,SAAS,CAIf,CACC,EAAmD,CAAC,EACf,CACrC,OAAO,IAAI,EAAO,CAAO,EAIpB,IAAM,EAAU,QACV,EAAO",
|
|
9
|
-
"debugId": "
|
|
9
|
+
"debugId": "493839FE9C41922664756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|
package/dist/request/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{Ga as a,Ha as b,Ia as c,Ja as d,Ka as e,La as f,Ma as g,Na as h,Oa as i,Pa as j}from"../index-
|
|
1
|
+
import{Ga as a,Ha as b,Ia as c,Ja as d,Ka as e,La as f,Ma as g,Na as h,Oa as i,Pa as j}from"../index-sg4er0f8.js";export{g as InterceptorManager,h as Request,a as RequestError,d as adapters,e as createAdapter,i as createRequest,c as detectPlatform,b as isRequestError,j as request,f as resolveAdapter};
|
|
2
2
|
|
|
3
3
|
//# debugId=883CE296895C1FE164756E2164756E21
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
package/dist/router/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{oa as a,pa as b,qa as c,ra as d,sa as e}from"../index-
|
|
1
|
+
import{oa as a,pa as b,qa as c,ra as d,sa as e}from"../index-8qh91wft.js";import"../index-ryj080w6.js";import"../index-dse0chhf.js";export{a as Router,b as RouterLink,c as RouterView,d as createRouter,e as useRouter};
|
|
2
2
|
|
|
3
3
|
//# debugId=B7413070AF1615C764756E2164756E21
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
package/dist/index-5dxcnfw6.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import{Da as te,Ea as de,Fa as G}from"./index-ryj080w6.js";import{gb as H}from"./index-dse0chhf.js";var C=Symbol("is_reactive"),d=Symbol("is_readonly"),V=Symbol("is_ref"),q=["push","pop","shift","unshift","splice","sort","reverse"];function f(e,t){return Boolean(Reflect.get(e,t))}function h(e){return e!==null&&typeof e==="object"}class B{pending=new Set;flushing=!1;flushPromise=null;flushResolve=null;enqueue(e){if(this.pending.has(e))return;if(this.pending.add(e),!this.flushing)queueMicrotask(()=>this.flush())}flush(){if(this.flushing)return;this.flushing=!0;try{while(this.pending.size>0){let e=Array.from(this.pending);this.pending.clear();for(let t of e)if(t.active)t()}}finally{this.flushing=!1;let e=this.flushResolve;this.flushResolve=null,this.flushPromise=null,e?.()}}nextTick(){if(!this.flushing&&this.pending.size===0)return Promise.resolve();if(this.flushPromise)return this.flushPromise;return this.flushPromise=new Promise((e)=>{this.flushResolve=e}),this.flushPromise}}var Re=0,x=new B;function ze(){return x.nextTick()}function Ye(){x.flush()}class m{static instance;activeEffect=null;effectStack=[];targetMap=new WeakMap;reactiveMap=new WeakMap;readonlyMap=new WeakMap;proxyMap=new WeakMap;constructor(){}static getInstance(){if(!m.instance)m.instance=new m;return m.instance}reactive(e){if(!h(e))return console.warn("reactive: target must be an object"),e;if(Ce(e))return e;if(this.reactiveMap.has(e))return this.reactiveMap.get(e);if(Array.isArray(e))return this.createReactiveArray(e);let t=new Proxy(e,{get:(n,r)=>{if(r===C)return!0;if(r===d)return!1;this.track(n,r);let o=Reflect.get(n,r);if(h(o)&&!f(o,d))return this.reactive(o);return o},set:(n,r,o)=>{if(f(n,d))return console.warn(`Cannot set property ${String(r)} on readonly object`),!1;let i=Reflect.get(n,r);if(h(o)&&!f(o,C)&&!f(o,d))o=this.reactive(o);let s=Reflect.set(n,r,o);if(i!==o)this.trigger(n,r);return s},deleteProperty:(n,r)=>{if(f(n,d))return console.warn(`Cannot delete property ${String(r)} on readonly object`),!1;let o=r in n,i=Reflect.deleteProperty(n,r);if(o)this.trigger(n,r);return i}});return this.reactiveMap.set(e,t),this.proxyMap.set(t,e),t}toRawValue(e){if(h(e)&&this.proxyMap.has(e))return this.proxyMap.get(e);return e}createReactiveArray(e){if(this.reactiveMap.has(e))return this.reactiveMap.get(e);let t=new Proxy(e,{get:(n,r)=>{if(r===C)return!0;if(r===d)return!1;this.track(n,r);let o=Reflect.get(n,r);if(typeof r==="string"&&(r==="includes"||r==="indexOf"||r==="lastIndexOf")){this.track(n,"length");for(let s=0;s<n.length;s++)this.track(n,String(s));let i=o;return(...s)=>{let a=i.apply(n,s);if(a===!1||a===-1){let c=n.map((u)=>this.toRawValue(u));return c[r].apply(c,s.map((u)=>this.toRawValue(u)))}return a}}if(typeof r==="string"&&q.includes(r))return(...i)=>{let a=o.apply(n,i);return this.trigger(n,"length"),this.trigger(n,r),a};if(h(o)&&!f(o,d))return this.reactive(o);return o},set:(n,r,o)=>{if(f(n,d))return console.warn(`Cannot set property ${String(r)} on readonly object`),!1;let i=Reflect.get(n,r);if(h(o)&&!f(o,C)&&!f(o,d))o=this.reactive(o);let s=Reflect.set(n,r,o);if(i!==o){if(this.trigger(n,r),typeof r==="string"&&!isNaN(Number(r)))this.trigger(n,"length")}return s},deleteProperty:(n,r)=>{if(f(n,d))return console.warn(`Cannot delete property ${String(r)} on readonly object`),!1;let o=r in n,i=Reflect.deleteProperty(n,r);if(o)this.trigger(n,r),this.trigger(n,"length");return i}});return this.reactiveMap.set(e,t),this.proxyMap.set(t,e),t}readonly(e){if(!h(e))return console.warn("readonly: target must be an object"),e;if(f(e,d))return e;if(this.readonlyMap.has(e))return this.readonlyMap.get(e);let t=new Proxy(e,{get:(n,r)=>{if(r===C)return!1;if(r===d)return!0;let o=Reflect.get(n,r);if(h(o))return this.readonly(o);return o},set:()=>(console.warn("Cannot set property on readonly object"),!1),deleteProperty:()=>(console.warn("Cannot delete property on readonly object"),!1)});return this.readonlyMap.set(e,t),t}effect(e,t){let{lazy:n=!1,scheduler:r,throwOnError:o=!1}=t||{},i=()=>{if(!i.active)return e();try{return this.cleanup(i),this.effectStack.push(i),this.activeEffect=i,e()}catch(s){if(o)throw s;console.error("Effect error:",s);return}finally{this.effectStack.pop(),this.activeEffect=this.effectStack[this.effectStack.length-1]??null}};if(i.id=Re++,i.deps=[],i.active=!0,i.scheduler=r,!n)i();return i}runWithEffect(e,t){this.effectStack.push(e),this.activeEffect=e;try{return t()}finally{this.effectStack.pop(),this.activeEffect=this.effectStack[this.effectStack.length-1]??null}}computed(e){let t=!0,n,r={},o=()=>{this.track(r,"value")},i=this.effect(()=>{n=e(),t=!1},{lazy:!0,scheduler:()=>{if(!t)t=!0,this.trigger(r,"value")}});return{get value(){if(t)i();return o(),n}}}cleanup(e){e.deps.forEach((t)=>{t.delete(e)}),e.deps.length=0}track(e,t){if(!this.activeEffect||!this.activeEffect.active)return;let n=this.targetMap.get(e);if(!n)n=new Map,this.targetMap.set(e,n);let r=n.get(t);if(!r)r=new Set,n.set(t,r);if(!r.has(this.activeEffect))r.add(this.activeEffect),this.activeEffect.deps.push(r)}trigger(e,t){let n=this.targetMap.get(e);if(!n)return;let r=n.get(t);if(!r)return;new Set(r).forEach((i)=>{if(i.active)if(i.scheduler)i.scheduler(i);else i()})}stop(e){if(e.active)this.cleanup(e),e.active=!1}}function D(e){return m.getInstance().reactive(e)}function Qe(e){return m.getInstance().readonly(e)}function g(e,t){return m.getInstance().effect(e,t)}function Ze(e){return m.getInstance().computed(e)}function Je(e){let t={value:e};return Object.defineProperty(t,V,{configurable:!1,enumerable:!1,value:!0}),D(t)}function z(e){return h(e)&&Boolean(Reflect.get(e,V))}function Xe(e){return z(e)?e.value:e}function R(e){m.getInstance().stop(e)}function _(e,t){if(!h(e)||t.has(e))return;if(t.add(e),Array.isArray(e)){e.forEach((n)=>_(n,t));return}Object.keys(e).forEach((n)=>{_(e[n],t)})}function et(e,t,n={}){let r=m.getInstance(),o=z(e)?()=>e.value:e,i,s=null,a=()=>{if(!l.active)return;s?.(),s=null;let u=c();t(u,i,(y)=>{s=y}),i=u},c=g(()=>{let u=o();if(n.deep&&h(u))_(u,new Set);return u},{lazy:!0,scheduler:()=>{if(n.sync)a();else x.enqueue(l)}}),l=g(()=>{a()},{lazy:!0});if(n.immediate)a();else i=c();return()=>{r.stop(c),r.stop(l)}}function Ce(e){return h(e)&&f(e,C)}function tt(e){return h(e)&&f(e,d)}function v(e){if(e===void 0||e===null)return[];return Array.isArray(e)?e:[e]}function Y(e){return typeof e==="object"&&e!==null&&"component"in e}function Q(e){return typeof e==="object"&&e!==null&&"tag"in e&&e.tag!=="slot"}function Z(e){return typeof e==="object"&&e!==null&&"tag"in e&&e.tag==="slot"}function rt(e,t,n,r,o,i){return{tag:e,props:t,children:n,listeners:r,key:o,directions:i}}function be(e,t={}){return{tag:e,...t}}function p(e){return(t={})=>be(e,t)}var P=p("div"),ot=p("span"),it=p("p"),st=p("button"),at=p("input"),pt=p("section"),ct=p("main"),ut=p("header"),lt=p("footer"),dt=p("nav"),ft=p("article"),ht=p("aside"),mt=p("h1"),gt=p("h2"),vt=p("h3"),yt=p("h4"),Rt=p("h5"),Ct=p("h6"),bt=p("strong"),Et=p("em"),xt=p("small"),Tt=p("pre"),wt=p("code"),St=p("blockquote"),Pt=p("ul"),Lt=p("ol"),Mt=p("li"),Nt=p("a"),At=p("img"),kt=p("form"),It=p("label"),Ht=p("textarea"),jt=p("select"),Ot=p("option"),Vt=p("table"),Bt=p("thead"),_t=p("tbody"),Dt=p("tr"),Ut=p("th"),$t=p("td");function Kt(e,t,n,r,o){if(typeof e==="function")return{component:e,props:t,children:n,key:r,directions:o};return{component:e.component,props:e.props,children:e.children,key:e.key,directions:e.directions,emitters:e.emitters}}function Wt(e,t,n){return{tag:"slot",props:{name:e},key:t,directions:n}}function Ft(e,t,n){return e.map((r,o)=>{let i=t(r,o);if(typeof i==="string")throw Error("each render callback must return a VNode");if(!n)return i;return{...i,key:n(r,o)}})}function X(e){let t=e.split(".");if(e.length===0||t.some((n)=>n.length===0||n==="__proto__"||n==="prototype"||n==="constructor"))throw Error(`Invalid model path "${e}"`);return t}function K(e){return typeof e==="object"&&e!==null&&!Array.isArray(e)}function ee(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function Ee(e){return typeof e==="string"?e:e.path}function J(e,t){let n=e;for(let r of X(t)){if(!K(n))throw Error(`Invalid model path "${t}"`);if(!ee(n,r)){if(r in n)throw Error(`Invalid model path "${t}"`);return}n=n[r]}return n}function xe(e,t,n){let r=X(t),o=e;for(let s of r.slice(0,-1)){if(!ee(o,s)){if(s in o)throw Error(`Invalid model path "${t}"`);o[s]={}}else if(!K(o[s]))throw Error(`Invalid model path "${t}"`);let a=o[s];if(!K(a))throw Error(`Invalid model path "${t}"`);o=a}let i=r[r.length-1];o[i]=n}function U(e,t){if(typeof e!=="string"&&e.format)return e.format(t);return t===void 0||t===null?"":String(t)}function Te(e,t){if(typeof e!=="string"&&e.parse)return e.parse(t);return t}function we(e,t,n){if(e instanceof HTMLInputElement){if(e.type==="checkbox"){e.checked=Array.isArray(n)?n.some((r)=>String(r)===e.value):Boolean(n);return}if(e.type==="radio"){e.checked=n===e.value;return}e.value=U(t,n);return}if(e instanceof HTMLTextAreaElement){e.value=U(t,n);return}if(e instanceof HTMLSelectElement){if(e.multiple){let r=Array.isArray(n)?new Set(n.map(String)):new Set;for(let o=0;o<e.options.length;o+=1){let i=e.options.item(o);if(!i)continue;i.selected=r.has(i.value)}return}e.value=U(t,n)}}function Se(e,t){if(e instanceof HTMLInputElement){if(e.type==="checkbox"){if(Array.isArray(t)){let n=t.filter((r)=>String(r)!==e.value);return e.checked?[...n,e.value]:n}return e.checked}if(e.type==="radio")return e.checked?e.value:t;return e.value}if(e instanceof HTMLTextAreaElement)return e.value;if(e instanceof HTMLSelectElement){if(!e.multiple)return e.value;let n=[];for(let r=0;r<e.selectedOptions.length;r+=1){let o=e.selectedOptions.item(r);if(o)n.push(o.value)}return n}return}class W{bindings=new WeakMap;bind(e,t,n){if(!this.isSupportedControl(e))return;let r=this.bindings.get(e);if(r&&this.sameBinding(r,t))return;this.cleanup(e);let o=Ee(t),i=()=>we(e,t,J(n,o)),s=e instanceof HTMLTextAreaElement||e instanceof HTMLInputElement&&!["checkbox","radio"].includes(e.type)?"input":"change",a=()=>{let l=J(n,o);xe(n,o,Te(t,Se(e,l)))};e.addEventListener(s,a);let c=g(i);this.bindings.set(e,{binding:t,path:o,parse:typeof t==="string"?void 0:t.parse,format:typeof t==="string"?void 0:t.format,eventName:s,listener:a,effect:c})}cleanup(e){let t=this.bindings.get(e);if(!t)return;e.removeEventListener(t.eventName,t.listener),R(t.effect),this.bindings.delete(e)}isSupportedControl(e){return e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement}sameBinding(e,t){if(typeof e.binding==="string"||typeof t==="string")return e.binding===t;return e.path===t.path&&e.parse===t.parse&&e.format===t.format}}function M(e){return/^on[A-Z]/.test(e)||/^on[a-z]/.test(e)}function ne(e){return e.slice(2).toLowerCase()}function re(e){let[t,...n]=e.split(".");return{eventName:t,modifiers:new Set(n)}}function oe(e,t){let n=(r)=>{if(t.has("stop"))r.stopPropagation();if(t.has("prevent"))r.preventDefault();if(t.has("self")&&r.currentTarget!==r.target)return;if(t.has("once"))r.currentTarget.removeEventListener(r.type,n);e(r)};return n}function ie(e,t,n){let r=t.includes("-")?t:t.replace(/[A-Z]/g,(o)=>`-${o.toLowerCase()}`);e.setProperty(r,te(n))}var N=null;function se(e){if(!e||!(e instanceof A))throw Error("Invalid router instance");N=e}function Pe(){if(!N)throw Error("Router is not initialized. Please make sure you have installed the router plugin.");return N}function ae(){return N}var pe="http://www.w3.org/2000/svg",Le=new Set(["svg","g","defs","rect","circle","ellipse","line","polyline","polygon","path","text","tspan","textPath","use","symbol","marker","linearGradient","radialGradient","stop","pattern","mask","clipPath","foreignObject"]);class I{listeners=new WeakMap;effects=new WeakMap;modelBindings=new W;matches(e){return typeof e==="object"&&e!==null&&Q(e)}mount(e,t){if(e.directions?.if===!1)return document.createComment("if");let n=e.tag==="navigator",r=n?document.createElement("a"):Le.has(e.tag)?document.createElementNS(pe,e.tag):document.createElement(e.tag),o=e.props??{};if(n){let{url:i,openType:s,...a}=o,c=typeof i==="string"?i:"#";r.setAttribute("href",c),r.addEventListener("click",(l)=>{let u=ae();if(u)l.preventDefault(),u.push(r.getAttribute("href")??"#")}),this.applyProps(r,{},a,t)}else this.applyProps(r,{},o,t);return this.updateListeners(r,{},this.collectListeners(e)),this.mountChildren(r,e,t),this.applyDirections(r,void 0,e.directions,t),r}patch(e,t,n,r){if(e.tag!==t.tag||n.nodeType===Node.COMMENT_NODE){let i=this.mount(t,r);return n.parentNode?.replaceChild(i,n),this.unmount(e,n,r),i}if(!(n instanceof Element))return n;if(t.directions?.if===!1){let i=document.createComment("if");return n.parentNode?.replaceChild(i,n),this.unmount(e,n,r),i}if(t.tag==="navigator"||e.tag==="navigator"){let i=e.props??{},s=t.props??{},a=typeof i.url==="string"?i.url:"",c=typeof s.url==="string"?s.url:"";if(a!==c)n.setAttribute("href",c);let l={...s};delete l.url,delete l.openType,this.applyProps(n,i,l,r)}else this.applyProps(n,e.props??{},t.props??{},r);return this.updateListeners(n,this.collectListeners(e),this.collectListeners(t)),this.updateChildren(n,e,t,r),this.applyDirections(n,e.directions,t.directions,r),n}unmount(e,t,n){if(!(t instanceof Element))return;this.effects.get(t)?.forEach((r)=>R(r)),this.effects.delete(t),this.listeners.get(t)?.forEach(({eventName:r,listener:o})=>{t.removeEventListener(r,o)}),this.listeners.delete(t),this.modelBindings.cleanup(t),this.unmountChildren(t,e,n)}mountChildren(e,t,n){v(t.children).forEach((r)=>{e.appendChild(n.renderer.mount(r,n))})}updateChildren(e,t,n,r){this.updateOrdinaryChildren(e,v(t.children),v(n.children),r)}unmountChildren(e,t,n){v(t.children).forEach((r,o)=>{let i=e.childNodes[o];if(i)n.renderer.unmount(r,i,n)})}applyProps(e,t,n,r){Object.keys(t).forEach((o)=>{if(M(o)||o in n)return;if(o==="className"||o==="class")e.removeAttribute("class");else if(o==="style")e.removeAttribute("style");else if(o==="value"&&typeof e==="object"&&e!==null&&"value"in e)e.value="";else e.removeAttribute(k(o))}),Object.entries(n).forEach(([o,i])=>{if(M(o))return;if(t[o]===i)return;if(o==="className"||o==="class"){if(e.namespaceURI===pe)e.setAttribute("class",String(i??""));else e.className=String(i??"");return}if(o==="value"&&typeof e==="object"&&e!==null&&"value"in e){e.value=String(i??"");return}if(o==="style"&&typeof i==="object"&&i!==null){e.removeAttribute("style");let s=e.style;Object.entries(i).forEach(([a,c])=>{ie(s,a,c)});return}if(i===!1||i===void 0||i===null){e.removeAttribute(k(o));return}if(i===!0){e.setAttribute(k(o),"");return}if(typeof i==="string"&&r.templateEngine.hasExpressions(i)){this.setupReactiveAttribute(e,o,i,r);return}e.setAttribute(k(o),String(i))})}applyDirections(e,t,n,r){if(n&&"show"in n)e.style.display=n.show?"":"none";else if(t&&"show"in t)e.style.display="";if(!n?.model){this.modelBindings.cleanup(e);return}this.modelBindings.bind(e,n.model,r.templateEngine.state)}updateOrdinaryChildren(e,t,n,r){if(this.assertNoDuplicateKeys(t),this.assertNoDuplicateKeys(n),this.hasOnlyKeyedChildren(t,n)){this.updateKeyedChildren(e,t,n,r);return}let o=Math.min(t.length,n.length);for(let i=0;i<o;i+=1){let s=e.childNodes[i];if(!s){e.appendChild(r.renderer.mount(n[i],r));continue}r.renderer.patch(t[i],n[i],s,r)}for(let i=o;i<n.length;i+=1)e.appendChild(r.renderer.mount(n[i],r));for(let i=t.length-1;i>=n.length;i-=1){let s=e.childNodes[i];if(s){if(r.renderer.unmount(t[i],s,r),s.parentNode===e)e.removeChild(s)}}}updateKeyedChildren(e,t,n,r){let o=t.map((a,c)=>({vnode:a,node:e.childNodes[c],index:c})),i=new Map,s=new Set;o.forEach((a)=>{let c=this.getVNodeKey(a.vnode);if(c!==void 0&&a.node)i.set(c,{vnode:a.vnode,node:a.node,index:a.index})}),n.forEach((a,c)=>{let l=this.getVNodeKey(a),u=l===void 0?void 0:i.get(l),y;if(u)y=r.renderer.patch(u.vnode,a,u.node,r),s.add(u.index);else y=r.renderer.mount(a,r);let S=e.childNodes[c]??null;if(y!==S)e.insertBefore(y,S)}),o.forEach((a)=>{if(!a.node||s.has(a.index))return;if(r.renderer.unmount(a.vnode,a.node,r),a.node.parentNode===e)e.removeChild(a.node)})}hasOnlyKeyedChildren(e,t){return[...e,...t].every((n)=>this.getVNodeKey(n)!==void 0)}assertNoDuplicateKeys(e){let t=new Set;e.forEach((n)=>{let r=this.getVNodeKey(n);if(r===void 0)return;if(t.has(r))throw Error(`Duplicate key "${r}"`);t.add(r)})}getVNodeKey(e){if(typeof e==="string")return;return e.key}collectListeners(e){let t={};return Object.entries(e.props??{}).forEach(([n,r])=>{if(M(n)&&typeof r==="function")t[ne(n)]=r}),{...t,...e.listeners??{}}}updateListeners(e,t,n){let r=this.listeners.get(e)??new Map,o=new Set(Object.keys(t)),i=new Set(Object.keys(n));o.forEach((s)=>{if(!i.has(s)||t[s]!==n[s]){let a=r.get(s);if(a)e.removeEventListener(a.eventName,a.listener),r.delete(s)}}),i.forEach((s)=>{if(!o.has(s)||t[s]!==n[s]){let{eventName:a,modifiers:c}=re(s),l=typeof e.tagName==="string"&&e.tagName.toLowerCase()==="textarea",u=a==="confirm"&&!l?"keydown":a,y=oe((S)=>{if(u==="keydown"){if(S.key!=="Enter")return}n[s](S)},c);e.addEventListener(u,y),r.set(s,{eventName:u,listener:y})}}),this.listeners.set(e,r)}setupReactiveAttribute(e,t,n,r){let o=g(()=>{e.setAttribute(t,r.templateEngine.evaluateTemplateValue(n))});this.trackEffect(e,o)}trackEffect(e,t){let n=this.effects.get(e)??new Set;n.add(t),this.effects.set(e,n)}}function k(e){if(e.startsWith("data")&&e.length>4)return`data${e.slice(4).replace(/[A-Z]/g,(t)=>`-${t.toLowerCase()}`)}`;if(e==="tabIndex"||e==="colSpan"||e==="htmlFor")return e.toLowerCase();return e}class L{strategies;constructor(){this.strategies=[new ce,new ue,new le,new I]}mount(e,t){return this.findStrategy(e).mount(e,t)}patch(e,t,n,r){let o=this.findStrategy(e),i=this.findStrategy(t);if(o!==i){let s=i.mount(t,r);return n.parentNode?.replaceChild(s,n),o.unmount(e,n,r),s}return o.patch(e,t,n,r)}unmount(e,t,n){this.findStrategy(e).unmount(e,t,n)}findStrategy(e){let t=this.strategies.find((n)=>n.matches(e));if(!t)throw Error("No render strategy found for vnode");return t}}class ce{matches(e){return typeof e==="string"}mount(e,t){return t.templateEngine.parseTemplate(e)}patch(e,t,n,r){if(e===t)return n;let o=this.mount(t,r);return n.parentNode?.replaceChild(o,n),o}unmount(){}}class ue{instances=new WeakMap;instanceNodes=new Map;emitterUnsubscribers=new WeakMap;matches(e){return typeof e==="object"&&e!==null&&Y(e)}mount(e,t){if(e.directions?.if===!1)return document.createComment("if");let n=H(e.component,this.createProps(e));if(t.appContext&&n.setAppContext)n.setAppContext(t.appContext);this.syncEmitters(n,e.emitters??{}),t.registerChild(n);let r=n.mountToNode();return this.trackInstanceNode(n,r),n.setElementChangeListener?.((o,i)=>{this.trackInstanceNode(n,o),this.trackInstanceNode(n,i)}),r}patch(e,t,n,r){if(n.nodeType===Node.COMMENT_NODE){let s=this.mount(t,r);return n.parentNode?.replaceChild(s,n),s}if(t.directions?.if===!1){let s=document.createComment("if");return n.parentNode?.replaceChild(s,n),this.unmount(e,n,r),s}let o=this.instances.get(n);if(o&&e.component===t.component){this.syncEmitters(o,t.emitters??{}),o.setProps(this.createProps(t));let s=o.getElement()??n;return this.trackInstanceNode(o,s),s}let i=this.mount(t,r);return n.parentNode?.replaceChild(i,n),this.unmount(e,n,r),i}unmount(e,t,n){let r=this.instances.get(t);if(r)this.clearEmitters(r),r.unmount(),this.clearInstanceNodes(r),n.unregisterChild(r)}createProps(e){return{...e.props??{},children:v(e.children)}}syncEmitters(e,t){let n=this.emitterUnsubscribers.get(e)??new Map;n.forEach(({listener:r,unsubscribe:o},i)=>{let s=t[i];if(!s||s!==r)o(),n.delete(i)}),Object.entries(t).forEach(([r,o])=>{if(n.get(r)?.listener===o)return;n.set(r,{listener:o,unsubscribe:e.on(r,o)})}),this.emitterUnsubscribers.set(e,n)}clearEmitters(e){this.emitterUnsubscribers.get(e)?.forEach(({unsubscribe:t})=>{t()}),this.emitterUnsubscribers.delete(e)}trackInstanceNode(e,t){this.instances.set(t,e);let n=this.instanceNodes.get(e)??new Set;n.add(t),this.instanceNodes.set(e,n)}clearInstanceNodes(e){this.instanceNodes.get(e)?.forEach((t)=>{this.instances.delete(t)}),this.instanceNodes.delete(e)}}class le{renderedChildren=new WeakMap;matches(e){return typeof e==="object"&&e!==null&&Z(e)}mount(e,t){if(e.directions?.if===!1)return document.createComment("if");let n=document.createElement("div");return n.setAttribute("data-slot",e.props.name),this.mountSlotChildren(n,this.resolveChildren(e,t),t),n}patch(e,t,n,r){if(n.nodeType===Node.COMMENT_NODE){let o=this.mount(t,r);return n.parentNode?.replaceChild(o,n),o}if(t.directions?.if===!1){let o=document.createComment("if");return n.parentNode?.replaceChild(o,n),this.unmount(e,n,r),o}if(n instanceof HTMLElement)n.setAttribute("data-slot",t.props.name),this.replaceSlotChildren(n,e,t,r);return n}unmount(e,t,n){if(!(t instanceof HTMLElement))return;this.unmountSlotChildren(t,n),this.renderedChildren.delete(t)}resolveChildren(e,t){return t.slots[e.props.name]??v(e.children)}replaceSlotChildren(e,t,n,r){let o=this.renderedChildren.get(e)??[],i=this.resolveChildren(n,r),s=Math.min(o.length,i.length);for(let a=0;a<s;a+=1){let c=e.childNodes[a];if(!c){e.appendChild(r.renderer.mount(i[a],r));continue}r.renderer.patch(o[a],i[a],c,r)}for(let a=s;a<i.length;a+=1)e.appendChild(r.renderer.mount(i[a],r));for(let a=o.length-1;a>=i.length;a-=1){let c=e.childNodes[a];if(c){if(r.renderer.unmount(o[a],c,r),c.parentNode===e)e.removeChild(c)}}this.renderedChildren.set(e,i)}mountSlotChildren(e,t,n){t.forEach((r)=>{e.appendChild(n.renderer.mount(r,n))}),this.renderedChildren.set(e,t)}unmountSlotChildren(e,t){(this.renderedChildren.get(e)??[]).forEach((r,o)=>{let i=e.childNodes[o];if(i)t.renderer.unmount(r,i,t)})}}class b{state;bindings=[];templateRegex=/{{(.*?)}}/g;constructor(e){this.state=e;if(!e||typeof e!=="object")throw Error("TemplateEngine requires a valid state object")}parseTemplate(e){if(typeof e!=="string")e=String(e);let t=document.createTextNode("");this.templateRegex.lastIndex=0;let n=Array.from(e.matchAll(this.templateRegex));if(n&&n.length>0)this.setupReactiveBindings(t,e,n);else t.textContent=e;return t}setupReactiveBindings(e,t,n){let r=new Set,o=this.evaluateTemplate(t,n,r);e.textContent=o;let i=g(()=>{try{let s=this.evaluateTemplate(t,n,r);if(e.textContent!==s)e.textContent=s}catch(s){console.error("Template update error:",s),e.textContent=`Error: ${s instanceof Error?s.message:"Unknown error"}`}});this.bindings.push({node:e,originalText:t,effect:i})}evaluateTemplate(e,t,n){let r=e;return t.forEach((o)=>{let i=o[1]?.trim();if(i){n.add(i);let s=this.getValueFromState(i),a=s===void 0||s===null?"":String(s);r=r.replace(o[0],a)}}),r}getValueFromState(e){if(!e)return;let t=e.split("."),n=this.state;for(let r of t){if(!n||typeof n!=="object")return;n=n[r]}return n}clearBindings(){this.bindings.forEach((e)=>{R(e.effect)}),this.bindings=[]}getBindingCount(){return this.bindings.length}hasExpressions(e){return this.templateRegex.lastIndex=0,this.templateRegex.test(e)}extractKeys(e){let t=[],n,r=new RegExp(this.templateRegex,"g");while((n=r.exec(e))!==null){let o=n[1]?.trim();if(o)t.push(o)}return t}evaluateTemplateValue(e){this.templateRegex.lastIndex=0;let t=Array.from(e.matchAll(this.templateRegex));if(!t||t.length===0)return e;let n=new Set;return this.evaluateTemplate(e,t,n)}}class E{props;vnode=null;el=null;renderer=new L;templateEngine;childComponents=new Set;eventListeners={};providers=new Map;updateEffect;appContext=null;parentComponent=null;elementChangeListener=null;styleManager;state;mounted=!1;constructor(e={}){this.props=e;this.styleManager=new de,this.state=D(this.initState()??{}),this.templateEngine=new b(this.state),this.initStyles(),this.updateEffect=g(()=>{if(this.mounted)try{this.update()}catch(t){if(!this.dispatchError(t))throw t}},{throwOnError:!0,scheduler:(t)=>{x.enqueue(t)}})}mount(e){if(!e||!(e instanceof HTMLElement))throw Error("Invalid container element");try{e.appendChild(this.mountToNode())}catch(t){throw console.error("组件渲染错误:",t),t}}mountToNode(){if(this.mounted&&this.el)return this.el;return this.beforeMount(),this.el=m.getInstance().runWithEffect(this.updateEffect,()=>{try{return this.vnode=this.render(),this.renderer.mount(this.vnode,this.createRenderContext())}catch(e){if(this.dispatchError(e))return document.createComment("error-boundary");throw e}}),this.mounted=!0,this.onMounted(),this.el}update(){if(!this.el||!this.vnode)return;this.beforeUpdate();let e=this.vnode,t=this.el;if(this.el=m.getInstance().runWithEffect(this.updateEffect,()=>{let n=this.render(),r=this.renderer.patch(e,n,t,this.createRenderContext());return this.vnode=n,r}),t!==this.el)this.elementChangeListener?.(t,this.el);this.onUpdated(),this.onPropsChange()}unmount(){if(!this.mounted)return;if(this.beforeUnmount(),this.vnode&&this.el)this.renderer.unmount(this.vnode,this.el,this.createRenderContext());if(this.childComponents.clear(),Object.keys(this.eventListeners).forEach((e)=>{this.eventListeners[e].clear(),delete this.eventListeners[e]}),this.providers.clear(),this.parentComponent=null,this.elementChangeListener=null,this.templateEngine.clearBindings(),this.styleManager.destroy(),R(this.updateEffect),this.el?.parentNode)this.el.parentNode.removeChild(this.el);this.el=null,this.vnode=null,this.mounted=!1,this.onUnmounted()}setProps(e){if(this.props={...this.props,...e},this.mounted)x.enqueue(this.updateEffect)}setState(e){Object.assign(this.state,e)}setAppContext(e){this.appContext=e,this.childComponents.forEach((t)=>{t.setAppContext?.(e)})}setParentComponent(e){this.parentComponent=e}getParentComponent(){return this.parentComponent}setElementChangeListener(e){this.elementChangeListener=e}provide(e,t){this.providers.set(e,t)}inject(e,t){let n=this.resolveInjection(e);return n.found?n.value:t}resolveInjection(e){if(this.providers.has(e))return{found:!0,value:this.providers.get(e)};if(this.parentComponent?.resolveInjection)return this.parentComponent.resolveInjection(e);return this.resolveAppInjection(e)}getElement(){return this.el}beforeMount(){}onMounted(){}beforeUpdate(){}onUpdated(){}onPropsChange(){}beforeUnmount(){}onUnmounted(){}dispatchError(e){let t=this.getParentComponent();while(t){let n=t;if(typeof n.onErrorCaptured==="function"){if(n.onErrorCaptured(e,this)===!1)return!0}t=t.getParentComponent?.()??null}return!1}getContext(){return this.appContext}get router(){return this.getRouterFrom(this.appContext)??this.getRouterFromGlobalApp()}emit(e,...t){this.eventListeners[e]?.forEach((n)=>{n(...t)})}on(e,t){if(!this.eventListeners[e])this.eventListeners[e]=new Set;return this.eventListeners[e].add(t),()=>this.off(e,t)}off(e,t){this.eventListeners[e]?.delete(t)}createRenderContext(){return{appContext:this.appContext,templateEngine:this.templateEngine,renderer:this.renderer,slots:this.collectSlots(),registerChild:(e)=>{this.childComponents.add(e),e.setParentComponent?.(this),e.setAppContext?.(this.appContext)},unregisterChild:(e)=>{this.childComponents.delete(e),e.setParentComponent?.(null)}}}collectSlots(){let e={default:[]};return v(this.props.children).forEach((n)=>{let r=this.getSlotName(n);if(!e[r])e[r]=[];e[r].push(this.normalizeSlotChild(n))}),e}getSlotName(e){if(typeof e==="string")return"default";return"slot"in e&&typeof e.slot==="string"?e.slot:"default"}normalizeSlotChild(e){if(typeof e==="string"||!("slot"in e))return e;let t={...e};return delete t.slot,t}getRouterFrom(e){if(!e||typeof e!=="object"||!("router"in e))return;return e.router}getRouterFromGlobalApp(){let e=globalThis.__APP__;return this.getRouterFrom(e)}resolveAppInjection(e){if(!this.appContext||typeof this.appContext!=="object")return{found:!1,value:void 0};return this.appContext.app?.resolveInjection?.(e)??{found:!1,value:void 0}}}class fe extends E{}function T(e){if(!e.startsWith("/"))return`/${e}`;return e||"/"}function j(e,t){let n=T(t.split("?")[0]);for(let i of e){if(i.path==="*")continue;let s=Me(i.path,n);if(s)return{route:i,params:s}}let r=e.find((i)=>i.path==="*");if(r)return{route:r,params:{pathMatch:n}};let o=e.find((i)=>i.path==="/");return o?{route:o,params:{}}:null}function Me(e,t){let n=he(e),r=he(t);if(n.length!==r.length)return null;let o={};for(let i=0;i<n.length;i+=1){let s=n[i],a=r[i];if(s.startsWith(":")){let c=s.slice(1);if(!c)return null;o[decodeURIComponent(c)]=decodeURIComponent(a);continue}if(s!==a)return null}return o}function he(e){let t=T(e);if(t==="/")return[];return t.split("/").filter(Boolean)}function me(e,t,n){let r=T(e),o=n==="/"?r:n+r;return t==="hash"?`#${o}`:o}function ge(e,t){let n,r,o;if(e==="history")r=window.location.pathname+window.location.search,n=window.location.pathname,o=window.location.search;else{r=window.location.hash||"#/",n=r.startsWith("#")?r.slice(1):r;let s=n.indexOf("?");o=s>=0?n.slice(s+1):"",n=s>=0?n.slice(0,s):n}if(n.startsWith(t)&&t!=="/"&&n!=="/")n=n.slice(t.length);return n=T(n),{path:n,fullPath:r,query:Ne(o),params:{}}}function F(e,t,n,r){let o=T(e),i=r==="/"?o:r+o;if(n==="history"){if(t)window.history.replaceState({},"",i);else window.history.pushState({},"",i);return}if(t){let s=window.location.href.split("#")[0];window.location.replace(`${s}#${i}`);return}window.location.hash=i}function Ne(e){let t={},n=e.startsWith("?")?e.slice(1):e;if(!n)return t;return n.split("&").forEach((r)=>{let[o,i]=r.split("=");if(o)t[decodeURIComponent(o)]=i?decodeURIComponent(i):""}),t}function Ae(e){let t=e.indexOf("?");if(t<0)return{};let n=e.slice(t+1),r={};if(!n)return r;return n.split("&").forEach((o)=>{let[i,s]=o.split("=");if(i)r[decodeURIComponent(i)]=s?decodeURIComponent(s):""}),r}class A{currentRoute=null;currentLocation=null;routes=[];app=null;mode;base;routeChangeListeners=[];beforeGuards=[];afterHooks=[];removeWindowListener;constructor(e){let t=Array.isArray(e)?{routes:e}:e;this.routes=t.routes||[],this.mode=t.mode||"history",this.base=t.base||"/",this.validateRoutes(),this.initEvents(),this.resolveCurrentRoute()}install(e){this.app=e,e.router=this,se(this);let t=e.getContext();t.router=this,this.resolveCurrentRoute()}push(e){this.navigate(e,!1)}replace(e){this.navigate(e,!0)}forward(){window.history.forward()}back(){window.history.back()}go(e){window.history.go(e)}getCurrentRoute(){if(!this.currentLocation)this.resolveCurrentRoute();return this.currentLocation}getCurrentRouteRecord(){if(!this.currentRoute)this.resolveCurrentRoute();return this.currentRoute}onRouteChange(e){return this.routeChangeListeners.push(e),()=>{let t=this.routeChangeListeners.indexOf(e);if(t>-1)this.routeChangeListeners.splice(t,1)}}beforeEach(e){return this.beforeGuards.push(e),()=>{let t=this.beforeGuards.indexOf(e);if(t>-1)this.beforeGuards.splice(t,1)}}afterEach(e){return this.afterHooks.push(e),()=>{let t=this.afterHooks.indexOf(e);if(t>-1)this.afterHooks.splice(t,1)}}getRoutes(){return[...this.routes]}addRoute(e){if(this.routes.some((n)=>n.path===e.path))throw Error(`Route already exists: ${e.path}`);if(this.routes.push(e),this.getCurrentLocation().path===e.path)this.handleRouteChange()}createHref(e){return me(e,this.mode,this.base)}destroy(){if(this.removeWindowListener?.(),this.removeWindowListener=void 0,this.app?.router===this)this.app.router=void 0;this.app=null}navigate(e,t){if(!e||typeof e!=="string")throw Error("Path must be a non-empty string");let n=this.currentLocation,r=this.resolveTarget(e);if(!r)return;let o=r.location;for(let i of this.beforeGuards){let s=i(o,n);if(s===!1)return;if(typeof s==="string"&&s!==e){this.navigate(s,t);return}}if(n&&this.isSameLocation(n,o))return;F(r.path,t,this.mode,this.base),this.currentRoute=r.route,this.currentLocation=o,this.triggerRouteChangeListeners(o,n),this.afterHooks.forEach((i)=>{try{i(o,n)}catch(s){console.error("Route afterEach error:",s)}})}resolveTarget(e){let t=j(this.routes,e.split("?")[0]);if(!t)return null;let n=this.applyRedirect(t),r=n?.path??e,o=n?.route??t.route;return{path:r,route:o,location:{path:r.split("?")[0],query:Ae(r),params:n?.params??t.params,fullPath:r,name:o?.name,meta:o?.meta}}}applyRedirect(e){let t=new Set,n=e,r="";while(n.route.redirect){if(t.has(n.route.path))throw Error(`Redirect loop detected for route: ${n.route.path}`);t.add(n.route.path),r=n.route.redirect;let o=j(this.routes,r.split("?")[0]);if(!o)return null;n=o}return r?{route:n.route,params:n.params,path:r}:null}validateRoutes(){if(!Array.isArray(this.routes))throw Error("Router routes must be an array");let e=new Set;this.routes.forEach((t)=>{if(!t.component&&!t.redirect)throw Error(`Route ${t.path} must define a component or redirect`);if(e.has(t.path))throw Error(`Duplicate route path: ${t.path}`);e.add(t.path)})}initEvents(){if(typeof window>"u")return;let e=this.mode==="history"?"popstate":"hashchange",t=()=>{this.handleRouteChange()};window.addEventListener(e,t),this.removeWindowListener=()=>{window.removeEventListener(e,t)}}handleRouteChange(){let e=this.currentLocation,t=this.resolveCurrentRoute();if(!this.isSameLocation(e,t))this.triggerRouteChangeListeners(t,e)}resolveCurrentRoute(){let e=this.getCurrentLocation(),t=j(this.routes,e.path),n=t?this.applyRedirect(t):null,r=n?.route??t?.route??null;if(n&&n.path!==e.path)F(n.path,!0,this.mode,this.base);if(this.currentRoute=r,this.currentLocation={...e,params:n?.params??t?.params??{},name:r?.name,meta:r?.meta},this.afterHooks.length>0){let o=this.currentLocation;this.afterHooks.forEach((i)=>{try{i(o,null)}catch(s){console.error("Route afterEach error:",s)}})}return this.currentLocation}getCurrentLocation(){return ge(this.mode,this.base)}isSameLocation(e,t){return e?.fullPath===t?.fullPath&&e?.name===t?.name}triggerRouteChangeListeners(e,t){this.routeChangeListeners.forEach((n)=>{try{n(e,t)}catch(r){console.error("Route change listener error:",r)}})}}class ke extends E{unsubscribe;initState(){return{currentPath:this.router?.getCurrentRoute()?.path??window.location.pathname}}initStyles(){}onMounted(){let e=this.router;this.unsubscribe=e?.onRouteChange((t)=>{this.state.currentPath=t.path})}onUnmounted(){this.unsubscribe?.()}render(){let e=this.router,t=this.props.activeClass??"active",n=this.state.currentPath===this.props.to,r=[this.props.className,n?t:void 0].filter(Boolean).join(" ");return{tag:"a",props:{href:e?.createHref(this.props.to)??this.props.to,className:r},listeners:{click:(o)=>{if(o.preventDefault(),this.props.replace)e?.replace(this.props.to);else e?.push(this.props.to)}},children:this.props.children&&this.props.children.length>0?this.props.children:[this.props.to]}}}class Ie extends E{unsubscribe;initState(){let e=this.router;return{route:e?.getCurrentRoute()??null,record:e?.getCurrentRouteRecord()??null}}initStyles(){}onMounted(){let e=this.router;this.unsubscribe=e?.onRouteChange((t)=>{this.state.route=t,this.state.record=e.getCurrentRouteRecord()})}onUnmounted(){this.unsubscribe?.()}render(){let e=this.state.record??this.router?.getCurrentRouteRecord();return{tag:"div",props:{"data-router-view":""},children:e?.component?[{component:e.component}]:[]}}}function qn(e){return new A(e)}var He=new Set(["base","link","meta"]);function ve(e){let t=e.lang??"en",n=e.charset??"utf-8",r=e.viewport??"width=device-width, initial-scale=1",o=O({lang:t,...e.htmlAttributes??{}}),i=O(e.bodyAttributes),s=je(e.body);return["<!doctype html>",`<html${o}>`,"<head>",` <meta charset="${w(n)}">`,` <meta name="viewport" content="${w(r)}">`,` <title>${w(e.title)}</title>`,e.description?` <meta name="description" content="${w(e.description)}">`:"",...(e.head??[]).map((a)=>` ${Oe(a)}`),e.styles&&e.styles.length>0?` <style>${G(e.styles)}</style>`:"","</head>",`<body${i}>`,s,...(e.scripts??[]).map((a)=>` ${Ve(a)}`),"</body>","</html>"].filter((a)=>a!=="").join(`
|
|
2
|
-
`)}function je(e){if(typeof document>"u")throw Error("renderHtmlDocument requires a DOM-like document");let t=document.createElement("div"),n=new L,r=new Set,o=Array.isArray(e)?e:[e],i={templateEngine:new b({}),renderer:n,slots:{default:[]},registerChild:(a)=>{r.add(a)},unregisterChild:(a)=>{r.delete(a)}};o.forEach((a)=>{t.appendChild(n.mount(a,i))});let s=t.innerHTML;return r.forEach((a)=>{a.unmount()}),s}function Oe(e){let t=O(e.attributes);if(He.has(e.tag)&&!e.text)return`<${e.tag}${t}>`;return`<${e.tag}${t}>${w(e.text??"")}</${e.tag}>`}function Ve(e){return`<script${O({type:e.type,src:e.src,async:e.async,defer:e.defer,...e.attributes??{}})}></script>`}function O(e={}){let t=Object.entries(e).flatMap(([n,r])=>{if(r===!1||r===null||r===void 0)return[];return r===!0?[n]:[`${n}="${w(String(r))}"`]}).join(" ");return t?` ${t}`:""}function w(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}var ye="#app";class Be{options;container=null;rootInstance=null;mounted=!1;templateEngine=null;appContext;providers=new Map;plugins=[];unmountedCallback;router;constructor(e={}){this.options=e;this.appContext={app:this,version:"0.8.0",config:e.config||{}}}handleError(e){console.error("应用错误:",e),this.renderErrorUI(e)}renderErrorUI(e){if(!this.container)return;this.container.innerHTML=`
|
|
3
|
-
<div style="padding: 20px; background-color: #ffebee; color: #c62828; font-family: Arial, sans-serif;">
|
|
4
|
-
<h3>应用错误</h3>
|
|
5
|
-
<p>${e.message}</p>
|
|
6
|
-
<pre style="background-color: #fff; padding: 10px; border-radius: 4px; overflow: auto;">${e.stack}</pre>
|
|
7
|
-
</div>
|
|
8
|
-
`}use(e,...t){if(typeof e.install!=="function")throw Error("插件必须提供 install 方法");return e.install(this,...t),this.plugins.push({plugin:e,args:t}),this}mount(){if(this.mounted){console.warn("应用已经处于运行状态");return}let e=this.resolveMountContainer();if(!e)return;try{if(this.container=e,globalThis.__APP__=this,this.options.root){if(this.rootInstance=H(this.options.root,this.options.rootProps),"setAppContext"in this.rootInstance)this.rootInstance.setAppContext(this.appContext);if(this.options.state&&"setState"in this.rootInstance)this.rootInstance.setState(this.options.state);this.rootInstance.mount(this.container),this.templateEngine=new b(this.options.state||{})}this.mounted=!0,this.onMounted()}catch(t){this.handleError(t)}}unmount(){if(!this.mounted){console.warn("应用未处于运行状态");return}try{if(this.onBeforeUnmount(),this.rootInstance){if("unmount"in this.rootInstance)this.rootInstance.unmount();this.rootInstance=null,this.mounted=!1,delete globalThis.__APP__}if(this.templateEngine)this.templateEngine.clearBindings(),this.templateEngine=null;if(this.container)this.container.innerHTML="";if(this.unmountedCallback)this.unmountedCallback()}catch(e){console.error("Failed to unmount app:",e)}}isRunning(){return this.mounted}updateRootComponent(e){if(this.mounted)this.unmount();this.options.root=e,this.mount()}update(e){if(!this.mounted)return console.warn("Cannot update unmounted app"),this;try{if(e&&this.options.state){if(this.options.state={...this.options.state,...e},this.rootInstance&&"setState"in this.rootInstance)this.rootInstance.setState(e);if(this.templateEngine)this.templateEngine.state=this.options.state}this.onUpdated()}catch(t){console.error("Failed to update app:",t)}return this}getContext(){return this.appContext}provide(e,t){return this.providers.set(e,t),this}inject(e,t){let n=this.resolveInjection(e);return n.found?n.value:t}resolveInjection(e){if(!this.providers.has(e))return{found:!1,value:void 0};return{found:!0,value:this.providers.get(e)}}getState(){return this.options.state}setState(e){if(this.options.state=e,this.mounted)this.update();return this}onUnmounted(e){return this.unmountedCallback=e,this}renderHtmlDocument(e={}){let t=this.options.document??{},n=this.mergeDocumentScripts(t.scripts,e.scripts);return ve({...t,...e,title:e.title??t.title??"TransOne App",body:e.body??t.body??this.createMountDocumentBody(),scripts:n})}resolveRootElement(e){if(!e)return null;if(typeof e==="string"){if(typeof document>"u")return null;return document.querySelector(e)}return typeof Element<"u"&&e instanceof Element?e:null}resolveMountContainer(){if(typeof document>"u")return null;let e=this.resolveRootElement(this.options.rootElement??ye);return e instanceof HTMLElement?e:null}createMountDocumentBody(){let e=this.options.rootElement??ye;if(typeof e==="string")return this.createMountElementFromSelector(e);if(typeof Element<"u"&&e instanceof Element){let t={};if(e.id)t.id=e.id;if(e.className)t.className=e.className;return{tag:e.tagName.toLowerCase(),props:t}}return P({props:{id:"app"}})}createMountElementFromSelector(e){if(e.startsWith("#")&&e.length>1)return P({props:{id:e.slice(1)}});if(e.startsWith(".")&&e.length>1)return P({props:{className:e.slice(1)}});return P({props:{"data-transone-root":e}})}mergeDocumentScripts(e,t){if(!e&&!t)return;return[...e??[],...t??[]]}onMounted(){this.plugins.forEach(({plugin:e})=>{if(e&&typeof e.onMounted==="function")e.onMounted(this)})}onUpdated(){this.plugins.forEach(({plugin:e})=>{if(e&&typeof e.onUpdated==="function")e.onUpdated(this)})}onBeforeUnmount(){this.plugins.forEach(({plugin:e})=>{if(e&&typeof e.onBeforeUnmount==="function")e.onBeforeUnmount(this)})}}
|
|
9
|
-
export{x as a,ze as b,Ye as c,m as d,D as e,Qe as f,g,Ze as h,Je as i,z as j,Xe as k,R as l,et as m,Ce as n,tt as o,v as p,Y as q,Q as r,Z as s,rt as t,be as u,P as v,ot as w,it as x,st as y,at as z,pt as A,ct as B,ut as C,lt as D,dt as E,ft as F,ht as G,mt as H,gt as I,vt as J,yt as K,Rt as L,Ct as M,bt as N,Et as O,xt as P,Tt as Q,wt as R,St as S,Pt as T,Lt as U,Mt as V,Nt as W,At as X,kt as Y,It as Z,Ht as _,jt as $,Ot as aa,Vt as ba,Bt as ca,_t as da,Dt as ea,Ut as fa,$t as ga,Kt as ha,Wt as ia,Ft as ja,Ee as ka,J as la,xe as ma,W as na,A as oa,ke as pa,Ie as qa,qn as ra,Pe as sa,I as ta,L as ua,ce as va,ue as wa,le as xa,b as ya,E as za,fe as Aa,ve as Ba,Be as Ca};
|
|
10
|
-
|
|
11
|
-
//# debugId=9766D61D79EA1A8864756E2164756E21
|
|
12
|
-
//# sourceMappingURL=index-5dxcnfw6.js.map
|