@djvlc/contracts-types 1.3.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/version.ts","../src/errors/index.ts","../src/page/index.ts","../src/component/index.ts","../src/expression/index.ts","../src/migrations/index.ts"],"sourcesContent":["/**\n * @djvlc/contracts-types - DJV 低代码平台 TypeScript 类型定义包\n *\n * 这是全平台的类型定义唯一真相源\n *\n * @packageDocumentation\n */\n\n\n// 版本信息\nexport * from './version';\n\n// 错误码\nexport * from './errors';\n\n// 通用类型(操作类型、操作者信息、分页等)\nexport * from './common';\n\n// 页面 Schema 类型\nexport * from './page';\n\n// 组件 Meta Schema 类型\nexport * from './component';\n\n// Action 规范类型\nexport * from './action';\n\n// Data Query 规范类型\nexport * from './data-query';\n\n// HostAPI 类型(组件可调用的安全 API)\nexport * from './host-api';\n\n// 资源类型\nexport * from './asset';\n\n// 运行时类型(Manifest、RuntimeConfig、PageResolveResult 等)\nexport * from './runtime';\n\n// API 响应类型(统一响应格式)\nexport * from './api';\n\n// 表达式引擎类型(DSL、白名单函数)\nexport * from './expression';\n\n// 迁移工具\nexport * from './migrations';\n","/**\n * 协议版本常量\n * 用于标识当前 schema 版本,支持版本迁移\n */\n\n/** 当前页面 Schema 版本 */\nexport const PAGE_SCHEMA_VERSION = '1.0.0';\n\n/** 当前组件 Meta Schema 版本 */\nexport const COMPONENT_META_SCHEMA_VERSION = '1.0.0';\n\n/** 当前 Action 规范版本 */\nexport const ACTION_SPEC_VERSION = '1.0.0';\n\n/** 当前 Data Query 规范版本 */\nexport const DATA_QUERY_SPEC_VERSION = '1.0.0';\n\n/** 协议版本信息 */\nexport interface ContractsVersion {\n pageSchema: string;\n componentMeta: string;\n actionSpec: string;\n dataQuerySpec: string;\n}\n\n/** 获取当前协议版本 */\nexport function getContractsVersion(): ContractsVersion {\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}\n\n/**\n * 检查版本兼容性\n * @param required 要求的版本\n * @param current 当前版本\n * @returns 是否兼容\n */\nexport function isVersionCompatible(required: string, current: string): boolean {\n const [reqMajor, reqMinor] = required.split('.').map(Number);\n const [curMajor, curMinor] = current.split('.').map(Number);\n\n // 主版本必须相同,次版本当前必须 >= 要求\n return curMajor === reqMajor && curMinor >= reqMinor;\n}\n","/**\n * 错误码规范\n * 统一的错误码定义,用于 Action Gateway / Data Proxy / Runtime\n */\n\n/** 错误码枚举 */\nexport enum ErrorCode {\n // 通用错误 (1xxx)\n UNKNOWN = 1000,\n INVALID_REQUEST = 1001,\n UNAUTHORIZED = 1002,\n FORBIDDEN = 1003,\n NOT_FOUND = 1004,\n RATE_LIMITED = 1005,\n VALIDATION_ERROR = 1006,\n INTERNAL_ERROR = 1007,\n SERVICE_UNAVAILABLE = 1008,\n TIMEOUT = 1009,\n\n // Action 错误 (2xxx)\n ACTION_NOT_FOUND = 2001,\n ACTION_INVALID_PARAMS = 2002,\n ACTION_EXECUTION_FAILED = 2003,\n ACTION_IDEMPOTENCY_CONFLICT = 2004,\n ACTION_BLOCKED = 2005,\n ACTION_RISK_REJECTED = 2006,\n ACTION_EXPIRED = 2007,\n ACTION_QUOTA_EXCEEDED = 2008,\n\n // Data Query 错误 (3xxx)\n QUERY_NOT_FOUND = 3001,\n QUERY_INVALID_PARAMS = 3002,\n QUERY_EXECUTION_FAILED = 3003,\n QUERY_FIELD_NOT_ALLOWED = 3004,\n QUERY_TIMEOUT = 3005,\n QUERY_DISABLED = 3006,\n\n // 组件错误 (4xxx)\n COMPONENT_NOT_FOUND = 4001,\n COMPONENT_VERSION_NOT_FOUND = 4002,\n COMPONENT_BLOCKED = 4003,\n COMPONENT_INTEGRITY_MISMATCH = 4004,\n COMPONENT_INCOMPATIBLE = 4005,\n COMPONENT_LOAD_FAILED = 4006,\n COMPONENT_RENDER_ERROR = 4007,\n\n // 页面错误 (5xxx)\n PAGE_NOT_FOUND = 5001,\n PAGE_VERSION_NOT_FOUND = 5002,\n PAGE_SCHEMA_INVALID = 5003,\n PAGE_MANIFEST_INVALID = 5004,\n PAGE_PUBLISH_FAILED = 5005,\n PAGE_ROLLBACK_FAILED = 5006,\n\n // 活动错误 (6xxx)\n ACTIVITY_NOT_FOUND = 6001,\n ACTIVITY_NOT_STARTED = 6002,\n ACTIVITY_ENDED = 6003,\n ACTIVITY_ALREADY_CLAIMED = 6004,\n ACTIVITY_ALREADY_SIGNED = 6005,\n ACTIVITY_LIMIT_EXCEEDED = 6006,\n ACTIVITY_DISABLED = 6007,\n\n // 表达式错误 (7xxx)\n EXPRESSION_SYNTAX_ERROR = 7001,\n EXPRESSION_UNKNOWN_FUNCTION = 7002,\n EXPRESSION_INVALID_ARGUMENT = 7003,\n EXPRESSION_UNKNOWN_VARIABLE = 7004,\n EXPRESSION_TYPE_MISMATCH = 7005,\n EXPRESSION_ACCESS_DENIED = 7006,\n\n // 版本/迁移错误 (8xxx)\n SCHEMA_VERSION_MISMATCH = 8001,\n MIGRATION_FAILED = 8002,\n MIGRATION_NOT_FOUND = 8003,\n VERSION_INCOMPATIBLE = 8004,\n}\n\n/** 错误码分类 */\nexport const ErrorCodeCategory = {\n GENERAL: [1000, 1999] as const,\n ACTION: [2000, 2999] as const,\n QUERY: [3000, 3999] as const,\n COMPONENT: [4000, 4999] as const,\n PAGE: [5000, 5999] as const,\n ACTIVITY: [6000, 6999] as const,\n EXPRESSION: [7000, 7999] as const,\n VERSION: [8000, 8999] as const,\n};\n\n/** 错误信息映射 */\nexport const ErrorMessages: Record<ErrorCode, string> = {\n // 通用错误\n [ErrorCode.UNKNOWN]: '未知错误',\n [ErrorCode.INVALID_REQUEST]: '请求参数无效',\n [ErrorCode.UNAUTHORIZED]: '未授权访问',\n [ErrorCode.FORBIDDEN]: '禁止访问',\n [ErrorCode.NOT_FOUND]: '资源不存在',\n [ErrorCode.RATE_LIMITED]: '请求频率超限',\n [ErrorCode.VALIDATION_ERROR]: '数据校验失败',\n [ErrorCode.INTERNAL_ERROR]: '服务内部错误',\n [ErrorCode.SERVICE_UNAVAILABLE]: '服务暂不可用',\n [ErrorCode.TIMEOUT]: '请求超时',\n\n // Action 错误\n [ErrorCode.ACTION_NOT_FOUND]: '动作不存在',\n [ErrorCode.ACTION_INVALID_PARAMS]: '动作参数无效',\n [ErrorCode.ACTION_EXECUTION_FAILED]: '动作执行失败',\n [ErrorCode.ACTION_IDEMPOTENCY_CONFLICT]: '重复请求',\n [ErrorCode.ACTION_BLOCKED]: '动作已被禁用',\n [ErrorCode.ACTION_RISK_REJECTED]: '风控拒绝',\n [ErrorCode.ACTION_EXPIRED]: '动作已过期',\n [ErrorCode.ACTION_QUOTA_EXCEEDED]: '配额已用尽',\n\n // Data Query 错误\n [ErrorCode.QUERY_NOT_FOUND]: '查询不存在',\n [ErrorCode.QUERY_INVALID_PARAMS]: '查询参数无效',\n [ErrorCode.QUERY_EXECUTION_FAILED]: '查询执行失败',\n [ErrorCode.QUERY_FIELD_NOT_ALLOWED]: '字段访问被拒绝',\n [ErrorCode.QUERY_TIMEOUT]: '查询超时',\n [ErrorCode.QUERY_DISABLED]: '查询已禁用',\n\n // 组件错误\n [ErrorCode.COMPONENT_NOT_FOUND]: '组件不存在',\n [ErrorCode.COMPONENT_VERSION_NOT_FOUND]: '组件版本不存在',\n [ErrorCode.COMPONENT_BLOCKED]: '组件已被禁用',\n [ErrorCode.COMPONENT_INTEGRITY_MISMATCH]: '组件完整性校验失败',\n [ErrorCode.COMPONENT_INCOMPATIBLE]: '组件版本不兼容',\n [ErrorCode.COMPONENT_LOAD_FAILED]: '组件加载失败',\n [ErrorCode.COMPONENT_RENDER_ERROR]: '组件渲染错误',\n\n // 页面错误\n [ErrorCode.PAGE_NOT_FOUND]: '页面不存在',\n [ErrorCode.PAGE_VERSION_NOT_FOUND]: '页面版本不存在',\n [ErrorCode.PAGE_SCHEMA_INVALID]: '页面 Schema 无效',\n [ErrorCode.PAGE_MANIFEST_INVALID]: '页面 Manifest 无效',\n [ErrorCode.PAGE_PUBLISH_FAILED]: '页面发布失败',\n [ErrorCode.PAGE_ROLLBACK_FAILED]: '页面回滚失败',\n\n // 活动错误\n [ErrorCode.ACTIVITY_NOT_FOUND]: '活动不存在',\n [ErrorCode.ACTIVITY_NOT_STARTED]: '活动未开始',\n [ErrorCode.ACTIVITY_ENDED]: '活动已结束',\n [ErrorCode.ACTIVITY_ALREADY_CLAIMED]: '已领取过',\n [ErrorCode.ACTIVITY_ALREADY_SIGNED]: '今日已签到',\n [ErrorCode.ACTIVITY_LIMIT_EXCEEDED]: '超出领取限制',\n [ErrorCode.ACTIVITY_DISABLED]: '活动已禁用',\n\n // 表达式错误\n [ErrorCode.EXPRESSION_SYNTAX_ERROR]: '表达式语法错误',\n [ErrorCode.EXPRESSION_UNKNOWN_FUNCTION]: '未知函数',\n [ErrorCode.EXPRESSION_INVALID_ARGUMENT]: '无效参数',\n [ErrorCode.EXPRESSION_UNKNOWN_VARIABLE]: '未知变量',\n [ErrorCode.EXPRESSION_TYPE_MISMATCH]: '类型不匹配',\n [ErrorCode.EXPRESSION_ACCESS_DENIED]: '访问被拒绝',\n\n // 版本/迁移错误\n [ErrorCode.SCHEMA_VERSION_MISMATCH]: 'Schema 版本不匹配',\n [ErrorCode.MIGRATION_FAILED]: '迁移失败',\n [ErrorCode.MIGRATION_NOT_FOUND]: '迁移脚本不存在',\n [ErrorCode.VERSION_INCOMPATIBLE]: '版本不兼容',\n};\n\n/** DJV 错误对象 */\nexport interface DjvlcError {\n code: ErrorCode;\n message: string;\n details?: Record<string, unknown>;\n traceId?: string;\n timestamp?: number;\n}\n\n/** 创建 DJV 错误 */\nexport function createDjvlcError(\n code: ErrorCode,\n details?: Record<string, unknown>,\n traceId?: string\n): DjvlcError {\n return {\n code,\n message: ErrorMessages[code] || '未知错误',\n details,\n traceId,\n timestamp: Date.now(),\n };\n}\n\n/** 根据错误码获取 HTTP 状态码 */\nexport function getHttpStatusFromErrorCode(code: ErrorCode): number {\n if (code === ErrorCode.UNAUTHORIZED) return 401;\n if (code === ErrorCode.FORBIDDEN) return 403;\n if (code === ErrorCode.NOT_FOUND) return 404;\n if (code === ErrorCode.RATE_LIMITED) return 429;\n if (code === ErrorCode.TIMEOUT) return 408;\n if (code === ErrorCode.SERVICE_UNAVAILABLE) return 503;\n \n // 将枚举转换为数字进行范围比较\n const numericCode = Number(code);\n if (numericCode >= 1000 && numericCode < 2000) return 400; // 认证错误\n if (numericCode >= 2000 && numericCode < 3000) return 400; // 权限错误\n if (numericCode >= 3000 && numericCode < 4000) return 400; // Schema 错误\n if (numericCode >= 4000 && numericCode < 5000) return 404; // 页面错误\n if (numericCode >= 5000 && numericCode < 6000) return 404; // 组件错误\n if (numericCode >= 6000 && numericCode < 7000) return 400; // Action 错误\n if (numericCode >= 7000 && numericCode < 8000) return 400; // 数据查询错误\n if (numericCode >= 8000 && numericCode < 9000) return 400; // 运行时错误\n return 500;\n}\n\n/** 检查是否为可重试错误 */\nexport function isRetryableError(code: ErrorCode): boolean {\n return [\n ErrorCode.TIMEOUT,\n ErrorCode.SERVICE_UNAVAILABLE,\n ErrorCode.QUERY_TIMEOUT,\n ErrorCode.COMPONENT_LOAD_FAILED,\n ].includes(code);\n}\n","/**\n * 页面 Schema 类型定义\n * 与 djvlc-platform @libs/contracts 保持一致\n */\n\n// ==================== 基础类型 ====================\n\n/** 页面状态 */\nexport type PageStatus = 'draft' | 'published';\n\n/** 画布类型 */\nexport type CanvasType = 'h5' | 'tablet' | 'pc';\n\n/**\n * 页面排序字段\n */\nexport type PageSortField =\n | 'id'\n | 'createdAt'\n | 'updatedAt'\n | 'publishedAt'\n | 'title'\n | 'viewCount'\n | 'sortOrder';\n\n/** 发布渠道 */\nexport type PublishChannel = 'preview' | 'prod' | 'gray';\n\n/** 发布状态 */\nexport enum PublishStatus {\n PENDING = 'pending',\n PUBLISHING = 'publishing',\n SUCCESS = 'success',\n FAILED = 'failed',\n ROLLBACK = 'rollback',\n}\n\n// ==================== 模板相关类型 ====================\n\n/**\n * 模板分类\n */\nexport type TemplateCategory =\n | 'all'\n | 'ecommerce'\n | 'marketing'\n | 'corporate'\n | 'other';\n\n/**\n * 模板排序字段\n */\nexport type TemplateSortField = 'id' | 'createdAt' | 'usageCount' | 'sortOrder';\n\n// ==================== PageSchema 核心数据结构 ====================\n\n/**\n * 页面 Schema(核心)\n * 存储在 Page 的 schema 字段中的完整结构\n */\nexport interface PageSchema {\n /** Schema 版本号 */\n schemaVersion: string;\n /** 页面配置 */\n page: PageConfig;\n /** 组件列表 */\n components: ComponentInstance[];\n /** 绑定的 ActionDefinition 版本 ID */\n actionDefVersionIds?: string[];\n /** 绑定的 DataQuery 版本 ID */\n dataQueryVersionIds?: string[];\n}\n\n/** 页面配置 */\nexport interface PageConfig {\n id: string;\n title: string;\n description?: string;\n canvas: CanvasConfig;\n meta?: PageMeta;\n variables?: Record<string, unknown>;\n apis?: ApiConfig[];\n}\n\n/** 画布配置 */\nexport interface CanvasConfig {\n type: CanvasType;\n width: number;\n height?: number;\n background?: string;\n gridSize?: number;\n showGrid?: boolean;\n showRuler?: boolean;\n guides?: Guide[];\n}\n\n/** 参考线 */\nexport interface Guide {\n id: string;\n type: 'horizontal' | 'vertical';\n position: number;\n}\n\n/** 页面元数据 */\nexport interface PageMeta {\n createTime?: string;\n updateTime?: string;\n author?: string;\n version?: string;\n tags?: string[];\n status?: PageStatus;\n}\n\n/** API 配置 */\nexport interface ApiConfig {\n id: string;\n name: string;\n url: string;\n method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n headers?: Record<string, string>;\n params?: Record<string, unknown>;\n body?: Record<string, unknown>;\n timeout?: number;\n autoRun?: boolean;\n dependencies?: string[];\n}\n\n// ==================== 组件实例类型 ====================\n\n/** 组件实例(运行时数据) */\nexport interface ComponentInstance {\n id: string;\n type: string;\n name?: string;\n props: Record<string, unknown>;\n style: ComponentStyle;\n layout?: ComponentLayout;\n events?: ComponentEvent[];\n visible?: boolean;\n locked?: boolean;\n children?: ComponentInstance[];\n}\n\n/** 组件样式 */\nexport interface ComponentStyle {\n // 尺寸\n width?: string | number;\n height?: string | number;\n minWidth?: string | number;\n minHeight?: string | number;\n maxWidth?: string | number;\n maxHeight?: string | number;\n\n // 间距\n margin?: string;\n padding?: string;\n\n // 颜色\n color?: string;\n backgroundColor?: string;\n borderColor?: string;\n\n // 边框\n border?: string;\n borderWidth?: string | number;\n borderStyle?: string;\n borderRadius?: string | number;\n\n // 字体\n fontSize?: string | number;\n fontWeight?: string | number;\n fontFamily?: string;\n lineHeight?: string | number;\n textAlign?: string;\n\n // 定位\n position?: string;\n top?: string | number;\n right?: string | number;\n bottom?: string | number;\n left?: string | number;\n zIndex?: number;\n\n // 显示\n display?: string;\n opacity?: number;\n overflow?: string;\n visibility?: string;\n\n // Flexbox\n flexDirection?: string;\n justifyContent?: string;\n alignItems?: string;\n flexWrap?: string;\n flex?: string | number;\n gap?: string | number;\n\n // Grid\n gridTemplateColumns?: string;\n gridTemplateRows?: string;\n gridGap?: string | number;\n\n // 变换\n transform?: string;\n transformOrigin?: string;\n\n // 过渡动画\n transition?: string;\n\n // 其他\n [key: string]: unknown;\n}\n\n/** 组件布局 */\nexport interface ComponentLayout {\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n rotation?: number;\n}\n\n/** 组件事件 */\nexport interface ComponentEvent {\n id: string;\n trigger: string;\n actions: EventAction[];\n enabled?: boolean;\n condition?: string;\n debounce?: number;\n throttle?: number;\n}\n\n/** 事件动作 */\nexport interface EventAction {\n id: string;\n type: string;\n params: Record<string, unknown>;\n enabled?: boolean;\n delay?: number;\n}\n\n// ==================== 发布配置类型 ====================\n\n/**\n * 灰度规则\n */\nexport interface GrayRule {\n /** 规则名称 */\n name: string;\n /** 规则类型 */\n type: 'user' | 'ip' | 'header' | 'cookie' | 'custom';\n /** 匹配条件 */\n condition: string;\n /** 是否启用 */\n enabled: boolean;\n}\n\n/**\n * 灰度发布配置\n */\nexport interface GrayPublishConfig {\n /** 灰度比例 (0-100) */\n percentage?: number;\n /** 白名单用户 UID */\n whitelistUsers?: string[];\n /** 白名单 IP */\n whitelistIps?: string[];\n /** 自定义规则 */\n rules?: GrayRule[];\n}\n\n/**\n * 发布配置\n */\nexport interface PublishConfig {\n /** 发布渠道 */\n channel: PublishChannel;\n /** 发布描述 */\n description?: string;\n /** 灰度配置(仅 gray 渠道) */\n grayConfig?: GrayPublishConfig;\n /** 是否自动发布(跳过审核) */\n autoPublish?: boolean;\n /** 定时发布时间 */\n scheduledAt?: string;\n}\n\n// ==================== 版本相关类型 ====================\n\n/**\n * 版本信息\n */\nexport interface VersionInfo {\n uid: string;\n versionNumber: number;\n versionLabel?: string;\n description?: string;\n isAutoSave: boolean;\n isPublished: boolean;\n createdAt: string;\n createdBy: string;\n createdByUsername: string;\n}\n\n/**\n * 版本对比结果\n */\nexport interface VersionDiff {\n added: string[];\n removed: string[];\n modified: string[];\n changeLog: Record<string, ChangeLogItem>;\n}\n\n// ==================== 变更日志类型 ====================\n\n/**\n * 变更日志项\n */\nexport interface ChangeLogItem {\n /** 旧值 */\n old: unknown;\n /** 新值 */\n new: unknown;\n /** 摘要描述 */\n summary?: string;\n}\n\n/**\n * 变更日志\n */\nexport type ChangeLog = Record<string, ChangeLogItem>;\n","/**\n * 组件 Meta Schema 类型定义\n * 定义每个组件版本必须包含的元数据\n */\n\n/** JSON Schema 类型定义 */\nexport interface JsonSchema {\n type: 'string' | 'number' | 'boolean' | 'object' | 'array' | 'null';\n title?: string;\n description?: string;\n default?: unknown;\n enum?: unknown[];\n properties?: Record<string, JsonSchema>;\n items?: JsonSchema;\n required?: string[];\n minimum?: number;\n maximum?: number;\n minLength?: number;\n maxLength?: number;\n pattern?: string;\n format?: string;\n $ref?: string;\n}\n\n/** Props Schema - 组件属性定义 */\nexport interface PropsSchema {\n $schema?: string;\n type: 'object';\n title: string;\n description?: string;\n properties: Record<string, JsonSchema & {\n /** 属性分组 */\n group?: string;\n /** 编辑器中的控件类型 */\n 'x-editor-widget'?: string;\n /** 是否支持表达式绑定 */\n 'x-expression-enabled'?: boolean;\n }>;\n required?: string[];\n}\n\n\n/** 事件定义 */\nexport interface EventDefinition {\n /** 事件名称 */\n name: string;\n /** 事件显示名 */\n label: string;\n /** 事件描述 */\n description?: string;\n /** 事件参数 Schema */\n payload?: JsonSchema;\n}\n\n/** 组件事件列表 */\nexport interface EventsDefinition {\n /** 事件版本 */\n version: string;\n /** 事件列表 */\n events: EventDefinition[];\n}\n\n/** 组件能力声明 */\nexport interface CapabilitiesDefinition {\n /** 能力版本 */\n version: string;\n /** 是否需要用户登录态 */\n requiresAuth?: boolean;\n /** 是否需要执行 Action */\n requiresAction?: boolean;\n /** 需要的 Action 类型 */\n actionTypes?: string[];\n /** 是否需要 Data Query */\n requiresDataQuery?: boolean;\n /** 需要的 Query 类型 */\n queryTypes?: string[];\n /** 是否需要导航能力 */\n requiresNavigation?: boolean;\n /** 是否需要埋点能力 */\n requiresTrack?: boolean;\n /** 是否需要对话框能力 */\n requiresDialog?: boolean;\n /** 是否需要剪贴板能力 */\n requiresClipboard?: boolean;\n /** 自定义能力 */\n custom?: string[];\n}\n\n/** 兼容性定义 */\nexport interface CompatDefinition {\n /** 兼容版本 */\n version: string;\n /** 最低运行时版本 */\n minRuntime: string;\n /** 最高运行时版本(可选) */\n maxRuntime?: string;\n /** 是否有破坏性变更 */\n breaking?: boolean;\n /** 破坏性变更说明 */\n breakingChanges?: string[];\n /** 从哪个版本可以无缝升级 */\n upgradeFrom?: string[];\n}\n\n/** 组件分类 */\nexport type ComponentCategory =\n | 'basic' // 基础组件\n | 'form' // 表单组件\n | 'layout' // 布局组件\n | 'navigation' // 导航组件\n | 'feedback' // 反馈组件\n | 'display' // 展示组件\n | 'data' // 数据组件\n | 'business' // 业务组件\n | 'chart' // 图表组件\n | 'other'; // 其他\n\n/** 组件分类列表(用于校验和 UI) */\nexport const COMPONENT_CATEGORIES: ComponentCategory[] = [\n 'basic',\n 'form',\n 'layout',\n 'navigation',\n 'feedback',\n 'display',\n 'data',\n 'business',\n 'chart',\n 'other',\n];\n\n/** SRI 完整性校验 */\nexport interface IntegrityDefinition {\n /** 完整性版本 */\n version: string;\n /** 主入口文件哈希 */\n main: string;\n /** 所有文件哈希 */\n files: Record<string, string>;\n /** 生成时间 */\n generatedAt: string;\n /** 哈希算法 */\n algorithm: 'sha256' | 'sha384' | 'sha512';\n}\n\n/** 组件状态 */\nexport type ComponentStatus =\n | 'draft'\n | 'canary'\n | 'stable'\n | 'deprecated'\n | 'blocked';\n\n/** 组件版本元数据(完整) */\nexport interface ComponentMeta {\n /** 组件名称 */\n name: string;\n /** 组件版本 */\n version: string;\n /** 显示名称 */\n label: string;\n /** 组件描述 */\n description?: string;\n /** 组件图标 */\n icon?: string;\n /** 组件分类 */\n category: ComponentCategory;\n /** 组件标签 */\n tags?: string[];\n /** 组件作者 */\n author?: string;\n /** 属性定义 */\n props: PropsSchema;\n /** 事件定义 */\n events: EventsDefinition;\n /** 能力声明 */\n capabilities: CapabilitiesDefinition;\n /** 兼容性 */\n compat: CompatDefinition;\n /** 完整性校验 */\n integrity: IntegrityDefinition;\n /** 组件状态 */\n status: ComponentStatus;\n /** 预览图 */\n preview?: string;\n /** 入口文件(相对路径) */\n entry: string;\n /** 样式文件(相对路径) */\n styles?: string[];\n}\n\n/** Registry 中的组件版本记录 */\nexport interface ComponentVersionRecord {\n /** 组件 ID */\n componentId: string;\n /** 组件名称 */\n name: string;\n /** 版本号 */\n version: string;\n /** CDN 入口 URL */\n entryUrl: string;\n /** 元数据 */\n meta: ComponentMeta;\n /** 状态 */\n status: ComponentStatus;\n /** 发布时间 */\n publishedAt: string;\n /** 发布者 */\n publishedBy: string;\n /** 阻断信息(如果被阻断) */\n blockInfo?: {\n reason: string;\n blockedAt: string;\n blockedBy: string;\n };\n}\n\n/** Manifest 中的组件引用 */\nexport interface ManifestItem {\n /** 组件名称 */\n name: string;\n /** 组件版本 */\n version: string;\n /** 入口 URL */\n entryUrl: string;\n /** SRI 哈希 */\n integrity: string;\n /** 是否必须成功加载 */\n critical?: boolean;\n}\n\n/** 页面 Manifest */\nexport interface PageManifest {\n /** Manifest 版本 */\n manifestVersion: string;\n /** 内容哈希 */\n contentHash: string;\n /** 运行时版本 */\n runtimeVersion: string;\n /** 组件清单 */\n components: ManifestItem[];\n /** 生成时间 */\n generatedAt: string;\n}\n","/**\n * 表达式引擎类型定义\n * 无 eval 的安全 DSL,支持发布期校验\n */\n\n// ==================== 表达式类型 ====================\n\n/**\n * 表达式类型\n */\nexport type ExpressionType =\n | 'literal' // 字面量\n | 'identifier' // 标识符(变量引用)\n | 'member' // 成员访问(a.b)\n | 'index' // 索引访问(a[0])\n | 'call' // 函数调用\n | 'binary' // 二元运算\n | 'unary' // 一元运算\n | 'conditional' // 三元条件\n | 'array' // 数组字面量\n | 'object'; // 对象字面量\n\n/**\n * 表达式 AST 节点基类\n */\nexport interface ExpressionNode {\n /** 节点类型 */\n type: ExpressionType;\n /** 原始表达式 */\n raw?: string;\n /** 起始位置 */\n start?: number;\n /** 结束位置 */\n end?: number;\n}\n\n/**\n * 字面量节点\n */\nexport interface LiteralNode extends ExpressionNode {\n type: 'literal';\n value: string | number | boolean | null;\n}\n\n/**\n * 标识符节点\n */\nexport interface IdentifierNode extends ExpressionNode {\n type: 'identifier';\n name: string;\n}\n\n/**\n * 成员访问节点\n */\nexport interface MemberNode extends ExpressionNode {\n type: 'member';\n object: ExpressionNode;\n property: string;\n}\n\n/**\n * 函数调用节点\n */\nexport interface CallNode extends ExpressionNode {\n type: 'call';\n callee: string;\n arguments: ExpressionNode[];\n}\n\n/**\n * 二元运算节点\n */\nexport interface BinaryNode extends ExpressionNode {\n type: 'binary';\n operator: BinaryOperator;\n left: ExpressionNode;\n right: ExpressionNode;\n}\n\n/**\n * 二元运算符\n */\nexport type BinaryOperator = \n // 算术\n | '+' | '-' | '*' | '/' | '%'\n // 比较\n | '==' | '!=' | '>' | '<' | '>=' | '<='\n // 逻辑\n | '&&' | '||'\n // 空值合并\n | '??';\n\n/**\n * 一元运算符\n */\nexport type UnaryOperator = '!' | '-' | '+';\n\n// ==================== 白名单函数 ====================\n\n/**\n * 内置函数定义\n */\nexport interface BuiltinFunction {\n /** 函数名 */\n name: string;\n /** 描述 */\n description: string;\n /** 参数定义 */\n params: FunctionParam[];\n /** 返回类型 */\n returnType: ValueType;\n /** 示例 */\n examples?: string[];\n}\n\n/**\n * 函数参数定义\n */\nexport interface FunctionParam {\n /** 参数名 */\n name: string;\n /** 参数类型 */\n type: ValueType;\n /** 是否必填 */\n required: boolean;\n /** 默认值 */\n defaultValue?: unknown;\n /** 描述 */\n description?: string;\n}\n\n/**\n * 值类型\n */\nexport type ValueType =\n | 'string'\n | 'number'\n | 'boolean'\n | 'array'\n | 'object'\n | 'null'\n | 'any'\n | 'void';\n\n/**\n * 内置函数白名单\n * 表达式中只能调用这些函数\n */\nexport const BUILTIN_FUNCTIONS: BuiltinFunction[] = [\n // 字符串函数\n {\n name: 'len',\n description: '获取字符串或数组长度',\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: '去除字符串首尾空格',\n params: [{ name: 'str', type: 'string', required: true }],\n returnType: 'string',\n examples: ['trim(\" hello \")'],\n },\n {\n name: 'upper',\n description: '转为大写',\n params: [{ name: 'str', type: 'string', required: true }],\n returnType: 'string',\n examples: ['upper(\"hello\")'],\n },\n {\n name: 'lower',\n description: '转为小写',\n params: [{ name: 'str', type: 'string', required: true }],\n returnType: 'string',\n examples: ['lower(\"HELLO\")'],\n },\n {\n name: 'substr',\n description: '截取子字符串',\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: '连接字符串',\n params: [\n { name: 'values', type: 'any', required: true, description: '可变参数' },\n ],\n returnType: 'string',\n examples: ['concat(\"a\", \"b\", \"c\")'],\n },\n {\n name: 'replace',\n description: '替换字符串',\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: '分割字符串',\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: '连接数组为字符串',\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 {\n name: 'toNumber',\n description: '转为数字',\n params: [{ name: 'value', type: 'any', required: true }],\n returnType: 'number',\n examples: ['toNumber(\"123\")'],\n },\n {\n name: 'toString',\n description: '转为字符串',\n params: [{ name: 'value', type: 'any', required: true }],\n returnType: 'string',\n examples: ['toString(123)'],\n },\n {\n name: 'round',\n description: '四舍五入',\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: '向下取整',\n params: [{ name: 'value', type: 'number', required: true }],\n returnType: 'number',\n examples: ['floor(3.7)'],\n },\n {\n name: 'ceil',\n description: '向上取整',\n params: [{ name: 'value', type: 'number', required: true }],\n returnType: 'number',\n examples: ['ceil(3.2)'],\n },\n {\n name: 'abs',\n description: '绝对值',\n params: [{ name: 'value', type: 'number', required: true }],\n returnType: 'number',\n examples: ['abs(-5)'],\n },\n {\n name: 'min',\n description: '最小值',\n params: [\n { name: 'values', type: 'number', required: true, description: '可变参数' },\n ],\n returnType: 'number',\n examples: ['min(1, 2, 3)'],\n },\n {\n name: 'max',\n description: '最大值',\n params: [\n { name: 'values', type: 'number', required: true, description: '可变参数' },\n ],\n returnType: 'number',\n examples: ['max(1, 2, 3)'],\n },\n\n // 日期函数\n {\n name: 'now',\n description: '当前时间戳(毫秒)',\n params: [],\n returnType: 'number',\n examples: ['now()'],\n },\n {\n name: 'dateFormat',\n description: '格式化日期',\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: '解析日期字符串',\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 {\n name: 'first',\n description: '获取数组第一个元素',\n params: [{ name: 'arr', type: 'array', required: true }],\n returnType: 'any',\n examples: ['first([1,2,3])'],\n },\n {\n name: 'last',\n description: '获取数组最后一个元素',\n params: [{ name: 'arr', type: 'array', required: true }],\n returnType: 'any',\n examples: ['last([1,2,3])'],\n },\n {\n name: 'includes',\n description: '检查数组是否包含元素',\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: '截取数组',\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 {\n name: 'default',\n description: '提供默认值',\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: '条件判断',\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, \"成年\", \"未成年\")'],\n },\n {\n name: 'isEmpty',\n description: '检查是否为空',\n params: [{ name: 'value', type: 'any', required: true }],\n returnType: 'boolean',\n examples: ['isEmpty(\"\")', 'isEmpty([])'],\n },\n {\n name: 'isNull',\n description: '检查是否为 null 或 undefined',\n params: [{ name: 'value', type: 'any', required: true }],\n returnType: 'boolean',\n examples: ['isNull(null)'],\n },\n\n // JSON 函数\n {\n name: 'jsonParse',\n description: '解析 JSON 字符串',\n params: [{ name: 'str', type: 'string', required: true }],\n returnType: 'any',\n examples: ['jsonParse(\\'{\"a\":1}\\')'],\n },\n {\n name: 'jsonStringify',\n description: '序列化为 JSON',\n params: [{ name: 'value', type: 'any', required: true }],\n returnType: 'string',\n examples: ['jsonStringify({a:1})'],\n },\n];\n\n/**\n * 内置函数名称集合(用于快速校验)\n */\nexport const BUILTIN_FUNCTION_NAMES = new Set(BUILTIN_FUNCTIONS.map((f) => f.name));\n\n// ==================== 上下文类型 ====================\n\n/**\n * 表达式上下文\n * 表达式执行时可访问的变量\n */\nexport interface ExpressionContext {\n /** 页面状态 */\n state: Record<string, unknown>;\n /** 查询结果 */\n query: Record<string, unknown>;\n /** 运行时上下文 */\n context: {\n userId?: string;\n deviceId?: string;\n channel?: string;\n pageVersionId?: string;\n [key: string]: unknown;\n };\n /** 事件参数 */\n event?: Record<string, unknown>;\n /** 循环变量 */\n item?: unknown;\n /** 循环索引 */\n index?: number;\n}\n\n/**\n * 表达式允许访问的根变量\n */\nexport const ALLOWED_ROOT_VARIABLES = [\n 'state',\n 'query',\n 'context',\n 'event',\n 'item',\n 'index',\n] as const;\n\n// ==================== 校验相关 ====================\n\n/**\n * 表达式校验结果\n */\nexport interface ExpressionValidationResult {\n /** 是否有效 */\n valid: boolean;\n /** 错误列表 */\n errors: ExpressionError[];\n /** 警告列表 */\n warnings: ExpressionWarning[];\n /** 引用的变量路径 */\n referencedPaths: string[];\n /** 调用的函数 */\n calledFunctions: string[];\n}\n\n/**\n * 表达式错误\n */\nexport interface ExpressionError {\n /** 错误类型 */\n type: ExpressionErrorType;\n /** 错误消息 */\n message: string;\n /** 位置 */\n position?: { start: number; end: number };\n}\n\n/**\n * 表达式错误类型\n */\nexport type ExpressionErrorType =\n | 'SYNTAX_ERROR' // 语法错误\n | 'UNKNOWN_FUNCTION' // 未知函数\n | 'INVALID_ARGUMENT' // 无效参数\n | 'UNKNOWN_VARIABLE' // 未知变量\n | 'TYPE_MISMATCH' // 类型不匹配\n | 'ACCESS_DENIED'; // 访问被拒绝\n\n/**\n * 表达式警告\n */\nexport interface ExpressionWarning {\n /** 警告类型 */\n type: 'DEPRECATED' | 'PERFORMANCE' | 'NULLABLE';\n /** 警告消息 */\n message: string;\n /** 位置 */\n position?: { start: number; end: number };\n}\n\n// ==================== 表达式绑定 ====================\n\n/**\n * 表达式绑定\n * 用于属性值的动态绑定\n */\nexport interface ExpressionBinding {\n /** 是否为表达式 */\n __isExpression: true;\n /** 表达式字符串 */\n expression: string;\n /** 默认值(表达式失败时使用) */\n fallback?: unknown;\n}\n\n/**\n * 检查是否为表达式绑定\n */\nexport function isExpressionBinding(value: unknown): value is ExpressionBinding {\n return (\n value !== null &&\n typeof value === 'object' &&\n (value as ExpressionBinding).__isExpression === true &&\n typeof (value as ExpressionBinding).expression === 'string'\n );\n}\n\n/**\n * 创建表达式绑定\n */\nexport function createExpressionBinding(\n expression: string,\n fallback?: unknown\n): ExpressionBinding {\n return {\n __isExpression: true,\n expression,\n fallback,\n };\n}\n","/**\n * Schema 迁移脚本\n * 用于 Editor/Platform 在读取草稿/发布版本时做迁移\n *\n * 原则:\n * 1. 不可变版本:发布后永不修改\n * 2. 向前迁移:从旧版本迁移到新版本\n * 3. 草稿迁移:Editor 打开草稿时执行\n * 4. 发布固化:发布时固化迁移后的 Schema\n */\n\nimport type { PageSchema } from '../page';\n\n// ==================== 版本常量 ====================\n\nexport const SCHEMA_VERSIONS = ['1.0.0', '1.1.0', '2.0.0'] as const;\nexport type SchemaVersion = (typeof SCHEMA_VERSIONS)[number];\n\nexport const CURRENT_SCHEMA_VERSION: SchemaVersion = '1.0.0';\n\n// ==================== 迁移类型 ====================\n\n/**\n * 迁移函数类型\n */\nexport type MigrationFn<T = PageSchema> = (data: T) => T;\n\n/**\n * 迁移定义\n */\nexport interface Migration {\n /** 源版本 */\n from: string;\n /** 目标版本 */\n to: string;\n /** 迁移描述 */\n description: string;\n /** 迁移函数 */\n migrate: MigrationFn;\n /** 是否破坏性变更 */\n breaking?: boolean;\n}\n\n/**\n * 迁移结果\n */\nexport interface MigrationResult<T = PageSchema> {\n /** 是否成功 */\n success: boolean;\n /** 迁移后的数据 */\n data?: T;\n /** 原始版本 */\n fromVersion: string;\n /** 目标版本 */\n toVersion: string;\n /** 应用的迁移列表 */\n appliedMigrations: string[];\n /** 错误信息 */\n error?: string;\n}\n\n// ==================== 迁移注册表 ====================\n\n/**\n * 迁移注册表\n * 存储所有已注册的迁移\n */\nconst migrations: Migration[] = [];\n\n/**\n * 注册迁移\n */\nexport function registerMigration(migration: Migration): void {\n // 检查是否已存在\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}\n\n/**\n * 获取所有迁移\n */\nexport function getAllMigrations(): Migration[] {\n return [...migrations];\n}\n\n/**\n * 查找从源版本到目标版本的迁移路径\n */\nexport function findMigrationPath(from: string, to: string): Migration[] {\n const path: Migration[] = [];\n let current = from;\n\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\n // 防止无限循环\n if (path.length > 100) {\n throw new Error('Migration path too long, possible circular dependency');\n }\n }\n\n return path;\n}\n\n// ==================== 迁移执行 ====================\n\n/**\n * 执行 PageSchema 迁移\n */\nexport function migratePageSchema(\n data: PageSchema,\n targetVersion?: string\n): MigrationResult<PageSchema> {\n const fromVersion = data.schemaVersion || '1.0.0';\n const toVersion = targetVersion || CURRENT_SCHEMA_VERSION;\n\n if (fromVersion === toVersion) {\n return {\n success: true,\n data,\n fromVersion,\n toVersion,\n appliedMigrations: [],\n };\n }\n\n try {\n const path = findMigrationPath(fromVersion, toVersion);\n let result = { ...data };\n\n const appliedMigrations: string[] = [];\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\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}\n\n/**\n * 检查是否需要迁移\n */\nexport function needsMigration(data: PageSchema, targetVersion?: string): boolean {\n const currentVersion = data.schemaVersion || '1.0.0';\n const target = targetVersion || CURRENT_SCHEMA_VERSION;\n return currentVersion !== target;\n}\n\n/**\n * 获取版本信息\n */\nexport function getVersionInfo(version: string): {\n major: number;\n minor: number;\n patch: number;\n} {\n const [major, minor, patch] = version.split('.').map(Number);\n return { major, minor, patch };\n}\n\n/**\n * 比较版本\n * @returns -1 if a < b, 0 if a === b, 1 if a > b\n */\nexport function compareVersions(a: string, b: string): number {\n const va = getVersionInfo(a);\n const vb = getVersionInfo(b);\n\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}\n\n// ==================== 内置迁移 ====================\n\n// v1.0.0 -> v1.1.0: 添加 actionDefVersionIds 和 dataQueryVersionIds 字段\nregisterMigration({\n from: '1.0.0',\n to: '1.1.0',\n description: '添加 Definition 版本绑定字段',\n migrate: (data: PageSchema): PageSchema => {\n return {\n ...data,\n actionDefVersionIds: data.actionDefVersionIds || [],\n dataQueryVersionIds: data.dataQueryVersionIds || [],\n };\n },\n});\n\n// v1.1.0 -> v2.0.0: 重构组件事件结构(示例)\nregisterMigration({\n from: '1.1.0',\n to: '2.0.0',\n description: '重构组件事件结构',\n breaking: true,\n migrate: (data: PageSchema): PageSchema => {\n // 这只是一个示例迁移\n // 实际迁移逻辑应根据需求实现\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});\n"],"mappings":"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","names":["ErrorCode","PublishStatus"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/version.ts","../src/errors/index.ts","../src/page/index.ts","../src/component/index.ts","../src/expression/index.ts","../src/migrations/index.ts"],"sourcesContent":["/**\n * @djvlc/contracts-types - DJV 低代码平台 TypeScript 类型定义包\n *\n * 这是全平台的类型定义唯一真相源\n *\n * @packageDocumentation\n */\n\n// 版本信息\nexport * from './version';\n\n// 错误码\nexport * from './errors';\n\n// 通用类型(操作类型、操作者信息、分页等)\nexport * from './common';\n\n// 页面 Schema 类型\nexport * from './page';\n\n// 组件 Meta Schema 类型\nexport * from './component';\n\n// Action 规范类型\nexport * from './action';\n\n// Data Query 规范类型\nexport * from './data-query';\n\n// HostAPI 类型(组件可调用的安全 API)\nexport * from './host-api';\n\n// 资源类型\nexport * from './asset';\n\n// 运行时类型(Manifest、RuntimeConfig、PageResolveResult 等)\nexport * from './runtime';\n\n// API 响应类型(统一响应格式)\nexport * from './api';\n\n// 表达式引擎类型(DSL、白名单函数)\nexport * from './expression';\n\n// 迁移工具\nexport * from './migrations';\n","/**\n * 协议版本常量\n * 用于标识当前 schema 版本,支持版本迁移\n */\n\n/** 当前页面 Schema 版本 */\nexport const PAGE_SCHEMA_VERSION = '1.0.0';\n\n/** 当前组件 Meta Schema 版本 */\nexport const COMPONENT_META_SCHEMA_VERSION = '1.0.0';\n\n/** 当前 Action 规范版本 */\nexport const ACTION_SPEC_VERSION = '1.0.0';\n\n/** 当前 Data Query 规范版本 */\nexport const DATA_QUERY_SPEC_VERSION = '1.0.0';\n\n/** 协议版本信息 */\nexport interface ContractsVersion {\n pageSchema: string;\n componentMeta: string;\n actionSpec: string;\n dataQuerySpec: string;\n}\n\n/** 获取当前协议版本 */\nexport function getContractsVersion(): ContractsVersion {\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}\n\n/**\n * 检查版本兼容性\n * @param required 要求的版本\n * @param current 当前版本\n * @returns 是否兼容\n */\nexport function isVersionCompatible(required: string, current: string): boolean {\n const [reqMajor, reqMinor] = required.split('.').map(Number);\n const [curMajor, curMinor] = current.split('.').map(Number);\n\n // 主版本必须相同,次版本当前必须 >= 要求\n return curMajor === reqMajor && curMinor >= reqMinor;\n}\n","/**\n * 错误码规范\n * 统一的错误码定义,用于 Action Gateway / Data Proxy / Runtime\n */\n\n/** 错误码枚举 */\nexport enum ErrorCode {\n // 通用错误 (1xxx)\n UNKNOWN = 1000,\n INVALID_REQUEST = 1001,\n UNAUTHORIZED = 1002,\n FORBIDDEN = 1003,\n NOT_FOUND = 1004,\n RATE_LIMITED = 1005,\n VALIDATION_ERROR = 1006,\n INTERNAL_ERROR = 1007,\n SERVICE_UNAVAILABLE = 1008,\n TIMEOUT = 1009,\n\n // Action 错误 (2xxx)\n ACTION_NOT_FOUND = 2001,\n ACTION_INVALID_PARAMS = 2002,\n ACTION_EXECUTION_FAILED = 2003,\n ACTION_IDEMPOTENCY_CONFLICT = 2004,\n ACTION_BLOCKED = 2005,\n ACTION_RISK_REJECTED = 2006,\n ACTION_EXPIRED = 2007,\n ACTION_QUOTA_EXCEEDED = 2008,\n\n // Data Query 错误 (3xxx)\n QUERY_NOT_FOUND = 3001,\n QUERY_INVALID_PARAMS = 3002,\n QUERY_EXECUTION_FAILED = 3003,\n QUERY_FIELD_NOT_ALLOWED = 3004,\n QUERY_TIMEOUT = 3005,\n QUERY_DISABLED = 3006,\n\n // 组件错误 (4xxx)\n COMPONENT_NOT_FOUND = 4001,\n COMPONENT_VERSION_NOT_FOUND = 4002,\n COMPONENT_BLOCKED = 4003,\n COMPONENT_INTEGRITY_MISMATCH = 4004,\n COMPONENT_INCOMPATIBLE = 4005,\n COMPONENT_LOAD_FAILED = 4006,\n COMPONENT_RENDER_ERROR = 4007,\n\n // 页面错误 (5xxx)\n PAGE_NOT_FOUND = 5001,\n PAGE_VERSION_NOT_FOUND = 5002,\n PAGE_SCHEMA_INVALID = 5003,\n PAGE_MANIFEST_INVALID = 5004,\n PAGE_PUBLISH_FAILED = 5005,\n PAGE_ROLLBACK_FAILED = 5006,\n\n // 活动错误 (6xxx)\n ACTIVITY_NOT_FOUND = 6001,\n ACTIVITY_NOT_STARTED = 6002,\n ACTIVITY_ENDED = 6003,\n ACTIVITY_ALREADY_CLAIMED = 6004,\n ACTIVITY_ALREADY_SIGNED = 6005,\n ACTIVITY_LIMIT_EXCEEDED = 6006,\n ACTIVITY_DISABLED = 6007,\n\n // 表达式错误 (7xxx)\n EXPRESSION_SYNTAX_ERROR = 7001,\n EXPRESSION_UNKNOWN_FUNCTION = 7002,\n EXPRESSION_INVALID_ARGUMENT = 7003,\n EXPRESSION_UNKNOWN_VARIABLE = 7004,\n EXPRESSION_TYPE_MISMATCH = 7005,\n EXPRESSION_ACCESS_DENIED = 7006,\n\n // 版本/迁移错误 (8xxx)\n SCHEMA_VERSION_MISMATCH = 8001,\n MIGRATION_FAILED = 8002,\n MIGRATION_NOT_FOUND = 8003,\n VERSION_INCOMPATIBLE = 8004,\n}\n\n/** 错误码分类 */\nexport const ErrorCodeCategory = {\n GENERAL: [1000, 1999] as const,\n ACTION: [2000, 2999] as const,\n QUERY: [3000, 3999] as const,\n COMPONENT: [4000, 4999] as const,\n PAGE: [5000, 5999] as const,\n ACTIVITY: [6000, 6999] as const,\n EXPRESSION: [7000, 7999] as const,\n VERSION: [8000, 8999] as const,\n};\n\n/** 错误信息映射 */\nexport const ErrorMessages: Record<ErrorCode, string> = {\n // 通用错误\n [ErrorCode.UNKNOWN]: '未知错误',\n [ErrorCode.INVALID_REQUEST]: '请求参数无效',\n [ErrorCode.UNAUTHORIZED]: '未授权访问',\n [ErrorCode.FORBIDDEN]: '禁止访问',\n [ErrorCode.NOT_FOUND]: '资源不存在',\n [ErrorCode.RATE_LIMITED]: '请求频率超限',\n [ErrorCode.VALIDATION_ERROR]: '数据校验失败',\n [ErrorCode.INTERNAL_ERROR]: '服务内部错误',\n [ErrorCode.SERVICE_UNAVAILABLE]: '服务暂不可用',\n [ErrorCode.TIMEOUT]: '请求超时',\n\n // Action 错误\n [ErrorCode.ACTION_NOT_FOUND]: '动作不存在',\n [ErrorCode.ACTION_INVALID_PARAMS]: '动作参数无效',\n [ErrorCode.ACTION_EXECUTION_FAILED]: '动作执行失败',\n [ErrorCode.ACTION_IDEMPOTENCY_CONFLICT]: '重复请求',\n [ErrorCode.ACTION_BLOCKED]: '动作已被禁用',\n [ErrorCode.ACTION_RISK_REJECTED]: '风控拒绝',\n [ErrorCode.ACTION_EXPIRED]: '动作已过期',\n [ErrorCode.ACTION_QUOTA_EXCEEDED]: '配额已用尽',\n\n // Data Query 错误\n [ErrorCode.QUERY_NOT_FOUND]: '查询不存在',\n [ErrorCode.QUERY_INVALID_PARAMS]: '查询参数无效',\n [ErrorCode.QUERY_EXECUTION_FAILED]: '查询执行失败',\n [ErrorCode.QUERY_FIELD_NOT_ALLOWED]: '字段访问被拒绝',\n [ErrorCode.QUERY_TIMEOUT]: '查询超时',\n [ErrorCode.QUERY_DISABLED]: '查询已禁用',\n\n // 组件错误\n [ErrorCode.COMPONENT_NOT_FOUND]: '组件不存在',\n [ErrorCode.COMPONENT_VERSION_NOT_FOUND]: '组件版本不存在',\n [ErrorCode.COMPONENT_BLOCKED]: '组件已被禁用',\n [ErrorCode.COMPONENT_INTEGRITY_MISMATCH]: '组件完整性校验失败',\n [ErrorCode.COMPONENT_INCOMPATIBLE]: '组件版本不兼容',\n [ErrorCode.COMPONENT_LOAD_FAILED]: '组件加载失败',\n [ErrorCode.COMPONENT_RENDER_ERROR]: '组件渲染错误',\n\n // 页面错误\n [ErrorCode.PAGE_NOT_FOUND]: '页面不存在',\n [ErrorCode.PAGE_VERSION_NOT_FOUND]: '页面版本不存在',\n [ErrorCode.PAGE_SCHEMA_INVALID]: '页面 Schema 无效',\n [ErrorCode.PAGE_MANIFEST_INVALID]: '页面 Manifest 无效',\n [ErrorCode.PAGE_PUBLISH_FAILED]: '页面发布失败',\n [ErrorCode.PAGE_ROLLBACK_FAILED]: '页面回滚失败',\n\n // 活动错误\n [ErrorCode.ACTIVITY_NOT_FOUND]: '活动不存在',\n [ErrorCode.ACTIVITY_NOT_STARTED]: '活动未开始',\n [ErrorCode.ACTIVITY_ENDED]: '活动已结束',\n [ErrorCode.ACTIVITY_ALREADY_CLAIMED]: '已领取过',\n [ErrorCode.ACTIVITY_ALREADY_SIGNED]: '今日已签到',\n [ErrorCode.ACTIVITY_LIMIT_EXCEEDED]: '超出领取限制',\n [ErrorCode.ACTIVITY_DISABLED]: '活动已禁用',\n\n // 表达式错误\n [ErrorCode.EXPRESSION_SYNTAX_ERROR]: '表达式语法错误',\n [ErrorCode.EXPRESSION_UNKNOWN_FUNCTION]: '未知函数',\n [ErrorCode.EXPRESSION_INVALID_ARGUMENT]: '无效参数',\n [ErrorCode.EXPRESSION_UNKNOWN_VARIABLE]: '未知变量',\n [ErrorCode.EXPRESSION_TYPE_MISMATCH]: '类型不匹配',\n [ErrorCode.EXPRESSION_ACCESS_DENIED]: '访问被拒绝',\n\n // 版本/迁移错误\n [ErrorCode.SCHEMA_VERSION_MISMATCH]: 'Schema 版本不匹配',\n [ErrorCode.MIGRATION_FAILED]: '迁移失败',\n [ErrorCode.MIGRATION_NOT_FOUND]: '迁移脚本不存在',\n [ErrorCode.VERSION_INCOMPATIBLE]: '版本不兼容',\n};\n\n/** DJV 错误对象 */\nexport interface DjvlcError {\n code: ErrorCode;\n message: string;\n details?: Record<string, unknown>;\n traceId?: string;\n timestamp?: number;\n}\n\n/** 创建 DJV 错误 */\nexport function createDjvlcError(\n code: ErrorCode,\n details?: Record<string, unknown>,\n traceId?: string\n): DjvlcError {\n return {\n code,\n message: ErrorMessages[code] || '未知错误',\n details,\n traceId,\n timestamp: Date.now(),\n };\n}\n\n/** 根据错误码获取 HTTP 状态码 */\nexport function getHttpStatusFromErrorCode(code: ErrorCode): number {\n if (code === ErrorCode.UNAUTHORIZED) return 401;\n if (code === ErrorCode.FORBIDDEN) return 403;\n if (code === ErrorCode.NOT_FOUND) return 404;\n if (code === ErrorCode.RATE_LIMITED) return 429;\n if (code === ErrorCode.TIMEOUT) return 408;\n if (code === ErrorCode.SERVICE_UNAVAILABLE) return 503;\n \n // 将枚举转换为数字进行范围比较\n const numericCode = Number(code);\n if (numericCode >= 1000 && numericCode < 2000) return 400; // 认证错误\n if (numericCode >= 2000 && numericCode < 3000) return 400; // 权限错误\n if (numericCode >= 3000 && numericCode < 4000) return 400; // Schema 错误\n if (numericCode >= 4000 && numericCode < 5000) return 404; // 页面错误\n if (numericCode >= 5000 && numericCode < 6000) return 404; // 组件错误\n if (numericCode >= 6000 && numericCode < 7000) return 400; // Action 错误\n if (numericCode >= 7000 && numericCode < 8000) return 400; // 数据查询错误\n if (numericCode >= 8000 && numericCode < 9000) return 400; // 运行时错误\n return 500;\n}\n\n/** 检查是否为可重试错误 */\nexport function isRetryableError(code: ErrorCode): boolean {\n return [\n ErrorCode.TIMEOUT,\n ErrorCode.SERVICE_UNAVAILABLE,\n ErrorCode.QUERY_TIMEOUT,\n ErrorCode.COMPONENT_LOAD_FAILED,\n ].includes(code);\n}\n","/**\n * 页面 Schema 类型定义\n * 与 djvlc-platform @libs/contracts 保持一致\n */\n\n// ==================== 基础类型 ====================\n\n/** 页面状态 */\nexport type PageStatus = 'draft' | 'published';\n\n/** 画布类型 */\nexport type CanvasType = 'h5' | 'tablet' | 'pc';\n\n/**\n * 页面排序字段\n */\nexport type PageSortField =\n | 'id'\n | 'createdAt'\n | 'updatedAt'\n | 'publishedAt'\n | 'title'\n | 'viewCount'\n | 'sortOrder';\n\n/** 发布渠道 */\nexport type PublishChannel = 'preview' | 'prod' | 'gray';\n\n/** 发布状态 */\nexport enum PublishStatus {\n PENDING = 'pending',\n PUBLISHING = 'publishing',\n SUCCESS = 'success',\n FAILED = 'failed',\n ROLLBACK = 'rollback',\n}\n\n// ==================== 模板相关类型 ====================\n\n/**\n * 模板分类\n */\nexport type TemplateCategory =\n | 'all'\n | 'ecommerce'\n | 'marketing'\n | 'corporate'\n | 'other';\n\n/**\n * 模板排序字段\n */\nexport type TemplateSortField = 'id' | 'createdAt' | 'usageCount' | 'sortOrder';\n\n// ==================== PageSchema 核心数据结构 ====================\n\n/**\n * 页面 Schema(核心)\n * 存储在 Page 的 schema 字段中的完整结构\n */\nexport interface PageSchema {\n /** Schema 版本号 */\n schemaVersion: string;\n /** 页面配置 */\n page: PageConfig;\n /** 组件列表 */\n components: ComponentInstance[];\n /** 绑定的 ActionDefinition 版本 ID */\n actionDefVersionIds?: string[];\n /** 绑定的 DataQuery 版本 ID */\n dataQueryVersionIds?: string[];\n}\n\n/** 页面配置 */\nexport interface PageConfig {\n id: string;\n title: string;\n description?: string;\n canvas: CanvasConfig;\n meta?: PageMeta;\n variables?: Record<string, unknown>;\n apis?: ApiConfig[];\n}\n\n/** 画布配置 */\nexport interface CanvasConfig {\n type: CanvasType;\n width: number;\n height?: number;\n background?: string;\n gridSize?: number;\n showGrid?: boolean;\n showRuler?: boolean;\n guides?: Guide[];\n}\n\n/** 参考线 */\nexport interface Guide {\n id: string;\n type: 'horizontal' | 'vertical';\n position: number;\n}\n\n/** 页面元数据 */\nexport interface PageMeta {\n createTime?: string;\n updateTime?: string;\n author?: string;\n version?: string;\n tags?: string[];\n status?: PageStatus;\n}\n\n/** API 配置 */\nexport interface ApiConfig {\n id: string;\n name: string;\n url: string;\n method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n headers?: Record<string, string>;\n params?: Record<string, unknown>;\n body?: Record<string, unknown>;\n timeout?: number;\n autoRun?: boolean;\n dependencies?: string[];\n}\n\n// ==================== 组件实例类型 ====================\n\n/** 组件实例(运行时数据) */\nexport interface ComponentInstance {\n id: string;\n type: string;\n name?: string;\n props: Record<string, unknown>;\n style: ComponentStyle;\n layout?: ComponentLayout;\n events?: ComponentEvent[];\n visible?: boolean;\n locked?: boolean;\n children?: ComponentInstance[];\n}\n\n/** 组件样式 */\nexport interface ComponentStyle {\n // 尺寸\n width?: string | number;\n height?: string | number;\n minWidth?: string | number;\n minHeight?: string | number;\n maxWidth?: string | number;\n maxHeight?: string | number;\n\n // 间距\n margin?: string;\n padding?: string;\n\n // 颜色\n color?: string;\n backgroundColor?: string;\n borderColor?: string;\n\n // 边框\n border?: string;\n borderWidth?: string | number;\n borderStyle?: string;\n borderRadius?: string | number;\n\n // 字体\n fontSize?: string | number;\n fontWeight?: string | number;\n fontFamily?: string;\n lineHeight?: string | number;\n textAlign?: string;\n\n // 定位\n position?: string;\n top?: string | number;\n right?: string | number;\n bottom?: string | number;\n left?: string | number;\n zIndex?: number;\n\n // 显示\n display?: string;\n opacity?: number;\n overflow?: string;\n visibility?: string;\n\n // Flexbox\n flexDirection?: string;\n justifyContent?: string;\n alignItems?: string;\n flexWrap?: string;\n flex?: string | number;\n gap?: string | number;\n\n // Grid\n gridTemplateColumns?: string;\n gridTemplateRows?: string;\n gridGap?: string | number;\n\n // 变换\n transform?: string;\n transformOrigin?: string;\n\n // 过渡动画\n transition?: string;\n\n // 其他\n [key: string]: unknown;\n}\n\n/** 组件布局 */\nexport interface ComponentLayout {\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n rotation?: number;\n}\n\n/** 组件事件 */\nexport interface ComponentEvent {\n id: string;\n trigger: string;\n actions: EventAction[];\n enabled?: boolean;\n condition?: string;\n debounce?: number;\n throttle?: number;\n}\n\n/** 事件动作 */\nexport interface EventAction {\n id: string;\n type: string;\n params: Record<string, unknown>;\n enabled?: boolean;\n delay?: number;\n}\n\n// ==================== 发布配置类型 ====================\n\n/**\n * 灰度规则\n */\nexport interface GrayRule {\n /** 规则名称 */\n name: string;\n /** 规则类型 */\n type: 'user' | 'ip' | 'header' | 'cookie' | 'custom';\n /** 匹配条件 */\n condition: string;\n /** 是否启用 */\n enabled: boolean;\n}\n\n/**\n * 灰度发布配置\n */\nexport interface GrayPublishConfig {\n /** 灰度比例 (0-100) */\n percentage?: number;\n /** 白名单用户 UID */\n whitelistUsers?: string[];\n /** 白名单 IP */\n whitelistIps?: string[];\n /** 自定义规则 */\n rules?: GrayRule[];\n}\n\n/**\n * 发布配置\n */\nexport interface PublishConfig {\n /** 发布渠道 */\n channel: PublishChannel;\n /** 发布描述 */\n description?: string;\n /** 灰度配置(仅 gray 渠道) */\n grayConfig?: GrayPublishConfig;\n /** 是否自动发布(跳过审核) */\n autoPublish?: boolean;\n /** 定时发布时间 */\n scheduledAt?: string;\n}\n\n// ==================== 版本相关类型 ====================\n\n/**\n * 版本信息\n */\nexport interface VersionInfo {\n uid: string;\n versionNumber: number;\n versionLabel?: string;\n description?: string;\n isAutoSave: boolean;\n isPublished: boolean;\n createdAt: string;\n createdBy: string;\n createdByUsername: string;\n}\n\n/**\n * 版本对比结果\n */\nexport interface VersionDiff {\n added: string[];\n removed: string[];\n modified: string[];\n changeLog: Record<string, ChangeLogItem>;\n}\n\n// ==================== 变更日志类型 ====================\n\n/**\n * 变更日志项\n */\nexport interface ChangeLogItem {\n /** 旧值 */\n old: unknown;\n /** 新值 */\n new: unknown;\n /** 摘要描述 */\n summary?: string;\n}\n\n/**\n * 变更日志\n */\nexport type ChangeLog = Record<string, ChangeLogItem>;\n","/**\n * 组件 Meta Schema 类型定义\n * 定义每个组件版本必须包含的元数据\n */\n\n/** JSON Schema 类型定义 */\nexport interface JsonSchema {\n type: 'string' | 'number' | 'boolean' | 'object' | 'array' | 'null';\n title?: string;\n description?: string;\n default?: unknown;\n enum?: unknown[];\n properties?: Record<string, JsonSchema>;\n items?: JsonSchema;\n required?: string[];\n minimum?: number;\n maximum?: number;\n minLength?: number;\n maxLength?: number;\n pattern?: string;\n format?: string;\n $ref?: string;\n}\n\n/** Props Schema - 组件属性定义 */\nexport interface PropsSchema {\n $schema?: string;\n type: 'object';\n title: string;\n description?: string;\n properties: Record<string, JsonSchema & {\n /** 属性分组 */\n group?: string;\n /** 编辑器中的控件类型 */\n 'x-editor-widget'?: string;\n /** 是否支持表达式绑定 */\n 'x-expression-enabled'?: boolean;\n }>;\n required?: string[];\n}\n\n\n/** 事件定义 */\nexport interface EventDefinition {\n /** 事件名称 */\n name: string;\n /** 事件显示名 */\n label: string;\n /** 事件描述 */\n description?: string;\n /** 事件参数 Schema */\n payload?: JsonSchema;\n}\n\n/** 组件事件列表 */\nexport interface EventsDefinition {\n /** 事件版本 */\n version: string;\n /** 事件列表 */\n events: EventDefinition[];\n}\n\n/** 组件能力声明 */\nexport interface CapabilitiesDefinition {\n /** 能力版本 */\n version: string;\n /** 是否需要用户登录态 */\n requiresAuth?: boolean;\n /** 是否需要执行 Action */\n requiresAction?: boolean;\n /** 需要的 Action 类型 */\n actionTypes?: string[];\n /** 是否需要 Data Query */\n requiresDataQuery?: boolean;\n /** 需要的 Query 类型 */\n queryTypes?: string[];\n /** 是否需要导航能力 */\n requiresNavigation?: boolean;\n /** 是否需要埋点能力 */\n requiresTrack?: boolean;\n /** 是否需要对话框能力 */\n requiresDialog?: boolean;\n /** 是否需要剪贴板能力 */\n requiresClipboard?: boolean;\n /** 自定义能力 */\n custom?: string[];\n}\n\n/** 兼容性定义 */\nexport interface CompatDefinition {\n /** 兼容版本 */\n version: string;\n /** 最低运行时版本 */\n minRuntime: string;\n /** 最高运行时版本(可选) */\n maxRuntime?: string;\n /** 是否有破坏性变更 */\n breaking?: boolean;\n /** 破坏性变更说明 */\n breakingChanges?: string[];\n /** 从哪个版本可以无缝升级 */\n upgradeFrom?: string[];\n}\n\n/** 组件分类 */\nexport type ComponentCategory =\n | 'basic' // 基础组件\n | 'form' // 表单组件\n | 'layout' // 布局组件\n | 'navigation' // 导航组件\n | 'feedback' // 反馈组件\n | 'display' // 展示组件\n | 'data' // 数据组件\n | 'business' // 业务组件\n | 'chart' // 图表组件\n | 'other'; // 其他\n\n/** 组件分类列表(用于校验和 UI) */\nexport const COMPONENT_CATEGORIES: ComponentCategory[] = [\n 'basic',\n 'form',\n 'layout',\n 'navigation',\n 'feedback',\n 'display',\n 'data',\n 'business',\n 'chart',\n 'other',\n];\n\n/** SRI 完整性校验 */\nexport interface IntegrityDefinition {\n /** 完整性版本 */\n version: string;\n /** 主入口文件哈希 */\n main: string;\n /** 所有文件哈希 */\n files: Record<string, string>;\n /** 生成时间 */\n generatedAt: string;\n /** 哈希算法 */\n algorithm: 'sha256' | 'sha384' | 'sha512';\n}\n\n/** 组件状态 */\nexport type ComponentStatus =\n | 'draft'\n | 'canary'\n | 'stable'\n | 'deprecated'\n | 'blocked';\n\n/** 组件版本元数据(完整) */\nexport interface ComponentMeta {\n /** 组件名称 */\n name: string;\n /** 组件版本 */\n version: string;\n /** 显示名称 */\n label: string;\n /** 组件描述 */\n description?: string;\n /** 组件图标 */\n icon?: string;\n /** 组件分类 */\n category: ComponentCategory;\n /** 组件标签 */\n tags?: string[];\n /** 组件作者 */\n author?: string;\n /** 属性定义 */\n props: PropsSchema;\n /** 事件定义 */\n events: EventsDefinition;\n /** 能力声明 */\n capabilities: CapabilitiesDefinition;\n /** 兼容性 */\n compat: CompatDefinition;\n /** 完整性校验 */\n integrity: IntegrityDefinition;\n /** 组件状态 */\n status: ComponentStatus;\n /** 预览图 */\n preview?: string;\n /** 入口文件(相对路径) */\n entry: string;\n /** 样式文件(相对路径) */\n styles?: string[];\n}\n\n/** Registry 中的组件版本记录 */\nexport interface ComponentVersionRecord {\n /** 组件 ID */\n componentId: string;\n /** 组件名称 */\n name: string;\n /** 版本号 */\n version: string;\n /** CDN 入口 URL */\n entryUrl: string;\n /** 元数据 */\n meta: ComponentMeta;\n /** 状态 */\n status: ComponentStatus;\n /** 发布时间 */\n publishedAt: string;\n /** 发布者 */\n publishedBy: string;\n /** 阻断信息(如果被阻断) */\n blockInfo?: {\n reason: string;\n blockedAt: string;\n blockedBy: string;\n };\n}\n\n/** Manifest 中的组件引用 */\nexport interface ManifestItem {\n /** 组件名称 */\n name: string;\n /** 组件版本 */\n version: string;\n /** 入口 URL */\n entryUrl: string;\n /** SRI 哈希 */\n integrity: string;\n /** 是否必须成功加载 */\n critical?: boolean;\n}\n\n/** 页面 Manifest */\nexport interface PageManifest {\n /** Manifest 版本 */\n manifestVersion: string;\n /** 内容哈希 */\n contentHash: string;\n /** 运行时版本 */\n runtimeVersion: string;\n /** 组件清单 */\n components: ManifestItem[];\n /** 生成时间 */\n generatedAt: string;\n}\n","/**\n * 表达式引擎类型定义\n * 无 eval 的安全 DSL,支持发布期校验\n */\n\n// ==================== 表达式类型 ====================\n\n/**\n * 表达式类型\n */\nexport type ExpressionType =\n | 'literal' // 字面量\n | 'identifier' // 标识符(变量引用)\n | 'member' // 成员访问(a.b)\n | 'index' // 索引访问(a[0])\n | 'call' // 函数调用\n | 'binary' // 二元运算\n | 'unary' // 一元运算\n | 'conditional' // 三元条件\n | 'array' // 数组字面量\n | 'object'; // 对象字面量\n\n/**\n * 表达式 AST 节点基类\n */\nexport interface ExpressionNode {\n /** 节点类型 */\n type: ExpressionType;\n /** 原始表达式 */\n raw?: string;\n /** 起始位置 */\n start?: number;\n /** 结束位置 */\n end?: number;\n}\n\n/**\n * 字面量节点\n */\nexport interface LiteralNode extends ExpressionNode {\n type: 'literal';\n value: string | number | boolean | null;\n}\n\n/**\n * 标识符节点\n */\nexport interface IdentifierNode extends ExpressionNode {\n type: 'identifier';\n name: string;\n}\n\n/**\n * 成员访问节点\n */\nexport interface MemberNode extends ExpressionNode {\n type: 'member';\n object: ExpressionNode;\n property: string;\n}\n\n/**\n * 函数调用节点\n */\nexport interface CallNode extends ExpressionNode {\n type: 'call';\n callee: string;\n arguments: ExpressionNode[];\n}\n\n/**\n * 二元运算节点\n */\nexport interface BinaryNode extends ExpressionNode {\n type: 'binary';\n operator: BinaryOperator;\n left: ExpressionNode;\n right: ExpressionNode;\n}\n\n/**\n * 二元运算符\n */\nexport type BinaryOperator = \n // 算术\n | '+' | '-' | '*' | '/' | '%'\n // 比较\n | '==' | '!=' | '>' | '<' | '>=' | '<='\n // 逻辑\n | '&&' | '||'\n // 空值合并\n | '??';\n\n/**\n * 一元运算符\n */\nexport type UnaryOperator = '!' | '-' | '+';\n\n// ==================== 白名单函数 ====================\n\n/**\n * 内置函数定义\n */\nexport interface BuiltinFunction {\n /** 函数名 */\n name: string;\n /** 描述 */\n description: string;\n /** 参数定义 */\n params: FunctionParam[];\n /** 返回类型 */\n returnType: ValueType;\n /** 示例 */\n examples?: string[];\n}\n\n/**\n * 函数参数定义\n */\nexport interface FunctionParam {\n /** 参数名 */\n name: string;\n /** 参数类型 */\n type: ValueType;\n /** 是否必填 */\n required: boolean;\n /** 默认值 */\n defaultValue?: unknown;\n /** 描述 */\n description?: string;\n}\n\n/**\n * 值类型\n */\nexport type ValueType =\n | 'string'\n | 'number'\n | 'boolean'\n | 'array'\n | 'object'\n | 'null'\n | 'any'\n | 'void';\n\n/**\n * 内置函数白名单\n * 表达式中只能调用这些函数\n */\nexport const BUILTIN_FUNCTIONS: BuiltinFunction[] = [\n // 字符串函数\n {\n name: 'len',\n description: '获取字符串或数组长度',\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: '去除字符串首尾空格',\n params: [{ name: 'str', type: 'string', required: true }],\n returnType: 'string',\n examples: ['trim(\" hello \")'],\n },\n {\n name: 'upper',\n description: '转为大写',\n params: [{ name: 'str', type: 'string', required: true }],\n returnType: 'string',\n examples: ['upper(\"hello\")'],\n },\n {\n name: 'lower',\n description: '转为小写',\n params: [{ name: 'str', type: 'string', required: true }],\n returnType: 'string',\n examples: ['lower(\"HELLO\")'],\n },\n {\n name: 'substr',\n description: '截取子字符串',\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: '连接字符串',\n params: [\n { name: 'values', type: 'any', required: true, description: '可变参数' },\n ],\n returnType: 'string',\n examples: ['concat(\"a\", \"b\", \"c\")'],\n },\n {\n name: 'replace',\n description: '替换字符串',\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: '分割字符串',\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: '连接数组为字符串',\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 {\n name: 'toNumber',\n description: '转为数字',\n params: [{ name: 'value', type: 'any', required: true }],\n returnType: 'number',\n examples: ['toNumber(\"123\")'],\n },\n {\n name: 'toString',\n description: '转为字符串',\n params: [{ name: 'value', type: 'any', required: true }],\n returnType: 'string',\n examples: ['toString(123)'],\n },\n {\n name: 'round',\n description: '四舍五入',\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: '向下取整',\n params: [{ name: 'value', type: 'number', required: true }],\n returnType: 'number',\n examples: ['floor(3.7)'],\n },\n {\n name: 'ceil',\n description: '向上取整',\n params: [{ name: 'value', type: 'number', required: true }],\n returnType: 'number',\n examples: ['ceil(3.2)'],\n },\n {\n name: 'abs',\n description: '绝对值',\n params: [{ name: 'value', type: 'number', required: true }],\n returnType: 'number',\n examples: ['abs(-5)'],\n },\n {\n name: 'min',\n description: '最小值',\n params: [\n { name: 'values', type: 'number', required: true, description: '可变参数' },\n ],\n returnType: 'number',\n examples: ['min(1, 2, 3)'],\n },\n {\n name: 'max',\n description: '最大值',\n params: [\n { name: 'values', type: 'number', required: true, description: '可变参数' },\n ],\n returnType: 'number',\n examples: ['max(1, 2, 3)'],\n },\n\n // 日期函数\n {\n name: 'now',\n description: '当前时间戳(毫秒)',\n params: [],\n returnType: 'number',\n examples: ['now()'],\n },\n {\n name: 'dateFormat',\n description: '格式化日期',\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: '解析日期字符串',\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 {\n name: 'first',\n description: '获取数组第一个元素',\n params: [{ name: 'arr', type: 'array', required: true }],\n returnType: 'any',\n examples: ['first([1,2,3])'],\n },\n {\n name: 'last',\n description: '获取数组最后一个元素',\n params: [{ name: 'arr', type: 'array', required: true }],\n returnType: 'any',\n examples: ['last([1,2,3])'],\n },\n {\n name: 'includes',\n description: '检查数组是否包含元素',\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: '截取数组',\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 {\n name: 'default',\n description: '提供默认值',\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: '条件判断',\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, \"成年\", \"未成年\")'],\n },\n {\n name: 'isEmpty',\n description: '检查是否为空',\n params: [{ name: 'value', type: 'any', required: true }],\n returnType: 'boolean',\n examples: ['isEmpty(\"\")', 'isEmpty([])'],\n },\n {\n name: 'isNull',\n description: '检查是否为 null 或 undefined',\n params: [{ name: 'value', type: 'any', required: true }],\n returnType: 'boolean',\n examples: ['isNull(null)'],\n },\n\n // JSON 函数\n {\n name: 'jsonParse',\n description: '解析 JSON 字符串',\n params: [{ name: 'str', type: 'string', required: true }],\n returnType: 'any',\n examples: ['jsonParse(\\'{\"a\":1}\\')'],\n },\n {\n name: 'jsonStringify',\n description: '序列化为 JSON',\n params: [{ name: 'value', type: 'any', required: true }],\n returnType: 'string',\n examples: ['jsonStringify({a:1})'],\n },\n];\n\n/**\n * 内置函数名称集合(用于快速校验)\n */\nexport const BUILTIN_FUNCTION_NAMES = new Set(BUILTIN_FUNCTIONS.map((f) => f.name));\n\n// ==================== 上下文类型 ====================\n\n/**\n * 表达式上下文\n * 表达式执行时可访问的变量\n */\nexport interface ExpressionContext {\n /** 页面状态 */\n state: Record<string, unknown>;\n /** 查询结果 */\n query: Record<string, unknown>;\n /** 运行时上下文 */\n context: {\n userId?: string;\n deviceId?: string;\n channel?: string;\n pageVersionId?: string;\n [key: string]: unknown;\n };\n /** 事件参数 */\n event?: Record<string, unknown>;\n /** 循环变量 */\n item?: unknown;\n /** 循环索引 */\n index?: number;\n}\n\n/**\n * 表达式允许访问的根变量\n */\nexport const ALLOWED_ROOT_VARIABLES = [\n 'state',\n 'query',\n 'context',\n 'event',\n 'item',\n 'index',\n] as const;\n\n// ==================== 校验相关 ====================\n\n/**\n * 表达式校验结果\n */\nexport interface ExpressionValidationResult {\n /** 是否有效 */\n valid: boolean;\n /** 错误列表 */\n errors: ExpressionError[];\n /** 警告列表 */\n warnings: ExpressionWarning[];\n /** 引用的变量路径 */\n referencedPaths: string[];\n /** 调用的函数 */\n calledFunctions: string[];\n}\n\n/**\n * 表达式错误\n */\nexport interface ExpressionError {\n /** 错误类型 */\n type: ExpressionErrorType;\n /** 错误消息 */\n message: string;\n /** 位置 */\n position?: { start: number; end: number };\n}\n\n/**\n * 表达式错误类型\n */\nexport type ExpressionErrorType =\n | 'SYNTAX_ERROR' // 语法错误\n | 'UNKNOWN_FUNCTION' // 未知函数\n | 'INVALID_ARGUMENT' // 无效参数\n | 'UNKNOWN_VARIABLE' // 未知变量\n | 'TYPE_MISMATCH' // 类型不匹配\n | 'ACCESS_DENIED'; // 访问被拒绝\n\n/**\n * 表达式警告\n */\nexport interface ExpressionWarning {\n /** 警告类型 */\n type: 'DEPRECATED' | 'PERFORMANCE' | 'NULLABLE';\n /** 警告消息 */\n message: string;\n /** 位置 */\n position?: { start: number; end: number };\n}\n\n// ==================== 表达式绑定 ====================\n\n/**\n * 表达式绑定\n * 用于属性值的动态绑定\n */\nexport interface ExpressionBinding {\n /** 是否为表达式 */\n __isExpression: true;\n /** 表达式字符串 */\n expression: string;\n /** 默认值(表达式失败时使用) */\n fallback?: unknown;\n}\n\n/**\n * 检查是否为表达式绑定\n */\nexport function isExpressionBinding(value: unknown): value is ExpressionBinding {\n return (\n value !== null &&\n typeof value === 'object' &&\n (value as ExpressionBinding).__isExpression === true &&\n typeof (value as ExpressionBinding).expression === 'string'\n );\n}\n\n/**\n * 创建表达式绑定\n */\nexport function createExpressionBinding(\n expression: string,\n fallback?: unknown\n): ExpressionBinding {\n return {\n __isExpression: true,\n expression,\n fallback,\n };\n}\n","/**\n * Schema 迁移脚本\n * 用于 Editor/Platform 在读取草稿/发布版本时做迁移\n *\n * 原则:\n * 1. 不可变版本:发布后永不修改\n * 2. 向前迁移:从旧版本迁移到新版本\n * 3. 草稿迁移:Editor 打开草稿时执行\n * 4. 发布固化:发布时固化迁移后的 Schema\n */\n\nimport type { PageSchema } from '../page';\n\n// ==================== 版本常量 ====================\n\nexport const SCHEMA_VERSIONS = ['1.0.0', '1.1.0', '2.0.0'] as const;\nexport type SchemaVersion = (typeof SCHEMA_VERSIONS)[number];\n\nexport const CURRENT_SCHEMA_VERSION: SchemaVersion = '1.0.0';\n\n// ==================== 迁移类型 ====================\n\n/**\n * 迁移函数类型\n */\nexport type MigrationFn<T = PageSchema> = (data: T) => T;\n\n/**\n * 迁移定义\n */\nexport interface Migration {\n /** 源版本 */\n from: string;\n /** 目标版本 */\n to: string;\n /** 迁移描述 */\n description: string;\n /** 迁移函数 */\n migrate: MigrationFn;\n /** 是否破坏性变更 */\n breaking?: boolean;\n}\n\n/**\n * 迁移结果\n */\nexport interface MigrationResult<T = PageSchema> {\n /** 是否成功 */\n success: boolean;\n /** 迁移后的数据 */\n data?: T;\n /** 原始版本 */\n fromVersion: string;\n /** 目标版本 */\n toVersion: string;\n /** 应用的迁移列表 */\n appliedMigrations: string[];\n /** 错误信息 */\n error?: string;\n}\n\n// ==================== 迁移注册表 ====================\n\n/**\n * 迁移注册表\n * 存储所有已注册的迁移\n */\nconst migrations: Migration[] = [];\n\n/**\n * 注册迁移\n */\nexport function registerMigration(migration: Migration): void {\n // 检查是否已存在\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}\n\n/**\n * 获取所有迁移\n */\nexport function getAllMigrations(): Migration[] {\n return [...migrations];\n}\n\n/**\n * 查找从源版本到目标版本的迁移路径\n */\nexport function findMigrationPath(from: string, to: string): Migration[] {\n const path: Migration[] = [];\n let current = from;\n\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\n // 防止无限循环\n if (path.length > 100) {\n throw new Error('Migration path too long, possible circular dependency');\n }\n }\n\n return path;\n}\n\n// ==================== 迁移执行 ====================\n\n/**\n * 执行 PageSchema 迁移\n */\nexport function migratePageSchema(\n data: PageSchema,\n targetVersion?: string\n): MigrationResult<PageSchema> {\n const fromVersion = data.schemaVersion || '1.0.0';\n const toVersion = targetVersion || CURRENT_SCHEMA_VERSION;\n\n if (fromVersion === toVersion) {\n return {\n success: true,\n data,\n fromVersion,\n toVersion,\n appliedMigrations: [],\n };\n }\n\n try {\n const path = findMigrationPath(fromVersion, toVersion);\n let result = { ...data };\n\n const appliedMigrations: string[] = [];\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\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}\n\n/**\n * 检查是否需要迁移\n */\nexport function needsMigration(data: PageSchema, targetVersion?: string): boolean {\n const currentVersion = data.schemaVersion || '1.0.0';\n const target = targetVersion || CURRENT_SCHEMA_VERSION;\n return currentVersion !== target;\n}\n\n/**\n * 获取版本信息\n */\nexport function getVersionInfo(version: string): {\n major: number;\n minor: number;\n patch: number;\n} {\n const [major, minor, patch] = version.split('.').map(Number);\n return { major, minor, patch };\n}\n\n/**\n * 比较版本\n * @returns -1 if a < b, 0 if a === b, 1 if a > b\n */\nexport function compareVersions(a: string, b: string): number {\n const va = getVersionInfo(a);\n const vb = getVersionInfo(b);\n\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}\n\n// ==================== 内置迁移 ====================\n\n// v1.0.0 -> v1.1.0: 添加 actionDefVersionIds 和 dataQueryVersionIds 字段\nregisterMigration({\n from: '1.0.0',\n to: '1.1.0',\n description: '添加 Definition 版本绑定字段',\n migrate: (data: PageSchema): PageSchema => {\n return {\n ...data,\n actionDefVersionIds: data.actionDefVersionIds || [],\n dataQueryVersionIds: data.dataQueryVersionIds || [],\n };\n },\n});\n\n// v1.1.0 -> v2.0.0: 重构组件事件结构(示例)\nregisterMigration({\n from: '1.1.0',\n to: '2.0.0',\n description: '重构组件事件结构',\n breaking: true,\n migrate: (data: PageSchema): PageSchema => {\n // 这只是一个示例迁移\n // 实际迁移逻辑应根据需求实现\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});\n"],"mappings":"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","names":["ErrorCode","PublishStatus"]}
|