@djvlc/runtime-web 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/runtime.iife.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.iife.js","sources":["../../../node_modules/.pnpm/@djvlc+contracts-types@1.4.0/node_modules/@djvlc/contracts-types/dist/index.mjs","../../core/dist/index.js","../src/index.ts"],"sourcesContent":["// src/version.ts\nvar PAGE_SCHEMA_VERSION = \"1.0.0\";\nvar COMPONENT_META_SCHEMA_VERSION = \"1.0.0\";\nvar ACTION_SPEC_VERSION = \"1.0.0\";\nvar DATA_QUERY_SPEC_VERSION = \"1.0.0\";\nfunction getContractsVersion() {\n return {\n pageSchema: PAGE_SCHEMA_VERSION,\n componentMeta: COMPONENT_META_SCHEMA_VERSION,\n actionSpec: ACTION_SPEC_VERSION,\n dataQuerySpec: DATA_QUERY_SPEC_VERSION\n };\n}\nfunction isVersionCompatible(required, current) {\n const [reqMajor, reqMinor] = required.split(\".\").map(Number);\n const [curMajor, curMinor] = current.split(\".\").map(Number);\n return curMajor === reqMajor && curMinor >= reqMinor;\n}\n\n// src/errors/index.ts\nvar ErrorCode = /* @__PURE__ */ ((ErrorCode2) => {\n ErrorCode2[ErrorCode2[\"UNKNOWN\"] = 1e3] = \"UNKNOWN\";\n ErrorCode2[ErrorCode2[\"INVALID_REQUEST\"] = 1001] = \"INVALID_REQUEST\";\n ErrorCode2[ErrorCode2[\"UNAUTHORIZED\"] = 1002] = \"UNAUTHORIZED\";\n ErrorCode2[ErrorCode2[\"FORBIDDEN\"] = 1003] = \"FORBIDDEN\";\n ErrorCode2[ErrorCode2[\"NOT_FOUND\"] = 1004] = \"NOT_FOUND\";\n ErrorCode2[ErrorCode2[\"RATE_LIMITED\"] = 1005] = \"RATE_LIMITED\";\n ErrorCode2[ErrorCode2[\"VALIDATION_ERROR\"] = 1006] = \"VALIDATION_ERROR\";\n ErrorCode2[ErrorCode2[\"INTERNAL_ERROR\"] = 1007] = \"INTERNAL_ERROR\";\n ErrorCode2[ErrorCode2[\"SERVICE_UNAVAILABLE\"] = 1008] = \"SERVICE_UNAVAILABLE\";\n ErrorCode2[ErrorCode2[\"TIMEOUT\"] = 1009] = \"TIMEOUT\";\n ErrorCode2[ErrorCode2[\"ACTION_NOT_FOUND\"] = 2001] = \"ACTION_NOT_FOUND\";\n ErrorCode2[ErrorCode2[\"ACTION_INVALID_PARAMS\"] = 2002] = \"ACTION_INVALID_PARAMS\";\n ErrorCode2[ErrorCode2[\"ACTION_EXECUTION_FAILED\"] = 2003] = \"ACTION_EXECUTION_FAILED\";\n ErrorCode2[ErrorCode2[\"ACTION_IDEMPOTENCY_CONFLICT\"] = 2004] = \"ACTION_IDEMPOTENCY_CONFLICT\";\n ErrorCode2[ErrorCode2[\"ACTION_BLOCKED\"] = 2005] = \"ACTION_BLOCKED\";\n ErrorCode2[ErrorCode2[\"ACTION_RISK_REJECTED\"] = 2006] = \"ACTION_RISK_REJECTED\";\n ErrorCode2[ErrorCode2[\"ACTION_EXPIRED\"] = 2007] = \"ACTION_EXPIRED\";\n ErrorCode2[ErrorCode2[\"ACTION_QUOTA_EXCEEDED\"] = 2008] = \"ACTION_QUOTA_EXCEEDED\";\n ErrorCode2[ErrorCode2[\"QUERY_NOT_FOUND\"] = 3001] = \"QUERY_NOT_FOUND\";\n ErrorCode2[ErrorCode2[\"QUERY_INVALID_PARAMS\"] = 3002] = \"QUERY_INVALID_PARAMS\";\n ErrorCode2[ErrorCode2[\"QUERY_EXECUTION_FAILED\"] = 3003] = \"QUERY_EXECUTION_FAILED\";\n ErrorCode2[ErrorCode2[\"QUERY_FIELD_NOT_ALLOWED\"] = 3004] = \"QUERY_FIELD_NOT_ALLOWED\";\n ErrorCode2[ErrorCode2[\"QUERY_TIMEOUT\"] = 3005] = \"QUERY_TIMEOUT\";\n ErrorCode2[ErrorCode2[\"QUERY_DISABLED\"] = 3006] = \"QUERY_DISABLED\";\n ErrorCode2[ErrorCode2[\"COMPONENT_NOT_FOUND\"] = 4001] = \"COMPONENT_NOT_FOUND\";\n ErrorCode2[ErrorCode2[\"COMPONENT_VERSION_NOT_FOUND\"] = 4002] = \"COMPONENT_VERSION_NOT_FOUND\";\n ErrorCode2[ErrorCode2[\"COMPONENT_BLOCKED\"] = 4003] = \"COMPONENT_BLOCKED\";\n ErrorCode2[ErrorCode2[\"COMPONENT_INTEGRITY_MISMATCH\"] = 4004] = \"COMPONENT_INTEGRITY_MISMATCH\";\n ErrorCode2[ErrorCode2[\"COMPONENT_INCOMPATIBLE\"] = 4005] = \"COMPONENT_INCOMPATIBLE\";\n ErrorCode2[ErrorCode2[\"COMPONENT_LOAD_FAILED\"] = 4006] = \"COMPONENT_LOAD_FAILED\";\n ErrorCode2[ErrorCode2[\"COMPONENT_RENDER_ERROR\"] = 4007] = \"COMPONENT_RENDER_ERROR\";\n ErrorCode2[ErrorCode2[\"PAGE_NOT_FOUND\"] = 5001] = \"PAGE_NOT_FOUND\";\n ErrorCode2[ErrorCode2[\"PAGE_VERSION_NOT_FOUND\"] = 5002] = \"PAGE_VERSION_NOT_FOUND\";\n ErrorCode2[ErrorCode2[\"PAGE_SCHEMA_INVALID\"] = 5003] = \"PAGE_SCHEMA_INVALID\";\n ErrorCode2[ErrorCode2[\"PAGE_MANIFEST_INVALID\"] = 5004] = \"PAGE_MANIFEST_INVALID\";\n ErrorCode2[ErrorCode2[\"PAGE_PUBLISH_FAILED\"] = 5005] = \"PAGE_PUBLISH_FAILED\";\n ErrorCode2[ErrorCode2[\"PAGE_ROLLBACK_FAILED\"] = 5006] = \"PAGE_ROLLBACK_FAILED\";\n ErrorCode2[ErrorCode2[\"ACTIVITY_NOT_FOUND\"] = 6001] = \"ACTIVITY_NOT_FOUND\";\n ErrorCode2[ErrorCode2[\"ACTIVITY_NOT_STARTED\"] = 6002] = \"ACTIVITY_NOT_STARTED\";\n ErrorCode2[ErrorCode2[\"ACTIVITY_ENDED\"] = 6003] = \"ACTIVITY_ENDED\";\n ErrorCode2[ErrorCode2[\"ACTIVITY_ALREADY_CLAIMED\"] = 6004] = \"ACTIVITY_ALREADY_CLAIMED\";\n ErrorCode2[ErrorCode2[\"ACTIVITY_ALREADY_SIGNED\"] = 6005] = \"ACTIVITY_ALREADY_SIGNED\";\n ErrorCode2[ErrorCode2[\"ACTIVITY_LIMIT_EXCEEDED\"] = 6006] = \"ACTIVITY_LIMIT_EXCEEDED\";\n ErrorCode2[ErrorCode2[\"ACTIVITY_DISABLED\"] = 6007] = \"ACTIVITY_DISABLED\";\n ErrorCode2[ErrorCode2[\"EXPRESSION_SYNTAX_ERROR\"] = 7001] = \"EXPRESSION_SYNTAX_ERROR\";\n ErrorCode2[ErrorCode2[\"EXPRESSION_UNKNOWN_FUNCTION\"] = 7002] = \"EXPRESSION_UNKNOWN_FUNCTION\";\n ErrorCode2[ErrorCode2[\"EXPRESSION_INVALID_ARGUMENT\"] = 7003] = \"EXPRESSION_INVALID_ARGUMENT\";\n ErrorCode2[ErrorCode2[\"EXPRESSION_UNKNOWN_VARIABLE\"] = 7004] = \"EXPRESSION_UNKNOWN_VARIABLE\";\n ErrorCode2[ErrorCode2[\"EXPRESSION_TYPE_MISMATCH\"] = 7005] = \"EXPRESSION_TYPE_MISMATCH\";\n ErrorCode2[ErrorCode2[\"EXPRESSION_ACCESS_DENIED\"] = 7006] = \"EXPRESSION_ACCESS_DENIED\";\n ErrorCode2[ErrorCode2[\"SCHEMA_VERSION_MISMATCH\"] = 8001] = \"SCHEMA_VERSION_MISMATCH\";\n ErrorCode2[ErrorCode2[\"MIGRATION_FAILED\"] = 8002] = \"MIGRATION_FAILED\";\n ErrorCode2[ErrorCode2[\"MIGRATION_NOT_FOUND\"] = 8003] = \"MIGRATION_NOT_FOUND\";\n ErrorCode2[ErrorCode2[\"VERSION_INCOMPATIBLE\"] = 8004] = \"VERSION_INCOMPATIBLE\";\n return ErrorCode2;\n})(ErrorCode || {});\nvar ErrorCodeCategory = {\n GENERAL: [1e3, 1999],\n ACTION: [2e3, 2999],\n QUERY: [3e3, 3999],\n COMPONENT: [4e3, 4999],\n PAGE: [5e3, 5999],\n ACTIVITY: [6e3, 6999],\n EXPRESSION: [7e3, 7999],\n VERSION: [8e3, 8999]\n};\nvar ErrorMessages = {\n // 通用错误\n [1e3 /* UNKNOWN */]: \"\\u672A\\u77E5\\u9519\\u8BEF\",\n [1001 /* INVALID_REQUEST */]: \"\\u8BF7\\u6C42\\u53C2\\u6570\\u65E0\\u6548\",\n [1002 /* UNAUTHORIZED */]: \"\\u672A\\u6388\\u6743\\u8BBF\\u95EE\",\n [1003 /* FORBIDDEN */]: \"\\u7981\\u6B62\\u8BBF\\u95EE\",\n [1004 /* NOT_FOUND */]: \"\\u8D44\\u6E90\\u4E0D\\u5B58\\u5728\",\n [1005 /* RATE_LIMITED */]: \"\\u8BF7\\u6C42\\u9891\\u7387\\u8D85\\u9650\",\n [1006 /* VALIDATION_ERROR */]: \"\\u6570\\u636E\\u6821\\u9A8C\\u5931\\u8D25\",\n [1007 /* INTERNAL_ERROR */]: \"\\u670D\\u52A1\\u5185\\u90E8\\u9519\\u8BEF\",\n [1008 /* SERVICE_UNAVAILABLE */]: \"\\u670D\\u52A1\\u6682\\u4E0D\\u53EF\\u7528\",\n [1009 /* TIMEOUT */]: \"\\u8BF7\\u6C42\\u8D85\\u65F6\",\n // Action 错误\n [2001 /* ACTION_NOT_FOUND */]: \"\\u52A8\\u4F5C\\u4E0D\\u5B58\\u5728\",\n [2002 /* ACTION_INVALID_PARAMS */]: \"\\u52A8\\u4F5C\\u53C2\\u6570\\u65E0\\u6548\",\n [2003 /* ACTION_EXECUTION_FAILED */]: \"\\u52A8\\u4F5C\\u6267\\u884C\\u5931\\u8D25\",\n [2004 /* ACTION_IDEMPOTENCY_CONFLICT */]: \"\\u91CD\\u590D\\u8BF7\\u6C42\",\n [2005 /* ACTION_BLOCKED */]: \"\\u52A8\\u4F5C\\u5DF2\\u88AB\\u7981\\u7528\",\n [2006 /* ACTION_RISK_REJECTED */]: \"\\u98CE\\u63A7\\u62D2\\u7EDD\",\n [2007 /* ACTION_EXPIRED */]: \"\\u52A8\\u4F5C\\u5DF2\\u8FC7\\u671F\",\n [2008 /* ACTION_QUOTA_EXCEEDED */]: \"\\u914D\\u989D\\u5DF2\\u7528\\u5C3D\",\n // Data Query 错误\n [3001 /* QUERY_NOT_FOUND */]: \"\\u67E5\\u8BE2\\u4E0D\\u5B58\\u5728\",\n [3002 /* QUERY_INVALID_PARAMS */]: \"\\u67E5\\u8BE2\\u53C2\\u6570\\u65E0\\u6548\",\n [3003 /* QUERY_EXECUTION_FAILED */]: \"\\u67E5\\u8BE2\\u6267\\u884C\\u5931\\u8D25\",\n [3004 /* QUERY_FIELD_NOT_ALLOWED */]: \"\\u5B57\\u6BB5\\u8BBF\\u95EE\\u88AB\\u62D2\\u7EDD\",\n [3005 /* QUERY_TIMEOUT */]: \"\\u67E5\\u8BE2\\u8D85\\u65F6\",\n [3006 /* QUERY_DISABLED */]: \"\\u67E5\\u8BE2\\u5DF2\\u7981\\u7528\",\n // 组件错误\n [4001 /* COMPONENT_NOT_FOUND */]: \"\\u7EC4\\u4EF6\\u4E0D\\u5B58\\u5728\",\n [4002 /* COMPONENT_VERSION_NOT_FOUND */]: \"\\u7EC4\\u4EF6\\u7248\\u672C\\u4E0D\\u5B58\\u5728\",\n [4003 /* COMPONENT_BLOCKED */]: \"\\u7EC4\\u4EF6\\u5DF2\\u88AB\\u7981\\u7528\",\n [4004 /* COMPONENT_INTEGRITY_MISMATCH */]: \"\\u7EC4\\u4EF6\\u5B8C\\u6574\\u6027\\u6821\\u9A8C\\u5931\\u8D25\",\n [4005 /* COMPONENT_INCOMPATIBLE */]: \"\\u7EC4\\u4EF6\\u7248\\u672C\\u4E0D\\u517C\\u5BB9\",\n [4006 /* COMPONENT_LOAD_FAILED */]: \"\\u7EC4\\u4EF6\\u52A0\\u8F7D\\u5931\\u8D25\",\n [4007 /* COMPONENT_RENDER_ERROR */]: \"\\u7EC4\\u4EF6\\u6E32\\u67D3\\u9519\\u8BEF\",\n // 页面错误\n [5001 /* PAGE_NOT_FOUND */]: \"\\u9875\\u9762\\u4E0D\\u5B58\\u5728\",\n [5002 /* PAGE_VERSION_NOT_FOUND */]: \"\\u9875\\u9762\\u7248\\u672C\\u4E0D\\u5B58\\u5728\",\n [5003 /* PAGE_SCHEMA_INVALID */]: \"\\u9875\\u9762 Schema \\u65E0\\u6548\",\n [5004 /* PAGE_MANIFEST_INVALID */]: \"\\u9875\\u9762 Manifest \\u65E0\\u6548\",\n [5005 /* PAGE_PUBLISH_FAILED */]: \"\\u9875\\u9762\\u53D1\\u5E03\\u5931\\u8D25\",\n [5006 /* PAGE_ROLLBACK_FAILED */]: \"\\u9875\\u9762\\u56DE\\u6EDA\\u5931\\u8D25\",\n // 活动错误\n [6001 /* ACTIVITY_NOT_FOUND */]: \"\\u6D3B\\u52A8\\u4E0D\\u5B58\\u5728\",\n [6002 /* ACTIVITY_NOT_STARTED */]: \"\\u6D3B\\u52A8\\u672A\\u5F00\\u59CB\",\n [6003 /* ACTIVITY_ENDED */]: \"\\u6D3B\\u52A8\\u5DF2\\u7ED3\\u675F\",\n [6004 /* ACTIVITY_ALREADY_CLAIMED */]: \"\\u5DF2\\u9886\\u53D6\\u8FC7\",\n [6005 /* ACTIVITY_ALREADY_SIGNED */]: \"\\u4ECA\\u65E5\\u5DF2\\u7B7E\\u5230\",\n [6006 /* ACTIVITY_LIMIT_EXCEEDED */]: \"\\u8D85\\u51FA\\u9886\\u53D6\\u9650\\u5236\",\n [6007 /* ACTIVITY_DISABLED */]: \"\\u6D3B\\u52A8\\u5DF2\\u7981\\u7528\",\n // 表达式错误\n [7001 /* EXPRESSION_SYNTAX_ERROR */]: \"\\u8868\\u8FBE\\u5F0F\\u8BED\\u6CD5\\u9519\\u8BEF\",\n [7002 /* EXPRESSION_UNKNOWN_FUNCTION */]: \"\\u672A\\u77E5\\u51FD\\u6570\",\n [7003 /* EXPRESSION_INVALID_ARGUMENT */]: \"\\u65E0\\u6548\\u53C2\\u6570\",\n [7004 /* EXPRESSION_UNKNOWN_VARIABLE */]: \"\\u672A\\u77E5\\u53D8\\u91CF\",\n [7005 /* EXPRESSION_TYPE_MISMATCH */]: \"\\u7C7B\\u578B\\u4E0D\\u5339\\u914D\",\n [7006 /* EXPRESSION_ACCESS_DENIED */]: \"\\u8BBF\\u95EE\\u88AB\\u62D2\\u7EDD\",\n // 版本/迁移错误\n [8001 /* SCHEMA_VERSION_MISMATCH */]: \"Schema \\u7248\\u672C\\u4E0D\\u5339\\u914D\",\n [8002 /* MIGRATION_FAILED */]: \"\\u8FC1\\u79FB\\u5931\\u8D25\",\n [8003 /* MIGRATION_NOT_FOUND */]: \"\\u8FC1\\u79FB\\u811A\\u672C\\u4E0D\\u5B58\\u5728\",\n [8004 /* VERSION_INCOMPATIBLE */]: \"\\u7248\\u672C\\u4E0D\\u517C\\u5BB9\"\n};\nfunction createDjvlcError(code, details, traceId) {\n return {\n code,\n message: ErrorMessages[code] || \"\\u672A\\u77E5\\u9519\\u8BEF\",\n details,\n traceId,\n timestamp: Date.now()\n };\n}\nfunction getHttpStatusFromErrorCode(code) {\n if (code === 1002 /* UNAUTHORIZED */) return 401;\n if (code === 1003 /* FORBIDDEN */) return 403;\n if (code === 1004 /* NOT_FOUND */) return 404;\n if (code === 1005 /* RATE_LIMITED */) return 429;\n if (code === 1009 /* TIMEOUT */) return 408;\n if (code === 1008 /* SERVICE_UNAVAILABLE */) return 503;\n const numericCode = Number(code);\n if (numericCode >= 1e3 && numericCode < 2e3) return 400;\n if (numericCode >= 2e3 && numericCode < 3e3) return 400;\n if (numericCode >= 3e3 && numericCode < 4e3) return 400;\n if (numericCode >= 4e3 && numericCode < 5e3) return 404;\n if (numericCode >= 5e3 && numericCode < 6e3) return 404;\n if (numericCode >= 6e3 && numericCode < 7e3) return 400;\n if (numericCode >= 7e3 && numericCode < 8e3) return 400;\n if (numericCode >= 8e3 && numericCode < 9e3) return 400;\n return 500;\n}\nfunction isRetryableError(code) {\n return [\n 1009 /* TIMEOUT */,\n 1008 /* SERVICE_UNAVAILABLE */,\n 3005 /* QUERY_TIMEOUT */,\n 4006 /* COMPONENT_LOAD_FAILED */\n ].includes(code);\n}\n\n// src/page/index.ts\nvar PublishStatus = /* @__PURE__ */ ((PublishStatus2) => {\n PublishStatus2[\"PENDING\"] = \"pending\";\n PublishStatus2[\"PUBLISHING\"] = \"publishing\";\n PublishStatus2[\"SUCCESS\"] = \"success\";\n PublishStatus2[\"FAILED\"] = \"failed\";\n PublishStatus2[\"ROLLBACK\"] = \"rollback\";\n return PublishStatus2;\n})(PublishStatus || {});\n\n// src/component/index.ts\nvar COMPONENT_CATEGORIES = [\n \"basic\",\n \"form\",\n \"layout\",\n \"navigation\",\n \"feedback\",\n \"display\",\n \"data\",\n \"business\",\n \"chart\",\n \"other\"\n];\n\n// src/expression/index.ts\nvar BUILTIN_FUNCTIONS = [\n // 字符串函数\n {\n name: \"len\",\n description: \"\\u83B7\\u53D6\\u5B57\\u7B26\\u4E32\\u6216\\u6570\\u7EC4\\u957F\\u5EA6\",\n params: [{ name: \"value\", type: \"any\", required: true }],\n returnType: \"number\",\n examples: ['len(\"hello\")', \"len([1,2,3])\"]\n },\n {\n name: \"trim\",\n description: \"\\u53BB\\u9664\\u5B57\\u7B26\\u4E32\\u9996\\u5C3E\\u7A7A\\u683C\",\n params: [{ name: \"str\", type: \"string\", required: true }],\n returnType: \"string\",\n examples: ['trim(\" hello \")']\n },\n {\n name: \"upper\",\n description: \"\\u8F6C\\u4E3A\\u5927\\u5199\",\n params: [{ name: \"str\", type: \"string\", required: true }],\n returnType: \"string\",\n examples: ['upper(\"hello\")']\n },\n {\n name: \"lower\",\n description: \"\\u8F6C\\u4E3A\\u5C0F\\u5199\",\n params: [{ name: \"str\", type: \"string\", required: true }],\n returnType: \"string\",\n examples: ['lower(\"HELLO\")']\n },\n {\n name: \"substr\",\n description: \"\\u622A\\u53D6\\u5B50\\u5B57\\u7B26\\u4E32\",\n params: [\n { name: \"str\", type: \"string\", required: true },\n { name: \"start\", type: \"number\", required: true },\n { name: \"length\", type: \"number\", required: false }\n ],\n returnType: \"string\",\n examples: ['substr(\"hello\", 0, 2)']\n },\n {\n name: \"concat\",\n description: \"\\u8FDE\\u63A5\\u5B57\\u7B26\\u4E32\",\n params: [\n { name: \"values\", type: \"any\", required: true, description: \"\\u53EF\\u53D8\\u53C2\\u6570\" }\n ],\n returnType: \"string\",\n examples: ['concat(\"a\", \"b\", \"c\")']\n },\n {\n name: \"replace\",\n description: \"\\u66FF\\u6362\\u5B57\\u7B26\\u4E32\",\n params: [\n { name: \"str\", type: \"string\", required: true },\n { name: \"search\", type: \"string\", required: true },\n { name: \"replacement\", type: \"string\", required: true }\n ],\n returnType: \"string\",\n examples: ['replace(\"hello\", \"l\", \"x\")']\n },\n {\n name: \"split\",\n description: \"\\u5206\\u5272\\u5B57\\u7B26\\u4E32\",\n params: [\n { name: \"str\", type: \"string\", required: true },\n { name: \"separator\", type: \"string\", required: true }\n ],\n returnType: \"array\",\n examples: ['split(\"a,b,c\", \",\")']\n },\n {\n name: \"join\",\n description: \"\\u8FDE\\u63A5\\u6570\\u7EC4\\u4E3A\\u5B57\\u7B26\\u4E32\",\n params: [\n { name: \"arr\", type: \"array\", required: true },\n { name: \"separator\", type: \"string\", required: false, defaultValue: \",\" }\n ],\n returnType: \"string\",\n examples: ['join([\"a\",\"b\",\"c\"], \"-\")']\n },\n // 数字函数\n {\n name: \"toNumber\",\n description: \"\\u8F6C\\u4E3A\\u6570\\u5B57\",\n params: [{ name: \"value\", type: \"any\", required: true }],\n returnType: \"number\",\n examples: ['toNumber(\"123\")']\n },\n {\n name: \"toString\",\n description: \"\\u8F6C\\u4E3A\\u5B57\\u7B26\\u4E32\",\n params: [{ name: \"value\", type: \"any\", required: true }],\n returnType: \"string\",\n examples: [\"toString(123)\"]\n },\n {\n name: \"round\",\n description: \"\\u56DB\\u820D\\u4E94\\u5165\",\n params: [\n { name: \"value\", type: \"number\", required: true },\n { name: \"decimals\", type: \"number\", required: false, defaultValue: 0 }\n ],\n returnType: \"number\",\n examples: [\"round(3.14159, 2)\"]\n },\n {\n name: \"floor\",\n description: \"\\u5411\\u4E0B\\u53D6\\u6574\",\n params: [{ name: \"value\", type: \"number\", required: true }],\n returnType: \"number\",\n examples: [\"floor(3.7)\"]\n },\n {\n name: \"ceil\",\n description: \"\\u5411\\u4E0A\\u53D6\\u6574\",\n params: [{ name: \"value\", type: \"number\", required: true }],\n returnType: \"number\",\n examples: [\"ceil(3.2)\"]\n },\n {\n name: \"abs\",\n description: \"\\u7EDD\\u5BF9\\u503C\",\n params: [{ name: \"value\", type: \"number\", required: true }],\n returnType: \"number\",\n examples: [\"abs(-5)\"]\n },\n {\n name: \"min\",\n description: \"\\u6700\\u5C0F\\u503C\",\n params: [\n { name: \"values\", type: \"number\", required: true, description: \"\\u53EF\\u53D8\\u53C2\\u6570\" }\n ],\n returnType: \"number\",\n examples: [\"min(1, 2, 3)\"]\n },\n {\n name: \"max\",\n description: \"\\u6700\\u5927\\u503C\",\n params: [\n { name: \"values\", type: \"number\", required: true, description: \"\\u53EF\\u53D8\\u53C2\\u6570\" }\n ],\n returnType: \"number\",\n examples: [\"max(1, 2, 3)\"]\n },\n // 日期函数\n {\n name: \"now\",\n description: \"\\u5F53\\u524D\\u65F6\\u95F4\\u6233\\uFF08\\u6BEB\\u79D2\\uFF09\",\n params: [],\n returnType: \"number\",\n examples: [\"now()\"]\n },\n {\n name: \"dateFormat\",\n description: \"\\u683C\\u5F0F\\u5316\\u65E5\\u671F\",\n params: [\n { name: \"timestamp\", type: \"number\", required: true },\n { name: \"format\", type: \"string\", required: false, defaultValue: \"YYYY-MM-DD\" }\n ],\n returnType: \"string\",\n examples: ['dateFormat(now(), \"YYYY-MM-DD HH:mm:ss\")']\n },\n {\n name: \"dateParse\",\n description: \"\\u89E3\\u6790\\u65E5\\u671F\\u5B57\\u7B26\\u4E32\",\n params: [\n { name: \"dateStr\", type: \"string\", required: true },\n { name: \"format\", type: \"string\", required: false }\n ],\n returnType: \"number\",\n examples: ['dateParse(\"2024-01-01\")']\n },\n // 数组函数\n {\n name: \"first\",\n description: \"\\u83B7\\u53D6\\u6570\\u7EC4\\u7B2C\\u4E00\\u4E2A\\u5143\\u7D20\",\n params: [{ name: \"arr\", type: \"array\", required: true }],\n returnType: \"any\",\n examples: [\"first([1,2,3])\"]\n },\n {\n name: \"last\",\n description: \"\\u83B7\\u53D6\\u6570\\u7EC4\\u6700\\u540E\\u4E00\\u4E2A\\u5143\\u7D20\",\n params: [{ name: \"arr\", type: \"array\", required: true }],\n returnType: \"any\",\n examples: [\"last([1,2,3])\"]\n },\n {\n name: \"includes\",\n description: \"\\u68C0\\u67E5\\u6570\\u7EC4\\u662F\\u5426\\u5305\\u542B\\u5143\\u7D20\",\n params: [\n { name: \"arr\", type: \"array\", required: true },\n { name: \"value\", type: \"any\", required: true }\n ],\n returnType: \"boolean\",\n examples: [\"includes([1,2,3], 2)\"]\n },\n {\n name: \"slice\",\n description: \"\\u622A\\u53D6\\u6570\\u7EC4\",\n params: [\n { name: \"arr\", type: \"array\", required: true },\n { name: \"start\", type: \"number\", required: true },\n { name: \"end\", type: \"number\", required: false }\n ],\n returnType: \"array\",\n examples: [\"slice([1,2,3,4], 1, 3)\"]\n },\n // 条件函数\n {\n name: \"default\",\n description: \"\\u63D0\\u4F9B\\u9ED8\\u8BA4\\u503C\",\n params: [\n { name: \"value\", type: \"any\", required: true },\n { name: \"defaultValue\", type: \"any\", required: true }\n ],\n returnType: \"any\",\n examples: ['default(null, \"fallback\")']\n },\n {\n name: \"ifElse\",\n description: \"\\u6761\\u4EF6\\u5224\\u65AD\",\n params: [\n { name: \"condition\", type: \"boolean\", required: true },\n { name: \"trueValue\", type: \"any\", required: true },\n { name: \"falseValue\", type: \"any\", required: true }\n ],\n returnType: \"any\",\n examples: ['ifElse(age > 18, \"\\u6210\\u5E74\", \"\\u672A\\u6210\\u5E74\")']\n },\n {\n name: \"isEmpty\",\n description: \"\\u68C0\\u67E5\\u662F\\u5426\\u4E3A\\u7A7A\",\n params: [{ name: \"value\", type: \"any\", required: true }],\n returnType: \"boolean\",\n examples: ['isEmpty(\"\")', \"isEmpty([])\"]\n },\n {\n name: \"isNull\",\n description: \"\\u68C0\\u67E5\\u662F\\u5426\\u4E3A null \\u6216 undefined\",\n params: [{ name: \"value\", type: \"any\", required: true }],\n returnType: \"boolean\",\n examples: [\"isNull(null)\"]\n },\n // JSON 函数\n {\n name: \"jsonParse\",\n description: \"\\u89E3\\u6790 JSON \\u5B57\\u7B26\\u4E32\",\n params: [{ name: \"str\", type: \"string\", required: true }],\n returnType: \"any\",\n examples: [`jsonParse('{\"a\":1}')`]\n },\n {\n name: \"jsonStringify\",\n description: \"\\u5E8F\\u5217\\u5316\\u4E3A JSON\",\n params: [{ name: \"value\", type: \"any\", required: true }],\n returnType: \"string\",\n examples: [\"jsonStringify({a:1})\"]\n }\n];\nvar BUILTIN_FUNCTION_NAMES = new Set(BUILTIN_FUNCTIONS.map((f) => f.name));\nvar ALLOWED_ROOT_VARIABLES = [\n \"state\",\n \"query\",\n \"context\",\n \"event\",\n \"item\",\n \"index\"\n];\nfunction isExpressionBinding(value) {\n return value !== null && typeof value === \"object\" && value.__isExpression === true && typeof value.expression === \"string\";\n}\nfunction createExpressionBinding(expression, fallback) {\n return {\n __isExpression: true,\n expression,\n fallback\n };\n}\n\n// src/migrations/index.ts\nvar SCHEMA_VERSIONS = [\"1.0.0\", \"1.1.0\", \"2.0.0\"];\nvar CURRENT_SCHEMA_VERSION = \"1.0.0\";\nvar migrations = [];\nfunction registerMigration(migration) {\n const exists = migrations.some(\n (m) => m.from === migration.from && m.to === migration.to\n );\n if (exists) {\n throw new Error(`Migration from ${migration.from} to ${migration.to} already exists`);\n }\n migrations.push(migration);\n}\nfunction getAllMigrations() {\n return [...migrations];\n}\nfunction findMigrationPath(from, to) {\n const path = [];\n let current = from;\n while (current !== to) {\n const nextMigration = migrations.find((m) => m.from === current);\n if (!nextMigration) {\n throw new Error(`No migration path from ${current} to ${to}`);\n }\n path.push(nextMigration);\n current = nextMigration.to;\n if (path.length > 100) {\n throw new Error(\"Migration path too long, possible circular dependency\");\n }\n }\n return path;\n}\nfunction migratePageSchema(data, targetVersion) {\n const fromVersion = data.schemaVersion || \"1.0.0\";\n const toVersion = targetVersion || CURRENT_SCHEMA_VERSION;\n if (fromVersion === toVersion) {\n return {\n success: true,\n data,\n fromVersion,\n toVersion,\n appliedMigrations: []\n };\n }\n try {\n const path = findMigrationPath(fromVersion, toVersion);\n let result = { ...data };\n const appliedMigrations = [];\n for (const migration of path) {\n result = migration.migrate(result);\n result.schemaVersion = migration.to;\n appliedMigrations.push(`${migration.from} -> ${migration.to}`);\n }\n return {\n success: true,\n data: result,\n fromVersion,\n toVersion,\n appliedMigrations\n };\n } catch (error) {\n return {\n success: false,\n fromVersion,\n toVersion,\n appliedMigrations: [],\n error: error instanceof Error ? error.message : \"Unknown error\"\n };\n }\n}\nfunction needsMigration(data, targetVersion) {\n const currentVersion = data.schemaVersion || \"1.0.0\";\n const target = targetVersion || CURRENT_SCHEMA_VERSION;\n return currentVersion !== target;\n}\nfunction getVersionInfo(version) {\n const [major, minor, patch] = version.split(\".\").map(Number);\n return { major, minor, patch };\n}\nfunction compareVersions(a, b) {\n const va = getVersionInfo(a);\n const vb = getVersionInfo(b);\n if (va.major !== vb.major) return va.major < vb.major ? -1 : 1;\n if (va.minor !== vb.minor) return va.minor < vb.minor ? -1 : 1;\n if (va.patch !== vb.patch) return va.patch < vb.patch ? -1 : 1;\n return 0;\n}\nregisterMigration({\n from: \"1.0.0\",\n to: \"1.1.0\",\n description: \"\\u6DFB\\u52A0 Definition \\u7248\\u672C\\u7ED1\\u5B9A\\u5B57\\u6BB5\",\n migrate: (data) => {\n return {\n ...data,\n actionDefVersionIds: data.actionDefVersionIds || [],\n dataQueryVersionIds: data.dataQueryVersionIds || []\n };\n }\n});\nregisterMigration({\n from: \"1.1.0\",\n to: \"2.0.0\",\n description: \"\\u91CD\\u6784\\u7EC4\\u4EF6\\u4E8B\\u4EF6\\u7ED3\\u6784\",\n breaking: true,\n migrate: (data) => {\n return {\n ...data,\n components: data.components.map((component) => ({\n ...component,\n // 示例:将 events 数组中的 actions 结构标准化\n events: component.events?.map((event) => ({\n ...event,\n // 确保 enabled 字段存在\n enabled: event.enabled ?? true\n }))\n }))\n };\n }\n});\nexport {\n ACTION_SPEC_VERSION,\n ALLOWED_ROOT_VARIABLES,\n BUILTIN_FUNCTIONS,\n BUILTIN_FUNCTION_NAMES,\n COMPONENT_CATEGORIES,\n COMPONENT_META_SCHEMA_VERSION,\n CURRENT_SCHEMA_VERSION,\n DATA_QUERY_SPEC_VERSION,\n ErrorCode,\n ErrorCodeCategory,\n ErrorMessages,\n PAGE_SCHEMA_VERSION,\n PublishStatus,\n SCHEMA_VERSIONS,\n compareVersions,\n createDjvlcError,\n createExpressionBinding,\n findMigrationPath,\n getAllMigrations,\n getContractsVersion,\n getHttpStatusFromErrorCode,\n getVersionInfo,\n isExpressionBinding,\n isRetryableError,\n isVersionCompatible,\n migratePageSchema,\n needsMigration,\n registerMigration\n};\n//# sourceMappingURL=index.mjs.map","// src/types/errors.ts\nimport { ErrorCode, ErrorMessages } from \"@djvlc/contracts-types\";\nvar DjvlcRuntimeError = class extends Error {\n constructor(code, message, details, traceId) {\n super(message || ErrorMessages[code] || \"Unknown error\");\n this.name = \"DjvlcRuntimeError\";\n this.code = code;\n this.details = details;\n this.traceId = traceId;\n this.timestamp = Date.now();\n }\n toJSON() {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n details: this.details,\n traceId: this.traceId,\n timestamp: this.timestamp\n };\n }\n};\nvar PageLoadError = class extends DjvlcRuntimeError {\n constructor(message, details, traceId) {\n super(ErrorCode.PAGE_NOT_FOUND, message, details, traceId);\n this.name = \"PageLoadError\";\n }\n};\nvar ComponentLoadError = class extends DjvlcRuntimeError {\n constructor(componentName, componentVersion, message, code = ErrorCode.COMPONENT_NOT_FOUND, details) {\n super(code, message, { ...details, componentName, componentVersion });\n this.name = \"ComponentLoadError\";\n this.componentName = componentName;\n this.componentVersion = componentVersion;\n }\n};\nvar IntegrityError = class extends DjvlcRuntimeError {\n constructor(componentName, componentVersion, expectedHash, actualHash) {\n super(\n ErrorCode.COMPONENT_INTEGRITY_MISMATCH,\n `Integrity check failed for ${componentName}@${componentVersion}`,\n { expectedHash, actualHash }\n );\n this.name = \"IntegrityError\";\n this.componentName = componentName;\n this.componentVersion = componentVersion;\n this.expectedHash = expectedHash;\n this.actualHash = actualHash;\n }\n};\nvar ComponentBlockedError = class extends DjvlcRuntimeError {\n constructor(componentName, componentVersion, reason) {\n super(ErrorCode.COMPONENT_BLOCKED, `Component ${componentName}@${componentVersion} is blocked`, {\n componentName,\n componentVersion,\n reason\n });\n this.name = \"ComponentBlockedError\";\n this.componentName = componentName;\n this.componentVersion = componentVersion;\n this.reason = reason;\n }\n};\nvar ExpressionError = class extends DjvlcRuntimeError {\n constructor(expression, message, position, details) {\n super(ErrorCode.UNKNOWN, message, { ...details, expression, position });\n this.name = \"ExpressionError\";\n this.expression = expression;\n this.position = position;\n }\n};\nvar ActionError = class extends DjvlcRuntimeError {\n constructor(actionType, message, code = ErrorCode.ACTION_EXECUTION_FAILED, actionId, details) {\n super(code, message, { ...details, actionType, actionId });\n this.name = \"ActionError\";\n this.actionType = actionType;\n this.actionId = actionId;\n }\n};\nvar QueryError = class extends DjvlcRuntimeError {\n constructor(queryId, message, code = ErrorCode.QUERY_EXECUTION_FAILED, details) {\n super(code, message, { ...details, queryId });\n this.name = \"QueryError\";\n this.queryId = queryId;\n }\n};\nvar RenderError = class extends DjvlcRuntimeError {\n constructor(componentId, componentType, message, details) {\n super(ErrorCode.UNKNOWN, message, { ...details, componentId, componentType });\n this.name = \"RenderError\";\n this.componentId = componentId;\n this.componentType = componentType;\n }\n};\n\n// src/loader/page-loader.ts\nvar PageLoader = class {\n constructor(options) {\n this.cache = /* @__PURE__ */ new Map();\n this.options = {\n channel: \"prod\",\n cache: { enabled: true, maxAge: 300 },\n ...options\n };\n }\n /**\n * 解析页面\n * @param pageUid 页面 UID\n * @param params 额外参数\n */\n async resolve(pageUid, params) {\n const cacheKey = this.getCacheKey(pageUid, params);\n if (this.options.cache?.enabled) {\n const cached = this.cache.get(cacheKey);\n if (cached && this.isCacheValid(cached.timestamp)) {\n this.log(\"debug\", `Page ${pageUid} loaded from cache`);\n return cached.data;\n }\n }\n const startTime = performance.now();\n try {\n const url = this.buildResolveUrl(pageUid, params);\n const response = await fetch(url, {\n method: \"GET\",\n headers: this.buildHeaders()\n });\n if (!response.ok) {\n throw new PageLoadError(\n `Failed to resolve page: ${response.status} ${response.statusText}`,\n { pageUid, status: response.status }\n );\n }\n const result = await response.json();\n if (!this.isValidPageResolveResult(result)) {\n throw new PageLoadError(\"Invalid page resolve response\", { pageUid });\n }\n const data = result.data;\n if (this.options.cache?.enabled) {\n this.cache.set(cacheKey, { data, timestamp: Date.now() });\n }\n const loadTime = performance.now() - startTime;\n this.log(\"info\", `Page ${pageUid} resolved in ${loadTime.toFixed(2)}ms`);\n return data;\n } catch (error) {\n if (error instanceof PageLoadError) {\n throw error;\n }\n throw new PageLoadError(\n `Failed to resolve page: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n { pageUid }\n );\n }\n }\n /**\n * 预连接 API 服务器\n */\n preconnect() {\n const link = document.createElement(\"link\");\n link.rel = \"preconnect\";\n link.href = this.options.apiBaseUrl;\n document.head.appendChild(link);\n }\n /**\n * 清除缓存\n */\n clearCache(pageUid) {\n if (pageUid) {\n for (const key of this.cache.keys()) {\n if (key.startsWith(pageUid)) {\n this.cache.delete(key);\n }\n }\n } else {\n this.cache.clear();\n }\n }\n buildResolveUrl(pageUid, params) {\n const url = new URL(`${this.options.apiBaseUrl}/page/resolve`);\n url.searchParams.set(\"pageUid\", pageUid);\n if (this.options.channel) {\n url.searchParams.set(\"channel\", this.options.channel);\n }\n if (this.options.previewToken) {\n url.searchParams.set(\"previewToken\", this.options.previewToken);\n }\n if (params?.uid) {\n url.searchParams.set(\"uid\", params.uid);\n }\n if (params?.deviceId) {\n url.searchParams.set(\"deviceId\", params.deviceId);\n }\n return url.toString();\n }\n buildHeaders() {\n const headers = {\n \"Content-Type\": \"application/json\",\n ...this.options.headers\n };\n if (this.options.authToken) {\n headers[\"Authorization\"] = `Bearer ${this.options.authToken}`;\n }\n return headers;\n }\n getCacheKey(pageUid, params) {\n const parts = [pageUid, this.options.channel];\n if (params?.uid) parts.push(params.uid);\n if (params?.deviceId) parts.push(params.deviceId);\n return parts.join(\":\");\n }\n isCacheValid(timestamp) {\n const maxAge = (this.options.cache?.maxAge ?? 300) * 1e3;\n return Date.now() - timestamp < maxAge;\n }\n isValidPageResolveResult(result) {\n if (!result || typeof result !== \"object\") return false;\n const r = result;\n if (!r.data || typeof r.data !== \"object\") return false;\n const data = r.data;\n return typeof data.pageUid === \"string\" && typeof data.pageVersionId === \"string\" && data.pageJson !== void 0 && data.manifest !== void 0;\n }\n log(level, message) {\n if (this.options.logger) {\n this.options.logger[level](message);\n }\n }\n};\n\n// src/loader/component-loader.ts\nvar ComponentLoader = class {\n constructor(options) {\n this.loadedComponents = /* @__PURE__ */ new Map();\n this.loadingPromises = /* @__PURE__ */ new Map();\n this.options = {\n enableSRI: true,\n concurrency: 4,\n timeout: 3e4,\n blockedComponents: [],\n ...options\n };\n this.blockedSet = new Set(this.options.blockedComponents);\n }\n /**\n * 加载单个组件\n */\n async load(item) {\n const key = this.getComponentKey(item.name, item.version);\n if (this.isBlocked(item.name, item.version)) {\n throw new ComponentBlockedError(item.name, item.version, \"Component is blocked\");\n }\n const loaded = this.loadedComponents.get(key);\n if (loaded) {\n return loaded;\n }\n const loading = this.loadingPromises.get(key);\n if (loading) {\n return loading;\n }\n const loadPromise = this.loadComponent(item);\n this.loadingPromises.set(key, loadPromise);\n try {\n const component = await loadPromise;\n this.loadedComponents.set(key, component);\n return component;\n } finally {\n this.loadingPromises.delete(key);\n }\n }\n /**\n * 加载 Manifest 中的所有组件\n */\n async loadAll(manifest) {\n const results = /* @__PURE__ */ new Map();\n const { concurrency = 4 } = this.options;\n const components = manifest.components;\n for (let i = 0; i < components.length; i += concurrency) {\n const batch = components.slice(i, i + concurrency);\n const batchPromises = batch.map(async (item) => {\n const key = this.getComponentKey(item.name, item.version);\n const startTime = performance.now();\n try {\n const loaded = await this.load(item);\n results.set(key, {\n name: item.name,\n version: item.version,\n status: \"loaded\",\n component: loaded.Component,\n loadTime: performance.now() - startTime\n });\n } catch (error) {\n const status = error instanceof ComponentBlockedError ? \"blocked\" : \"failed\";\n results.set(key, {\n name: item.name,\n version: item.version,\n status,\n error: error instanceof Error ? error.message : \"Unknown error\",\n loadTime: performance.now() - startTime\n });\n if (item.critical) {\n throw error;\n }\n }\n });\n await Promise.all(batchPromises);\n }\n return results;\n }\n /**\n * 预加载组件\n */\n preload(items) {\n items.forEach((item) => {\n const link = document.createElement(\"link\");\n link.rel = \"preload\";\n link.as = \"script\";\n link.href = this.resolveUrl(item.entryUrl);\n if (this.options.enableSRI && item.integrity) {\n link.integrity = item.integrity;\n link.crossOrigin = \"anonymous\";\n }\n document.head.appendChild(link);\n });\n }\n /**\n * 检查组件是否已加载\n */\n isLoaded(name, version) {\n return this.loadedComponents.has(this.getComponentKey(name, version));\n }\n /**\n * 获取已加载的组件\n */\n get(name, version) {\n return this.loadedComponents.get(this.getComponentKey(name, version));\n }\n /**\n * 检查组件是否被阻断\n */\n isBlocked(name, version) {\n return this.blockedSet.has(`${name}@${version}`) || this.blockedSet.has(name);\n }\n /**\n * 更新阻断列表\n */\n updateBlockedList(blocked) {\n this.blockedSet = new Set(blocked);\n }\n async loadComponent(item) {\n const startTime = performance.now();\n const url = this.resolveUrl(item.entryUrl);\n this.log(\"debug\", `Loading component ${item.name}@${item.version}`);\n try {\n const response = await this.fetchWithTimeout(url);\n if (!response.ok) {\n throw new ComponentLoadError(\n item.name,\n item.version,\n `Failed to fetch component: ${response.status} ${response.statusText}`\n );\n }\n const content = await response.text();\n if (this.options.enableSRI && item.integrity) {\n await this.validateIntegrity(item, content);\n }\n const Component = await this.executeScript(content, item);\n const loadTime = performance.now() - startTime;\n this.log(\"info\", `Component ${item.name}@${item.version} loaded in ${loadTime.toFixed(2)}ms`);\n return {\n name: item.name,\n version: item.version,\n Component,\n loadTime\n };\n } catch (error) {\n if (error instanceof ComponentLoadError || error instanceof IntegrityError || error instanceof ComponentBlockedError) {\n throw error;\n }\n throw new ComponentLoadError(\n item.name,\n item.version,\n `Failed to load component: ${error instanceof Error ? error.message : \"Unknown error\"}`\n );\n }\n }\n async fetchWithTimeout(url) {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), this.options.timeout);\n try {\n return await fetch(url, {\n signal: controller.signal,\n credentials: \"omit\"\n });\n } finally {\n clearTimeout(timeout);\n }\n }\n async validateIntegrity(item, content) {\n if (!item.integrity) return;\n const [algorithm, expectedHash] = item.integrity.split(\"-\");\n if (!algorithm || !expectedHash) {\n throw new IntegrityError(item.name, item.version, item.integrity, \"Invalid format\");\n }\n const hashBuffer = await crypto.subtle.digest(\n algorithm.toUpperCase(),\n new TextEncoder().encode(content)\n );\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const actualHash = btoa(String.fromCharCode(...hashArray));\n if (actualHash !== expectedHash) {\n throw new IntegrityError(item.name, item.version, expectedHash, actualHash);\n }\n }\n async executeScript(content, item) {\n const blob = new Blob([content], { type: \"application/javascript\" });\n const blobUrl = URL.createObjectURL(blob);\n try {\n const module = await import(\n /* @vite-ignore */\n blobUrl\n );\n const Component = module.default || module[item.name] || module.Component;\n if (!Component) {\n throw new ComponentLoadError(\n item.name,\n item.version,\n \"Component module does not export a valid component\"\n );\n }\n return Component;\n } finally {\n URL.revokeObjectURL(blobUrl);\n }\n }\n resolveUrl(entryUrl) {\n if (entryUrl.startsWith(\"http://\") || entryUrl.startsWith(\"https://\")) {\n return entryUrl;\n }\n return `${this.options.cdnBaseUrl}/${entryUrl.replace(/^\\//, \"\")}`;\n }\n getComponentKey(name, version) {\n return `${name}@${version}`;\n }\n log(level, message) {\n if (this.options.logger) {\n this.options.logger[level](message);\n }\n }\n};\n\n// src/loader/asset-loader.ts\nvar AssetLoader = class {\n constructor(options) {\n this.preconnectedHosts = /* @__PURE__ */ new Set();\n this.preloadedAssets = /* @__PURE__ */ new Set();\n this.options = options;\n }\n /**\n * 预连接所有域名\n */\n preconnectAll() {\n const allHosts = [...this.options.cdnHosts, ...this.options.apiHosts];\n allHosts.forEach((host) => this.preconnect(host));\n }\n /**\n * 预连接单个域名\n */\n preconnect(host) {\n if (this.preconnectedHosts.has(host)) return;\n const link = document.createElement(\"link\");\n link.rel = \"preconnect\";\n link.href = host.startsWith(\"http\") ? host : `https://${host}`;\n link.crossOrigin = \"anonymous\";\n document.head.appendChild(link);\n this.preconnectedHosts.add(host);\n }\n /**\n * DNS 预解析\n */\n dnsPrefetch(host) {\n const link = document.createElement(\"link\");\n link.rel = \"dns-prefetch\";\n link.href = host.startsWith(\"http\") ? host : `https://${host}`;\n document.head.appendChild(link);\n }\n /**\n * 预加载脚本\n */\n preloadScript(url, integrity) {\n if (this.preloadedAssets.has(url)) return;\n const link = document.createElement(\"link\");\n link.rel = \"preload\";\n link.as = \"script\";\n link.href = url;\n if (integrity) {\n link.integrity = integrity;\n link.crossOrigin = \"anonymous\";\n }\n document.head.appendChild(link);\n this.preloadedAssets.add(url);\n }\n /**\n * 预加载样式\n */\n preloadStyle(url, integrity) {\n if (this.preloadedAssets.has(url)) return;\n const link = document.createElement(\"link\");\n link.rel = \"preload\";\n link.as = \"style\";\n link.href = url;\n if (integrity) {\n link.integrity = integrity;\n link.crossOrigin = \"anonymous\";\n }\n document.head.appendChild(link);\n this.preloadedAssets.add(url);\n }\n /**\n * 预加载图片\n */\n preloadImage(url) {\n if (this.preloadedAssets.has(url)) return;\n const link = document.createElement(\"link\");\n link.rel = \"preload\";\n link.as = \"image\";\n link.href = url;\n document.head.appendChild(link);\n this.preloadedAssets.add(url);\n }\n /**\n * 预获取资源(低优先级)\n */\n prefetch(url, as) {\n const link = document.createElement(\"link\");\n link.rel = \"prefetch\";\n link.href = url;\n if (as) link.as = as;\n document.head.appendChild(link);\n }\n /**\n * 加载样式表\n */\n loadStylesheet(url, integrity) {\n return new Promise((resolve, reject) => {\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = url;\n if (integrity) {\n link.integrity = integrity;\n link.crossOrigin = \"anonymous\";\n }\n link.onload = () => resolve();\n link.onerror = () => reject(new Error(`Failed to load stylesheet: ${url}`));\n document.head.appendChild(link);\n });\n }\n /**\n * 加载脚本\n */\n loadScript(url, integrity) {\n return new Promise((resolve, reject) => {\n const script = document.createElement(\"script\");\n script.src = url;\n script.async = true;\n if (integrity) {\n script.integrity = integrity;\n script.crossOrigin = \"anonymous\";\n }\n script.onload = () => resolve();\n script.onerror = () => reject(new Error(`Failed to load script: ${url}`));\n document.body.appendChild(script);\n });\n }\n};\n\n// src/state/state-manager.ts\nvar StateManager = class {\n constructor() {\n this.listeners = /* @__PURE__ */ new Set();\n this.state = this.createInitialState();\n }\n /**\n * 获取当前状态\n */\n getState() {\n return this.state;\n }\n /**\n * 获取当前阶段\n */\n getPhase() {\n return this.state.phase;\n }\n /**\n * 设置阶段\n */\n setPhase(phase) {\n this.setState({ phase });\n }\n /**\n * 设置页面数据\n */\n setPage(page) {\n this.setState({\n page,\n variables: page.pageJson.page.variables || {}\n });\n }\n /**\n * 设置错误\n */\n setError(error) {\n this.setState({\n phase: \"error\",\n error\n });\n }\n /**\n * 获取变量值\n */\n getVariable(key) {\n return this.state.variables[key];\n }\n /**\n * 设置变量值\n */\n setVariable(key, value) {\n this.setState({\n variables: {\n ...this.state.variables,\n [key]: value\n }\n });\n }\n /**\n * 批量设置变量\n */\n setVariables(variables) {\n this.setState({\n variables: {\n ...this.state.variables,\n ...variables\n }\n });\n }\n /**\n * 获取查询结果\n */\n getQuery(queryId) {\n return this.state.queries[queryId];\n }\n /**\n * 设置查询结果\n */\n setQuery(queryId, data) {\n this.setState({\n queries: {\n ...this.state.queries,\n [queryId]: data\n }\n });\n }\n /**\n * 更新组件加载状态\n */\n setComponentStatus(key, result) {\n const components = new Map(this.state.components);\n components.set(key, result);\n this.setState({ components });\n }\n /**\n * 标记为已销毁\n */\n setDestroyed() {\n this.setState({ destroyed: true });\n }\n /**\n * 订阅状态变更\n */\n subscribe(listener) {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n /**\n * 重置状态\n */\n reset() {\n this.state = this.createInitialState();\n this.notifyListeners();\n }\n setState(partial) {\n this.state = { ...this.state, ...partial };\n this.notifyListeners();\n }\n notifyListeners() {\n this.listeners.forEach((listener) => {\n try {\n listener(this.state);\n } catch (error) {\n console.error(\"State listener error:\", error);\n }\n });\n }\n createInitialState() {\n return {\n phase: \"idle\",\n page: null,\n variables: {},\n queries: {},\n components: /* @__PURE__ */ new Map(),\n error: null,\n destroyed: false\n };\n }\n};\n\n// src/events/event-bus.ts\nvar EventBus = class {\n constructor(options = {}) {\n this.handlers = /* @__PURE__ */ new Map();\n this.options = {\n debug: false,\n maxListeners: 100,\n ...options\n };\n }\n /**\n * 发送事件\n */\n emit(event) {\n if (this.options.debug) {\n this.log(\"debug\", `Event emitted: ${event.type}`, event);\n }\n const handlers = this.handlers.get(event.type);\n if (!handlers) return;\n handlers.forEach((handler) => {\n try {\n handler(event);\n } catch (error) {\n this.log(\"error\", `Error in event handler for ${event.type}:`, error);\n }\n });\n }\n /**\n * 订阅事件\n */\n on(type, handler) {\n let handlers = this.handlers.get(type);\n if (!handlers) {\n handlers = /* @__PURE__ */ new Set();\n this.handlers.set(type, handlers);\n }\n if (handlers.size >= (this.options.maxListeners ?? 100)) {\n this.log(\"warn\", `Max listeners (${this.options.maxListeners}) reached for event: ${type}`);\n }\n handlers.add(handler);\n return () => {\n handlers?.delete(handler);\n if (handlers?.size === 0) {\n this.handlers.delete(type);\n }\n };\n }\n /**\n * 取消订阅\n */\n off(type, handler) {\n const handlers = this.handlers.get(type);\n if (handlers) {\n handlers.delete(handler);\n if (handlers.size === 0) {\n this.handlers.delete(type);\n }\n }\n }\n /**\n * 一次性订阅\n */\n once(type, handler) {\n const wrappedHandler = (event) => {\n unsubscribe();\n handler(event);\n };\n const unsubscribe = this.on(type, wrappedHandler);\n return unsubscribe;\n }\n /**\n * 清除所有监听器\n */\n clear(type) {\n if (type) {\n this.handlers.delete(type);\n } else {\n this.handlers.clear();\n }\n }\n /**\n * 获取监听器数量\n */\n listenerCount(type) {\n return this.handlers.get(type)?.size ?? 0;\n }\n /**\n * 创建事件\n */\n static createEvent(type, data, traceId) {\n return {\n type,\n data,\n timestamp: Date.now(),\n traceId\n };\n }\n log(level, message, ...args) {\n if (this.options.logger) {\n this.options.logger[level](message, ...args);\n } else if (this.options.debug) {\n console[level](`[EventBus] ${message}`, ...args);\n }\n }\n};\n\n// src/events/action-bridge.ts\nvar ActionBridge = class {\n constructor(options) {\n this.debounceTimers = /* @__PURE__ */ new Map();\n this.throttleTimers = /* @__PURE__ */ new Map();\n this.options = options;\n }\n /**\n * 处理组件事件\n */\n async handleEvent(event, eventData, context) {\n if (event.enabled === false) {\n return;\n }\n if (event.condition) {\n this.log(\"debug\", `Event condition: ${event.condition}`);\n }\n if (event.debounce && event.debounce > 0) {\n await this.debounce(event.id, event.debounce);\n }\n if (event.throttle && event.throttle > 0) {\n if (!this.throttle(event.id, event.throttle)) {\n return;\n }\n }\n for (const action of event.actions) {\n if (action.enabled === false) continue;\n try {\n if (action.delay && action.delay > 0) {\n await this.delay(action.delay);\n }\n const params = this.resolveParams(action.params, eventData, context);\n await this.executeAction(action, params);\n } catch (error) {\n this.log(\"error\", `Action ${action.type} failed:`, error);\n }\n }\n }\n /**\n * 销毁\n */\n destroy() {\n this.debounceTimers.forEach((timer) => clearTimeout(timer));\n this.debounceTimers.clear();\n this.throttleTimers.clear();\n }\n async executeAction(action, params) {\n this.log(\"debug\", `Executing action: ${action.type}`, params);\n const result = await this.options.executor.execute(action.type, params);\n this.log(\"debug\", `Action ${action.type} completed:`, result);\n }\n resolveParams(params, eventData, context) {\n return {\n ...params,\n __eventData: eventData,\n __context: context\n };\n }\n debounce(id, delay) {\n return new Promise((resolve) => {\n const existing = this.debounceTimers.get(id);\n if (existing) {\n clearTimeout(existing);\n }\n const timer = setTimeout(() => {\n this.debounceTimers.delete(id);\n resolve();\n }, delay);\n this.debounceTimers.set(id, timer);\n });\n }\n throttle(id, interval) {\n const now = Date.now();\n const lastTime = this.throttleTimers.get(id) ?? 0;\n if (now - lastTime < interval) {\n return false;\n }\n this.throttleTimers.set(id, now);\n return true;\n }\n delay(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n log(level, message, ...args) {\n if (this.options.logger) {\n this.options.logger[level](message, ...args);\n } else if (this.options.debug) {\n console[level](`[ActionBridge] ${message}`, ...args);\n }\n }\n};\n\n// src/expression/lexer.ts\nvar Lexer = class {\n constructor(input) {\n this.pos = 0;\n this.tokens = [];\n this.input = input;\n }\n /**\n * 分析表达式,返回 Token 列表\n */\n tokenize() {\n this.pos = 0;\n this.tokens = [];\n while (this.pos < this.input.length) {\n this.skipWhitespace();\n if (this.pos >= this.input.length) break;\n const token = this.readToken();\n if (token) {\n this.tokens.push(token);\n }\n }\n this.tokens.push({\n type: \"EOF\",\n value: null,\n start: this.input.length,\n end: this.input.length\n });\n return this.tokens;\n }\n readToken() {\n const char = this.input[this.pos];\n const start = this.pos;\n if (this.isDigit(char) || char === \"-\" && this.isDigit(this.peek(1))) {\n return this.readNumber();\n }\n if (char === '\"' || char === \"'\") {\n return this.readString(char);\n }\n if (this.isIdentifierStart(char)) {\n return this.readIdentifier();\n }\n const operator = this.readOperator();\n if (operator) {\n return operator;\n }\n switch (char) {\n case \".\":\n this.pos++;\n return { type: \"DOT\", value: \".\", start, end: this.pos };\n case \"[\":\n this.pos++;\n return { type: \"LBRACKET\", value: \"[\", start, end: this.pos };\n case \"]\":\n this.pos++;\n return { type: \"RBRACKET\", value: \"]\", start, end: this.pos };\n case \"(\":\n this.pos++;\n return { type: \"LPAREN\", value: \"(\", start, end: this.pos };\n case \")\":\n this.pos++;\n return { type: \"RPAREN\", value: \")\", start, end: this.pos };\n case \",\":\n this.pos++;\n return { type: \"COMMA\", value: \",\", start, end: this.pos };\n case \"?\":\n this.pos++;\n return { type: \"QUESTION\", value: \"?\", start, end: this.pos };\n case \":\":\n this.pos++;\n return { type: \"COLON\", value: \":\", start, end: this.pos };\n }\n throw new Error(`Unexpected character '${char}' at position ${this.pos}`);\n }\n readNumber() {\n const start = this.pos;\n let value = \"\";\n if (this.input[this.pos] === \"-\") {\n value += \"-\";\n this.pos++;\n }\n while (this.isDigit(this.input[this.pos])) {\n value += this.input[this.pos];\n this.pos++;\n }\n if (this.input[this.pos] === \".\" && this.isDigit(this.peek(1))) {\n value += \".\";\n this.pos++;\n while (this.isDigit(this.input[this.pos])) {\n value += this.input[this.pos];\n this.pos++;\n }\n }\n return {\n type: \"NUMBER\",\n value: parseFloat(value),\n start,\n end: this.pos\n };\n }\n readString(quote) {\n const start = this.pos;\n this.pos++;\n let value = \"\";\n while (this.pos < this.input.length && this.input[this.pos] !== quote) {\n if (this.input[this.pos] === \"\\\\\") {\n this.pos++;\n const escaped = this.input[this.pos];\n switch (escaped) {\n case \"n\":\n value += \"\\n\";\n break;\n case \"t\":\n value += \"\t\";\n break;\n case \"r\":\n value += \"\\r\";\n break;\n case \"\\\\\":\n value += \"\\\\\";\n break;\n case '\"':\n value += '\"';\n break;\n case \"'\":\n value += \"'\";\n break;\n default:\n value += escaped;\n }\n } else {\n value += this.input[this.pos];\n }\n this.pos++;\n }\n if (this.input[this.pos] !== quote) {\n throw new Error(`Unterminated string at position ${start}`);\n }\n this.pos++;\n return {\n type: \"STRING\",\n value,\n start,\n end: this.pos\n };\n }\n readIdentifier() {\n const start = this.pos;\n let value = \"\";\n while (this.pos < this.input.length && this.isIdentifierChar(this.input[this.pos])) {\n value += this.input[this.pos];\n this.pos++;\n }\n if (value === \"true\") {\n return { type: \"BOOLEAN\", value: true, start, end: this.pos };\n }\n if (value === \"false\") {\n return { type: \"BOOLEAN\", value: false, start, end: this.pos };\n }\n if (value === \"null\") {\n return { type: \"NULL\", value: null, start, end: this.pos };\n }\n return { type: \"IDENTIFIER\", value, start, end: this.pos };\n }\n readOperator() {\n const start = this.pos;\n const twoChar = this.input.slice(this.pos, this.pos + 2);\n const oneChar = this.input[this.pos];\n const twoCharOps = [\"==\", \"!=\", \">=\", \"<=\", \"&&\", \"||\", \"??\"];\n if (twoCharOps.includes(twoChar)) {\n this.pos += 2;\n return { type: \"OPERATOR\", value: twoChar, start, end: this.pos };\n }\n const oneCharOps = [\"+\", \"-\", \"*\", \"/\", \"%\", \">\", \"<\", \"!\"];\n if (oneCharOps.includes(oneChar)) {\n this.pos++;\n return { type: \"OPERATOR\", value: oneChar, start, end: this.pos };\n }\n return null;\n }\n skipWhitespace() {\n while (this.pos < this.input.length && /\\s/.test(this.input[this.pos])) {\n this.pos++;\n }\n }\n isDigit(char) {\n return /[0-9]/.test(char);\n }\n isIdentifierStart(char) {\n return /[a-zA-Z_$]/.test(char);\n }\n isIdentifierChar(char) {\n return /[a-zA-Z0-9_$]/.test(char);\n }\n peek(offset = 1) {\n return this.input[this.pos + offset] || \"\";\n }\n};\n\n// src/expression/parser.ts\nimport { BUILTIN_FUNCTION_NAMES } from \"@djvlc/contracts-types\";\nvar PRECEDENCE = {\n \"||\": 1,\n \"??\": 1,\n \"&&\": 2,\n \"==\": 3,\n \"!=\": 3,\n \"<\": 4,\n \">\": 4,\n \"<=\": 4,\n \">=\": 4,\n \"+\": 5,\n \"-\": 5,\n \"*\": 6,\n \"/\": 6,\n \"%\": 6\n};\nvar Parser = class {\n constructor(tokens) {\n this.pos = 0;\n this.tokens = tokens;\n }\n /**\n * 解析表达式\n */\n parse() {\n const result = this.parseExpression();\n if (this.current().type !== \"EOF\") {\n throw new Error(`Unexpected token '${this.current().value}' at position ${this.current().start}`);\n }\n return result;\n }\n parseExpression() {\n return this.parseTernary();\n }\n parseTernary() {\n const test = this.parseBinary(0);\n if (this.current().type === \"QUESTION\") {\n this.advance();\n const consequent = this.parseExpression();\n this.expect(\"COLON\");\n const alternate = this.parseExpression();\n return {\n type: \"conditional\",\n test,\n consequent,\n alternate,\n raw: void 0\n };\n }\n return test;\n }\n parseBinary(minPrecedence) {\n let left = this.parseUnary();\n while (true) {\n const token = this.current();\n if (token.type !== \"OPERATOR\") break;\n const precedence = PRECEDENCE[token.value];\n if (precedence === void 0 || precedence < minPrecedence) break;\n this.advance();\n const right = this.parseBinary(precedence + 1);\n left = {\n type: \"binary\",\n operator: token.value,\n left,\n right,\n raw: void 0\n };\n }\n return left;\n }\n parseUnary() {\n const token = this.current();\n if (token.type === \"OPERATOR\" && (token.value === \"!\" || token.value === \"-\")) {\n this.advance();\n const argument = this.parseUnary();\n return {\n type: \"unary\",\n operator: token.value,\n argument,\n raw: void 0\n };\n }\n return this.parsePostfix();\n }\n parsePostfix() {\n let node = this.parsePrimary();\n while (true) {\n const token = this.current();\n if (token.type === \"DOT\") {\n this.advance();\n const propToken = this.expect(\"IDENTIFIER\");\n node = {\n type: \"member\",\n object: node,\n property: propToken.value,\n computed: false,\n raw: void 0\n };\n } else if (token.type === \"LBRACKET\") {\n this.advance();\n const index = this.parseExpression();\n this.expect(\"RBRACKET\");\n node = {\n type: \"member\",\n object: node,\n property: index,\n computed: true,\n raw: void 0\n };\n } else if (token.type === \"LPAREN\" && node.type === \"identifier\") {\n const callee = node.name;\n if (!BUILTIN_FUNCTION_NAMES.has(callee)) {\n throw new Error(`Unknown function '${callee}' at position ${token.start}`);\n }\n this.advance();\n const args = this.parseArguments();\n this.expect(\"RPAREN\");\n node = {\n type: \"call\",\n callee,\n arguments: args,\n raw: void 0\n };\n } else {\n break;\n }\n }\n return node;\n }\n parsePrimary() {\n const token = this.current();\n if (token.type === \"NUMBER\" || token.type === \"STRING\" || token.type === \"BOOLEAN\" || token.type === \"NULL\") {\n this.advance();\n return {\n type: \"literal\",\n value: token.value,\n start: token.start,\n end: token.end,\n raw: void 0\n };\n }\n if (token.type === \"IDENTIFIER\") {\n this.advance();\n return {\n type: \"identifier\",\n name: token.value,\n start: token.start,\n end: token.end,\n raw: void 0\n };\n }\n if (token.type === \"LBRACKET\") {\n return this.parseArray();\n }\n if (token.type === \"LPAREN\") {\n this.advance();\n const expr = this.parseExpression();\n this.expect(\"RPAREN\");\n return expr;\n }\n throw new Error(`Unexpected token '${token.value}' at position ${token.start}`);\n }\n parseArray() {\n const start = this.current().start;\n this.advance();\n const elements = [];\n while (this.current().type !== \"RBRACKET\") {\n elements.push(this.parseExpression());\n if (this.current().type === \"COMMA\") {\n this.advance();\n } else {\n break;\n }\n }\n const end = this.current().end;\n this.expect(\"RBRACKET\");\n return {\n type: \"array\",\n elements,\n start,\n end,\n raw: void 0\n };\n }\n parseArguments() {\n const args = [];\n if (this.current().type !== \"RPAREN\") {\n args.push(this.parseExpression());\n while (this.current().type === \"COMMA\") {\n this.advance();\n args.push(this.parseExpression());\n }\n }\n return args;\n }\n current() {\n return this.tokens[this.pos];\n }\n advance() {\n return this.tokens[this.pos++];\n }\n expect(type) {\n const token = this.current();\n if (token.type !== type) {\n throw new Error(`Expected '${type}' but got '${token.type}' at position ${token.start}`);\n }\n return this.advance();\n }\n};\n\n// src/expression/functions.ts\nvar builtinFunctions = {\n // ==================== 字符串函数 ====================\n len: (value) => {\n if (typeof value === \"string\" || Array.isArray(value)) {\n return value.length;\n }\n return 0;\n },\n trim: (str) => {\n return String(str ?? \"\").trim();\n },\n upper: (str) => {\n return String(str ?? \"\").toUpperCase();\n },\n lower: (str) => {\n return String(str ?? \"\").toLowerCase();\n },\n substr: (str, start, length) => {\n const s = String(str ?? \"\");\n const startNum = Number(start) || 0;\n const lengthNum = length !== void 0 ? Number(length) : void 0;\n return s.substring(startNum, lengthNum !== void 0 ? startNum + lengthNum : void 0);\n },\n concat: (...args) => {\n return args.map((a) => String(a ?? \"\")).join(\"\");\n },\n replace: (str, search, replacement) => {\n return String(str ?? \"\").split(String(search)).join(String(replacement));\n },\n split: (str, separator) => {\n return String(str ?? \"\").split(String(separator));\n },\n join: (arr, separator) => {\n if (!Array.isArray(arr)) return \"\";\n return arr.join(separator !== void 0 ? String(separator) : \",\");\n },\n startsWith: (str, search) => {\n return String(str ?? \"\").startsWith(String(search));\n },\n endsWith: (str, search) => {\n return String(str ?? \"\").endsWith(String(search));\n },\n contains: (str, search) => {\n return String(str ?? \"\").includes(String(search));\n },\n // ==================== 数字函数 ====================\n toNumber: (value) => {\n const num = Number(value);\n return isNaN(num) ? 0 : num;\n },\n toString: (value) => {\n return String(value ?? \"\");\n },\n toInt: (value) => {\n return Math.trunc(Number(value) || 0);\n },\n toFloat: (value) => {\n return parseFloat(String(value)) || 0;\n },\n round: (value, decimals) => {\n const num = Number(value) || 0;\n const dec = Number(decimals) || 0;\n const factor = Math.pow(10, dec);\n return Math.round(num * factor) / factor;\n },\n floor: (value) => {\n return Math.floor(Number(value) || 0);\n },\n ceil: (value) => {\n return Math.ceil(Number(value) || 0);\n },\n abs: (value) => {\n return Math.abs(Number(value) || 0);\n },\n min: (...args) => {\n const nums = args.map((a) => Number(a)).filter((n) => !isNaN(n));\n return nums.length > 0 ? Math.min(...nums) : 0;\n },\n max: (...args) => {\n const nums = args.map((a) => Number(a)).filter((n) => !isNaN(n));\n return nums.length > 0 ? Math.max(...nums) : 0;\n },\n sum: (arr) => {\n if (!Array.isArray(arr)) return 0;\n return arr.reduce((acc, val) => acc + (Number(val) || 0), 0);\n },\n avg: (arr) => {\n if (!Array.isArray(arr) || arr.length === 0) return 0;\n const sum = arr.reduce((acc, val) => acc + (Number(val) || 0), 0);\n return sum / arr.length;\n },\n random: () => {\n return Math.random();\n },\n randomInt: (min, max) => {\n const minNum = Math.ceil(Number(min) || 0);\n const maxNum = Math.floor(Number(max) || 100);\n return Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum;\n },\n // ==================== 日期函数 ====================\n now: () => {\n return Date.now();\n },\n today: () => {\n return (/* @__PURE__ */ new Date()).toISOString().split(\"T\")[0];\n },\n dateFormat: (timestamp, format) => {\n const date = new Date(Number(timestamp) || Date.now());\n const fmt = String(format || \"YYYY-MM-DD\");\n const pad = (n) => n.toString().padStart(2, \"0\");\n return fmt.replace(\"YYYY\", date.getFullYear().toString()).replace(\"MM\", pad(date.getMonth() + 1)).replace(\"DD\", pad(date.getDate())).replace(\"HH\", pad(date.getHours())).replace(\"mm\", pad(date.getMinutes())).replace(\"ss\", pad(date.getSeconds()));\n },\n dateParse: (dateStr) => {\n const date = new Date(String(dateStr));\n return date.getTime();\n },\n year: (timestamp) => {\n return new Date(Number(timestamp) || Date.now()).getFullYear();\n },\n month: (timestamp) => {\n return new Date(Number(timestamp) || Date.now()).getMonth() + 1;\n },\n day: (timestamp) => {\n return new Date(Number(timestamp) || Date.now()).getDate();\n },\n addDays: (timestamp, days) => {\n const date = new Date(Number(timestamp) || Date.now());\n date.setDate(date.getDate() + (Number(days) || 0));\n return date.getTime();\n },\n diffDays: (timestamp1, timestamp2) => {\n const date1 = new Date(Number(timestamp1) || Date.now());\n const date2 = new Date(Number(timestamp2) || Date.now());\n const diffTime = Math.abs(date2.getTime() - date1.getTime());\n return Math.floor(diffTime / (1e3 * 60 * 60 * 24));\n },\n // ==================== 类型检查函数 ====================\n isNull: (value) => {\n return value === null || value === void 0;\n },\n isUndefined: (value) => {\n return value === void 0;\n },\n isEmpty: (value) => {\n if (value === null || value === void 0) return true;\n if (typeof value === \"string\") return value.length === 0;\n if (Array.isArray(value)) return value.length === 0;\n if (typeof value === \"object\") return Object.keys(value).length === 0;\n return false;\n },\n isArray: (value) => {\n return Array.isArray(value);\n },\n isObject: (value) => {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n },\n isString: (value) => {\n return typeof value === \"string\";\n },\n isNumber: (value) => {\n return typeof value === \"number\" && !isNaN(value);\n },\n isBoolean: (value) => {\n return typeof value === \"boolean\";\n },\n typeOf: (value) => {\n if (value === null) return \"null\";\n if (Array.isArray(value)) return \"array\";\n return typeof value;\n },\n // ==================== 默认值函数 ====================\n default: (value, defaultValue) => {\n return value ?? defaultValue;\n },\n coalesce: (...args) => {\n for (const arg of args) {\n if (arg !== null && arg !== void 0) return arg;\n }\n return null;\n },\n ifElse: (condition, trueValue, falseValue) => {\n return condition ? trueValue : falseValue;\n },\n // ==================== 数组函数 ====================\n first: (arr) => {\n if (!Array.isArray(arr)) return void 0;\n return arr[0];\n },\n last: (arr) => {\n if (!Array.isArray(arr)) return void 0;\n return arr[arr.length - 1];\n },\n at: (arr, index) => {\n if (!Array.isArray(arr)) return void 0;\n return arr[Number(index) || 0];\n },\n slice: (arr, start, end) => {\n if (!Array.isArray(arr)) return [];\n return arr.slice(Number(start) || 0, end !== void 0 ? Number(end) : void 0);\n },\n includes: (arr, value) => {\n if (!Array.isArray(arr)) return false;\n return arr.includes(value);\n },\n indexOf: (arr, value) => {\n if (!Array.isArray(arr)) return -1;\n return arr.indexOf(value);\n },\n reverse: (arr) => {\n if (!Array.isArray(arr)) return [];\n return [...arr].reverse();\n },\n sort: (arr) => {\n if (!Array.isArray(arr)) return [];\n return [...arr].sort();\n },\n unique: (arr) => {\n if (!Array.isArray(arr)) return [];\n return [...new Set(arr)];\n },\n flatten: (arr) => {\n if (!Array.isArray(arr)) return [];\n return arr.flat();\n },\n count: (arr) => {\n if (!Array.isArray(arr)) return 0;\n return arr.length;\n },\n // ==================== 对象函数 ====================\n get: (obj, path, defaultValue) => {\n if (obj === null || obj === void 0) return defaultValue;\n const pathStr = String(path);\n const parts = pathStr.split(\".\");\n let current = obj;\n for (const part of parts) {\n if (current === null || current === void 0) return defaultValue;\n current = current[part];\n }\n return current ?? defaultValue;\n },\n keys: (obj) => {\n if (typeof obj !== \"object\" || obj === null) return [];\n return Object.keys(obj);\n },\n values: (obj) => {\n if (typeof obj !== \"object\" || obj === null) return [];\n return Object.values(obj);\n },\n entries: (obj) => {\n if (typeof obj !== \"object\" || obj === null) return [];\n return Object.entries(obj);\n },\n has: (obj, key) => {\n if (typeof obj !== \"object\" || obj === null) return false;\n return String(key) in obj;\n },\n merge: (...objs) => {\n const result = {};\n for (const obj of objs) {\n if (typeof obj === \"object\" && obj !== null) {\n Object.assign(result, obj);\n }\n }\n return result;\n },\n // ==================== 逻辑函数 ====================\n and: (...args) => {\n return args.every((a) => Boolean(a));\n },\n or: (...args) => {\n return args.some((a) => Boolean(a));\n },\n not: (value) => {\n return !value;\n },\n eq: (a, b) => {\n return a === b;\n },\n ne: (a, b) => {\n return a !== b;\n },\n gt: (a, b) => {\n return Number(a) > Number(b);\n },\n gte: (a, b) => {\n return Number(a) >= Number(b);\n },\n lt: (a, b) => {\n return Number(a) < Number(b);\n },\n lte: (a, b) => {\n return Number(a) <= Number(b);\n },\n between: (value, min, max) => {\n const num = Number(value);\n return num >= Number(min) && num <= Number(max);\n },\n // ==================== 格式化函数 ====================\n formatNumber: (value, decimals) => {\n const num = Number(value) || 0;\n const dec = Number(decimals) ?? 0;\n return num.toLocaleString(void 0, {\n minimumFractionDigits: dec,\n maximumFractionDigits: dec\n });\n },\n formatCurrency: (value, currency) => {\n const num = Number(value) || 0;\n const cur = String(currency || \"CNY\");\n return num.toLocaleString(\"zh-CN\", { style: \"currency\", currency: cur });\n },\n formatPercent: (value, decimals) => {\n const num = Number(value) || 0;\n const dec = Number(decimals) ?? 0;\n return (num * 100).toFixed(dec) + \"%\";\n },\n // ==================== JSON 函数 ====================\n jsonParse: (str) => {\n try {\n return JSON.parse(String(str));\n } catch {\n return null;\n }\n },\n jsonStringify: (value) => {\n return JSON.stringify(value);\n }\n};\n\n// src/expression/evaluator.ts\nvar Evaluator = class {\n constructor(options = {}) {\n this.depth = 0;\n this.startTime = 0;\n this.options = {\n maxDepth: 100,\n timeout: 1e3,\n debug: false,\n ...options\n };\n }\n /**\n * 求值表达式\n */\n evaluate(ast, context) {\n this.depth = 0;\n this.startTime = Date.now();\n try {\n const value = this.evaluateNode(ast, context);\n return { value };\n } catch (error) {\n return {\n value: void 0,\n error: error instanceof Error ? error : new Error(String(error))\n };\n }\n }\n evaluateNode(node, context) {\n this.checkLimits();\n switch (node.type) {\n case \"literal\":\n return this.evaluateLiteral(node);\n case \"identifier\":\n return this.evaluateIdentifier(node, context);\n case \"member\":\n return this.evaluateMember(node, context);\n case \"call\":\n return this.evaluateCall(node, context);\n case \"binary\":\n return this.evaluateBinary(node, context);\n case \"unary\":\n return this.evaluateUnary(node, context);\n case \"conditional\":\n return this.evaluateConditional(node, context);\n case \"array\":\n return this.evaluateArray(node, context);\n default:\n throw new ExpressionError(\"\", `Unknown node type: ${node.type}`);\n }\n }\n evaluateLiteral(node) {\n return node.value;\n }\n evaluateIdentifier(node, context) {\n const name = node.name;\n switch (name) {\n case \"state\":\n return context.state;\n case \"query\":\n return context.query;\n case \"context\":\n return context.context;\n case \"event\":\n return context.event;\n case \"item\":\n return context.item;\n case \"index\":\n return context.index;\n default:\n throw new ExpressionError(\n \"\",\n `Unknown variable '${name}'`,\n node.start !== void 0 && node.end !== void 0 ? { start: node.start, end: node.end } : void 0\n );\n }\n }\n evaluateMember(node, context) {\n const object = this.evaluateNode(node.object, context);\n if (object === null || object === void 0) {\n return void 0;\n }\n let property;\n if (node.computed) {\n const propValue = this.evaluateNode(node.property, context);\n property = propValue;\n } else {\n property = node.property;\n }\n if (typeof object === \"object\" && object !== null) {\n return object[property];\n }\n return void 0;\n }\n evaluateCall(node, context) {\n const fn = builtinFunctions[node.callee];\n if (!fn) {\n throw new ExpressionError(\"\", `Unknown function '${node.callee}'`);\n }\n const args = node.arguments.map((arg) => this.evaluateNode(arg, context));\n return fn(...args);\n }\n evaluateBinary(node, context) {\n const op = node.operator;\n if (op === \"&&\") {\n const left2 = this.evaluateNode(node.left, context);\n if (!left2) return left2;\n return this.evaluateNode(node.right, context);\n }\n if (op === \"||\") {\n const left2 = this.evaluateNode(node.left, context);\n if (left2) return left2;\n return this.evaluateNode(node.right, context);\n }\n if (op === \"??\") {\n const left2 = this.evaluateNode(node.left, context);\n if (left2 !== null && left2 !== void 0) return left2;\n return this.evaluateNode(node.right, context);\n }\n const left = this.evaluateNode(node.left, context);\n const right = this.evaluateNode(node.right, context);\n switch (op) {\n case \"+\":\n if (typeof left === \"string\" || typeof right === \"string\") {\n return String(left) + String(right);\n }\n return left + right;\n case \"-\":\n return left - right;\n case \"*\":\n return left * right;\n case \"/\":\n return left / right;\n case \"%\":\n return left % right;\n case \"==\":\n return left === right;\n case \"!=\":\n return left !== right;\n case \"<\":\n return left < right;\n case \">\":\n return left > right;\n case \"<=\":\n return left <= right;\n case \">=\":\n return left >= right;\n default:\n throw new ExpressionError(\"\", `Unknown operator '${op}'`);\n }\n }\n evaluateUnary(node, context) {\n const argument = this.evaluateNode(node.argument, context);\n switch (node.operator) {\n case \"!\":\n return !argument;\n case \"-\":\n return -argument;\n default:\n throw new ExpressionError(\"\", `Unknown unary operator '${node.operator}'`);\n }\n }\n evaluateConditional(node, context) {\n const test = this.evaluateNode(node.test, context);\n if (test) {\n return this.evaluateNode(node.consequent, context);\n }\n return this.evaluateNode(node.alternate, context);\n }\n evaluateArray(node, context) {\n return node.elements.map((el) => this.evaluateNode(el, context));\n }\n checkLimits() {\n this.depth++;\n if (this.depth > (this.options.maxDepth ?? 100)) {\n throw new ExpressionError(\"\", \"Maximum recursion depth exceeded\");\n }\n const elapsed = Date.now() - this.startTime;\n if (elapsed > (this.options.timeout ?? 1e3)) {\n throw new ExpressionError(\"\", \"Expression evaluation timeout\");\n }\n }\n};\n\n// src/expression/engine.ts\nvar ExpressionEngine = class {\n constructor(options = {}) {\n this.astCache = /* @__PURE__ */ new Map();\n this.options = {\n cacheAST: true,\n maxCacheSize: 1e3,\n ...options\n };\n this.evaluator = new Evaluator(options);\n }\n /**\n * 求值表达式\n */\n evaluate(expression, context) {\n try {\n const ast = this.parse(expression);\n return this.evaluator.evaluate(ast, context);\n } catch (error) {\n return {\n value: void 0,\n error: error instanceof Error ? error : new Error(String(error))\n };\n }\n }\n /**\n * 求值表达式并返回值\n * 出错时返回 fallback 值\n */\n evaluateWithFallback(expression, context, fallback) {\n const result = this.evaluate(expression, context);\n if (result.error) {\n this.log(\"warn\", `Expression evaluation failed: ${result.error.message}`, expression);\n return fallback;\n }\n return result.value;\n }\n /**\n * 求值模板字符串\n * 支持 ${expression} 语法\n */\n evaluateTemplate(template, context) {\n return template.replace(/\\$\\{([^}]+)\\}/g, (_, expr) => {\n const result = this.evaluate(expr.trim(), context);\n if (result.error) {\n this.log(\"warn\", `Template expression failed: ${result.error.message}`, expr);\n return \"\";\n }\n return String(result.value ?? \"\");\n });\n }\n /**\n * 解析表达式为 AST\n */\n parse(expression) {\n if (this.options.cacheAST) {\n const cached = this.astCache.get(expression);\n if (cached) {\n return cached;\n }\n }\n try {\n const lexer = new Lexer(expression);\n const tokens = lexer.tokenize();\n const parser = new Parser(tokens);\n const ast = parser.parse();\n if (this.options.cacheAST) {\n if (this.astCache.size >= (this.options.maxCacheSize ?? 1e3)) {\n const keysToDelete = Array.from(this.astCache.keys()).slice(\n 0,\n Math.floor(this.astCache.size / 2)\n );\n keysToDelete.forEach((key) => this.astCache.delete(key));\n }\n this.astCache.set(expression, ast);\n }\n return ast;\n } catch (error) {\n throw new ExpressionError(\n expression,\n error instanceof Error ? error.message : \"Parse error\"\n );\n }\n }\n /**\n * 校验表达式\n */\n validate(expression) {\n const errors = [];\n const warnings = [];\n const referencedPaths = [];\n const calledFunctions = [];\n try {\n const ast = this.parse(expression);\n this.collectReferences(ast, referencedPaths, calledFunctions);\n return {\n valid: true,\n errors: [],\n warnings,\n referencedPaths,\n calledFunctions\n };\n } catch (error) {\n errors.push({\n type: \"SYNTAX_ERROR\",\n message: error instanceof Error ? error.message : \"Parse error\"\n });\n return {\n valid: false,\n errors,\n warnings,\n referencedPaths,\n calledFunctions\n };\n }\n }\n /**\n * 清除 AST 缓存\n */\n clearCache() {\n this.astCache.clear();\n }\n collectReferences(node, paths, functions) {\n switch (node.type) {\n case \"identifier\":\n paths.push(node.name);\n break;\n case \"member\": {\n const path = this.buildMemberPath(node);\n if (path) paths.push(path);\n break;\n }\n case \"call\":\n functions.push(node.callee);\n node.arguments.forEach((arg) => this.collectReferences(arg, paths, functions));\n break;\n case \"binary\":\n this.collectReferences(node.left, paths, functions);\n this.collectReferences(node.right, paths, functions);\n break;\n case \"unary\":\n this.collectReferences(node.argument, paths, functions);\n break;\n case \"conditional\":\n this.collectReferences(node.test, paths, functions);\n this.collectReferences(node.consequent, paths, functions);\n this.collectReferences(node.alternate, paths, functions);\n break;\n case \"array\":\n node.elements.forEach((el) => this.collectReferences(el, paths, functions));\n break;\n }\n }\n buildMemberPath(node) {\n if (node.type === \"identifier\") {\n return node.name;\n }\n if (node.type === \"member\" && !node.computed) {\n const objectPath = this.buildMemberPath(node.object);\n if (objectPath) {\n return `${objectPath}.${node.property}`;\n }\n }\n return null;\n }\n log(level, message, ...args) {\n if (this.options.logger) {\n this.options.logger[level](message, ...args);\n } else if (this.options.debug) {\n console[level](`[ExpressionEngine] ${message}`, ...args);\n }\n }\n};\n\n// src/host-api/host-api-impl.ts\nvar HostAPIImpl = class {\n constructor(options) {\n // ==================== 存储 ====================\n this.storage = {\n get: (key, options) => {\n const fullKey = this.getStorageKey(key, options?.namespace);\n const item = localStorage.getItem(fullKey);\n if (!item) return void 0;\n try {\n const parsed = JSON.parse(item);\n if (parsed.expires && Date.now() > parsed.expires) {\n localStorage.removeItem(fullKey);\n return void 0;\n }\n return parsed.value;\n } catch {\n return void 0;\n }\n },\n set: (key, value, options) => {\n const fullKey = this.getStorageKey(key, options?.namespace);\n const item = {\n value,\n expires: options?.ttl ? Date.now() + options.ttl * 1e3 : void 0\n };\n localStorage.setItem(fullKey, JSON.stringify(item));\n },\n remove: (key, options) => {\n const fullKey = this.getStorageKey(key, options?.namespace);\n localStorage.removeItem(fullKey);\n }\n };\n this.options = options;\n this.storageNamespace = `djvlc:${options.context.pageUid}`;\n }\n // ==================== 数据请求 ====================\n async requestData(queryId, params) {\n this.log(\"debug\", `Requesting data: ${queryId}`, params);\n const startTime = performance.now();\n const context = this.options.context;\n try {\n const response = await fetch(`${this.options.apiBaseUrl}/data/query`, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify({\n queryVersionId: queryId,\n params: params || {},\n context: {\n pageVersionId: context.pageVersionId,\n uid: context.userId\n }\n })\n });\n const result = await response.json();\n const duration = performance.now() - startTime;\n this.log(\"debug\", `Data query completed in ${duration.toFixed(2)}ms`);\n if (result.success && result.data) {\n this.options.stateManager.setQuery(queryId, result.data);\n }\n return result;\n } catch (error) {\n this.log(\"error\", `Data query failed: ${queryId}`, error);\n return {\n success: false,\n message: error instanceof Error ? error.message : \"Query failed\"\n };\n }\n }\n async executeAction(actionType, params) {\n this.log(\"debug\", `Executing action: ${actionType}`, params);\n const startTime = performance.now();\n const context = this.options.context;\n try {\n const response = await fetch(`${this.options.apiBaseUrl}/actions/execute`, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify({\n actionType,\n params: params || {},\n context: {\n pageVersionId: context.pageVersionId,\n uid: context.userId,\n deviceId: context.deviceId,\n channel: context.channel\n },\n idempotencyKey: this.generateIdempotencyKey(actionType, params)\n })\n });\n const result = await response.json();\n const duration = performance.now() - startTime;\n this.log(\"debug\", `Action completed in ${duration.toFixed(2)}ms`);\n return result;\n } catch (error) {\n this.log(\"error\", `Action failed: ${actionType}`, error);\n return {\n success: false,\n message: error instanceof Error ? error.message : \"Action failed\"\n };\n }\n }\n // ==================== 导航 ====================\n navigate(options) {\n this.log(\"debug\", \"Navigate:\", options);\n this.track({\n eventName: \"navigate\",\n params: { url: options.url, newTab: options.newTab }\n });\n let url = options.url;\n if (options.params) {\n const searchParams = new URLSearchParams(options.params);\n url += (url.includes(\"?\") ? \"&\" : \"?\") + searchParams.toString();\n }\n if (options.newTab) {\n window.open(url, \"_blank\");\n } else if (options.replace) {\n window.location.replace(url);\n } else {\n window.location.href = url;\n }\n }\n goBack() {\n this.log(\"debug\", \"Navigate back\");\n window.history.back();\n }\n refresh() {\n this.log(\"debug\", \"Refresh page\");\n window.location.reload();\n }\n // ==================== 对话框 ====================\n async openDialog(options) {\n this.log(\"debug\", \"Open dialog:\", options);\n switch (options.type) {\n case \"alert\":\n window.alert(options.content || options.title);\n return true;\n case \"confirm\":\n return window.confirm(options.content || options.title);\n case \"prompt\":\n return window.prompt(options.content || options.title) || \"\";\n case \"custom\":\n this.log(\"warn\", \"Custom dialog not implemented\");\n return false;\n default:\n return false;\n }\n }\n closeDialog() {\n this.log(\"debug\", \"Close dialog\");\n }\n showToast(options) {\n this.log(\"debug\", \"Show toast:\", options);\n const toast = document.createElement(\"div\");\n toast.className = `djvlc-toast djvlc-toast-${options.type || \"info\"} djvlc-toast-${options.position || \"top\"}`;\n toast.textContent = options.message;\n Object.assign(toast.style, {\n position: \"fixed\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n padding: \"12px 24px\",\n borderRadius: \"8px\",\n color: \"#fff\",\n fontSize: \"14px\",\n zIndex: \"10000\",\n animation: \"djvlc-toast-fade-in 0.3s ease\"\n });\n const colors = {\n success: \"#52c41a\",\n error: \"#ff4d4f\",\n warning: \"#faad14\",\n info: \"#1890ff\"\n };\n toast.style.backgroundColor = colors[options.type || \"info\"];\n const positions = {\n top: { top: \"20px\" },\n center: { top: \"50%\", transform: \"translate(-50%, -50%)\" },\n bottom: { bottom: \"20px\" }\n };\n Object.assign(toast.style, positions[options.position || \"top\"]);\n document.body.appendChild(toast);\n setTimeout(() => {\n toast.style.animation = \"djvlc-toast-fade-out 0.3s ease\";\n setTimeout(() => toast.remove(), 300);\n }, options.duration || 3e3);\n }\n // ==================== 埋点 ====================\n track(event) {\n this.log(\"debug\", \"Track event:\", event);\n const context = this.options.context;\n fetch(`${this.options.apiBaseUrl}/track`, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify({\n eventName: event.eventName,\n params: event.params,\n timestamp: event.timestamp || Date.now(),\n context: {\n pageVersionId: context.pageVersionId,\n runtimeVersion: context.runtimeVersion,\n userId: context.userId,\n deviceId: context.deviceId,\n channel: context.channel\n }\n }),\n keepalive: true\n // 页面关闭时也能发送\n }).catch((error) => {\n this.log(\"warn\", \"Track failed:\", error);\n });\n }\n // ==================== 剪贴板 ====================\n async copyToClipboard(text) {\n try {\n await navigator.clipboard.writeText(text);\n return { success: true, content: text };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : \"Copy failed\"\n };\n }\n }\n async readFromClipboard() {\n try {\n const text = await navigator.clipboard.readText();\n return { success: true, content: text };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : \"Read failed\"\n };\n }\n }\n // ==================== 状态管理 ====================\n getState(key) {\n return this.options.stateManager.getVariable(key);\n }\n setState(key, value) {\n this.options.stateManager.setVariable(key, value);\n }\n getVariable(name) {\n return this.options.stateManager.getVariable(name);\n }\n // ==================== 组件通信 ====================\n postMessage(componentId, message) {\n this.log(\"debug\", `Post message to ${componentId}:`, message);\n const event = new CustomEvent(`djvlc:message:${componentId}`, {\n detail: { message, from: this.options.context.pageUid }\n });\n document.dispatchEvent(event);\n }\n broadcast(channel, message) {\n this.log(\"debug\", `Broadcast to ${channel}:`, message);\n const event = new CustomEvent(`djvlc:broadcast:${channel}`, {\n detail: { message, from: this.options.context.pageUid }\n });\n document.dispatchEvent(event);\n }\n // ==================== 上下文信息 ====================\n getContext() {\n return { ...this.options.context };\n }\n // ==================== 私有方法 ====================\n buildHeaders() {\n const headers = {\n \"Content-Type\": \"application/json\",\n ...this.options.headers\n };\n if (this.options.authToken) {\n headers[\"Authorization\"] = `Bearer ${this.options.authToken}`;\n }\n return headers;\n }\n getStorageKey(key, namespace) {\n return `${namespace || this.storageNamespace}:${key}`;\n }\n generateIdempotencyKey(actionType, params) {\n const timestamp = Date.now();\n const paramsStr = JSON.stringify(params || {});\n return `${actionType}:${timestamp}:${this.simpleHash(paramsStr)}`;\n }\n simpleHash(str) {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n return Math.abs(hash).toString(36);\n }\n log(level, message, ...args) {\n if (this.options.logger) {\n this.options.logger[level](message, ...args);\n } else if (this.options.debug) {\n console[level](`[HostAPI] ${message}`, ...args);\n }\n }\n};\n\n// src/security/security-manager.ts\nvar SecurityManager = class {\n constructor(options = {}) {\n this.blockedComponentsMap = /* @__PURE__ */ new Map();\n this.blockedActionsSet = /* @__PURE__ */ new Set();\n this.options = {\n enableSRI: true,\n cdnDomains: [],\n apiDomains: [],\n blockedComponents: [],\n blockedActions: [],\n ...options\n };\n this.updateBlockedList(options.blockedComponents || [], options.blockedActions || []);\n }\n /**\n * 更新阻断列表\n */\n updateBlockedList(components, actions) {\n this.blockedComponentsMap.clear();\n components.forEach((c) => {\n this.blockedComponentsMap.set(`${c.name}@${c.version}`, c);\n });\n this.blockedActionsSet = new Set(actions);\n }\n /**\n * 检查组件是否被阻断\n */\n isComponentBlocked(name, version) {\n return this.blockedComponentsMap.has(`${name}@${version}`);\n }\n /**\n * 获取组件阻断信息\n */\n getBlockedInfo(name, version) {\n return this.blockedComponentsMap.get(`${name}@${version}`);\n }\n /**\n * 检查动作是否被阻断\n */\n isActionBlocked(actionType) {\n return this.blockedActionsSet.has(actionType);\n }\n /**\n * 验证组件完整性\n */\n async validateComponent(name, version, content, expectedIntegrity) {\n if (!this.options.enableSRI) return;\n const [algorithm, expectedHash] = expectedIntegrity.split(\"-\");\n if (!algorithm || !expectedHash) {\n throw new IntegrityError(name, version, expectedIntegrity, \"Invalid format\");\n }\n const actualHash = await this.computeHash(content, algorithm);\n if (actualHash !== expectedHash) {\n throw new IntegrityError(name, version, expectedHash, actualHash);\n }\n }\n /**\n * 验证 URL 是否在白名单内\n */\n isAllowedUrl(url, type) {\n const domains = type === \"cdn\" ? this.options.cdnDomains : this.options.apiDomains;\n if (!domains || domains.length === 0) return true;\n try {\n const parsedUrl = new URL(url);\n return domains.some((domain) => {\n if (domain.startsWith(\"*.\")) {\n const suffix = domain.slice(2);\n return parsedUrl.hostname.endsWith(suffix);\n }\n return parsedUrl.hostname === domain;\n });\n } catch {\n return false;\n }\n }\n /**\n * 生成 CSP 策略\n */\n generateCSPPolicy() {\n const cdnDomains = this.options.cdnDomains || [];\n const apiDomains = this.options.apiDomains || [];\n const scriptSrc = [\"'self'\", ...cdnDomains].join(\" \");\n const connectSrc = [\"'self'\", ...apiDomains].join(\" \");\n const styleSrc = [\"'self'\", \"'unsafe-inline'\", ...cdnDomains].join(\" \");\n const imgSrc = [\"'self'\", \"data:\", \"blob:\", ...cdnDomains].join(\" \");\n return [\n `default-src 'self'`,\n `script-src ${scriptSrc}`,\n `style-src ${styleSrc}`,\n `img-src ${imgSrc}`,\n `connect-src ${connectSrc}`,\n `font-src 'self' data: ${cdnDomains.join(\" \")}`,\n `frame-ancestors 'self'`,\n `base-uri 'self'`,\n `form-action 'self'`\n ].join(\"; \");\n }\n /**\n * 应用 CSP 策略\n */\n applyCSP() {\n const meta = document.createElement(\"meta\");\n meta.httpEquiv = \"Content-Security-Policy\";\n meta.content = this.generateCSPPolicy();\n document.head.appendChild(meta);\n }\n /**\n * 确保组件未被阻断\n */\n assertNotBlocked(name, version) {\n const blocked = this.getBlockedInfo(name, version);\n if (blocked) {\n throw new ComponentBlockedError(name, version, blocked.reason);\n }\n }\n /**\n * 计算哈希值\n */\n async computeHash(content, algorithm) {\n const encoder = new TextEncoder();\n const data = encoder.encode(content);\n const hashBuffer = await crypto.subtle.digest(\n algorithm.toUpperCase(),\n data\n );\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n return btoa(String.fromCharCode(...hashArray));\n }\n _log(level, message) {\n if (this.options.logger) {\n this.options.logger[level](message);\n }\n }\n // 使用 _log 避免 unused 错误,后续可按需启用日志\n get log() {\n return this._log.bind(this);\n }\n};\n\n// src/telemetry/telemetry-manager.ts\nvar TelemetryManager = class {\n constructor(options) {\n this.spans = /* @__PURE__ */ new Map();\n this.metrics = [];\n this.errors = [];\n this.options = {\n enabled: true,\n sampleRate: 1,\n ...options\n };\n this.traceId = this.generateId();\n this.shouldSample = Math.random() < (this.options.sampleRate ?? 1);\n }\n /**\n * 获取 Trace ID\n */\n getTraceId() {\n return this.traceId;\n }\n /**\n * 获取 W3C Trace Context 格式的 traceparent\n */\n getTraceparent() {\n return `00-${this.traceId}-${this.generateId().slice(0, 16)}-01`;\n }\n /**\n * 开始一个 Span\n */\n startSpan(name, parentSpanId, attributes) {\n const span = {\n spanId: this.generateId().slice(0, 16),\n traceId: this.traceId,\n parentSpanId,\n name,\n startTime: performance.now(),\n attributes\n };\n this.spans.set(span.spanId, span);\n this.log(\"debug\", `Span started: ${name} (${span.spanId})`);\n return span;\n }\n /**\n * 结束一个 Span\n */\n endSpan(spanId, status = \"ok\") {\n const span = this.spans.get(spanId);\n if (span) {\n span.endTime = performance.now();\n span.status = status;\n this.log(\"debug\", `Span ended: ${span.name} (${spanId}) - ${span.endTime - span.startTime}ms`);\n }\n }\n /**\n * 记录性能指标\n */\n recordMetric(type, name, duration, extra) {\n const metric = {\n type,\n name,\n duration,\n startTime: performance.now() - duration,\n extra\n };\n this.metrics.push(metric);\n this.log(\"debug\", `Metric: ${type} - ${name} - ${duration}ms`);\n if (this.options.onMetric) {\n this.options.onMetric(metric);\n }\n }\n /**\n * 记录错误\n */\n recordError(error, context) {\n const runtimeError = {\n type: \"LOAD_ERROR\",\n message: error.message,\n stack: error instanceof Error ? error.stack : void 0,\n timestamp: Date.now(),\n traceId: this.traceId,\n ...context\n };\n this.errors.push(runtimeError);\n this.log(\"error\", `Error recorded: ${error.message}`);\n if (this.shouldSample && this.options.enabled) {\n this.reportError(runtimeError);\n }\n }\n /**\n * 记录页面加载时间\n */\n recordPageLoad(duration, extra) {\n this.recordMetric(\"page_resolve\", \"page_load\", duration, {\n pageVersionId: this.options.pageVersionId,\n ...extra\n });\n }\n /**\n * 记录组件加载时间\n */\n recordComponentLoad(name, version, duration, success) {\n this.recordMetric(\"component_load\", `${name}@${version}`, duration, {\n success\n });\n }\n /**\n * 记录首次渲染时间\n */\n recordFirstRender(duration) {\n this.recordMetric(\"first_render\", \"first_render\", duration, {\n pageVersionId: this.options.pageVersionId\n });\n }\n /**\n * 记录动作执行时间\n */\n recordActionExecute(actionType, duration, success) {\n this.recordMetric(\"action_execute\", actionType, duration, { success });\n }\n /**\n * 记录查询执行时间\n */\n recordQueryExecute(queryId, duration, success, fromCache) {\n this.recordMetric(\"query_execute\", queryId, duration, {\n success,\n fromCache\n });\n }\n /**\n * 获取所有指标\n */\n getMetrics() {\n return [...this.metrics];\n }\n /**\n * 获取所有 Span\n */\n getSpans() {\n return Array.from(this.spans.values());\n }\n /**\n * 清理数据\n */\n clear() {\n this.spans.clear();\n this.metrics = [];\n this.errors = [];\n }\n /**\n * 刷新上报\n */\n async flush() {\n if (!this.shouldSample || !this.options.enabled || !this.options.endpoint) {\n return;\n }\n const payload = {\n traceId: this.traceId,\n pageVersionId: this.options.pageVersionId,\n appId: this.options.appId,\n spans: this.getSpans(),\n metrics: this.metrics,\n errors: this.errors,\n timestamp: Date.now()\n };\n try {\n await fetch(this.options.endpoint, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(payload),\n keepalive: true\n });\n } catch (error) {\n this.log(\"warn\", \"Failed to flush telemetry:\", error);\n }\n }\n reportError(error) {\n if (this.options.endpoint) {\n fetch(`${this.options.endpoint}/errors`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(error),\n keepalive: true\n }).catch(() => {\n });\n }\n }\n generateId() {\n const array = new Uint8Array(16);\n crypto.getRandomValues(array);\n return Array.from(array, (b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n }\n log(level, message, ...args) {\n if (this.options.logger) {\n this.options.logger[level](message, ...args);\n } else if (this.options.debug) {\n console[level](`[Telemetry] ${message}`, ...args);\n }\n }\n};\n\n// src/renderer/base-renderer.ts\nimport { isExpressionBinding } from \"@djvlc/contracts-types\";\nvar BaseRenderer = class {\n constructor(options) {\n this.container = null;\n this.renderedElements = /* @__PURE__ */ new Map();\n this.expressionContext = {\n state: {},\n query: {},\n context: {}\n };\n this.options = options;\n }\n /**\n * 初始化渲染器\n */\n init() {\n this.log(\"debug\", \"Renderer initialized\");\n }\n /**\n * 渲染页面\n */\n render(schema, container) {\n this.container = container;\n this.log(\"debug\", \"Rendering page\", schema.page.id);\n container.innerHTML = \"\";\n this.applyPageStyles(schema.page.canvas);\n const fragment = document.createDocumentFragment();\n for (const component of schema.components) {\n const element = this.renderComponent(component);\n if (element) {\n fragment.appendChild(element);\n }\n }\n container.appendChild(fragment);\n this.log(\"info\", `Rendered ${schema.components.length} components`);\n }\n /**\n * 更新组件属性\n */\n updateComponent(componentId, props) {\n const element = this.renderedElements.get(componentId);\n if (!element) {\n this.log(\"warn\", `Component not found: ${componentId}`);\n return;\n }\n this.applyProps(element, props);\n }\n /**\n * 更新表达式上下文\n */\n updateContext(context) {\n this.expressionContext = {\n ...this.expressionContext,\n ...context\n };\n }\n /**\n * 销毁渲染器\n */\n destroy() {\n this.renderedElements.forEach((element) => {\n element.remove();\n });\n this.renderedElements.clear();\n if (this.container) {\n this.container.innerHTML = \"\";\n }\n this.log(\"debug\", \"Renderer destroyed\");\n }\n /**\n * 渲染单个组件\n */\n renderComponent(instance) {\n const { id, type, props, style, children, visible } = instance;\n if (visible === false) {\n return null;\n }\n try {\n const loadedComponent = this.options.components.get(type);\n let element;\n if (loadedComponent && customElements.get(type)) {\n element = document.createElement(type);\n } else {\n element = document.createElement(\"div\");\n element.className = `djvlc-component djvlc-${type}`;\n if (!loadedComponent) {\n this.log(\"warn\", `Component not loaded: ${type}`);\n element.textContent = `[Component: ${type}]`;\n }\n }\n element.setAttribute(\"data-component-id\", id);\n element.setAttribute(\"data-component-type\", type);\n const resolvedProps = this.resolveProps(props);\n this.applyProps(element, resolvedProps);\n if (style) {\n this.applyStyles(element, style);\n }\n this.options.injectHostApi(element, id);\n if (children && children.length > 0) {\n for (const child of children) {\n const childElement = this.renderComponent(child);\n if (childElement) {\n element.appendChild(childElement);\n }\n }\n }\n this.renderedElements.set(id, element);\n return element;\n } catch (error) {\n this.log(\"error\", `Failed to render component: ${id}`, error);\n if (this.options.onRenderError) {\n return this.options.onRenderError(id, error);\n }\n const fallback = document.createElement(\"div\");\n fallback.className = \"djvlc-error-boundary\";\n fallback.textContent = `Error rendering component: ${type}`;\n return fallback;\n }\n }\n /**\n * 解析 props 中的表达式\n */\n resolveProps(props) {\n const resolved = {};\n for (const [key, value] of Object.entries(props)) {\n if (isExpressionBinding(value)) {\n const result = this.options.expressionEngine.evaluateWithFallback(\n value.expression,\n this.expressionContext,\n value.fallback\n );\n resolved[key] = result;\n } else if (typeof value === \"object\" && value !== null && !Array.isArray(value)) {\n resolved[key] = this.resolveProps(value);\n } else {\n resolved[key] = value;\n }\n }\n return resolved;\n }\n /**\n * 应用 props 到元素\n */\n applyProps(element, props) {\n for (const [key, value] of Object.entries(props)) {\n if (value === null || value === void 0) continue;\n if (element.tagName.includes(\"-\")) {\n element[key] = value;\n } else {\n if (typeof value === \"boolean\") {\n if (value) {\n element.setAttribute(key, \"\");\n } else {\n element.removeAttribute(key);\n }\n } else if (typeof value === \"object\") {\n element.setAttribute(key, JSON.stringify(value));\n } else {\n element.setAttribute(key, String(value));\n }\n }\n }\n }\n /**\n * 应用样式到元素\n */\n applyStyles(element, style) {\n for (const [key, value] of Object.entries(style)) {\n if (value === null || value === void 0) continue;\n let cssValue;\n if (typeof value === \"number\") {\n const unitless = [\"zIndex\", \"opacity\", \"flex\", \"fontWeight\"];\n cssValue = unitless.includes(key) ? String(value) : `${value}px`;\n } else {\n cssValue = String(value);\n }\n const cssKey = key.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n element.style.setProperty(cssKey, cssValue);\n }\n }\n /**\n * 应用页面样式\n */\n applyPageStyles(canvas) {\n if (!this.container) return;\n this.container.style.width = `${canvas.width}px`;\n if (canvas.height) {\n this.container.style.minHeight = `${canvas.height}px`;\n }\n if (canvas.background) {\n this.container.style.background = canvas.background;\n }\n this.container.classList.add(\"djvlc-page\", `djvlc-canvas-${canvas.type}`);\n }\n log(level, message, ...args) {\n if (this.options.logger) {\n this.options.logger[level](message, ...args);\n } else if (this.options.debug) {\n console[level](`[Renderer] ${message}`, ...args);\n }\n }\n};\n\n// src/renderer/fallback-component.ts\nfunction registerFallbackComponents() {\n if (!customElements.get(\"djvlc-fallback\")) {\n customElements.define(\n \"djvlc-fallback\",\n class extends HTMLElement {\n constructor() {\n super();\n const shadow = this.attachShadow({ mode: \"open\" });\n shadow.innerHTML = `\n <style>\n :host {\n display: block;\n padding: 16px;\n background: #fff2f0;\n border: 1px solid #ffccc7;\n border-radius: 4px;\n color: #ff4d4f;\n font-size: 14px;\n }\n .title {\n font-weight: 600;\n margin-bottom: 8px;\n }\n .message {\n color: #666;\n }\n </style>\n <div class=\"title\">\\u7EC4\\u4EF6\\u52A0\\u8F7D\\u5931\\u8D25</div>\n <div class=\"message\"><slot>\\u8BF7\\u5237\\u65B0\\u9875\\u9762\\u91CD\\u8BD5</slot></div>\n `;\n }\n static get observedAttributes() {\n return [\"message\", \"component-name\"];\n }\n attributeChangedCallback(name, _oldValue, newValue) {\n if (name === \"message\" && this.shadowRoot) {\n const message = this.shadowRoot.querySelector(\".message\");\n if (message) message.textContent = newValue;\n }\n if (name === \"component-name\" && this.shadowRoot) {\n const title = this.shadowRoot.querySelector(\".title\");\n if (title) title.textContent = `\\u7EC4\\u4EF6 ${newValue} \\u52A0\\u8F7D\\u5931\\u8D25`;\n }\n }\n }\n );\n }\n if (!customElements.get(\"djvlc-blocked\")) {\n customElements.define(\n \"djvlc-blocked\",\n class extends HTMLElement {\n constructor() {\n super();\n const shadow = this.attachShadow({ mode: \"open\" });\n shadow.innerHTML = `\n <style>\n :host {\n display: block;\n padding: 16px;\n background: #fffbe6;\n border: 1px solid #ffe58f;\n border-radius: 4px;\n color: #faad14;\n font-size: 14px;\n }\n .icon {\n margin-right: 8px;\n }\n </style>\n <span class=\"icon\">\\u26A0\\uFE0F</span>\n <span>\\u6B64\\u7EC4\\u4EF6\\u5DF2\\u88AB\\u6682\\u505C\\u4F7F\\u7528</span>\n `;\n }\n }\n );\n }\n if (!customElements.get(\"djvlc-error-boundary\")) {\n customElements.define(\n \"djvlc-error-boundary\",\n class extends HTMLElement {\n constructor() {\n super();\n const shadow = this.attachShadow({ mode: \"open\" });\n shadow.innerHTML = `\n <style>\n :host {\n display: block;\n padding: 16px;\n background: #f5f5f5;\n border: 1px dashed #d9d9d9;\n border-radius: 4px;\n color: #999;\n font-size: 14px;\n text-align: center;\n }\n </style>\n <slot>\\u6E32\\u67D3\\u51FA\\u9519</slot>\n `;\n }\n }\n );\n }\n}\nfunction createFallbackElement(type, message, componentName) {\n const tagName = `djvlc-${type === \"error\" ? \"error-boundary\" : type}`;\n const element = document.createElement(tagName);\n if (message) {\n element.setAttribute(\"message\", message);\n }\n if (componentName) {\n element.setAttribute(\"component-name\", componentName);\n }\n return element;\n}\n\n// src/runtime.ts\nfunction createRuntime(options) {\n return new DjvlcRuntime(options);\n}\nvar DjvlcRuntime = class {\n constructor(options) {\n this.container = null;\n this.options = {\n channel: \"prod\",\n debug: false,\n enableSRI: true,\n ...options\n };\n this.logger = this.createLogger();\n this.stateManager = new StateManager();\n this.eventBus = new EventBus({ debug: options.debug, logger: this.logger });\n this.expressionEngine = new ExpressionEngine({ debug: options.debug, logger: this.logger });\n this.pageLoader = new PageLoader({\n apiBaseUrl: options.apiBaseUrl,\n channel: options.channel,\n authToken: options.authToken,\n previewToken: options.previewToken,\n headers: options.headers,\n logger: this.logger\n });\n this.componentLoader = new ComponentLoader({\n cdnBaseUrl: options.cdnBaseUrl,\n enableSRI: options.enableSRI,\n logger: this.logger\n });\n this.assetLoader = new AssetLoader({\n cdnHosts: [new URL(options.cdnBaseUrl).host],\n apiHosts: [new URL(options.apiBaseUrl).host]\n });\n this.securityManager = new SecurityManager({\n enableSRI: options.enableSRI,\n cdnDomains: [new URL(options.cdnBaseUrl).host],\n apiDomains: [new URL(options.apiBaseUrl).host],\n logger: this.logger\n });\n this.log(\"info\", \"Runtime created\");\n }\n /**\n * 初始化运行时\n */\n async init() {\n this.log(\"info\", \"Initializing runtime\");\n const startTime = performance.now();\n try {\n this.container = this.resolveContainer();\n this.assetLoader.preconnectAll();\n this.pageLoader.preconnect();\n registerFallbackComponents();\n this.stateManager.setPhase(\"resolving\");\n const initTime = performance.now() - startTime;\n this.log(\"info\", `Runtime initialized in ${initTime.toFixed(2)}ms`);\n } catch (error) {\n this.handleError(error);\n throw error;\n }\n }\n /**\n * 加载页面\n */\n async load() {\n this.log(\"info\", \"Loading page:\", this.options.pageUid);\n const startTime = performance.now();\n try {\n this.stateManager.setPhase(\"resolving\");\n const page = await this.pageLoader.resolve(this.options.pageUid, {\n uid: this.options.userId,\n deviceId: this.options.deviceId\n });\n this.stateManager.setPage(page);\n this.telemetryManager = new TelemetryManager({\n pageVersionId: page.pageVersionId,\n debug: this.options.debug,\n logger: this.logger,\n onMetric: this.options.onMetric\n });\n if (page.runtimeConfig) {\n this.securityManager.updateBlockedList(\n page.runtimeConfig.blockedComponents || [],\n page.runtimeConfig.killSwitches || []\n );\n this.componentLoader.updateBlockedList(\n page.runtimeConfig.blockedComponents?.map((c) => `${c.name}@${c.version}`) || []\n );\n }\n this.stateManager.setPhase(\"loading\");\n this.componentLoader.preload(page.manifest.components);\n const componentResults = await this.componentLoader.loadAll(page.manifest);\n componentResults.forEach((result, key) => {\n this.stateManager.setComponentStatus(key, result);\n this.telemetryManager.recordComponentLoad(\n result.name,\n result.version,\n result.loadTime || 0,\n result.status === \"loaded\"\n );\n });\n this.initHostApi(page);\n this.initRenderer();\n const loadTime = performance.now() - startTime;\n this.telemetryManager.recordPageLoad(loadTime);\n this.log(\"info\", `Page loaded in ${loadTime.toFixed(2)}ms`);\n this.emitEvent(\"page:loaded\", { page, loadTime });\n return page;\n } catch (error) {\n this.stateManager.setPhase(\"error\");\n this.handleError(error);\n throw error;\n }\n }\n /**\n * 渲染页面\n */\n async render() {\n const state = this.stateManager.getState();\n if (!state.page || !this.container) {\n throw new PageLoadError(\"Page not loaded\");\n }\n this.log(\"info\", \"Rendering page\");\n const startTime = performance.now();\n try {\n this.stateManager.setPhase(\"rendering\");\n this.renderer.updateContext({\n state: state.variables,\n query: state.queries,\n context: {\n userId: this.options.userId,\n deviceId: this.options.deviceId,\n channel: this.options.channel,\n pageVersionId: state.page.pageVersionId\n }\n });\n this.renderer.render(state.page.pageJson, this.container);\n this.stateManager.setPhase(\"ready\");\n const renderTime = performance.now() - startTime;\n this.telemetryManager.recordFirstRender(renderTime);\n this.log(\"info\", `Page rendered in ${renderTime.toFixed(2)}ms`);\n } catch (error) {\n this.stateManager.setPhase(\"error\");\n this.handleError(error);\n throw error;\n }\n }\n /**\n * 获取 Host API\n */\n getHostApi() {\n return this.hostApi;\n }\n /**\n * 获取当前状态\n */\n getState() {\n return this.stateManager.getState();\n }\n /**\n * 订阅状态变更\n */\n onStateChange(listener) {\n return this.stateManager.subscribe(listener);\n }\n /**\n * 订阅事件\n */\n on(type, handler) {\n return this.eventBus.on(type, handler);\n }\n /**\n * 更新组件\n */\n updateComponent(componentId, props) {\n this.renderer.updateComponent(componentId, props);\n }\n /**\n * 设置变量\n */\n setVariable(key, value) {\n this.stateManager.setVariable(key, value);\n const state = this.stateManager.getState();\n if (state.page && this.container) {\n this.renderer.updateContext({\n state: state.variables\n });\n }\n }\n /**\n * 刷新数据\n */\n async refreshData(queryId) {\n const result = await this.hostApi.requestData(queryId);\n if (result.success) {\n this.stateManager.setQuery(queryId, result.data);\n const state = this.stateManager.getState();\n this.renderer.updateContext({\n query: state.queries\n });\n }\n }\n /**\n * 销毁运行时\n */\n destroy() {\n this.log(\"info\", \"Destroying runtime\");\n this.telemetryManager?.flush();\n this.renderer?.destroy();\n this.eventBus.clear();\n this.stateManager.setDestroyed();\n if (this.container) {\n this.container.innerHTML = \"\";\n }\n this.log(\"info\", \"Runtime destroyed\");\n }\n // ==================== 私有方法 ====================\n resolveContainer() {\n const { container } = this.options;\n if (typeof container === \"string\") {\n const element = document.querySelector(container);\n if (!element) {\n throw new Error(`Container not found: ${container}`);\n }\n return element;\n }\n return container;\n }\n initHostApi(page) {\n const context = {\n pageUid: page.pageUid,\n pageVersionId: page.pageVersionId,\n runtimeVersion: \"0.1.0\",\n userId: this.options.userId,\n deviceId: this.options.deviceId,\n channel: this.options.channel,\n isEditMode: false,\n isPreviewMode: page.isPreview || false\n };\n this.hostApi = new HostAPIImpl({\n apiBaseUrl: this.options.apiBaseUrl,\n authToken: this.options.authToken,\n headers: this.options.headers,\n stateManager: this.stateManager,\n eventBus: this.eventBus,\n expressionEngine: this.expressionEngine,\n context,\n debug: this.options.debug,\n logger: this.logger\n });\n }\n initRenderer() {\n const components = /* @__PURE__ */ new Map();\n const state = this.stateManager.getState();\n state.components.forEach((result, key) => {\n if (result.status === \"loaded\" && result.component) {\n const [name, version] = key.split(\"@\");\n components.set(name, {\n name,\n version,\n Component: result.component,\n loadTime: result.loadTime || 0\n });\n }\n });\n this.renderer = new BaseRenderer({\n expressionEngine: this.expressionEngine,\n components,\n injectHostApi: (element, componentId) => {\n element.hostApi = this.hostApi;\n element.componentId = componentId;\n },\n debug: this.options.debug,\n logger: this.logger,\n onRenderError: (componentId, error) => {\n this.log(\"error\", `Render error in ${componentId}:`, error);\n this.emitEvent(\"component:error\", { componentId, error: error.message });\n return createFallbackElement(\"error\", error.message);\n }\n });\n this.renderer.init();\n }\n handleError(error) {\n const runtimeError = error instanceof DjvlcRuntimeError ? error : { type: \"LOAD_ERROR\", message: error.message, timestamp: Date.now() };\n this.stateManager.setError(runtimeError);\n this.telemetryManager?.recordError(error);\n this.emitEvent(\"page:error\", { error: error.message });\n if (this.options.onError) {\n this.options.onError(runtimeError);\n }\n }\n emitEvent(type, data) {\n const event = EventBus.createEvent(type, data, this.telemetryManager?.getTraceId());\n this.eventBus.emit(event);\n if (this.options.onEvent) {\n this.options.onEvent(event);\n }\n }\n createLogger() {\n const prefix = \"[DJVLC]\";\n return {\n debug: (...args) => {\n if (this.options.debug) console.debug(prefix, ...args);\n },\n info: (...args) => console.info(prefix, ...args),\n warn: (...args) => console.warn(prefix, ...args),\n error: (...args) => console.error(prefix, ...args)\n };\n }\n log(level, message, ...args) {\n this.logger[level](message, ...args);\n }\n};\nexport {\n ActionBridge,\n ActionError,\n AssetLoader,\n BaseRenderer,\n ComponentBlockedError,\n ComponentLoadError,\n ComponentLoader,\n DjvlcRuntime,\n DjvlcRuntimeError,\n Evaluator,\n EventBus,\n ExpressionEngine,\n ExpressionError,\n HostAPIImpl,\n IntegrityError,\n Lexer,\n PageLoadError,\n PageLoader,\n Parser,\n QueryError,\n RenderError,\n SecurityManager,\n StateManager,\n TelemetryManager,\n builtinFunctions,\n createFallbackElement,\n createRuntime,\n registerFallbackComponents\n};\n","/**\n * @djvlc/runtime-web - DJV 低代码平台浏览器版运行时\n *\n * 用于 CDN 发布,提供:\n * - runtime.esm.js - ES Module 版本\n * - runtime.iife.js - IIFE 版本(全局变量 DJVRuntime)\n * - runtime.css - 运行时样式\n *\n * @example\n * ```html\n * <!-- IIFE 方式 -->\n * <script src=\"https://cdn.example.com/runtime/1.0.0/runtime.iife.js\"></script>\n * <script>\n * DJVRuntime.mount('#app', { pageUid: 'page_123', apiBaseUrl: '...' });\n * </script>\n *\n * <!-- ESM 方式 -->\n * <script type=\"module\">\n * import { mount } from 'https://cdn.example.com/runtime/1.0.0/runtime.esm.js';\n * mount('#app', { pageUid: 'page_123', apiBaseUrl: '...' });\n * </script>\n * ```\n */\n\nimport { createRuntime } from '@djvlc/runtime-core';\nimport type { RuntimeOptions } from '@djvlc/runtime-core';\n\n// 运行时版本\ndeclare const __RUNTIME_VERSION__: string;\nexport const RUNTIME_VERSION = typeof __RUNTIME_VERSION__ !== 'undefined' ? __RUNTIME_VERSION__ : '0.0.0';\n\n// ==================== 类型定义 ====================\n\n/**\n * 挂载选项(简化版,用于浏览器端)\n */\nexport interface MountOptions {\n /** 页面 UID */\n pageUid: string;\n /** API 基础 URL */\n apiBaseUrl: string;\n /** CDN 基础 URL */\n cdnBaseUrl: string;\n /** 渠道 */\n channel?: 'preview' | 'prod' | 'gray';\n /** 用户 ID */\n userId?: string;\n /** 设备 ID */\n deviceId?: string;\n /** 认证 Token */\n authToken?: string;\n /** 预览 Token(仅 preview 渠道) */\n previewToken?: string;\n /** 调试模式 */\n debug?: boolean;\n /** 是否启用 SRI 校验 */\n enableSRI?: boolean;\n /** 自定义请求头 */\n headers?: Record<string, string>;\n /** 加载完成回调 */\n onLoad?: (data: unknown) => void;\n /** 错误回调 */\n onError?: (error: Error) => void;\n /** 性能指标回调 */\n onMetric?: (metric: unknown) => void;\n}\n\n/**\n * 挂载结果\n */\nexport interface MountResult {\n /** 运行时实例 */\n runtime: ReturnType<typeof createRuntime>;\n /** 销毁函数 */\n destroy: () => void;\n}\n\n// ==================== 挂载函数 ====================\n\n/**\n * 挂载运行时到指定容器\n *\n * @param container - 容器选择器或元素\n * @param options - 挂载选项\n * @returns 挂载结果\n *\n * @example\n * ```javascript\n * const { runtime, destroy } = await DJVRuntime.mount('#app', {\n * pageUid: 'page_123',\n * apiBaseUrl: 'https://api.example.com',\n * cdnBaseUrl: 'https://cdn.example.com',\n * channel: 'prod',\n * });\n *\n * // 页面卸载时销毁\n * window.addEventListener('beforeunload', destroy);\n * ```\n */\nexport async function mount(\n container: string | HTMLElement,\n options: MountOptions\n): Promise<MountResult> {\n const runtimeOptions: RuntimeOptions = {\n container,\n pageUid: options.pageUid,\n apiBaseUrl: options.apiBaseUrl,\n cdnBaseUrl: options.cdnBaseUrl,\n channel: options.channel,\n userId: options.userId,\n deviceId: options.deviceId,\n authToken: options.authToken,\n previewToken: options.previewToken,\n debug: options.debug,\n enableSRI: options.enableSRI,\n headers: options.headers,\n onError: options.onError ? (error) => options.onError?.(new Error(error.message)) : undefined,\n onMetric: options.onMetric,\n };\n\n const runtime = createRuntime(runtimeOptions);\n\n try {\n await runtime.init();\n await runtime.load();\n await runtime.render();\n\n options.onLoad?.(runtime.getState());\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n options.onError?.(err);\n throw err;\n }\n\n return {\n runtime,\n destroy: () => runtime.destroy(),\n };\n}\n\n// ==================== 工具函数 ====================\n\n/**\n * 预连接 CDN/API 域名(优化加载速度)\n *\n * @param hosts - 域名列表\n *\n * @example\n * ```javascript\n * DJVRuntime.preconnect(['cdn.example.com', 'api.example.com']);\n * ```\n */\nexport function preconnect(hosts: string[]): void {\n hosts.forEach((host) => {\n const link = document.createElement('link');\n link.rel = 'preconnect';\n link.href = host.startsWith('http') ? host : `https://${host}`;\n link.crossOrigin = 'anonymous';\n document.head.appendChild(link);\n });\n}\n\n/**\n * 预加载 runtime 资源\n *\n * @param cdnBaseUrl - CDN 基础 URL\n * @param version - 运行时版本(默认当前版本)\n */\nexport function preloadAssets(cdnBaseUrl: string, version: string = RUNTIME_VERSION): void {\n const assets = [\n `${cdnBaseUrl}/runtime/${version}/runtime.esm.js`,\n `${cdnBaseUrl}/runtime/${version}/runtime.css`,\n ];\n\n assets.forEach((href) => {\n const link = document.createElement('link');\n link.rel = 'preload';\n link.href = href;\n link.as = href.endsWith('.js') ? 'script' : 'style';\n if (href.endsWith('.js')) {\n link.crossOrigin = 'anonymous';\n }\n document.head.appendChild(link);\n });\n}\n\n/**\n * 获取设备 ID(自动生成并持久化)\n */\nexport function getDeviceId(): string {\n const key = 'djv_device_id';\n let deviceId = localStorage.getItem(key);\n\n if (!deviceId) {\n deviceId = `${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;\n try {\n localStorage.setItem(key, deviceId);\n } catch {\n // localStorage 不可用时忽略\n }\n }\n\n return deviceId;\n}\n\n/**\n * 生成追踪 ID(W3C Trace Context 格式)\n */\nexport function generateTraceId(): string {\n const randomHex = (len: number) =>\n Array.from({ length: len }, () => Math.floor(Math.random() * 16).toString(16)).join('');\n return randomHex(32);\n}\n\n/**\n * 生成 Span ID\n */\nexport function generateSpanId(): string {\n const randomHex = (len: number) =>\n Array.from({ length: len }, () => Math.floor(Math.random() * 16).toString(16)).join('');\n return randomHex(16);\n}\n\n/**\n * 生成 traceparent 头\n */\nexport function generateTraceparent(): string {\n const traceId = generateTraceId();\n const spanId = generateSpanId();\n return `00-${traceId}-${spanId}-01`;\n}\n\n// ==================== 重新导出核心 API ====================\n\nexport { createRuntime } from '@djvlc/runtime-core';\nexport type { RuntimeOptions, RuntimeState, LoadedComponent, Logger } from '@djvlc/runtime-core';\n\n// ==================== 默认导出 ====================\n\nexport default {\n mount,\n preconnect,\n preloadAssets,\n getDeviceId,\n generateTraceId,\n generateSpanId,\n generateTraceparent,\n createRuntime,\n RUNTIME_VERSION,\n};\n"],"names":["ErrorCode","ErrorCode2","ErrorMessages","BUILTIN_FUNCTION_NAMES","Set","name","description","params","type","required","returnType","examples","defaultValue","map","f","isExpressionBinding","value","__isExpression","expression","migrations","registerMigration","migration","some","m","from","to","Error","push","migrate","data","actionDefVersionIds","dataQueryVersionIds","breaking","components","component","events","_a","event","enabled","DjvlcRuntimeError","constructor","code","message","details","traceId","super","this","timestamp","Date","now","toJSON","PageLoadError","PAGE_NOT_FOUND","ComponentLoadError","componentName","componentVersion","COMPONENT_NOT_FOUND","IntegrityError","expectedHash","actualHash","COMPONENT_INTEGRITY_MISMATCH","ComponentBlockedError","reason","COMPONENT_BLOCKED","ExpressionError","position","UNKNOWN","PageLoader","options","cache","Map","channel","maxAge","resolve","pageUid","cacheKey","getCacheKey","cached","get","isCacheValid","log","startTime","performance","url","buildResolveUrl","response","fetch","method","headers","buildHeaders","ok","status","statusText","result","json","isValidPageResolveResult","_b","set","loadTime","toFixed","error","preconnect","link","document","createElement","rel","href","apiBaseUrl","head","appendChild","clearCache","key","keys","startsWith","delete","clear","URL","searchParams","previewToken","uid","deviceId","toString","authToken","parts","join","r","pageVersionId","pageJson","manifest","level","logger","ComponentLoader","loadedComponents","loadingPromises","enableSRI","concurrency","timeout","blockedComponents","blockedSet","load","item","getComponentKey","version","isBlocked","loaded","loading","loadPromise","loadComponent","loadAll","results","i","length","batchPromises","slice","async","Component","critical","Promise","all","preload","items","forEach","as","resolveUrl","entryUrl","integrity","crossOrigin","isLoaded","has","updateBlockedList","blocked","fetchWithTimeout","content","text","validateIntegrity","executeScript","controller","AbortController","setTimeout","abort","signal","credentials","clearTimeout","algorithm","split","hashBuffer","crypto","subtle","digest","toUpperCase","TextEncoder","encode","hashArray","Array","Uint8Array","btoa","String","fromCharCode","blob","Blob","blobUrl","createObjectURL","module","import","default","revokeObjectURL","cdnBaseUrl","replace","AssetLoader","preconnectedHosts","preloadedAssets","preconnectAll","cdnHosts","apiHosts","host","add","dnsPrefetch","preloadScript","preloadStyle","preloadImage","prefetch","loadStylesheet","reject","onload","onerror","loadScript","script","src","body","StateManager","listeners","state","createInitialState","getState","getPhase","phase","setPhase","setState","setPage","page","variables","setError","getVariable","setVariable","setVariables","getQuery","queryId","queries","setQuery","setComponentStatus","setDestroyed","destroyed","subscribe","listener","reset","notifyListeners","partial","EventBus","handlers","debug","maxListeners","emit","handler","on","size","off","once","unsubscribe","listenerCount","createEvent","args","Lexer","input","pos","tokens","tokenize","skipWhitespace","token","readToken","start","end","char","isDigit","peek","readNumber","readString","isIdentifierStart","readIdentifier","operator","readOperator","parseFloat","quote","escaped","isIdentifierChar","twoChar","oneChar","includes","test","offset","PRECEDENCE","Parser","parse","parseExpression","current","parseTernary","parseBinary","advance","consequent","expect","alternate","raw","minPrecedence","left","parseUnary","precedence","right","argument","parsePostfix","node","parsePrimary","object","property","computed","index","callee","parseArguments","arguments","parseArray","expr","elements","builtinFunctions","len","isArray","trim","str","upper","lower","toLowerCase","substr","s","startNum","Number","lengthNum","substring","concat","a","search","replacement","separator","arr","endsWith","contains","toNumber","num","isNaN","toInt","Math","trunc","toFloat","round","decimals","dec","factor","pow","floor","ceil","abs","min","nums","filter","n","max","sum","reduce","acc","val","avg","random","randomInt","minNum","maxNum","today","toISOString","dateFormat","format","date","pad","padStart","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","dateParse","dateStr","getTime","year","month","day","addDays","days","setDate","diffDays","timestamp1","timestamp2","date1","date2","diffTime","isNull","isUndefined","isEmpty","Object","isObject","isString","isNumber","isBoolean","typeOf","coalesce","arg","ifElse","condition","trueValue","falseValue","first","last","at","indexOf","reverse","sort","unique","flatten","flat","count","obj","path","part","values","entries","merge","objs","assign","and","every","Boolean","or","not","eq","b","ne","gt","gte","lt","lte","between","formatNumber","toLocaleString","minimumFractionDigits","maximumFractionDigits","formatCurrency","currency","cur","style","formatPercent","jsonParse","JSON","jsonStringify","stringify","Evaluator","depth","maxDepth","evaluate","ast","context","evaluateNode","checkLimits","evaluateLiteral","evaluateIdentifier","evaluateMember","evaluateCall","evaluateBinary","evaluateUnary","evaluateConditional","evaluateArray","query","fn","op","left2","el","ExpressionEngine","astCache","cacheAST","maxCacheSize","evaluator","evaluateWithFallback","fallback","evaluateTemplate","template","_","validate","errors","warnings","referencedPaths","calledFunctions","collectReferences","valid","paths","functions","buildMemberPath","objectPath","HostAPIImpl","storage","fullKey","getStorageKey","namespace","localStorage","getItem","parsed","expires","removeItem","ttl","setItem","remove","storageNamespace","requestData","queryVersionId","userId","duration","success","stateManager","executeAction","actionType","idempotencyKey","generateIdempotencyKey","navigate","track","eventName","newTab","URLSearchParams","window","open","location","goBack","history","back","refresh","reload","openDialog","alert","title","confirm","prompt","closeDialog","showToast","toast","className","textContent","transform","padding","borderRadius","color","fontSize","zIndex","animation","backgroundColor","warning","info","top","center","bottom","runtimeVersion","keepalive","catch","copyToClipboard","navigator","clipboard","writeText","readFromClipboard","readText","postMessage","componentId","CustomEvent","detail","dispatchEvent","broadcast","getContext","paramsStr","simpleHash","hash","charCodeAt","SecurityManager","blockedComponentsMap","blockedActionsSet","cdnDomains","apiDomains","blockedActions","actions","c","isComponentBlocked","getBlockedInfo","isActionBlocked","validateComponent","expectedIntegrity","computeHash","isAllowedUrl","domains","parsedUrl","domain","suffix","hostname","generateCSPPolicy","scriptSrc","connectSrc","applyCSP","meta","httpEquiv","assertNotBlocked","_log","bind","TelemetryManager","spans","metrics","sampleRate","generateId","shouldSample","getTraceId","getTraceparent","startSpan","parentSpanId","attributes","span","spanId","endSpan","endTime","recordMetric","extra","metric","onMetric","recordError","runtimeError","stack","reportError","recordPageLoad","recordComponentLoad","recordFirstRender","recordActionExecute","recordQueryExecute","fromCache","getMetrics","getSpans","flush","endpoint","payload","appId","array","getRandomValues","BaseRenderer","container","renderedElements","expressionContext","init","render","schema","id","innerHTML","applyPageStyles","canvas","fragment","createDocumentFragment","element","renderComponent","updateComponent","props","applyProps","updateContext","destroy","instance","children","visible","loadedComponent","customElements","setAttribute","resolvedProps","resolveProps","applyStyles","injectHostApi","child","childElement","onRenderError","resolved","expressionEngine","tagName","removeAttribute","cssValue","cssKey","setProperty","width","height","minHeight","background","classList","createRuntime","DjvlcRuntime","createLogger","eventBus","pageLoader","componentLoader","assetLoader","securityManager","resolveContainer","define","HTMLElement","attachShadow","mode","observedAttributes","attributeChangedCallback","_oldValue","newValue","shadowRoot","querySelector","initTime","handleError","telemetryManager","runtimeConfig","killSwitches","initHostApi","initRenderer","emitEvent","renderer","renderTime","getHostApi","hostApi","onStateChange","refreshData","isEditMode","isPreviewMode","isPreview","createFallbackElement","onError","onEvent","warn","RUNTIME_VERSION","mount","runtime","call","onLoad","err","hosts","preloadAssets","getDeviceId","generateTraceId","generateSpanId","generateTraceparent"],"mappings":"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","x_google_ignoreList":[0]}
|