transone 0.4.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 +15 -0
- package/README.zh-CN.md +16 -0
- package/dist/core/app.d.ts +6 -4
- package/dist/core/cleanup.d.ts +7 -0
- package/dist/core/component/base-component.d.ts +5 -0
- package/dist/core/component/base.d.ts +19 -0
- package/dist/core/component/index.d.ts +3 -2
- package/dist/core/index.d.ts +1 -0
- package/dist/core/vnode.d.ts +4 -4
- package/dist/index-8qh91wft.js +12 -0
- package/dist/index-8qh91wft.js.map +27 -0
- package/dist/index-dse0chhf.js +5 -0
- package/dist/index-dse0chhf.js.map +10 -0
- package/dist/index-fxpn7qkh.js +4 -0
- package/dist/index-fxpn7qkh.js.map +11 -0
- package/dist/{index-qmpx307q.js → index-ryj080w6.js} +3 -3
- package/dist/{index-qmpx307q.js.map → index-ryj080w6.js.map} +1 -1
- package/dist/index-sg4er0f8.js +5 -0
- package/dist/{index-xp7y2crt.js.map → index-sg4er0f8.js.map} +5 -5
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +3 -3
- package/dist/platform/bindings.d.ts +3 -0
- package/dist/platform/decorators.d.ts +15 -0
- package/dist/platform/definitions.d.ts +32 -0
- package/dist/platform/index.d.ts +3 -0
- package/dist/platform/index.js +4 -0
- package/dist/platform/index.js.map +9 -0
- package/dist/request/index.js +2 -2
- package/dist/request/index.js.map +1 -1
- package/dist/router/index.d.ts +2 -2
- package/dist/router/index.js +2 -2
- package/dist/router/index.js.map +1 -1
- package/dist/style/index.js +2 -2
- package/dist/style/index.js.map +1 -1
- package/package.json +5 -1
- package/dist/index-rmgr0qs2.js +0 -12
- package/dist/index-rmgr0qs2.js.map +0 -25
- package/dist/index-xp7y2crt.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
|
-
"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 merged: RequestConfig = {\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",
|
|
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,5 +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
|
+
export * from './platform';
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{$ as
|
|
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
|
-
"mappings": "
|
|
9
|
-
"debugId": "
|
|
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": "493839FE9C41922664756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Component, ComponentReference, ComponentProps, ComponentState } from '../core/component/base';
|
|
2
|
+
export declare function bindComponentImplementations(pairs: readonly (readonly [Function, Function])[]): () => void;
|
|
3
|
+
export declare function createComponentInstance<P extends ComponentProps = ComponentProps, S extends ComponentState = ComponentState>(reference: ComponentReference<P, S>, props?: P): Component<P, S>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** Compile-time markers. Return the same class and never register runtime targets. */
|
|
2
|
+
declare function platformDecorator(): <T extends abstract new (...args: any[]) => any>(value: T, _context: ClassDecoratorContext<T>) => T;
|
|
3
|
+
export declare const Web: typeof platformDecorator;
|
|
4
|
+
export declare const WebMobile: typeof platformDecorator;
|
|
5
|
+
export declare const WebPc: typeof platformDecorator;
|
|
6
|
+
export declare const Miniprogram: typeof platformDecorator;
|
|
7
|
+
export declare const MiniprogramWeixin: typeof platformDecorator;
|
|
8
|
+
export declare const MiniprogramAlipay: typeof platformDecorator;
|
|
9
|
+
export declare const MiniprogramBytedance: typeof platformDecorator;
|
|
10
|
+
export declare const MiniprogramXiaohongshu: typeof platformDecorator;
|
|
11
|
+
export declare const App: typeof platformDecorator;
|
|
12
|
+
export declare const AppIos: typeof platformDecorator;
|
|
13
|
+
export declare const AppAndroid: typeof platformDecorator;
|
|
14
|
+
export declare const AppHarmony: typeof platformDecorator;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/** Application platform, independent of the generator backend. */
|
|
2
|
+
export declare enum Platform {
|
|
3
|
+
Web = "web",
|
|
4
|
+
WebMobile = "web-mobile",
|
|
5
|
+
WebPc = "web-pc",
|
|
6
|
+
MiniprogramWeixin = "miniprogram-weixin",
|
|
7
|
+
MiniprogramAlipay = "miniprogram-alipay",
|
|
8
|
+
MiniprogramBytedance = "miniprogram-bytedance",
|
|
9
|
+
MiniprogramXiaohongshu = "miniprogram-xiaohongshu",
|
|
10
|
+
AppIos = "app-ios",
|
|
11
|
+
AppAndroid = "app-android",
|
|
12
|
+
AppHarmony = "app-harmony"
|
|
13
|
+
}
|
|
14
|
+
export type PlatformName = `${Platform}`;
|
|
15
|
+
export type PlatformFamily = 'web' | 'miniprogram' | 'app';
|
|
16
|
+
/** Component markers may identify a concrete platform or its shared family. */
|
|
17
|
+
export type ComponentPlatform = Platform | PlatformFamily;
|
|
18
|
+
export type BackendTarget = 'web' | 'mp-weixin' | 'mp-alipay' | 'mp-bytedance' | 'mp-xiaohongshu' | 'app-ios' | 'app-android' | 'app-harmony';
|
|
19
|
+
export interface PlatformDefinition {
|
|
20
|
+
platform: Platform;
|
|
21
|
+
decorator: string;
|
|
22
|
+
family: PlatformFamily;
|
|
23
|
+
target: BackendTarget;
|
|
24
|
+
}
|
|
25
|
+
export declare const PLATFORM_DEFINITIONS: readonly PlatformDefinition[];
|
|
26
|
+
/** Family markers do not select a concrete generator and are not build targets. */
|
|
27
|
+
export declare const COMPONENT_PLATFORM_DEFINITIONS: readonly {
|
|
28
|
+
platform: ComponentPlatform;
|
|
29
|
+
decorator: string;
|
|
30
|
+
}[];
|
|
31
|
+
export declare function normalizePlatform(value: unknown): Platform | undefined;
|
|
32
|
+
export declare function getPlatformDefinition(value: Platform): PlatformDefinition;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{$a as n,Qa as c,Ra as d,Sa as e,Ta as f,Ua as g,Va as h,Wa as i,Xa as j,Ya as k,Za as l,_a as m,ab as o,bb as p,cb as q,db as r,eb as s}from"../index-fxpn7qkh.js";import{fb as a,gb as b}from"../index-dse0chhf.js";export{p as App,r as AppAndroid,s as AppHarmony,q as AppIos,e as COMPONENT_PLATFORM_DEFINITIONS,k as Miniprogram,m as MiniprogramAlipay,n as MiniprogramBytedance,l as MiniprogramWeixin,o as MiniprogramXiaohongshu,d as PLATFORM_DEFINITIONS,c as Platform,h as Web,i as WebMobile,j as WebPc,a as bindComponentImplementations,b as createComponentInstance,g as getPlatformDefinition,f as normalizePlatform};
|
|
2
|
+
|
|
3
|
+
//# debugId=D183834A7310234E64756E2164756E21
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
package/dist/request/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
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
|
-
//# debugId=
|
|
3
|
+
//# debugId=883CE296895C1FE164756E2164756E21
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
package/dist/router/index.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AnyComponentReference, Component } from '../core/component';
|
|
2
2
|
import { OneApp } from '../core/app';
|
|
3
3
|
import type { VNode } from '../core/vnode';
|
|
4
4
|
export { useRouter } from './instance';
|
|
5
5
|
export type RouteMeta = Record<string, unknown>;
|
|
6
6
|
export interface RouteRecord {
|
|
7
7
|
path: string;
|
|
8
|
-
component?:
|
|
8
|
+
component?: AnyComponentReference;
|
|
9
9
|
redirect?: string;
|
|
10
10
|
name?: string;
|
|
11
11
|
meta?: RouteMeta;
|
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
|
-
//# debugId=
|
|
3
|
+
//# debugId=B7413070AF1615C764756E2164756E21
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
package/dist/router/index.js.map
CHANGED
package/dist/style/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Ea as f,Fa as m}from"../index-ryj080w6.js";export{f as StyleManager,m as renderStyleSheet};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=7E9C0674F57BBB7C64756E2164756E21
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
package/dist/style/index.js.map
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "transone",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "TransOne 是跨端前端框架:一份 TypeScript 源码,编译期静态转换为 Web 与多端小程序原生产物,产物不携带框架运行时",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -26,6 +26,10 @@
|
|
|
26
26
|
"./request": {
|
|
27
27
|
"import": "./dist/request/index.js",
|
|
28
28
|
"types": "./dist/request/index.d.ts"
|
|
29
|
+
},
|
|
30
|
+
"./platform": {
|
|
31
|
+
"import": "./dist/platform/index.js",
|
|
32
|
+
"types": "./dist/platform/index.d.ts"
|
|
29
33
|
}
|
|
30
34
|
},
|
|
31
35
|
"scripts": {
|
package/dist/index-rmgr0qs2.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import{Ca as ee,Da as le,Ea as F}from"./index-qmpx307q.js";var C=Symbol("is_reactive"),d=Symbol("is_readonly"),O=Symbol("is_ref"),G=["push","pop","shift","unshift","splice","sort","reverse"];function h(e,t){return Boolean(Reflect.get(e,t))}function f(e){return e!==null&&typeof e==="object"}class V{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 ve=0,E=new V;function Ge(){return E.nextTick()}function qe(){E.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(!f(e))return console.warn("reactive: target must be an object"),e;if(ye(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(f(o)&&!h(o,d))return this.reactive(o);return o},set:(n,r,o)=>{if(h(n,d))return console.warn(`Cannot set property ${String(r)} on readonly object`),!1;let i=Reflect.get(n,r);if(f(o)&&!h(o,C)&&!h(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(h(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(f(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"&&G.includes(r))return(...i)=>{let a=o.apply(n,i);return this.trigger(n,"length"),this.trigger(n,r),a};if(f(o)&&!h(o,d))return this.reactive(o);return o},set:(n,r,o)=>{if(h(n,d))return console.warn(`Cannot set property ${String(r)} on readonly object`),!1;let i=Reflect.get(n,r);if(f(o)&&!h(o,C)&&!h(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(h(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(!f(e))return console.warn("readonly: target must be an object"),e;if(h(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(f(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=ve++,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 _(e){return m.getInstance().reactive(e)}function ze(e){return m.getInstance().readonly(e)}function g(e,t){return m.getInstance().effect(e,t)}function Ye(e){return m.getInstance().computed(e)}function Qe(e){let t={value:e};return Object.defineProperty(t,O,{configurable:!1,enumerable:!1,value:!0}),_(t)}function q(e){return f(e)&&Boolean(Reflect.get(e,O))}function Ze(e){return q(e)?e.value:e}function R(e){m.getInstance().stop(e)}function B(e,t){if(!f(e)||t.has(e))return;if(t.add(e),Array.isArray(e)){e.forEach((n)=>B(n,t));return}Object.keys(e).forEach((n)=>{B(e[n],t)})}function Je(e,t,n={}){let r=m.getInstance(),o=q(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&&f(u))B(u,new Set);return u},{lazy:!0,scheduler:()=>{if(n.sync)a();else E.enqueue(l)}}),l=g(()=>{a()},{lazy:!0});if(n.immediate)a();else i=c();return()=>{r.stop(c),r.stop(l)}}function ye(e){return f(e)&&h(e,C)}function Xe(e){return f(e)&&h(e,d)}function v(e){if(e===void 0||e===null)return[];return Array.isArray(e)?e:[e]}function z(e){return typeof e==="object"&&e!==null&&"component"in e}function Y(e){return typeof e==="object"&&e!==null&&"tag"in e&&e.tag!=="slot"}function Q(e){return typeof e==="object"&&e!==null&&"tag"in e&&e.tag==="slot"}function tt(e,t,n,r,o,i){return{tag:e,props:t,children:n,listeners:r,key:o,directions:i}}function Re(e,t={}){return{tag:e,...t}}function p(e){return(t={})=>Re(e,t)}var S=p("div"),nt=p("span"),rt=p("p"),ot=p("button"),it=p("input"),st=p("section"),at=p("main"),pt=p("header"),ct=p("footer"),ut=p("nav"),lt=p("article"),dt=p("aside"),ht=p("h1"),ft=p("h2"),mt=p("h3"),gt=p("h4"),vt=p("h5"),yt=p("h6"),Rt=p("strong"),Ct=p("em"),bt=p("small"),Et=p("pre"),xt=p("code"),Tt=p("blockquote"),wt=p("ul"),St=p("ol"),Pt=p("li"),Lt=p("a"),Mt=p("img"),Nt=p("form"),At=p("label"),kt=p("textarea"),It=p("select"),Ht=p("option"),jt=p("table"),Ot=p("thead"),Vt=p("tbody"),Bt=p("tr"),_t=p("th"),Dt=p("td");function Ut(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 $t(e,t,n){return{tag:"slot",props:{name:e},key:t,directions:n}}function Kt(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 J(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 U(e){return typeof e==="object"&&e!==null&&!Array.isArray(e)}function X(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function Ce(e){return typeof e==="string"?e:e.path}function Z(e,t){let n=e;for(let r of J(t)){if(!U(n))throw Error(`Invalid model path "${t}"`);if(!X(n,r)){if(r in n)throw Error(`Invalid model path "${t}"`);return}n=n[r]}return n}function be(e,t,n){let r=J(t),o=e;for(let s of r.slice(0,-1)){if(!X(o,s)){if(s in o)throw Error(`Invalid model path "${t}"`);o[s]={}}else if(!U(o[s]))throw Error(`Invalid model path "${t}"`);let a=o[s];if(!U(a))throw Error(`Invalid model path "${t}"`);o=a}let i=r[r.length-1];o[i]=n}function D(e,t){if(typeof e!=="string"&&e.format)return e.format(t);return t===void 0||t===null?"":String(t)}function Ee(e,t){if(typeof e!=="string"&&e.parse)return e.parse(t);return t}function xe(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=D(t,n);return}if(e instanceof HTMLTextAreaElement){e.value=D(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=D(t,n)}}function Te(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 K{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=Ce(t),i=()=>xe(e,t,Z(n,o)),s=e instanceof HTMLTextAreaElement||e instanceof HTMLInputElement&&!["checkbox","radio"].includes(e.type)?"input":"change",a=()=>{let l=Z(n,o);be(n,o,Ee(t,Te(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 te(e){return e.slice(2).toLowerCase()}function ne(e){let[t,...n]=e.split(".");return{eventName:t,modifiers:new Set(n)}}function re(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 oe(e,t,n){let r=t.includes("-")?t:t.replace(/[A-Z]/g,(o)=>`-${o.toLowerCase()}`);e.setProperty(r,ee(n))}var N=null;function ie(e){if(!e||!(e instanceof A))throw Error("Invalid router instance");N=e}function we(){if(!N)throw Error("Router is not initialized. Please make sure you have installed the router plugin.");return N}function se(){return N}var ae="http://www.w3.org/2000/svg",Se=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 K;matches(e){return typeof e==="object"&&e!==null&&Y(e)}mount(e,t){if(e.directions?.if===!1)return document.createComment("if");let n=e.tag==="navigator",r=n?document.createElement("a"):Se.has(e.tag)?document.createElementNS(ae,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=se();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===ae)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])=>{oe(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 w=e.childNodes[c]??null;if(y!==w)e.insertBefore(y,w)}),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[te(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}=ne(s),l=typeof e.tagName==="string"&&e.tagName.toLowerCase()==="textarea",u=a==="confirm"&&!l?"keydown":a,y=re((w)=>{if(u==="keydown"){if(w.key!=="Enter")return}n[s](w)},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 P{strategies;constructor(){this.strategies=[new pe,new ce,new ue,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 pe{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 ce{instances=new WeakMap;instanceNodes=new Map;emitterUnsubscribers=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 r=new e.component(this.createProps(e));if(t.appContext&&r.setAppContext)r.setAppContext(t.appContext);this.syncEmitters(r,e.emitters??{}),t.registerChild(r);let o=r.mountToNode();return this.trackInstanceNode(r,o),r.setElementChangeListener?.((i,s)=>{this.trackInstanceNode(r,i),this.trackInstanceNode(r,s)}),o}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 ue{renderedChildren=new WeakMap;matches(e){return typeof e==="object"&&e!==null&&Q(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 L{props;vnode=null;el=null;renderer=new P;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 le,this.state=_(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)=>{E.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)E.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}}}function x(e){if(!e.startsWith("/"))return`/${e}`;return e||"/"}function H(e,t){let n=x(t.split("?")[0]);for(let i of e){if(i.path==="*")continue;let s=Pe(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 Pe(e,t){let n=de(e),r=de(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 de(e){let t=x(e);if(t==="/")return[];return t.split("/").filter(Boolean)}function he(e,t,n){let r=x(e),o=n==="/"?r:n+r;return t==="hash"?`#${o}`:o}function fe(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=x(n),{path:n,fullPath:r,query:Le(o),params:{}}}function W(e,t,n,r){let o=x(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 Le(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 Me(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,ie(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 he(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;W(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=H(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:Me(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=H(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=H(this.routes,e.path),n=t?this.applyRedirect(t):null,r=n?.route??t?.route??null;if(n&&n.path!==e.path)W(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 fe(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 Ne extends L{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 Ae extends L{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 Un(e){return new A(e)}var ke=new Set(["base","link","meta"]);function me(e){let t=e.lang??"en",n=e.charset??"utf-8",r=e.viewport??"width=device-width, initial-scale=1",o=j({lang:t,...e.htmlAttributes??{}}),i=j(e.bodyAttributes),s=Ie(e.body);return["<!doctype html>",`<html${o}>`,"<head>",` <meta charset="${T(n)}">`,` <meta name="viewport" content="${T(r)}">`,` <title>${T(e.title)}</title>`,e.description?` <meta name="description" content="${T(e.description)}">`:"",...(e.head??[]).map((a)=>` ${He(a)}`),e.styles&&e.styles.length>0?` <style>${F(e.styles)}</style>`:"","</head>",`<body${i}>`,s,...(e.scripts??[]).map((a)=>` ${je(a)}`),"</body>","</html>"].filter((a)=>a!=="").join(`
|
|
2
|
-
`)}function Ie(e){if(typeof document>"u")throw Error("renderHtmlDocument requires a DOM-like document");let t=document.createElement("div"),n=new P,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 He(e){let t=j(e.attributes);if(ke.has(e.tag)&&!e.text)return`<${e.tag}${t}>`;return`<${e.tag}${t}>${T(e.text??"")}</${e.tag}>`}function je(e){return`<script${j({type:e.type,src:e.src,async:e.async,defer:e.defer,...e.attributes??{}})}></script>`}function j(e={}){let t=Object.entries(e).flatMap(([n,r])=>{if(r===!1||r===null||r===void 0)return[];return r===!0?[n]:[`${n}="${T(String(r))}"`]}).join(" ");return t?` ${t}`:""}function T(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}var ge="#app";class Oe{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.4.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=new 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 me({...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??ge);return e instanceof HTMLElement?e:null}createMountDocumentBody(){let e=this.options.rootElement??ge;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 S({props:{id:"app"}})}createMountElementFromSelector(e){if(e.startsWith("#")&&e.length>1)return S({props:{id:e.slice(1)}});if(e.startsWith(".")&&e.length>1)return S({props:{className:e.slice(1)}});return S({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{E as a,Ge as b,qe as c,m as d,_ as e,ze as f,g,Ye as h,Qe as i,q as j,Ze as k,R as l,Je as m,ye as n,Xe as o,v as p,z as q,Y as r,Q as s,tt as t,Re as u,S as v,nt as w,rt as x,ot as y,it as z,st as A,at as B,pt as C,ct as D,ut as E,lt as F,dt as G,ht as H,ft as I,mt as J,gt as K,vt as L,yt as M,Rt as N,Ct as O,bt as P,Et as Q,xt as R,Tt as S,wt as T,St as U,Pt as V,Lt as W,Mt as X,Nt as Y,At as Z,kt as _,It as $,Ht as aa,jt as ba,Ot as ca,Vt as da,Bt as ea,_t as fa,Dt as ga,Ut as ha,$t as ia,Kt as ja,Ce as ka,Z as la,be as ma,K as na,A as oa,Ne as pa,Ae as qa,Un as ra,we as sa,I as ta,P as ua,pe as va,ce as wa,ue as xa,b as ya,L as za,me as Aa,Oe as Ba};
|
|
10
|
-
|
|
11
|
-
//# debugId=98B66F57AFBD15A264756E2164756E21
|
|
12
|
-
//# sourceMappingURL=index-rmgr0qs2.js.map
|