webloom-framework 0.3.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/contracts/plugin.ts","../src/authoring/definePlugin.ts","../src/runtime/pluginDefinitions.ts","../src/runtime/windowRuntime.ts","../src/transport/messagePortServiceProvider.ts","../src/runtime/sharedWorkerHost.ts","../src/lifecycle/permissionVerifier.ts","../src/lifecycle/scopedRegistry.ts","../src/lifecycle/upgradeGate.ts"],"names":["errorMessage","call","makeRuntimeInstanceId","input"],"mappings":"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","file":"index.js","sourcesContent":["// WebLoom 插件公共契约。\n//\n// 这里故意只描述插件、运行单元和宿主扩展点。具体产品可以通过泛型扩展\n// contribution、config、attributes 和 Context Extension,但不能把领域字段\n// 反向写进 WebLoom 核心。\n\nimport type { MessageBus } from \"./messageBus.js\";\nimport type {\n LifecycleScope,\n PluginPermission,\n PermissionLease,\n RemoteServiceBridge,\n RuntimeKind,\n ScopedTaskScheduler,\n} from \"./lifecycle.js\";\n\n/** 宿主注入的只读结构化属性;不得放入私钥、口令或 Seed。 */\nexport type PluginAttributes = Readonly<Record<string, unknown>>;\n\n/** 插件配置的默认形状;具体配置由产品通过泛型约束。 */\nexport type PluginConfig = Readonly<Record<string, unknown>>;\n\n/** 插件对宿主贡献的默认形状;具体贡献由产品通过泛型约束。 */\nexport type PluginContribution = unknown;\n\n/** 插件 Context Extension 的默认形状;领域服务只能从这里注入。 */\nexport type PluginContextExtension = Readonly<Record<string, unknown>>;\n\n/** 插件运行时上下文,由 Host 创建并传入运行单元实现。 */\nexport interface PluginContext<\n TConfig extends PluginConfig = PluginConfig,\n TExtension extends PluginContextExtension = PluginContextExtension,\n> {\n /** Host 绑定的稳定产品标识;插件不能从调用参数伪造其它标识。 */\n readonly pluginId: string;\n /** 本次装配生成的实例标识;重启不得复用。 */\n readonly instanceId: string;\n /** 稳定运行单元标识;不等于本次启动的 instanceId。 */\n readonly unitId: string;\n /** 当前插件实例的作用域;业务资源应登记到此作用域。 */\n readonly scope: LifecycleScope;\n /** 作用域撤权信号;停止、禁用和宿主关闭时触发。 */\n readonly signal: AbortSignal;\n /** 可信装配层批准后的权限视图;插件自声明不能扩大集合。 */\n readonly permissions: readonly PluginPermission[];\n /** 绑定当前实例和权限身份的租约;最终 I/O 仍需再次校验。 */\n readonly permissionLease: PermissionLease;\n /** 已完成握手和快照校验的远程服务桥。 */\n readonly serviceBridge?: RemoteServiceBridge;\n /** 绑定当前插件实例的后台任务注册面。 */\n readonly taskScheduler?: ScopedTaskScheduler;\n /** 宿主注入的领域扩展;只读且不能替换实例身份。 */\n readonly extension: TExtension;\n /** 注册在停止前运行的清理函数;重复停止必须幂等。 */\n onDispose(cleanup: PluginTeardown): void;\n /** 注册 capability;重复注册会抛错。 */\n provide<T>(key: string, value: T): void;\n /** 读取 capability;缺失会抛错。 */\n get<T>(key: string): T;\n /** 探测 capability 是否存在。 */\n has(key: string): boolean;\n /** 要求 capability 存在,否则抛错。 */\n require(key: string): void;\n /** 事件、命令和请求响应的统一入口。 */\n readonly messageBus: MessageBus;\n /** 宿主注入的只读配置;不与启停意图存储混用。 */\n readonly config?: TConfig;\n}\n\n/** v1 运行时依赖;跨 Runtime 绑定必须使用精确契约版本和来源 Runtime。 */\nexport interface RuntimeDependency {\n /** 依赖的 capability 标识。 */\n capability: string;\n /** 精确契约版本;跨 Runtime 依赖必须显式填写,本地可由 helper 推导。 */\n contractVersion?: string;\n /** 提供者实际运行空间;省略时由当前 Runtime 补齐。 */\n sourceRuntime?: RuntimeKind;\n /** 可选的人类可读诊断说明。 */\n reason?: string;\n /** 缺失时只关闭局部能力,不阻止主体运行。 */\n optional?: boolean;\n}\n\n/** 简单插件的产品级依赖别名。 */\nexport type PluginDependency = RuntimeDependency;\n\n/** 运行单元的严格依赖描述。 */\nexport interface RuntimeUnitDependency {\n /** 依赖的 capability 标识。 */\n capability: string;\n /** 精确契约版本;第一阶段只接受完全匹配。 */\n contractVersion: string;\n /** 提供者实际运行空间;跨 Runtime 依赖在 materialize/validate 边界必须补齐。 */\n sourceRuntime: RuntimeKind;\n /** 可选的人类可读诊断说明。 */\n reason?: string;\n /** 缺失时只关闭局部能力;未填写表示硬依赖。 */\n optional?: boolean;\n}\n\n/** 作者入口的未归一化 unit 依赖;进入 Host 前必须补齐版本和来源 Runtime。 */\nexport type RuntimeUnitDependencyInput = Omit<RuntimeUnitDependency, \"contractVersion\" | \"sourceRuntime\"> & {\n contractVersion?: string;\n sourceRuntime?: RuntimeKind;\n};\n\n/** 返回稳定的 capability 契约版本。 */\nexport function runtimeCapabilityContractVersion(capability: string): string {\n return `${capability}.v1`;\n}\n\n/** 将依赖清单补齐为严格运行单元依赖。 */\nexport function defineRuntimeUnitDependencies(\n dependencies: readonly Pick<PluginDependency, \"capability\" | \"reason\" | \"optional\">[],\n defaults: { sourceRuntime: RuntimeKind },\n): RuntimeUnitDependency[] {\n return dependencies.map((dependency) => ({\n capability: dependency.capability,\n contractVersion: runtimeCapabilityContractVersion(dependency.capability),\n sourceRuntime: defaults.sourceRuntime,\n ...(dependency.reason !== undefined ? { reason: dependency.reason } : {}),\n ...(dependency.optional !== undefined ? { optional: dependency.optional } : {}),\n }));\n}\n\n/** 为运行单元生成精确的 capability 契约版本表。 */\nexport function defineRuntimeUnitProvidedContracts(\n capabilities: readonly string[],\n): Record<string, string> {\n return Object.fromEntries(\n capabilities.map((capability) => [capability, runtimeCapabilityContractVersion(capability)]),\n );\n}\n\n/** 插件在产品清单中的启动要求。 */\nexport type PluginStartupMode = \"required\" | \"optional\";\n\n/** 插件装配元数据;v1 不解释产品分类字段。 */\nexport interface PluginMeta {\n /** 首次装配时默认是否启用。 */\n defaultEnabled: boolean;\n /** 是否允许产品控制面禁用。 */\n canDisable: boolean;\n /** 是否属于启动必需插件。 */\n startup?: PluginStartupMode;\n}\n\n/** 插件 setup 返回的清理函数。 */\nexport type PluginTeardown = () => void | Promise<void>;\n\n/** 插件运行单元的无 UI 装配入口。 */\nexport type PluginSetup<\n TConfig extends PluginConfig = PluginConfig,\n TExtension extends PluginContextExtension = PluginContextExtension,\n> = (ctx: PluginContext<TConfig, TExtension>) =>\n void | Promise<void> | PluginTeardown | Promise<PluginTeardown>;\n\n/** 当前执行环境中按 productId + unitId 解析实现。 */\nexport interface RuntimeUnitImplementationRegistry<\n TConfig extends PluginConfig = PluginConfig,\n TExtension extends PluginContextExtension = PluginContextExtension,\n> {\n /** 未装配实现时返回 undefined。 */\n get(pluginId: string, unitId: string): PluginSetup<TConfig, TExtension> | undefined;\n}\n\n/** 一个产品可以装配的运行单元。 */\nexport interface RuntimeUnitDescriptor<\n TContribution = PluginContribution,\n TConfig extends PluginConfig = PluginConfig,\n> {\n /** 稳定运行单元标识。 */\n id: string;\n /** 运行代码所在真实 Runtime。 */\n runtime: RuntimeKind;\n /** 本单元所需的精确 capability 契约。 */\n dependencies?: RuntimeUnitDependency[];\n /** 本单元提供的 capability。 */\n provides?: string[];\n /** 本单元每个 capability 的精确版本。 */\n providedContracts?: Record<string, string>;\n /** 宿主贡献;内容由产品泛型定义。 */\n contribution?: TContribution;\n /** 本单元申请的权限。 */\n permissions?: PluginPermission[];\n /** 单元专属只读配置声明或装配默认值。 */\n config?: TConfig;\n}\n\n/** 作者入口的未归一化运行单元;runtime 可由 createWindowApp/startSharedWorkerApp 注入。 */\nexport type RuntimeUnitDescriptorInput<\n TContribution = PluginContribution,\n TConfig extends PluginConfig = PluginConfig,\n> = Omit<RuntimeUnitDescriptor<TContribution, TConfig>, \"runtime\" | \"dependencies\"> & {\n runtime?: RuntimeKind;\n dependencies?: readonly RuntimeUnitDependencyInput[];\n};\n\n/** 插件清单;插件作者导出的唯一静态描述。 */\nexport interface PluginManifest<\n TContribution = PluginContribution,\n TConfig extends PluginConfig = PluginConfig,\n TExtension extends PluginContextExtension = PluginContextExtension,\n> {\n /** 全局稳定产品标识。 */\n id: string;\n /** 展示名称。 */\n name: string;\n /** 展示描述。 */\n description?: string;\n /** 简单插件的宿主贡献;复杂产品通过运行单元声明。 */\n contribution?: TContribution;\n /** 简单插件的兼容依赖。 */\n dependencies?: PluginDependency[];\n /** 简单插件声明提供的 capability;多单元插件必须放入 unit.provides。 */\n provides?: string[];\n /** 产品元数据。 */\n meta: PluginMeta;\n /** 简单插件的申请权限。 */\n permissions?: PluginPermission[];\n /** 多环境插件的静态运行单元描述。 */\n units?: readonly RuntimeUnitDescriptor<TContribution, TConfig>[];\n /** 简单插件的只读配置。 */\n config?: TConfig;\n}\n\n/** 作者入口的未归一化静态清单;进入 Host 前必须 materialize 成 PluginManifest。 */\nexport type PluginManifestInput<\n TContribution = PluginContribution,\n TConfig extends PluginConfig = PluginConfig,\n TExtension extends PluginContextExtension = PluginContextExtension,\n> = Omit<PluginManifest<TContribution, TConfig, TExtension>, \"units\"> & {\n units?: readonly RuntimeUnitDescriptorInput<TContribution, TConfig>[];\n};\n\n/** 插件运行状态类别;registered 不代表已经运行。 */\nexport type PluginStateKind =\n | \"registered\"\n | \"starting\"\n | \"stopping\"\n | \"enabled\"\n | \"disabled\"\n | \"blocked\"\n | \"error-disabled\"\n | \"cleanup-pending\"\n | \"unknown\";\n\n/** 对外稳定的产品运行语义。 */\nexport type PluginLifecycleState = \"disabled\" | \"waiting\" | \"starting\" | \"running\" | \"stopping\" | \"failed\";\n\n/** Host 查询到的插件状态。 */\nexport interface PluginState {\n /** 产品标识。 */\n id: string;\n /** 兼容状态类别。 */\n kind: PluginStateKind;\n /** 稳定生命周期语义。 */\n lifecycleState?: PluginLifecycleState;\n /** 最近一次错误。 */\n error?: string;\n /** 持久化启用意图。 */\n desiredEnabled?: boolean;\n /** 当前产品意图修订。 */\n desiredRevision?: number;\n /** 当前运行实例标识。 */\n instanceId?: string;\n /** 当前运行单元标识。 */\n unitId?: string;\n /** 当前阻塞或清理原因。 */\n blockedBy?: string[];\n /** 最近一次结构化清理结果。 */\n cleanup?: import(\"./lifecycle.js\").LifecycleDisposeResult;\n /** 当前产品下的运行单元状态。 */\n units?: readonly PluginUnitState[];\n}\n\n/** 运行单元状态;唯一身份由 product、unit 和 instance 共同组成。 */\nexport interface PluginUnitState {\n /** 所属产品标识。 */\n pluginId: string;\n /** 稳定运行单元标识。 */\n unitId: string;\n /** 真实运行空间。 */\n runtime: RuntimeKind;\n /** 当前运行实例。 */\n instanceId?: string;\n /** 当前意图修订。 */\n desiredRevision?: number;\n /** 单元状态。 */\n kind: PluginStateKind;\n /** 单元失败原因。 */\n error?: string;\n /** 单元清理结果。 */\n cleanup?: import(\"./lifecycle.js\").LifecycleDisposeResult;\n}\n\n/** 依赖图中的反向依赖者。 */\nexport interface PluginReverseDep {\n /** 反向依赖产品标识。 */\n pluginId: string;\n /** 依赖者当前是否运行。 */\n enabled: boolean;\n /** 触发依赖的 capability。 */\n capabilities: string[];\n}\n\n/** 插件依赖图快照。 */\nexport interface PluginGraph {\n /** 已知产品标识列表。 */\n plugins: string[];\n /** 产品依赖的 capability。 */\n dependencies: Record<string, string[]>;\n /** 产品的可选依赖。 */\n optionalDependencies?: Record<string, string[]>;\n /** 产品声明提供的 capability。 */\n provides: Record<string, string[]>;\n /** capability 到反向依赖者。 */\n reverse: Record<string, PluginReverseDep[]>;\n /** capability 到声明提供者。 */\n providers?: Record<string, string[]>;\n /** 精确依赖描述。 */\n dependencyDetails?: Record<string, PluginDependency[]>;\n /** 发现的硬依赖环。 */\n cycles?: string[][];\n /** 当前图中的运行单元。 */\n units?: Record<string, PluginUnitGraph>;\n}\n\n/** 运行单元依赖图节点。 */\nexport interface PluginUnitGraph {\n /** 所属产品标识。 */\n pluginId: string;\n /** 稳定运行单元标识。 */\n unitId: string;\n /** 真实运行空间。 */\n runtime: RuntimeKind;\n /** capability 依赖。 */\n dependencies: string[];\n /** 精确依赖描述。 */\n dependencyDetails?: RuntimeUnitDependency[];\n /** capability 提供。 */\n provides: string[];\n /** capability 精确版本。 */\n providedContracts?: Record<string, string>;\n}\n\n/** Host 版本或状态变化监听器。 */\nexport type HostListener = (snapshot: { version: number }) => void;\n\n/** 启动前能力检查的结构化详情。 */\nexport interface StartupCapabilityErrorDetails {\n /** 缺失 capability 标识。 */\n capability: string;\n /** 已知提供者产品标识。 */\n providerPluginId?: string;\n /** 提供者状态。 */\n providerState?: PluginStateKind;\n /** 提供者错误。 */\n providerError?: string;\n /** 当前持久化意图。 */\n configuredEnabled?: boolean;\n}\n\n/** 启动插件失败的结构化详情。 */\nexport interface StartupPluginErrorDetails {\n /** 产品标识。 */\n pluginId: string;\n /** 失败的运行单元。 */\n unitId?: string;\n /** 能力列表。 */\n capabilities: string[];\n /** 当前状态。 */\n state: PluginStateKind;\n /** 最近错误。 */\n error?: string;\n}\n","// 面向普通插件作者的声明入口。\n//\n// definePlugin() 只返回“静态 descriptor + 本地实现”这两个内部装配所需的\n// 部分。manifest 永远不携带 setup,因此可以安全地用于快照、诊断和跨\n// realm 传输;实现函数只会在调用 definePlugin() 的那个 realm 被使用。\n\nimport type {\n PluginConfig,\n PluginContextExtension,\n PluginDependency,\n PluginManifestInput,\n PluginMeta,\n PluginSetup,\n PluginContribution,\n RuntimeDependency,\n RuntimeUnitDependencyInput,\n RuntimeUnitDescriptorInput,\n} from \"../contracts/plugin.js\";\nimport {\n defineRuntimeUnitProvidedContracts,\n runtimeCapabilityContractVersion,\n} from \"../contracts/plugin.js\";\nimport type { PluginPermission, RuntimeKind } from \"../contracts/lifecycle.js\";\n\nexport interface DefinePluginOptions<\n TContribution = PluginContribution,\n TConfig extends PluginConfig = PluginConfig,\n TExtension extends PluginContextExtension = PluginContextExtension,\n> {\n /** 全局稳定插件标识。 */\n id: string;\n /** 默认展示名称。 */\n name?: string;\n /** 可选诊断描述。 */\n description?: string;\n /** 普通插件的可执行实现;不会进入静态 descriptor。 */\n setup: PluginSetup<TConfig, TExtension>;\n /** 默认目标 Runtime;普通 Window 插件通常省略,由 App 注入。 */\n runtime?: RuntimeKind;\n /** 默认 unit id;省略时使用插件 id。 */\n unitId?: string;\n /** 插件依赖;helper 会为本地依赖补齐 v1 契约版本。 */\n dependencies?: readonly (RuntimeDependency | PluginDependency)[];\n /** 本单元提供的 capability。 */\n provides?: readonly string[];\n /** 跨 Runtime 时可显式覆盖 capability 契约版本。 */\n providedContracts?: Readonly<Record<string, string>>;\n /** 请求的权限集合。 */\n permissions?: readonly PluginPermission[];\n /** 单元只读配置。 */\n config?: TConfig;\n /** 产品贡献;不会被框架解释。 */\n contribution?: TContribution;\n /** 是否默认启用;默认为 true。 */\n defaultEnabled?: boolean;\n /** 是否允许控制面停用;默认为 true。 */\n canDisable?: boolean;\n /** required 插件在 App 初始启动时必须成功。 */\n required?: boolean;\n /** 显式启动模式;required=true 时不能覆盖为 optional。 */\n startup?: \"required\" | \"optional\";\n /** 仅用于兼容低层消费方的静态 meta 扩展;WebLoom 不解释分类字段。 */\n meta?: Partial<PluginMeta>;\n}\n\n/** 静态 descriptor 与当前 realm 的实现函数分离。 */\nexport interface PluginDefinition<\n TContribution = PluginContribution,\n TConfig extends PluginConfig = PluginConfig,\n TExtension extends PluginContextExtension = PluginContextExtension,\n> {\n readonly manifest: PluginManifestInput<TContribution, TConfig, TExtension>;\n readonly descriptor: RuntimeUnitDescriptorInput<TContribution, TConfig>;\n readonly setup: PluginSetup<TConfig, TExtension>;\n}\n\nfunction normalizeDependency(dependency: RuntimeDependency | PluginDependency): RuntimeUnitDependencyInput {\n const contractVersion = dependency.contractVersion ?? runtimeCapabilityContractVersion(dependency.capability);\n return {\n capability: dependency.capability,\n contractVersion,\n ...(dependency.sourceRuntime !== undefined ? { sourceRuntime: dependency.sourceRuntime } : {}),\n ...(dependency.reason !== undefined ? { reason: dependency.reason } : {}),\n ...(dependency.optional !== undefined ? { optional: dependency.optional } : {}),\n };\n}\n\n/**\n * 声明一个插件。\n *\n * 该函数不创建 Host,也不启动 setup;真正的启动边界由\n * createWindowApp()/startSharedWorkerApp() 拥有。\n */\nexport function definePlugin<\n TContribution = PluginContribution,\n TConfig extends PluginConfig = PluginConfig,\n TExtension extends PluginContextExtension = PluginContextExtension,\n>(options: DefinePluginOptions<TContribution, TConfig, TExtension>): PluginDefinition<TContribution, TConfig, TExtension> {\n if (!options || typeof options.id !== \"string\" || options.id.trim() === \"\") {\n throw new Error(\"Plugin id must be a non-empty string\");\n }\n if (typeof options.setup !== \"function\") throw new Error(`Plugin \"${options.id}\" setup must be a function`);\n\n const unitId = options.unitId ?? options.id;\n if (unitId.trim() === \"\") throw new Error(`Plugin \"${options.id}\" unitId must be a non-empty string`);\n const provides = [...new Set(options.provides ?? [])];\n const dependencies = (options.dependencies ?? []).map(normalizeDependency);\n const providedContracts = {\n ...defineRuntimeUnitProvidedContracts(provides),\n ...(options.providedContracts ?? {}),\n };\n const descriptor: RuntimeUnitDescriptorInput<TContribution, TConfig> = {\n id: unitId,\n ...(options.runtime !== undefined ? { runtime: options.runtime } : {}),\n ...(dependencies.length > 0 ? { dependencies } : {}),\n ...(provides.length > 0 ? { provides } : {}),\n ...(Object.keys(providedContracts).length > 0 ? { providedContracts } : {}),\n ...(options.contribution !== undefined ? { contribution: options.contribution } : {}),\n ...(options.permissions !== undefined ? { permissions: [...options.permissions] } : {}),\n ...(options.config !== undefined ? { config: options.config } : {}),\n };\n const metaInput = options.meta ?? {};\n const required = options.required === true\n || options.startup === \"required\"\n || metaInput.startup === \"required\";\n const meta: PluginMeta = {\n ...metaInput,\n defaultEnabled: options.defaultEnabled ?? metaInput.defaultEnabled ?? true,\n canDisable: options.canDisable ?? metaInput.canDisable ?? !required,\n startup: required ? \"required\" : (options.startup ?? metaInput.startup ?? \"optional\"),\n };\n // A required plugin must have one unambiguous policy. Do this at the authoring\n // boundary so createWindowApp() can fail before mutating a Host.\n if (meta.startup === \"required\" && (meta.canDisable || !meta.defaultEnabled)) {\n throw new Error(`Plugin \"${options.id}\" required metadata is inconsistent`);\n }\n const manifest: PluginManifestInput<TContribution, TConfig, TExtension> = {\n id: options.id,\n name: options.name ?? options.id,\n ...(options.description !== undefined ? { description: options.description } : {}),\n meta,\n units: [descriptor],\n };\n return Object.freeze({\n manifest: Object.freeze(manifest),\n descriptor: Object.freeze(descriptor),\n setup: options.setup,\n });\n}\n","import type {\n PluginDefinition,\n} from \"../authoring/definePlugin.js\";\nimport type {\n PluginDependency,\n PluginManifest,\n PluginManifestInput,\n RuntimeUnitDescriptor,\n RuntimeUnitDescriptorInput,\n} from \"../contracts/plugin.js\";\nimport {\n defineRuntimeUnitProvidedContracts,\n runtimeCapabilityContractVersion,\n} from \"../contracts/plugin.js\";\nimport type { RuntimeKind } from \"../contracts/lifecycle.js\";\n\n// Runtime assembly intentionally accepts definitions with product-specific\n// config/contribution/extension generics. The materializer normalizes those\n// values into the framework's structural manifest before Host registration;\n// keeping this boundary generic avoids making every author cast a valid\n// definePlugin() result just to call createWindowApp().\nexport type RuntimePluginDefinition = PluginDefinition<any, any, any> | {\n readonly manifest: PluginManifest | PluginManifestInput;\n readonly setup: import(\"../contracts/plugin.js\").PluginSetup<any, any>;\n /** 多 unit manifest 中 setup 所实现的目标 unit;单一匹配 unit 可省略。 */\n readonly unitId?: string;\n};\n\nexport interface MaterializedPluginDefinition {\n readonly manifest: PluginManifest;\n /** 当前 Runtime 中由 setup 实现的 unit。 */\n readonly unitId: string;\n readonly setup: import(\"../contracts/plugin.js\").PluginSetup;\n}\n\nfunction normalizeProductDependencies(\n dependencies: readonly PluginDependency[] | undefined,\n runtime: RuntimeKind,\n) {\n return dependencies?.map((dependency) => ({\n capability: dependency.capability,\n contractVersion: dependency.contractVersion ?? runtimeCapabilityContractVersion(dependency.capability),\n sourceRuntime: dependency.sourceRuntime ?? runtime,\n ...(dependency.reason !== undefined ? { reason: dependency.reason } : {}),\n ...(dependency.optional !== undefined ? { optional: dependency.optional } : {}),\n }));\n}\n\n/** 将作者定义绑定到真实 Runtime;不把 setup 复制进 manifest。 */\nexport function materializePluginDefinition(\n input: RuntimePluginDefinition,\n runtime: RuntimeKind,\n): MaterializedPluginDefinition {\n const manifest = input.manifest;\n const setup = input.setup;\n if (!manifest || typeof manifest.id !== \"string\" || manifest.id.trim() === \"\") {\n throw new Error(\"Plugin manifest id must be a non-empty string\");\n }\n const existingUnits: readonly RuntimeUnitDescriptorInput[] = (manifest.units ?? []) as readonly RuntimeUnitDescriptorInput[];\n const requestedUnitId = \"unitId\" in input ? input.unitId : undefined;\n const matchingUnits = existingUnits.filter((unit) => unit.runtime === undefined || unit.runtime === runtime);\n let implementationUnitId: string;\n if (existingUnits.length === 0) {\n implementationUnitId = manifest.id;\n } else if (requestedUnitId !== undefined) {\n const selected = existingUnits.find((unit) => unit.id === requestedUnitId);\n if (!selected) throw new Error(`Plugin \"${manifest.id}\" does not declare unit \"${requestedUnitId}\"`);\n if (selected.runtime !== undefined && selected.runtime !== runtime) {\n throw new Error(`Plugin \"${manifest.id}\" unit \"${requestedUnitId}\" targets ${selected.runtime}, not ${runtime}`);\n }\n implementationUnitId = selected.id;\n } else if (matchingUnits.length === 1 && matchingUnits[0]) {\n implementationUnitId = matchingUnits[0].id;\n } else {\n throw new Error(\n `Plugin \"${manifest.id}\" has ${matchingUnits.length} implementation units for ${runtime}; specify unitId explicitly`,\n );\n }\n const selectedUnit = existingUnits.length > 0\n ? existingUnits.find((unit) => unit.id === implementationUnitId)\n : undefined;\n const units: RuntimeUnitDescriptor[] = selectedUnit\n ? [(() => {\n const unitRuntime = selectedUnit.runtime ?? runtime;\n const provides = [...(selectedUnit.provides ?? [])];\n const dependencies = selectedUnit.dependencies?.map((dependency): import(\"../contracts/plugin.js\").RuntimeUnitDependency => ({\n capability: dependency.capability,\n contractVersion: dependency.contractVersion ?? runtimeCapabilityContractVersion(dependency.capability),\n sourceRuntime: dependency.sourceRuntime ?? unitRuntime,\n ...(dependency.reason !== undefined ? { reason: dependency.reason } : {}),\n ...(dependency.optional !== undefined ? { optional: dependency.optional } : {}),\n }));\n return {\n ...selectedUnit,\n runtime: unitRuntime,\n dependencies,\n ...(provides.length > 0\n ? { providedContracts: { ...defineRuntimeUnitProvidedContracts(provides), ...(selectedUnit.providedContracts ?? {}) } }\n : {}),\n };\n })()]\n : [{\n id: manifest.id,\n runtime,\n dependencies: normalizeProductDependencies(manifest.dependencies, runtime),\n ...(manifest.provides && manifest.provides.length > 0 ? {\n provides: [...manifest.provides],\n providedContracts: defineRuntimeUnitProvidedContracts(manifest.provides),\n } : {}),\n ...(manifest.permissions !== undefined ? { permissions: [...manifest.permissions] } : {}),\n ...(manifest.config !== undefined ? { config: manifest.config } : {}),\n ...(manifest.contribution !== undefined ? { contribution: manifest.contribution } : {}),\n }];\n const normalized: PluginManifest = {\n ...manifest,\n units,\n // Product-level declarations are retained only for compatibility with\n // low-level manifests; the selected unit is the source of truth in Host.\n };\n return { manifest: normalized, unitId: implementationUnitId, setup };\n}\n\nexport function materializePluginDefinitions(\n inputs: readonly RuntimePluginDefinition[],\n runtime: RuntimeKind,\n): MaterializedPluginDefinition[] {\n return inputs.map((input) => materializePluginDefinition(input, runtime));\n}\n","import type {\n LifecycleDisposeResult,\n RemoteServiceBridge,\n RemoteServiceReference,\n} from \"../contracts/lifecycle.js\";\nimport type { PluginManifest } from \"../contracts/plugin.js\";\nimport {\n createPluginHost,\n type CreatePluginHostOptions,\n type PluginHost,\n} from \"../host/createPluginHost.js\";\nimport { createRuntimeUnitImplementationRegistry } from \"../host/runtimeUnitImplementationRegistry.js\";\nimport { StartupPluginError } from \"../host/createPluginHost.js\";\nimport type { RuntimePluginDefinition } from \"./pluginDefinitions.js\";\nimport { materializePluginDefinitions } from \"./pluginDefinitions.js\";\nimport { unitSnapshotFromState } from \"./runtimeProtocol.js\";\nimport {\n RuntimeInitializationError,\n RuntimeUnavailableError,\n type RuntimeStatusListener,\n type RuntimeStatusSnapshot,\n type RuntimeHandle,\n type WindowApp,\n} from \"./runtimeTypes.js\";\n\nexport interface CreateWindowAppOptions extends Omit<CreatePluginHostOptions, \"runtime\" | \"runtimeUnitImplementationRegistry\"> {\n /** 逻辑 Runtime 标识;同一页面通常只创建一个 App。 */\n id?: string;\n /** 当前 Window 的插件定义;setup 只在当前 Window realm 执行。 */\n plugins: readonly RuntimePluginDefinition[];\n /**\n * 供领域适配层接管分阶段注册时复用已经创建的 Window Host。\n * 普通插件应省略该字段;传入后由调用方负责后续 register,App 仍负责\n * Window Runtime 快照、远端投影和最终 dispose。\n */\n host?: PluginHost;\n /** 可选的 SharedWorker Runtime;Window 单元只投影其状态,不创建 Worker 假实例。 */\n remoteRuntime?: RuntimeHandle;\n}\n\nfunction makeRuntimeInstanceId(runtimeId: string): string {\n try {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return `${runtimeId}:${crypto.randomUUID()}`;\n }\n } catch {\n // 仅用于实例身份,不承担授权或密钥语义。\n }\n return `${runtimeId}:${Date.now().toString(36)}:${Math.random().toString(36).slice(2)}`;\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction isStartupPluginError(error: unknown): error is StartupPluginError {\n return error instanceof StartupPluginError\n && typeof error.details?.pluginId === \"string\";\n}\n\nfunction buildLocalServices(\n host: PluginHost,\n manifests: readonly PluginManifest[],\n runtimeInstanceId: string,\n): readonly RemoteServiceReference[] {\n const services: RemoteServiceReference[] = [];\n for (const manifest of manifests) {\n const state = host.state(manifest.id);\n const unit = manifest.units?.find((candidate) => candidate.id === state.unitId)\n ?? manifest.units?.[0];\n if (!unit || unit.runtime === undefined || !state.instanceId || state.kind !== \"enabled\") continue;\n for (const capability of unit.provides ?? []) {\n services.push({\n capabilityId: capability,\n contractVersion: unit.providedContracts?.[capability] ?? `${capability}.v1`,\n runtime: unit.runtime,\n runtimeInstanceId,\n serviceInstanceId: state.instanceId,\n status: \"ready\",\n attributes: Object.freeze({}),\n });\n }\n }\n return services;\n}\n\n/** 创建当前 Window 的唯一 window-main Runtime。 */\nexport async function createWindowApp(options: CreateWindowAppOptions): Promise<WindowApp> {\n const runtimeId = options.id ?? \"window-main\";\n const remoteRuntime = options.remoteRuntime;\n const runtimeInstanceId = makeRuntimeInstanceId(runtimeId);\n let currentState: RuntimeStatusSnapshot = {\n runtimeId,\n runtimeKind: \"window-main\",\n runtimeInstanceId,\n state: \"starting\",\n revision: 0,\n units: [],\n services: [],\n };\n const listeners = new Set<RuntimeStatusListener>();\n let disposed = false;\n let disposePromise: Promise<LifecycleDisposeResult> | undefined;\n\n const emit = (next: RuntimeStatusSnapshot): void => {\n currentState = Object.freeze({\n ...next,\n units: Object.freeze([...next.units]),\n services: Object.freeze([...next.services]),\n });\n for (const listener of [...listeners]) {\n try { listener(currentState); } catch { /* 观察者不能改变 Runtime 状态。 */ }\n }\n };\n\n let materialized: ReturnType<typeof materializePluginDefinitions>;\n try {\n materialized = materializePluginDefinitions(options.plugins, \"window-main\");\n } catch (error) {\n throw new RuntimeInitializationError({ phase: \"validate\", error: errorMessage(error) });\n }\n const manifests = materialized.map((item) => item.manifest);\n let implementations: ReturnType<typeof createRuntimeUnitImplementationRegistry>;\n try {\n const duplicate = manifests.find((manifest, index) => (\n manifests.findIndex((candidate) => candidate.id === manifest.id) !== index\n ));\n if (duplicate) throw new Error(`Plugin \"${duplicate.id}\" is declared more than once`);\n implementations = createRuntimeUnitImplementationRegistry(\n materialized.map((item) => ({\n pluginId: item.manifest.id,\n unitId: item.unitId,\n setup: item.setup,\n })),\n );\n } catch (error) {\n throw new RuntimeInitializationError({ phase: \"validate\", error: errorMessage(error) });\n }\n\n let host: PluginHost;\n const suppliedHost = options.host;\n const remoteServiceBridge = remoteRuntime\n ? (remoteRuntime as RuntimeHandle & { readonly serviceBridge: RemoteServiceBridge }).serviceBridge\n : undefined;\n try {\n const {\n id: _id,\n plugins: _plugins,\n host: _host,\n remoteRuntime: _remoteRuntime,\n ...hostOptions\n } = options;\n const suppliedBridgeFactory = hostOptions.serviceBridgeForPlugin;\n host = suppliedHost ?? createPluginHost({\n ...hostOptions,\n runtime: \"window-main\",\n externalRuntimeDependencies: remoteRuntime !== undefined || hostOptions.externalRuntimeDependencies,\n remoteServiceReferences: () => remoteRuntime?.state().services ?? hostOptions.remoteServiceReferences?.() ?? [],\n runtimeSnapshots: () => remoteRuntime\n ? remoteRuntime.state().units.map((unit) => ({\n pluginId: unit.pluginId,\n unitId: unit.unitId,\n runtime: unit.runtime,\n ...(unit.instanceId !== undefined ? { instanceId: unit.instanceId } : {}),\n state: unit.state,\n }))\n : hostOptions.runtimeSnapshots?.() ?? [],\n serviceBridgeForPlugin: (pluginId, instanceId) => (\n suppliedBridgeFactory?.(pluginId, instanceId) ?? remoteServiceBridge\n ),\n rootAttributes: {\n ...(hostOptions.rootAttributes ?? {}),\n runtimeId,\n runtimeInstanceId,\n },\n runtimeUnitImplementationRegistry: implementations,\n });\n } catch (error) {\n throw new RuntimeInitializationError({ phase: \"validate\", error: errorMessage(error) });\n }\n\n let removeRemoteSubscription: (() => void) | undefined;\n\n const manifestsForSnapshot = (): readonly PluginManifest[] => {\n if (!suppliedHost) return manifests;\n return suppliedHost.manifests()\n .map((pluginId) => suppliedHost.getManifest(pluginId))\n .filter((manifest): manifest is PluginManifest => manifest !== undefined);\n };\n\n const refresh = (): void => {\n const snapshotManifests = manifestsForSnapshot();\n const units = snapshotManifests.flatMap((manifest) => {\n const state = host.state(manifest.id);\n return (state.units ?? []).map((unit) => unitSnapshotFromState(\n unit,\n unit.runtime,\n ));\n });\n const revision = Math.max(currentState.revision + 1, host.version());\n emit({\n ...currentState,\n revision,\n units,\n services: [\n ...buildLocalServices(host, snapshotManifests, runtimeInstanceId),\n ...(remoteRuntime?.state().services ?? []),\n ],\n });\n };\n const removeHostSubscription = host.subscribe(refresh);\n\n try {\n if (!suppliedHost) await host.registerAll(manifests);\n const failedRequired = suppliedHost ? undefined : manifests.find((manifest) => {\n const required = manifest.meta.startup === \"required\" || manifest.meta.canDisable === false;\n return required && host.state(manifest.id).kind !== \"enabled\";\n });\n if (failedRequired) {\n const state = host.state(failedRequired.id);\n throw new StartupPluginError({\n pluginId: failedRequired.id,\n unitId: state.unitId ?? failedRequired.units?.[0]?.id ?? failedRequired.id,\n capabilities: [],\n state: state.kind,\n error: state.error ?? `Required plugin is ${state.kind}${state.blockedBy ? `: ${state.blockedBy.join(\", \")}` : \"\"}`,\n });\n }\n } catch (error) {\n refresh();\n const pluginId = isStartupPluginError(error) ? error.details.pluginId : undefined;\n const manifest = pluginId ? manifests.find((candidate) => candidate.id === pluginId) : undefined;\n const required = manifest?.meta.startup === \"required\" || manifest?.meta.canDisable === false;\n if (required || !isStartupPluginError(error)) {\n removeHostSubscription();\n removeRemoteSubscription?.();\n await host.dispose(\"window runtime initialization failed\").catch(() => undefined);\n if (error instanceof RuntimeInitializationError) throw error;\n throw new RuntimeInitializationError({\n pluginId,\n unitId: isStartupPluginError(error) ? error.details.unitId : manifest?.units?.[0]?.id,\n phase: \"startup\",\n error: errorMessage(error),\n });\n }\n // 非 required 插件的失败保留在 Host 快照中;App 本身仍可观察并继续运行。\n }\n refresh();\n emit({ ...currentState, state: \"ready\" });\n removeRemoteSubscription = remoteRuntime?.subscribe(() => {\n host.refreshRuntimeUnitSnapshots();\n void host.reconcile().catch(() => undefined);\n });\n\n const app: WindowApp = {\n runtimeKind: \"window-main\",\n runtimeId,\n runtimeInstanceId,\n host,\n state: () => currentState,\n capability<T>(capabilityId: string): T {\n if (disposed || currentState.state === \"disposed\" || currentState.state === \"stopping\") {\n throw new RuntimeUnavailableError(\"Window Runtime has been disposed\");\n }\n return host.capabilities.get<T>(capabilityId);\n },\n subscribe(listener) {\n listeners.add(listener);\n listener(currentState);\n return () => listeners.delete(listener);\n },\n dispose(reason = \"window runtime disposed\") {\n if (disposePromise) return disposePromise;\n disposed = true;\n emit({ ...currentState, state: \"stopping\" });\n removeHostSubscription();\n removeRemoteSubscription?.();\n disposePromise = host.dispose(reason).then((result) => {\n emit({ ...currentState, state: \"disposed\" });\n return result;\n }, (error) => {\n emit({ ...currentState, state: \"failed\", error: errorMessage(error) });\n throw error;\n });\n return disposePromise;\n },\n };\n return app;\n}\n","// MessagePort Provider。\n//\n// Provider 不发送握手、目录或失效控制包。Runtime Host 是完整快照的唯一\n// 发布者;Provider 只维护自己端点的权威目录,按 call 中的精确标识重新\n// 查找服务,并把取消传给当前 handler。\n\nimport type {\n RemoteServiceMessageCodec,\n RemoteServiceReference,\n} from \"../contracts/lifecycle.js\";\nimport {\n createRemoteServiceMessageCodec,\n RemoteServiceError,\n} from \"../contracts/lifecycle.js\";\nimport type {\n MessagePortServiceCallInput,\n RemoteServicePortCallMessage,\n RemoteServicePortCancelMessage,\n RemoteServicePortErrorMessage,\n RemoteServicePortResultMessage,\n} from \"./messagePortServiceTransport.js\";\n\nexport interface CreateMessagePortServiceProviderOptions {\n /** 与页面服务桥配对的专用双工端口。 */\n port: MessagePort;\n /** Provider 的本地权威目录;不会采信客户端回传的完整 reference。 */\n services?: () => readonly RemoteServiceReference[];\n /** 具体服务分派;这里不自动重放调用。 */\n handleCall(input: MessagePortServiceCallInput): Promise<unknown>;\n /** dispose 时是否关闭本端端口;默认关闭。 */\n closeOnDispose?: boolean;\n /** wire 消息 codec;默认 webloom.remote-service.v2。 */\n codec?: RemoteServiceMessageCodec;\n}\n\nexport interface MessagePortServiceProvider {\n /** 替换 Provider 本地权威目录;不产生 wire 控制消息。 */\n setServices(services: readonly RemoteServiceReference[]): void;\n /** 同步停止新调用并 abort 当前 handler。 */\n revoke(reason?: string): void;\n /** 移除监听器并释放端口;不发送断开控制包。 */\n dispose(): void;\n}\n\nfunction isCallMessage(input: unknown, codec: RemoteServiceMessageCodec): input is RemoteServicePortCallMessage {\n if (!input || typeof input !== \"object\") return false;\n const message = input as Partial<RemoteServicePortCallMessage>;\n return message.type === codec.type(\"call\")\n && typeof message.protocolVersion === \"string\"\n && typeof message.callId === \"string\"\n && message.callId.length > 0\n && typeof message.capabilityId === \"string\"\n && typeof message.contractVersion === \"string\"\n && typeof message.serviceInstanceId === \"string\";\n}\n\nfunction isCancelMessage(input: unknown, codec: RemoteServiceMessageCodec): input is RemoteServicePortCancelMessage {\n if (!input || typeof input !== \"object\") return false;\n const message = input as Partial<RemoteServicePortCancelMessage>;\n return message.type === codec.type(\"cancel\")\n && typeof message.protocolVersion === \"string\"\n && typeof message.callId === \"string\"\n && typeof message.serviceInstanceId === \"string\";\n}\n\nfunction errorMessage(error: unknown): RemoteServicePortErrorMessage[\"error\"] {\n const candidate = error && typeof error === \"object\"\n ? error as { name?: unknown; message?: unknown; code?: unknown; details?: unknown }\n : undefined;\n const code = typeof candidate?.code === \"string\" && candidate.code.length > 0\n ? candidate.code\n : \"handler_failed\";\n return {\n ...(typeof candidate?.name === \"string\" ? { name: candidate.name } : {}),\n message: typeof candidate?.message === \"string\" ? candidate.message : String(error),\n code,\n ...(candidate?.details && typeof candidate.details === \"object\" && !Array.isArray(candidate.details)\n ? { details: candidate.details as Readonly<Record<string, unknown>> }\n : {}),\n };\n}\n\nfunction stableValue(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(stableValue);\n if (!value || typeof value !== \"object\") return value;\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, item]) => [key, stableValue(item)]),\n );\n}\n\nfunction bindingKey(reference: Pick<RemoteServiceReference, \"capabilityId\" | \"contractVersion\" | \"runtime\" | \"runtimeInstanceId\" | \"serviceInstanceId\">): string {\n return [\n reference.capabilityId,\n reference.contractVersion,\n reference.runtime,\n reference.runtimeInstanceId,\n reference.serviceInstanceId,\n ].join(\"\\u0000\");\n}\n\nfunction referenceFingerprint(reference: RemoteServiceReference): string {\n return JSON.stringify({\n ...reference,\n attributes: stableValue(reference.attributes),\n });\n}\n\ninterface ServiceBinding {\n readonly reference: RemoteServiceReference;\n readonly epoch: number;\n}\n\ninterface PendingCall {\n readonly message: RemoteServicePortCallMessage;\n readonly controller: AbortController;\n readonly serviceInstanceId: string;\n readonly bindingKey: string;\n readonly bindingEpoch: number;\n}\n\nfunction postBestEffort(port: MessagePort, message: unknown): void {\n try { port.postMessage(message); } catch { /* 端口关闭时由调用方 deadline 收敛 */ }\n}\n\n/** 创建一条只服务于当前 MessagePort 的 Provider 端点。 */\nexport function createMessagePortServiceProvider(\n options: CreateMessagePortServiceProviderOptions,\n): MessagePortServiceProvider {\n const pending = new Map<string, PendingCall>();\n const codec = options.codec ?? createRemoteServiceMessageCodec();\n let services = [...(options.services?.() ?? [])];\n let bindings = new Map<string, ServiceBinding>();\n let nextBindingEpoch = 0;\n let revoked = false;\n let disposed = false;\n\n const buildBindings = (nextServices: readonly RemoteServiceReference[]): Map<string, ServiceBinding> => {\n const nextBindings = new Map<string, ServiceBinding>();\n for (const reference of nextServices) {\n const key = bindingKey(reference);\n const previous = bindings.get(key);\n const epoch = previous && referenceFingerprint(previous.reference) === referenceFingerprint(reference)\n ? previous.epoch\n : ++nextBindingEpoch;\n nextBindings.set(key, { reference, epoch });\n }\n return nextBindings;\n };\n\n const isCurrent = (callId: string, call: PendingCall): boolean => {\n const current = bindings.get(call.bindingKey);\n return !disposed\n && !revoked\n && pending.get(callId) === call\n && current?.epoch === call.bindingEpoch\n && current.reference.serviceInstanceId === call.serviceInstanceId;\n };\n\n const revokeReplacedCalls = (nextBindings: ReadonlyMap<string, ServiceBinding>): void => {\n for (const call of pending.values()) {\n const next = nextBindings.get(call.bindingKey);\n if (!next || next.epoch !== call.bindingEpoch) {\n sendError(call.message, new RemoteServiceError(\"service_revoked\", \"Remote service binding was replaced\"));\n call.controller.abort(new RemoteServiceError(\"service_revoked\", \"Remote service binding was replaced\"));\n }\n }\n };\n\n bindings = buildBindings(services);\n\n const sendError = (message: RemoteServicePortCallMessage, error: unknown): void => {\n const response: RemoteServicePortErrorMessage = {\n type: codec.type(\"error\"),\n protocolVersion: codec.protocolVersion,\n callId: message.callId,\n serviceInstanceId: message.serviceInstanceId,\n error: errorMessage(error),\n };\n postBestEffort(options.port, codec.encode(response as unknown as Record<string, unknown>));\n };\n\n const onMessage = (event: MessageEvent): void => {\n if (disposed) return;\n const decoded = codec.decode(event.data);\n if (isCancelMessage(decoded, codec)) {\n if (decoded.protocolVersion !== codec.protocolVersion) return;\n const call = pending.get(decoded.callId);\n if (call?.serviceInstanceId === decoded.serviceInstanceId) {\n call.controller.abort(new RemoteServiceError(\"request_cancelled\", \"Remote service request cancelled\"));\n }\n return;\n }\n if (!isCallMessage(decoded, codec)) return;\n const message = decoded;\n if (message.protocolVersion !== codec.protocolVersion) {\n sendError(message, new RemoteServiceError(\"protocol_mismatch\", \"Remote service protocol version mismatch\"));\n return;\n }\n if (revoked) {\n sendError(message, new RemoteServiceError(\"service_revoked\", \"Remote service Provider has been revoked\"));\n return;\n }\n const reference = services.find((candidate) => candidate.status === \"ready\"\n && candidate.capabilityId === message.capabilityId\n && candidate.contractVersion === message.contractVersion\n && candidate.serviceInstanceId === message.serviceInstanceId);\n if (!reference) {\n sendError(message, new RemoteServiceError(\"service_stale\", \"Remote service instance is stale or unavailable\"));\n return;\n }\n if (pending.has(message.callId)) {\n sendError(message, new RemoteServiceError(\"handler_failed\", \"Remote service callId is duplicated\"));\n return;\n }\n const controller = new AbortController();\n const currentBindingKey = bindingKey(reference);\n const currentBinding = bindings.get(currentBindingKey);\n if (!currentBinding || currentBinding.reference !== reference) {\n sendError(message, new RemoteServiceError(\"service_stale\", \"Remote service binding changed\"));\n return;\n }\n const call: PendingCall = {\n message,\n controller,\n serviceInstanceId: message.serviceInstanceId,\n bindingKey: currentBindingKey,\n bindingEpoch: currentBinding.epoch,\n };\n pending.set(message.callId, call);\n void (async () => {\n try {\n const result = await options.handleCall({ message, reference, signal: controller.signal });\n if (controller.signal.aborted || !isCurrent(message.callId, call)) return;\n const response: RemoteServicePortResultMessage = {\n type: codec.type(\"result\"),\n protocolVersion: codec.protocolVersion,\n callId: message.callId,\n serviceInstanceId: message.serviceInstanceId,\n result,\n };\n postBestEffort(options.port, codec.encode(response as unknown as Record<string, unknown>));\n } catch (error) {\n if (controller.signal.aborted || !isCurrent(message.callId, call)) return;\n sendError(message, error);\n } finally {\n if (pending.get(message.callId) === call) pending.delete(message.callId);\n }\n })();\n };\n\n options.port.addEventListener(\"message\", onMessage);\n options.port.start();\n\n const provider: MessagePortServiceProvider = {\n setServices(nextServices): void {\n if (disposed) return;\n const next = [...nextServices];\n const nextBindings = buildBindings(next);\n // Withdraw the old directory first. Abort is synchronous; a handler that\n // ignores AbortSignal is fenced again by isCurrent() before any response.\n revoked = true;\n revokeReplacedCalls(nextBindings);\n services = next;\n bindings = nextBindings;\n revoked = false;\n },\n revoke(reason = \"Remote service Provider revoked\"): void {\n if (disposed) return;\n revoked = true;\n for (const call of pending.values()) {\n sendError(call.message, new RemoteServiceError(\"service_revoked\", reason));\n call.controller.abort(new RemoteServiceError(\"service_revoked\", reason));\n }\n services = [];\n bindings = new Map();\n },\n dispose(): void {\n if (disposed) return;\n disposed = true;\n revoked = true;\n options.port.removeEventListener(\"message\", onMessage);\n for (const { controller } of pending.values()) {\n controller.abort(new RemoteServiceError(\"transport_unavailable\", \"Remote service Provider disposed\"));\n }\n pending.clear();\n services = [];\n bindings = new Map();\n if (options.closeOnDispose !== false) {\n try { options.port.close(); } catch { /* noop */ }\n }\n },\n };\n return provider;\n}\n","import type {\n LifecycleDisposeResult,\n RemoteServiceReference,\n} from \"../contracts/lifecycle.js\";\nimport type { PluginManifest } from \"../contracts/plugin.js\";\nimport {\n createPluginHost,\n type CreatePluginHostOptions,\n type PluginHost,\n} from \"../host/createPluginHost.js\";\nimport { StartupPluginError } from \"../host/createPluginHost.js\";\nimport { createRuntimeUnitImplementationRegistry } from \"../host/runtimeUnitImplementationRegistry.js\";\nimport {\n createMessagePortServiceProvider,\n type MessagePortServiceProvider,\n} from \"../transport/messagePortServiceProvider.js\";\nimport type { MessagePortServiceCallInput } from \"../transport/messagePortServiceTransport.js\";\nimport type { RuntimePluginDefinition } from \"./pluginDefinitions.js\";\nimport { materializePluginDefinitions } from \"./pluginDefinitions.js\";\nimport {\n createRuntimeMessageCodec,\n RUNTIME_ERROR_TYPE,\n RUNTIME_PROTOCOL_VERSION,\n RUNTIME_SNAPSHOT_TYPE,\n type RuntimeErrorMessage,\n type RuntimeSnapshot,\n type RuntimeSnapshotUnit,\n} from \"./runtimeProtocol.js\";\nimport {\n RuntimeInitializationError,\n type RuntimeStatusListener,\n type RuntimeStatusSnapshot,\n type RuntimeAppState,\n} from \"./runtimeTypes.js\";\n\nexport interface SharedWorkerScopeLike {\n onconnect: ((event: { ports: MessagePort[] }) => void) | null;\n}\n\nexport interface StartSharedWorkerAppOptions extends Omit<CreatePluginHostOptions, \"runtime\" | \"runtimeUnitImplementationRegistry\"> {\n id: string;\n plugins: readonly RuntimePluginDefinition[];\n globalScope?: SharedWorkerScopeLike;\n /** SWCF-009 完成前的临时领域端口装配接缝。 */\n onPortConnect?: (event: { ports: MessagePort[] }) => void;\n}\n\nexport interface SharedWorkerApp {\n readonly runtimeKind: \"shared-worker\";\n readonly runtimeId: string;\n readonly runtimeInstanceId: string;\n ready(): Promise<void>;\n reconcile(): Promise<void>;\n state(): RuntimeStatusSnapshot;\n subscribe(listener: RuntimeStatusListener): () => void;\n dispose(reason?: string): Promise<LifecycleDisposeResult>;\n}\n\ninterface WorkerEndpoint {\n port: MessagePort;\n provider: MessagePortServiceProvider;\n removeMessage: () => void;\n closed: boolean;\n}\n\nfunction makeRuntimeInstanceId(runtimeId: string): string {\n try {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return `${runtimeId}:${crypto.randomUUID()}`;\n }\n } catch {\n // 仅用于 Runtime 身份去重。\n }\n return `${runtimeId}:${Date.now().toString(36)}:${Math.random().toString(36).slice(2)}`;\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction startupDetails(error: unknown): { pluginId?: string; unitId?: string; message: string } {\n if (error instanceof StartupPluginError) {\n return { pluginId: error.details.pluginId, unitId: error.details.unitId, message: error.details.error ?? error.message };\n }\n if (error instanceof RuntimeInitializationError) {\n return { pluginId: error.details.pluginId, unitId: error.details.unitId, message: error.message };\n }\n return { message: errorMessage(error) };\n}\n\nfunction addPortListener(port: MessagePort, listener: (event: MessageEvent) => void): () => void {\n port.addEventListener(\"message\", listener);\n return () => port.removeEventListener(\"message\", listener);\n}\n\nfunction post(port: MessagePort, message: unknown): void {\n try { port.postMessage(message); } catch { /* 端口已断开 */ }\n}\n\n/** 在当前 SharedWorkerGlobalScope 中安装唯一的 Worker Runtime。 */\nexport function startSharedWorkerApp(options: StartSharedWorkerAppOptions): SharedWorkerApp {\n if (!options || typeof options.id !== \"string\" || options.id.trim() === \"\") {\n throw new Error(\"SharedWorker runtime id must be a non-empty string\");\n }\n const workerScope = options.globalScope\n ?? (\"onconnect\" in globalThis ? globalThis as unknown as SharedWorkerScopeLike : undefined);\n if (!workerScope) {\n throw new RuntimeInitializationError({\n phase: \"validate\",\n error: \"startSharedWorkerApp must run in a SharedWorkerGlobalScope\",\n });\n }\n\n const runtimeId = options.id;\n const runtimeInstanceId = makeRuntimeInstanceId(runtimeId);\n const listeners = new Set<RuntimeStatusListener>();\n const endpoints = new Set<WorkerEndpoint>();\n const codec = createRuntimeMessageCodec();\n let runtimeState: Exclude<RuntimeAppState, \"disconnected\"> = \"starting\";\n let revision = 0;\n let host: PluginHost | undefined;\n let manifests: readonly PluginManifest[] = [];\n let disposed = false;\n let acceptingConnections = true;\n let disposePromise: Promise<LifecycleDisposeResult> | undefined;\n let startupError: unknown;\n\n const serviceReferences = (): RemoteServiceReference[] => {\n // A stopping/disposed Runtime has no callable services. Keeping the\n // directory empty is also what synchronously revokes Provider pending\n // calls before the terminal snapshot is published.\n if (!host || runtimeState !== \"ready\") return [];\n const services: RemoteServiceReference[] = [];\n for (const manifest of manifests) {\n const state = host.state(manifest.id);\n const unit = manifest.units?.find((candidate) => candidate.id === state.unitId) ?? manifest.units?.[0];\n if (!unit || unit.runtime === undefined || !state.instanceId || state.kind !== \"enabled\") continue;\n const scope = host.scope(manifest.id);\n const attributes = Object.freeze({ ...(scope?.identity.attributes ?? {}) });\n for (const capability of unit.provides ?? []) {\n services.push({\n capabilityId: capability,\n contractVersion: unit.providedContracts?.[capability] ?? `${capability}.v1`,\n runtime: unit.runtime,\n runtimeInstanceId,\n serviceInstanceId: state.instanceId,\n status: \"ready\",\n attributes,\n });\n }\n }\n return services;\n };\n\n const currentSnapshot = (): RuntimeStatusSnapshot => Object.freeze({\n runtimeId,\n runtimeKind: \"shared-worker\",\n runtimeInstanceId,\n state: runtimeState,\n revision,\n units: Object.freeze(host && runtimeState !== \"failed\"\n ? manifests.flatMap((manifest) => {\n const state = host?.state(manifest.id);\n return (state?.units ?? []).map((unit) => ({\n pluginId: unit.pluginId,\n unitId: unit.unitId,\n runtime: unit.runtime,\n ...(unit.instanceId !== undefined ? { instanceId: unit.instanceId } : {}),\n state: unit.kind,\n } satisfies RuntimeSnapshotUnit));\n })\n : []),\n services: Object.freeze(serviceReferences()),\n });\n\n const emit = (): void => {\n const snapshot = currentSnapshot();\n for (const listener of [...listeners]) {\n try { listener(snapshot); } catch { /* observer isolation */ }\n }\n };\n\n const runtimeSnapshot = (): RuntimeSnapshot => ({\n type: RUNTIME_SNAPSHOT_TYPE,\n protocolVersion: RUNTIME_PROTOCOL_VERSION,\n runtimeId,\n runtimeKind: \"shared-worker\",\n runtimeInstanceId,\n revision,\n state: runtimeState,\n units: currentSnapshot().units,\n services: serviceReferences(),\n });\n\n const publishEndpoint = (endpoint: WorkerEndpoint): void => {\n if (endpoint.closed) return;\n endpoint.provider.setServices(serviceReferences());\n post(endpoint.port, codec.encode(runtimeSnapshot() as unknown as Record<string, unknown>));\n };\n\n const publishAll = (): void => {\n for (const endpoint of [...endpoints]) publishEndpoint(endpoint);\n };\n\n const closeEndpoint = (endpoint: WorkerEndpoint, _reason: string): void => {\n if (endpoint.closed) return;\n endpoint.closed = true;\n endpoints.delete(endpoint);\n endpoint.removeMessage();\n endpoint.provider.dispose();\n };\n\n const sendError = (\n port: MessagePort,\n code: RuntimeErrorMessage[\"code\"],\n message: string,\n details: { pluginId?: string; unitId?: string; phase?: RuntimeErrorMessage[\"phase\"] } = {},\n ): void => {\n const error: RuntimeErrorMessage = {\n type: RUNTIME_ERROR_TYPE,\n protocolVersion: RUNTIME_PROTOCOL_VERSION,\n code,\n message,\n ...(details.pluginId !== undefined ? { pluginId: details.pluginId } : {}),\n ...(details.unitId !== undefined ? { unitId: details.unitId } : {}),\n ...(details.phase !== undefined ? { phase: details.phase } : {}),\n };\n post(port, error);\n };\n\n const isAcceptingConnections = (): boolean => (\n acceptingConnections\n && runtimeState !== \"stopping\"\n && runtimeState !== \"disposed\"\n && !disposed\n );\n\n const rejectLateConnection = (port: MessagePort): void => {\n // The port never becomes an endpoint and the domain hook is never called.\n // Publish the current terminal snapshot so a late client fails at its\n // call-first boundary immediately instead of waiting for a timeout. Delay\n // close by one task so the snapshot has a delivery opportunity.\n post(port, codec.encode(runtimeSnapshot() as unknown as Record<string, unknown>));\n setTimeout(() => {\n try { port.close(); } catch { /* noop */ }\n }, 0);\n };\n\n const handleCall = async (input: MessagePortServiceCallInput): Promise<unknown> => {\n if (!host || runtimeState !== \"ready\") throw new Error(\"SharedWorker Runtime is not ready\");\n const { message, reference } = input;\n if (reference.runtimeInstanceId !== runtimeInstanceId\n || reference.runtime !== \"shared-worker\"\n || reference.status !== \"ready\") {\n throw new Error(\"Runtime service reference is stale\");\n }\n const manifest = manifests.find((candidate) => host?.state(candidate.id).instanceId === reference.serviceInstanceId);\n if (!manifest) throw new Error(\"Runtime service provider is no longer active\");\n const state = host.state(manifest.id);\n if (state.kind !== \"enabled\" || state.instanceId !== reference.serviceInstanceId) {\n throw new Error(\"Runtime service provider is no longer active\");\n }\n const unit = manifest.units?.find((candidate) => candidate.id === state.unitId);\n if (!unit || unit.runtime !== \"shared-worker\" || !unit.provides?.includes(reference.capabilityId)) {\n throw new Error(\"Runtime capability is not declared\");\n }\n const expectedVersion = unit.providedContracts?.[reference.capabilityId] ?? `${reference.capabilityId}.v1`;\n if (expectedVersion !== reference.contractVersion) throw new Error(\"Runtime capability contract mismatch\");\n const value = host.capabilities.get<unknown>(reference.capabilityId);\n if (input.signal.aborted) throw input.signal.reason ?? new Error(\"Runtime service request cancelled\");\n const request = message.request;\n if (typeof value === \"function\") return await (value as (request: unknown, signal: AbortSignal) => unknown)(request, input.signal);\n if (value && typeof value === \"object\") {\n const object = value as Record<string, unknown>;\n if (typeof object.handle === \"function\") return await (object.handle as (request: unknown, signal: AbortSignal) => unknown)(request, input.signal);\n if (request && typeof request === \"object\" && typeof (request as { method?: unknown }).method === \"string\") {\n const method = (request as { method: string }).method;\n const methodValue = object[method];\n if (typeof methodValue === \"function\") {\n const args = (request as { args?: unknown[] }).args;\n return await (methodValue as (...args: unknown[]) => unknown)(...(Array.isArray(args) ? args : []));\n }\n }\n }\n throw new Error(`Runtime capability \"${reference.capabilityId}\" does not expose an RPC handler`);\n };\n\n const attachPort = (port: MessagePort): void => {\n let endpoint: WorkerEndpoint | undefined;\n let removeMessage: () => void = () => undefined;\n const onMessageError = (): void => {\n if (endpoint) closeEndpoint(endpoint, \"MessagePort error\");\n };\n endpoint = {\n port,\n provider: undefined as unknown as MessagePortServiceProvider,\n removeMessage: () => undefined,\n closed: false,\n };\n endpoint.provider = createMessagePortServiceProvider({\n port,\n codec,\n services: serviceReferences,\n handleCall,\n });\n endpoints.add(endpoint);\n const onMessage = (event: MessageEvent): void => {\n // Runtime has no client control messages. Domain listeners installed by\n // onPortConnect own their own message schema on this same port.\n void event;\n };\n removeMessage = addPortListener(port, onMessage);\n endpoint.removeMessage = () => {\n removeMessage();\n port.removeEventListener(\"messageerror\", onMessageError);\n };\n port.addEventListener(\"messageerror\", onMessageError);\n port.start();\n publishEndpoint(endpoint);\n };\n\n // Install onconnect before asynchronous plugin startup so every new port\n // immediately receives a complete starting snapshot.\n workerScope.onconnect = (event) => {\n const ports = event.ports ?? [];\n if (!isAcceptingConnections()) {\n for (const port of ports) rejectLateConnection(port);\n return;\n }\n try {\n options.onPortConnect?.(event);\n } catch (error) {\n const detail = startupDetails(error);\n for (const port of ports) {\n sendError(port, \"runtime_initialization_failed\", detail.message, {\n pluginId: detail.pluginId,\n unitId: detail.unitId,\n phase: \"startup\",\n });\n try { port.close(); } catch { /* noop */ }\n }\n return;\n }\n // A synchronous domain hook may itself initiate disposal. Re-check before\n // creating any Provider endpoint so the hook cannot open a new callable\n // port after the lifecycle gate has closed.\n if (!isAcceptingConnections()) {\n for (const port of ports) rejectLateConnection(port);\n return;\n }\n for (const port of ports) attachPort(port);\n };\n\n let materialized: ReturnType<typeof materializePluginDefinitions> = [];\n let readyPromise: Promise<void>;\n try {\n materialized = materializePluginDefinitions(options.plugins, \"shared-worker\");\n manifests = materialized.map((item) => item.manifest);\n const implementations = createRuntimeUnitImplementationRegistry(materialized.map((item) => ({\n pluginId: item.manifest.id,\n unitId: item.unitId,\n setup: item.setup,\n })));\n const { id: _id, plugins: _plugins, globalScope: _scope, onPortConnect: _onPortConnect, ...hostOptions } = options;\n host = createPluginHost({\n ...hostOptions,\n runtime: \"shared-worker\",\n rootAttributes: { ...(hostOptions.rootAttributes ?? {}), runtimeId, runtimeInstanceId },\n runtimeUnitImplementationRegistry: implementations,\n });\n host.subscribe(() => {\n if (runtimeState !== \"ready\" || disposed) return;\n revision += 1;\n publishAll();\n emit();\n });\n readyPromise = host.registerAll(manifests).then(() => {\n if (runtimeState === \"stopping\" || disposed) return;\n const runtimeHost = host;\n if (!runtimeHost) throw new Error(\"SharedWorker Plugin Host is unavailable\");\n const failedRequired = manifests.find((manifest) => {\n const required = manifest.meta.startup === \"required\" || manifest.meta.canDisable === false;\n return required && runtimeHost.state(manifest.id).kind !== \"enabled\";\n });\n if (failedRequired) {\n const state = runtimeHost.state(failedRequired.id);\n throw new StartupPluginError({\n pluginId: failedRequired.id,\n unitId: state.unitId ?? failedRequired.units?.[0]?.id ?? failedRequired.id,\n capabilities: [],\n state: state.kind,\n error: state.error ?? `Required plugin is ${state.kind}`,\n });\n }\n runtimeState = \"ready\";\n revision = Math.max(1, revision + 1);\n publishAll();\n emit();\n }).catch((error) => {\n // dispose() may have begun while required plugin startup was still\n // pending. Keep the stopping/terminal sequence authoritative; startup\n // must not resurrect a callable directory or overwrite its state with\n // a late failed snapshot.\n if (runtimeState === \"stopping\" || disposed) return;\n startupError = error;\n runtimeState = \"failed\";\n emit();\n const detail = startupDetails(error);\n for (const endpoint of [...endpoints]) {\n sendError(endpoint.port, \"runtime_initialization_failed\", detail.message, {\n pluginId: detail.pluginId,\n unitId: detail.unitId,\n phase: \"startup\",\n });\n closeEndpoint(endpoint, \"Runtime initialization failed\");\n }\n throw new RuntimeInitializationError({\n pluginId: detail.pluginId,\n unitId: detail.unitId,\n phase: \"startup\",\n error: detail.message,\n });\n });\n } catch (error) {\n startupError = error;\n runtimeState = \"failed\";\n emit();\n readyPromise = Promise.reject(error instanceof RuntimeInitializationError\n ? error\n : new RuntimeInitializationError({ phase: \"validate\", error: errorMessage(error) }));\n void readyPromise.catch(() => undefined);\n }\n\n const app: SharedWorkerApp = {\n runtimeKind: \"shared-worker\",\n runtimeId,\n runtimeInstanceId,\n ready: () => readyPromise,\n async reconcile() {\n if (!host) {\n await readyPromise;\n return;\n }\n if (runtimeState === \"failed\" || runtimeState === \"stopping\" || runtimeState === \"disposed\" || disposed) {\n await readyPromise;\n return;\n }\n await host.reconcile();\n },\n state: currentSnapshot,\n subscribe(listener) {\n listeners.add(listener);\n listener(currentSnapshot());\n return () => listeners.delete(listener);\n },\n dispose(reason = \"shared worker runtime disposed\") {\n if (disposePromise) return disposePromise;\n // Close admission before publishing stopping or entering async Host\n // drain. No later onconnect may reach a domain hook or Provider.\n acceptingConnections = false;\n runtimeState = \"stopping\";\n revision += 1;\n // Publish stopping while endpoints are still open. publishEndpoint also\n // clears the Provider directory, aborting pending calls before the\n // asynchronous Host drain starts.\n publishAll();\n emit();\n disposePromise = (async () => {\n let result: LifecycleDisposeResult;\n let failure: unknown;\n try {\n result = host\n ? await host.dispose(reason)\n : { scopeId: `runtime:${runtimeInstanceId}`, state: \"stopped\" as const, attempted: 0, released: 0, pending: [], errors: [], cleanupIncomplete: false };\n } catch (error) {\n failure = error;\n result = {\n scopeId: `runtime:${runtimeInstanceId}`,\n state: \"stopped\",\n attempted: 0,\n released: 0,\n pending: [],\n errors: [{ resourceId: \"runtime.dispose\", code: \"lifecycle.cleanup_failed\", message: errorMessage(error) }],\n cleanupIncomplete: true,\n };\n }\n\n // Keep both terminal snapshots observable before closing any port.\n // The Provider has already been emptied by the stopping publication;\n // this second publication gives clients a deterministic terminal state.\n runtimeState = \"disposed\";\n revision += 1;\n publishAll();\n emit();\n disposed = true;\n for (const endpoint of [...endpoints]) closeEndpoint(endpoint, reason);\n if (failure) throw failure;\n return result;\n })();\n return disposePromise;\n },\n };\n void startupError;\n return app;\n}\n","// 权限租约的最终边界验证器。\n//\n// Context 中的 permissions 只用于限制误用;RPC handler、最终存储写入或\n// 签名提交处必须调用这里,不能信任请求体自带的 pluginId / owner / 世代。\n\nimport type {\n PermissionLease,\n PluginPermission,\n} from \"../contracts/lifecycle.js\";\n\nexport interface VerifyPermissionLeaseOptions {\n /** 已由受信装配层创建的租约。 */\n lease: PermissionLease;\n /** 本次实际操作所需的最小权限。 */\n permission: PluginPermission;\n /** 从端口 / 当前会话权威取得的绑定值。 */\n binding?: Parameters<PermissionLease[\"assertBinding\"]>[0];\n}\n/** 在最终 RPC / I/O 边界执行一次 fail-closed 校验。 */\nexport function verifyPermissionLease(options: VerifyPermissionLeaseOptions): void {\n options.lease.assert(options.permission);\n if (options.binding) options.lease.assertBinding(options.binding);\n}\n","// 把已有 Registry 绑定到插件实例作用域。\n//\n// 该 facade 不改变 Registry 的业务类型,只在注册方法周围登记所有权:\n// 资源创建成功后立刻绑定 instance scope,停止时按 after-teardown 阶段\n// 注销。setup 前后 snapshot 仍保留作旧插件兼容兜底,但新注册不依赖它。\n\nimport type { LifecycleScope } from \"../contracts/lifecycle.js\";\n\nexport interface ScopedRegistryRegistration {\n /** 注册方法名,例如 register / registerFeature。 */\n method: string;\n /** 从参数哪个位置读取带 id 的定义。 */\n idArgument?: number;\n /** 没有返回取消函数时使用的注销方法。 */\n unregisterMethod?: string;\n /** 注销方法的参数位置;默认使用 idArgument。 */\n unregisterArgument?: number;\n /** 含 ownerPluginId 参数的注册方法;由 Host 绑定当前插件身份。 */\n bindPluginIdArgument?: number;\n /** 定义对象中的 ownerPluginId 字段;存在时必须与当前插件一致。 */\n ownerPluginIdProperty?: string;\n}\n\nexport interface CreateScopedRegistryFacadeOptions {\n /** 日志和作用域资源中显示的注册表名。 */\n name: string;\n /** 注册方法规则;缺省只包装 register(item)。 */\n registrations?: readonly ScopedRegistryRegistration[];\n}\n\ntype AnyFunction = (...args: any[]) => any;\ntype RegistryTarget = Record<PropertyKey, any>;\n\nfunction definitionId(value: unknown): string | undefined {\n if (!value || typeof value !== \"object\") return undefined;\n const id = (value as { id?: unknown }).id;\n return typeof id === \"string\" && id.length > 0 ? id : undefined;\n}\n\nfunction defaultRegistrationRules(): ScopedRegistryRegistration[] {\n return [{ method: \"register\", idArgument: 0, unregisterMethod: \"unregister\" }];\n}\n\n/** 创建一个只对当前插件实例开放的 Registry 视图。 */\nexport function createScopedRegistryFacade<T extends object>(\n target: T,\n scope: LifecycleScope,\n options: CreateScopedRegistryFacadeOptions\n): T {\n const rules = options.registrations ?? defaultRegistrationRules();\n const byMethod = new Map(rules.map((rule) => [rule.method, rule]));\n const unregisterMethods = new Set(\n rules.map((rule) => rule.unregisterMethod).filter((method): method is string => Boolean(method))\n );\n interface OwnedRegistration {\n id?: string;\n unregisterMethod?: string;\n active: boolean;\n /** revoke 时同步失效的入口;异步 dispose 只作为兜底。 */\n revokeNow: (reason: string) => void;\n /** revoke 已触发但尚未完成的底层注销;dispose 需要等待它。 */\n revokedCleanup?: Promise<void>;\n removeScopeCleanup: () => void;\n }\n const ownedRegistrations = new Set<OwnedRegistration>();\n const objectTarget = target as RegistryTarget;\n\n const remember = (\n rule: ScopedRegistryRegistration,\n id: string | undefined,\n result: unknown,\n args: unknown[]\n ): unknown => {\n const unregisterMethod = rule.unregisterMethod;\n if (typeof result !== \"function\" && (!unregisterMethod || id === undefined)) return result;\n const key = rule.method + \":\" + (id ?? \"returned\");\n let active = true;\n let removeScopeRevoke: () => void = () => undefined;\n let removeScopeCleanup: () => void = () => undefined;\n const entry = {} as OwnedRegistration;\n const clearOwnership = (removeDispose = true): boolean => {\n if (!active) return false;\n active = false;\n ownedRegistrations.delete(entry);\n removeScopeRevoke();\n if (removeDispose) removeScopeCleanup();\n return true;\n };\n const invokeUnregister = (...offArgs: unknown[]): unknown => {\n if (typeof result === \"function\") {\n return (result as AnyFunction).apply(target, offArgs);\n }\n const unregister = objectTarget[unregisterMethod!];\n if (typeof unregister !== \"function\") return undefined;\n const unregisterArgument = rule.unregisterArgument ?? rule.idArgument ?? 0;\n const unregisterArgs = [...args];\n unregisterArgs[unregisterArgument] = id;\n return unregister.apply(target, unregisterArgs);\n };\n const cleanup = async (_reason: string): Promise<void> => {\n if (!active) {\n if (entry.revokedCleanup) await entry.revokedCleanup;\n return;\n }\n if (!clearOwnership()) return;\n await invokeUnregister();\n };\n const revokeNow = (_reason: string): void => {\n if (!clearOwnership(false)) return;\n try {\n const pending = invokeUnregister();\n if (pending && typeof (pending as PromiseLike<unknown>).then === \"function\") {\n const revokedCleanup = Promise.resolve(pending).then(() => undefined);\n entry.revokedCleanup = revokedCleanup;\n revokedCleanup.catch(() => undefined);\n }\n } catch (error) {\n // revoke 必须继续同步撤权;把同步失败留给 dispose 的结果,不能\n // 重新暴露旧注册项,也不能让失败 Promise 变成未处理异常。\n entry.revokedCleanup = Promise.reject(error);\n entry.revokedCleanup.catch(() => undefined);\n }\n };\n entry.id = id;\n entry.unregisterMethod = unregisterMethod;\n entry.revokeNow = revokeNow;\n Object.defineProperty(entry, \"active\", {\n enumerable: true,\n configurable: false,\n get: () => active,\n set: (value: boolean) => { active = value; },\n });\n entry.removeScopeCleanup = removeScopeCleanup;\n ownedRegistrations.add(entry);\n removeScopeCleanup = scope.onDispose(\n cleanup,\n options.name + \":\" + key,\n \"after-teardown\"\n );\n entry.removeScopeCleanup = removeScopeCleanup;\n removeScopeRevoke = scope.onRevoke(revokeNow);\n\n if (typeof result === \"function\") {\n return (...offArgs: unknown[]) => {\n if (!clearOwnership()) return undefined;\n return (result as AnyFunction).apply(target, offArgs);\n };\n }\n return result;\n };\n\n return new Proxy(target, {\n get(current, property, receiver) {\n const value = Reflect.get(current, property, receiver);\n if (typeof value !== \"function\") return value;\n const rule = typeof property === \"string\" ? byMethod.get(property) : undefined;\n if (rule) {\n return (...args: unknown[]) => {\n scope.assertActive();\n const callArgs = [...args];\n if (rule.bindPluginIdArgument !== undefined && scope.identity.pluginId) {\n const claimedPluginId = callArgs[rule.bindPluginIdArgument];\n if (claimedPluginId !== undefined && claimedPluginId !== scope.identity.pluginId) {\n throw new Error(\n \"Registry owner \\\"\" + String(claimedPluginId) +\n \"\\\" does not match plugin instance \\\"\" + scope.identity.pluginId + \"\\\"\"\n );\n }\n callArgs[rule.bindPluginIdArgument] = scope.identity.pluginId;\n }\n if (rule.ownerPluginIdProperty && scope.identity.pluginId) {\n const definition = callArgs[rule.idArgument ?? 0];\n if (definition && typeof definition === \"object\") {\n const claimedPluginId = (definition as Record<string, unknown>)[rule.ownerPluginIdProperty];\n if (claimedPluginId !== undefined && claimedPluginId !== scope.identity.pluginId) {\n throw new Error(\n \"Registry owner \\\"\" + String(claimedPluginId) +\n \"\\\" does not match plugin instance \\\"\" + scope.identity.pluginId + \"\\\"\"\n );\n }\n }\n }\n const result = (value as AnyFunction).apply(target, callArgs);\n const id = rule.idArgument === undefined ? undefined : definitionId(callArgs[rule.idArgument]);\n return remember(rule, id, result, callArgs);\n };\n }\n // 插件主动注销只能操作自己在本作用域登记过的 id;例如\n // protected-outpoint 的 unregisterByOwner 属于领域批量操作,不在这里\n // 冒充单条资源注销,仍由领域接口自己做 owner 校验。\n if (typeof property === \"string\" && unregisterMethods.has(property)) {\n return (...args: unknown[]) => {\n scope.assertActive();\n const id = definitionId(args[0]) ?? (typeof args[0] === \"string\" ? args[0] : undefined);\n const owned = [...ownedRegistrations].find((entry) =>\n entry.active && entry.id === id && entry.unregisterMethod === property\n );\n if (!owned) {\n throw new Error(\n \"Registry resource \\\"\" + (id ?? \"unknown\") + \"\\\" is not owned by this plugin instance\"\n );\n }\n const result = (value as AnyFunction).apply(target, args);\n owned.active = false;\n ownedRegistrations.delete(owned);\n owned.removeScopeCleanup();\n return result;\n };\n }\n return (value as AnyFunction).bind(target);\n },\n }) as T;\n}\n","// Worker / 页面升级接管门禁。\n//\n// 这是一个本地写入栅栏,不是 leader 选举器,也不是跨 Worker 调度器:\n// - handshake 只校验协议、构建、接管世代和精确契约版本;\n// - active 期间才发放新的 I/O 租约;\n// - beginDrain 同步关闭新入口,已有 I/O 可以继续排空;\n// - drain 超时返回未排空,调用方不能据此开放下一代写入。\n//\n// 真正的存储 / 签名服务仍必须在最终边界重复校验 authorityInstanceId 和\n// handoverGeneration。这个模块只能提供可复用的接管语义,不能替代服务端校验。\n\nimport type {\n CreateUpgradeGateOptions,\n UpgradeDrainResult,\n UpgradeGate,\n UpgradeGateState,\n UpgradeHandshake,\n UpgradeHandshakeResult,\n UpgradeIoLease,\n UpgradeSession,\n} from \"../contracts/lifecycle.js\";\nimport { UpgradeGateRejectedError } from \"../contracts/lifecycle.js\";\n\ninterface LeaseRecord {\n session: SessionRecord;\n operation: \"read\" | \"write\";\n controller: AbortController;\n revoked: boolean;\n reason: string;\n removeExternalAbort?: () => void;\n}\n\ninterface SessionRecord {\n sessionId: string;\n connectionId: string;\n contractVersion: string;\n controller: AbortController;\n revoked: boolean;\n reason: string;\n leases: Set<LeaseRecord>;\n session?: UpgradeSession;\n}\n\nfunction validGeneration(value: number): boolean {\n return Number.isSafeInteger(value) && value >= 0;\n}\n\nfunction uniqueStrings(values: readonly string[]): string[] {\n return [...new Set(values.filter((value) => typeof value === \"string\" && value.length > 0))];\n}\n\nfunction makeSessionId(): string {\n try {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return `upgrade-session:${crypto.randomUUID()}`;\n }\n } catch {\n // 会话标识用于防止误绑定;真正的授权仍由握手和最终边界校验。\n }\n return `upgrade-session:${Date.now().toString(36)}:${Math.random().toString(36).slice(2)}`;\n}\n\nfunction buildIsCompatible(options: CreateUpgradeGateOptions, buildId: string): boolean {\n try {\n if (options.isBuildCompatible) return options.isBuildCompatible(buildId);\n } catch {\n return false;\n }\n return buildId === options.buildId || options.compatibleBuildIds?.has(buildId) === true;\n}\n\n/** 创建一个绑定当前构建和接管世代的升级门禁。 */\nexport function createUpgradeGate(options: CreateUpgradeGateOptions): UpgradeGate {\n if (!options.protocolVersion || !options.buildId || !options.authorityInstanceId) {\n throw new Error(\"升级门禁的 protocolVersion、buildId 和 authorityInstanceId 必须有效\");\n }\n if (!validGeneration(options.handoverGeneration)) {\n throw new Error(\"升级门禁的 handoverGeneration 必须是非负安全整数\");\n }\n const contractVersions = uniqueStrings(options.supportedContractVersions);\n if (contractVersions.length === 0) {\n throw new Error(\"升级门禁至少需要一个 supportedContractVersions\");\n }\n\n let currentState: UpgradeGateState = \"active\";\n let closeReason = \"upgrade gate closed\";\n const leases = new Set<LeaseRecord>();\n const sessions = new Set<SessionRecord>();\n const sessionByObject = new WeakMap<UpgradeSession, SessionRecord>();\n const emptyWaiters = new Set<() => void>();\n\n const notifyEmpty = () => {\n if (leases.size !== 0) return;\n for (const resolve of [...emptyWaiters]) {\n emptyWaiters.delete(resolve);\n resolve();\n }\n };\n\n const removeLease = (record: LeaseRecord) => {\n if (!leases.delete(record)) return;\n record.session.leases.delete(record);\n record.removeExternalAbort?.();\n record.removeExternalAbort = undefined;\n notifyEmpty();\n };\n\n const revokeSession = (record: SessionRecord, reason: string) => {\n if (record.revoked) return;\n record.revoked = true;\n record.reason = reason;\n try {\n record.controller.abort(new UpgradeGateRejectedError(reason));\n } catch {\n record.controller.abort();\n }\n for (const lease of [...record.leases]) revokeLease(lease, reason);\n sessions.delete(record);\n };\n\n const revokeLease = (record: LeaseRecord, reason: string) => {\n if (record.revoked) return;\n record.revoked = true;\n record.reason = reason;\n try {\n record.controller.abort(new UpgradeGateRejectedError(reason));\n } catch {\n record.controller.abort();\n }\n removeLease(record);\n };\n\n const assertAccepting = () => {\n if (currentState === \"active\") return;\n throw new UpgradeGateRejectedError(currentState === \"draining\" ? \"draining\" : \"closed\", closeReason);\n };\n\n const handshake = (input: UpgradeHandshake): UpgradeHandshakeResult => {\n if (currentState !== \"active\") {\n return { accepted: false, reason: currentState === \"draining\" ? \"draining\" : \"closed\" };\n }\n if (\n typeof input.connectionId !== \"string\"\n || input.connectionId.length === 0\n || input.protocolVersion !== options.protocolVersion\n || typeof input.protocolVersion !== \"string\"\n || typeof input.buildId !== \"string\"\n || typeof input.authorityInstanceId !== \"string\"\n || input.authorityInstanceId.length === 0\n ) {\n return { accepted: false, reason: \"protocol-mismatch\" };\n }\n if (!buildIsCompatible(options, input.buildId)) {\n return { accepted: false, reason: \"build-incompatible\" };\n }\n if (!validGeneration(input.handoverGeneration)) {\n return { accepted: false, reason: \"stale-generation\" };\n }\n if (input.handoverGeneration < options.handoverGeneration) {\n return { accepted: false, reason: \"stale-generation\" };\n }\n if (input.handoverGeneration > options.handoverGeneration) {\n return { accepted: false, reason: \"future-generation\" };\n }\n const contractVersion = contractVersions.find((version) => input.supportedContractVersions.includes(version));\n if (!contractVersion) return { accepted: false, reason: \"contract-mismatch\" };\n const sessionRecord: SessionRecord = {\n sessionId: makeSessionId(),\n connectionId: input.connectionId,\n contractVersion,\n controller: new AbortController(),\n revoked: false,\n reason: \"upgrade session closed\",\n leases: new Set(),\n };\n const session: UpgradeSession = {\n connectionId: sessionRecord.connectionId,\n sessionId: sessionRecord.sessionId,\n authorityInstanceId: options.authorityInstanceId,\n handoverGeneration: options.handoverGeneration,\n contractVersion,\n get revoked() {\n return sessionRecord.revoked || !sessions.has(sessionRecord);\n },\n signal: sessionRecord.controller.signal,\n assertActive() {\n if (sessionRecord.revoked || !sessions.has(sessionRecord)) {\n throw new UpgradeGateRejectedError(sessionRecord.reason, \"升级握手会话已失效\");\n }\n if (currentState === \"closed\") {\n throw new UpgradeGateRejectedError(\"closed\", closeReason);\n }\n },\n admit(input) {\n return admitForSession(sessionRecord, input);\n },\n close(reason = \"upgrade session closed\") {\n revokeSession(sessionRecord, reason);\n },\n };\n sessionRecord.session = session;\n sessions.add(sessionRecord);\n sessionByObject.set(session, sessionRecord);\n return {\n accepted: true,\n mode: options.mode ?? \"cold-switch\",\n handoverGeneration: options.handoverGeneration,\n contractVersion,\n connectionId: sessionRecord.connectionId,\n sessionId: sessionRecord.sessionId,\n session,\n };\n };\n\n const admitForSession = (\n sessionRecord: SessionRecord,\n input: { operation: \"read\" | \"write\"; signal?: AbortSignal }\n ): UpgradeIoLease => {\n if (sessionRecord.revoked || !sessions.has(sessionRecord)) {\n throw new UpgradeGateRejectedError(sessionRecord.reason, \"升级握手会话已失效\");\n }\n assertAccepting();\n if (input.signal?.aborted) {\n throw new UpgradeGateRejectedError(\"caller-aborted\", \"I/O 在取得接管租约前已取消\");\n }\n\n const record: LeaseRecord = {\n session: sessionRecord,\n operation: input.operation,\n controller: new AbortController(),\n revoked: false,\n reason: \"upgrade I/O lease released\",\n };\n leases.add(record);\n sessionRecord.leases.add(record);\n if (input.signal) {\n const onAbort = () => revokeLease(record, \"caller-aborted\");\n input.signal.addEventListener(\"abort\", onAbort, { once: true });\n record.removeExternalAbort = () => input.signal?.removeEventListener(\"abort\", onAbort);\n }\n\n const lease: UpgradeIoLease = {\n connectionId: sessionRecord.connectionId,\n sessionId: sessionRecord.sessionId,\n authorityInstanceId: options.authorityInstanceId,\n handoverGeneration: options.handoverGeneration,\n contractVersion: sessionRecord.contractVersion,\n operation: record.operation,\n get revoked() {\n return record.revoked || !leases.has(record);\n },\n signal: record.controller.signal,\n assertActive() {\n if (record.revoked || !leases.has(record)) {\n throw new UpgradeGateRejectedError(record.reason, \"升级 I/O 租约已失效\");\n }\n // beginDrain 不撤销已发租约;它只阻止新 I/O,给已提交操作一个排空窗口。\n if (currentState === \"closed\") {\n throw new UpgradeGateRejectedError(\"closed\", closeReason);\n }\n },\n release() {\n if (record.revoked) return;\n record.revoked = true;\n record.reason = \"upgrade I/O lease released\";\n removeLease(record);\n },\n };\n return lease;\n };\n\n const admit = (input: Parameters<UpgradeGate[\"admit\"]>[0]): UpgradeIoLease => {\n const sessionRecord = sessionByObject.get(input.session);\n if (!sessionRecord) {\n throw new UpgradeGateRejectedError(\"invalid-session\", \"I/O 必须使用当前门禁握手返回的会话\");\n }\n return admitForSession(sessionRecord, input);\n };\n\n const beginDrain = (reason = \"upgrade handover draining\") => {\n if (currentState !== \"active\") return;\n closeReason = reason;\n currentState = \"draining\";\n };\n\n const drain = async (timeoutMs?: number): Promise<UpgradeDrainResult> => {\n beginDrain();\n if (leases.size === 0) return { state: currentState, drained: true, pending: 0 };\n if (timeoutMs !== undefined && (!Number.isFinite(timeoutMs) || timeoutMs < 0)) {\n throw new Error(\"升级排空 timeoutMs 必须是非负有限数\");\n }\n let timeout: ReturnType<typeof setTimeout> | undefined;\n let timerResolve: (() => void) | undefined;\n const empty = new Promise<void>((resolve) => {\n emptyWaiters.add(resolve);\n timerResolve = resolve;\n });\n const timeoutPromise = timeoutMs === undefined\n ? undefined\n : new Promise<void>((resolve) => {\n timeout = setTimeout(resolve, timeoutMs);\n });\n if (timeoutPromise) await Promise.race([empty, timeoutPromise]);\n else await empty;\n if (timeout !== undefined) clearTimeout(timeout);\n if (timerResolve) emptyWaiters.delete(timerResolve);\n const pending = leases.size;\n return { state: currentState, drained: pending === 0, pending };\n };\n\n const close = (reason = \"upgrade gate closed\") => {\n if (currentState === \"closed\") return;\n closeReason = reason;\n currentState = \"closed\";\n for (const session of [...sessions]) revokeSession(session, reason);\n for (const lease of [...leases]) revokeLease(lease, reason);\n notifyEmpty();\n };\n\n return {\n get state() { return currentState; },\n mode: options.mode ?? \"cold-switch\",\n authorityInstanceId: options.authorityInstanceId,\n handoverGeneration: options.handoverGeneration,\n handshake,\n assertAccepting,\n admit,\n beginDrain,\n drain,\n close,\n activeIo: () => leases.size,\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/contracts/messageBus.ts","../src/authoring/definePlugin.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["// packages/contracts/src/messageBus.ts\n// WebLoom MessageBus 契约:事件、命令、请求统一入口。\n//\n// 设计缘由:\n// - 旧 EventBus 只能表达\"已发生的事件\";系统实际需要命令、请求响应、\n// actor mailbox、限流、取消、超时等多类语义。\n// - 不把 EventBus / CommandBus / ActorBus 并存作为多入口;业务插件\n// 只看到一个 MessageBus,由 mode / target 区分消息类型。\n// - envelope 由 type 表达业务含义、mode 表达调用语义、target 表达\n// 由哪个 actor mailbox 消费、priority 给调度策略使用、causationId\n// 串起同根消息链。\n// - publish / subscribe 必须保持与旧 EventBus 同步调用等价,避免改变\n// vault.unlocked、key.deleted、UI notify 的时序。\n// - 第一阶段只暴露 publish / subscribe / dispatch / request / handle;\n// actor mailbox 的持久化、延迟调度、限流属于具体 actor(如 WOC actor)\n// 的内部实现。\n\n/** runtime messageBus capability key;manifest 通过 ctx.get<...> 取出。 */\nexport const RUNTIME_MESSAGE_BUS = \"webloom.messageBus\";\n\n/** 消息调用语义。 */\nexport type MessageMode = \"event\" | \"command\" | \"request\";\n\n/** 消息 envelope。 */\nexport interface Message<TPayload = unknown> {\n id: string;\n type: string;\n mode: MessageMode;\n payload: TPayload;\n /** 由哪个 actor mailbox 消费。缺省时同步调用 subscriber 或无 mailbox。 */\n target?: string;\n /** 数值越大越优先(actor 内部解读)。 */\n priority?: number;\n /** 超时(ms);超时后 message 标记为超时失败。 */\n timeoutMs?: number;\n /**\n * MessageBus 内部维护的 abort signal。\n * - 来自调用方 DispatchOptions.signal 的 upstream 取消会触发。\n * - 来自 MessageBus 自身的 timeout 触发。\n * - 来自 actor / MessageBus 内部主动 abort。\n * handler 应优先用此 signal 取消 fetch 等异步操作;payload.signal 仍\n * 可保留以兼容旧调用方。\n */\n signal?: AbortSignal;\n causationId?: string;\n createdAt: number;\n}\n\n/** 消息 handler 签名。 */\nexport type MessageHandler<TPayload = unknown, TResult = unknown> = (\n message: Message<TPayload>\n) => TResult | Promise<TResult>;\n\n/** publish 行为:仅同步广播给订阅者,不等待异步 handler 完成。 */\nexport interface PublishOptions {\n /** 关联上一条消息(同一业务动作触发的子事件)。 */\n causationId?: string;\n /** 自定义 message id;缺省由 MessageBus 生成。 */\n messageId?: string;\n}\n\n/**\n * dispatch 行为:投递给 actor mailbox;返回 messageId。\n * - target 必填:dispatch 期望被 actor 处理,不退化为 publish 语义。\n * - 找到 handler 时消息会真正入 mailbox 并被 pump 串行消费。\n * - 找不到 handler 时消息被记为 failed + lastError,但**不抛**给调用方\n * (dispatch 不返回结果)。\n */\nexport interface DispatchOptions extends PublishOptions {\n target: string;\n priority?: number;\n signal?: AbortSignal;\n timeoutMs?: number;\n /** 消息进入终态后调用一次;生命周期 facade 用它释放临时 signal 监听。 */\n onSettled?: () => void;\n}\n\n/**\n * request 行为:等待 actor 返回结果;选项语义与 dispatch 完全一致。\n * - 行为差异:request 返回 Promise<TResult>,handler reject 即 promise reject。\n * - 找不到 handler / no target 时立即 reject。\n * - timeoutMs 触发时会先 abort 内部 signal,再 reject 外层 promise;\n * handler 内部应该监听 message.signal 取消 fetch。\n */\nexport type RequestOptions = DispatchOptions;\n\n/** handle 注册选项。 */\nexport interface HandlerOptions {\n target?: string;\n priority?: number;\n /**\n * 同 target 投递并发上限。\n * 缺省 1:同 target actor 严格串行。\n * 同 target 全部 handler 注册时必须使用一致 concurrency,否则\n * MessageBus 抛 `Conflicting concurrency for target \"...\"`。\n * 注意:这是 MessageBus 投递并发,不是 handler 内部副作用(如网络\n * 请求)的并发;高并发适合\"内部 actor 自己做限流\"的场景(如 WOC\n * 内部 mailbox)。\n */\n concurrency?: number;\n}\n\n/** 快照。 */\nexport interface MessageBusSnapshot {\n /** 消息总数(含已完成、失败、被取消)。 */\n total: number;\n /** 队列中尚未处理的消息数。 */\n queued: number;\n /** 飞行中消息数。 */\n inFlight: number;\n /** 已成功完成的消息数。 */\n completed: number;\n /** handler 抛错或被 lastError 路径标记失败的消息数。 */\n failed: number;\n /** 被 abort signal 取消的消息数。 */\n canceled: number;\n /** 最近一次错误。 */\n lastError?: string;\n /** 各 target 队列长度。 */\n byTarget: Record<string, number>;\n}\n\n/** 订阅事件快捷方式:仅接收 mode=event 的消息。 */\nexport type EventHandler<TPayload = unknown> = (payload: TPayload) => void;\n\n/**\n * MessageBus 契约。\n * 设计缘由:业务插件调用方只看到这一套入口。\n */\nexport interface MessageBus {\n /** 事件广播:已发生的事实,不等待业务完成;同步调用 subscriber。 */\n publish<TPayload>(type: string, payload: TPayload, options?: PublishOptions): string;\n\n /** 事件订阅:仅接收 mode=event 的消息;返回取消订阅函数。 */\n subscribe<TPayload>(type: string, handler: EventHandler<TPayload>): () => void;\n\n /**\n * 命令投递:把消息入 actor mailbox,返回 messageId。\n * 不等待 handler 完成;handler 抛错 / 超时 / 找不到 handler 仅写\n * snapshot.lastError,不冒泡。\n */\n dispatch<TPayload>(type: string, payload: TPayload, options: DispatchOptions): string;\n\n /** 请求响应:等待 actor 返回结果。 */\n request<TPayload, TResult>(\n type: string,\n payload: TPayload,\n options: RequestOptions\n ): Promise<TResult>;\n\n /** 注册 handler:带 target 时进入对应 actor mailbox。 */\n handle<TPayload, TResult>(\n type: string,\n handler: MessageHandler<TPayload, TResult>,\n options?: HandlerOptions\n ): () => void;\n\n /** 快照。 */\n snapshot(): MessageBusSnapshot;\n\n /** 订阅快照变更。 */\n onSnapshot(handler: (snapshot: MessageBusSnapshot) => void): () => void;\n}\n","// WebLoom v4 普通插件作者入口。\n\nimport {\n capabilityDescriptor,\n type Capability,\n type CapabilityDependency,\n} from \"../contracts/capability.js\";\nimport type {\n PluginConfig,\n PluginContextExtension,\n PluginDefinition,\n PluginManifestInput,\n PluginSetup,\n PluginContribution,\n RuntimeUnitDescriptor,\n} from \"../contracts/plugin.js\";\nimport type { PluginPermission, RuntimeKind } from \"../contracts/lifecycle.js\";\n\n/** 普通插件定义选项;插件声明只使用 typed capability 与单一启动策略。 */\nexport interface DefinePluginOptions<\n TProvides extends readonly Capability[] = readonly Capability[],\n TDependencies extends readonly CapabilityDependency[] = readonly CapabilityDependency[],\n TContribution = PluginContribution,\n TConfig extends PluginConfig = PluginConfig,\n TExtension extends PluginContextExtension = PluginContextExtension,\n> {\n /** 全局稳定插件标识。 */\n readonly id: string;\n /** 展示名称。 */\n readonly name?: string;\n /** 诊断描述。 */\n readonly description?: string;\n /** 本插件声明提供的能力。 */\n readonly provides?: TProvides;\n /** 本插件声明消费的能力。 */\n readonly dependencies?: TDependencies;\n /** 默认执行 Runtime。 */\n readonly runtime?: RuntimeKind;\n /** 多 unit 装配时的稳定 unit id。 */\n readonly unitId?: string;\n /** 申请权限。 */\n readonly permissions?: readonly PluginPermission[];\n /** 只读插件配置。 */\n readonly config?: TConfig;\n /** 领域贡献。 */\n readonly contribution?: TContribution;\n /** 唯一启动策略;默认为 optional。 */\n readonly startup?: \"required\" | \"optional\";\n /** 默认启用意图;required 时必须为 true。 */\n readonly defaultEnabled?: boolean;\n /** optional 插件默认为可停用;required 必须为 false。 */\n readonly canDisable?: boolean;\n /** 当前 realm 的插件实现。 */\n readonly setup: PluginSetup<TProvides, TDependencies, TConfig, TExtension>;\n}\n\nfunction nonEmpty(value: string, label: string): string {\n if (value.trim() === \"\") throw new TypeError(`${label} must be a non-empty string`);\n return value;\n}\n\nfunction normalizeDependencies(\n dependencies: readonly CapabilityDependency[],\n runtime: RuntimeKind,\n): RuntimeUnitDescriptor[\"dependencies\"] {\n return dependencies.map((dependency) => ({\n capability: capabilityDescriptor(dependency.capability),\n ...(dependency.source === \"peer\"\n ? { source: \"peer\" as const }\n : { sourceRuntime: dependency.sourceRuntime ?? runtime }),\n ...(dependency.reason !== undefined ? { reason: dependency.reason } : {}),\n ...(dependency.optional !== undefined ? { optional: dependency.optional } : {}),\n }));\n}\n\n/**\n * 声明一个插件。它不会创建 Host,也不会运行 setup;Runtime 装配边界\n * createWindowApp()/startSharedWorkerApp() 才会执行实现。\n */\nexport function definePlugin<\n TProvides extends readonly Capability[] = readonly Capability[],\n TDependencies extends readonly CapabilityDependency[] = readonly CapabilityDependency[],\n TContribution = PluginContribution,\n TConfig extends PluginConfig = PluginConfig,\n TExtension extends PluginContextExtension = PluginContextExtension,\n>(options: DefinePluginOptions<TProvides, TDependencies, TContribution, TConfig, TExtension>): PluginDefinition<TProvides, TDependencies, TContribution, TConfig, TExtension> {\n if (!options || typeof options.id !== \"string\") throw new TypeError(\"Plugin id must be a non-empty string\");\n nonEmpty(options.id, \"Plugin id\");\n if (typeof options.setup !== \"function\") throw new TypeError(`Plugin \"${options.id}\" setup must be a function`);\n const unitId = nonEmpty(options.unitId ?? options.id, `Plugin \"${options.id}\" unitId`);\n const startup = options.startup ?? \"optional\";\n const defaultEnabled = options.defaultEnabled ?? true;\n const canDisable = options.canDisable ?? startup !== \"required\";\n if (startup === \"required\" && (!defaultEnabled || canDisable)) {\n throw new TypeError(`Plugin \"${options.id}\" required startup policy is inconsistent`);\n }\n const provides = [...(options.provides ?? [])];\n const dependencies = [...(options.dependencies ?? [])];\n const runtime = options.runtime;\n const descriptor: RuntimeUnitDescriptor<TContribution, TConfig> = {\n id: unitId,\n ...(runtime !== undefined ? { runtime } : {}),\n ...(provides.length > 0 ? { provides: provides.map((capability) => capabilityDescriptor(capability)) } : {}),\n ...(dependencies.length > 0 ? { dependencies: normalizeDependencies(dependencies, runtime ?? \"window-main\") } : {}),\n ...(options.permissions !== undefined ? { permissions: [...options.permissions] } : {}),\n ...(options.config !== undefined ? { config: options.config } : {}),\n ...(options.contribution !== undefined ? { contribution: options.contribution } : {}),\n };\n const manifest: PluginManifestInput<TContribution, TConfig> = {\n id: options.id,\n name: options.name ?? options.id,\n ...(options.description !== undefined ? { description: options.description } : {}),\n startup,\n defaultEnabled,\n canDisable,\n units: [descriptor],\n };\n return Object.freeze({\n manifest: Object.freeze(manifest),\n descriptor: Object.freeze(descriptor),\n setup: options.setup,\n capabilities: Object.freeze([...provides, ...dependencies.map((dependency) => dependency.capability)]),\n });\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import { aq as MessageBus } from './runtimeTypes-DquUCHz-.js';
2
+
3
+ declare function createMessageBus(): MessageBus;
4
+
5
+ export { createMessageBus as c };