webloom-framework 0.1.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/LICENSE +661 -0
- package/README.md +92 -0
- package/dist/chunk-KGNF36DZ.js +3736 -0
- package/dist/chunk-KGNF36DZ.js.map +1 -0
- package/dist/createPluginHost-CcW9sPNs.d.ts +1340 -0
- package/dist/index.d.ts +159 -0
- package/dist/index.js +583 -0
- package/dist/index.js.map +1 -0
- package/dist/react.d.ts +80 -0
- package/dist/react.js +177 -0
- package/dist/react.js.map +1 -0
- package/dist/resourceRegistry-BAnqKcp7.d.ts +157 -0
- package/dist/testing.d.ts +23 -0
- package/dist/testing.js +27 -0
- package/dist/testing.js.map +1 -0
- package/docs/api.md +29 -0
- package/docs/migration-baseline.md +32 -0
- package/package.json +68 -0
package/README.md
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# WebLoom
|
|
2
|
+
|
|
3
|
+
WebLoom 是一个与产品领域无关的前端插件生命周期框架。它管理插件产品、运行单元、实例、依赖图、生命周期 Scope、权限租约、消息总线、服务桥和资源缓存;路由、存储、日志、国际化等产品能力通过宿主适配器注入。
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pnpm add webloom-framework
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
WebLoom 是 ESM 单包,提供三个入口:
|
|
12
|
+
|
|
13
|
+
- `webloom-framework`:纯 TypeScript/Worker 可用的核心,不加载 React;
|
|
14
|
+
- `webloom-framework/react`:Provider、capability、Host、Registry 和 Resource Hooks;
|
|
15
|
+
- `webloom-framework/testing`:无产品语义的假 Host、假传输和测试辅助。
|
|
16
|
+
|
|
17
|
+
React 是可选 peer dependency。只使用 `webloom-framework` 时不需要安装 React。
|
|
18
|
+
|
|
19
|
+
## 最小 Host
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
import { createPluginHost, type PluginSetup } from "webloom-framework";
|
|
23
|
+
|
|
24
|
+
const helloSetup: PluginSetup = (ctx) => {
|
|
25
|
+
ctx.provide("hello.service", { value: "world" });
|
|
26
|
+
ctx.onDispose(() => {
|
|
27
|
+
// 这里释放本插件登记的资源。
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const host = createPluginHost({
|
|
32
|
+
runtimeUnitImplementationRegistry: {
|
|
33
|
+
get(pluginId, unitId) {
|
|
34
|
+
return pluginId === "hello" && unitId === "hello.window" ? helloSetup : undefined;
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
contextExtension: ({ scope }) => ({
|
|
38
|
+
// 宿主只读扩展;不能替换 pluginId、unitId 或 instanceId。
|
|
39
|
+
scopeKind: scope.identity.kind,
|
|
40
|
+
}),
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
await host.register({
|
|
44
|
+
id: "hello",
|
|
45
|
+
name: "Hello",
|
|
46
|
+
meta: { defaultEnabled: true, canDisable: true },
|
|
47
|
+
units: [{
|
|
48
|
+
id: "hello.window",
|
|
49
|
+
execution: "window",
|
|
50
|
+
lifetime: "root",
|
|
51
|
+
provides: ["hello.service"],
|
|
52
|
+
}],
|
|
53
|
+
});
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
生产插件必须把 `execution`、`lifetime`、`dependencies`、`provides` 和 `permissions` 写在 `units` 中,并通过 `runtimeUnitImplementationRegistry` 按 `pluginId + unitId` 解析 setup。静态 Manifest 不携带可执行函数。
|
|
57
|
+
|
|
58
|
+
## 公共字段中文语义
|
|
59
|
+
|
|
60
|
+
| 字段 | 中文含义 |
|
|
61
|
+
| --- | --- |
|
|
62
|
+
| `pluginId` | 插件产品的稳定标识;用于用户启停和依赖图身份。 |
|
|
63
|
+
| `unitId` | 产品在一种执行环境中的稳定运行单元标识。 |
|
|
64
|
+
| `instanceId` | 某运行单元一次启动生成的唯一实例标识;重启不得复用。 |
|
|
65
|
+
| `execution` | 运行代码所在环境标签,由宿主定义。 |
|
|
66
|
+
| `lifetime` | 实例依附的生命周期标签,由宿主定义。 |
|
|
67
|
+
| `scopeId` | 本次生命周期 Scope 的唯一标识。 |
|
|
68
|
+
| `capability` | 插件提供或依赖的服务契约标识。 |
|
|
69
|
+
| `contractVersion` | capability 的精确契约版本。 |
|
|
70
|
+
| `permission` | 字符串形式的权限动作;具体集合由宿主批准。 |
|
|
71
|
+
| `attributes` | 宿主绑定的只读扩展元数据,不包含私密材料。 |
|
|
72
|
+
| `desiredEnabled` | 用户或控制面希望产品启用的持久意图。 |
|
|
73
|
+
| `state` | 当前运行实例的实际状态,不等于启用意图。 |
|
|
74
|
+
| `blockedBy` | 实例无法启动时缺失的依赖或 Scope 原因。 |
|
|
75
|
+
|
|
76
|
+
## 开发与验收
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
pnpm install
|
|
80
|
+
pnpm lint:boundaries
|
|
81
|
+
pnpm typecheck
|
|
82
|
+
pnpm test
|
|
83
|
+
pnpm build
|
|
84
|
+
pnpm run pack:consumer
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
`pack:consumer` 会在不访问本仓库源码的临时项目中安装 tarball,分别执行
|
|
88
|
+
core-only、React 和 Worker 消费者的 `tsc --noEmit` 与运行时 smoke,并检查
|
|
89
|
+
发布文件白名单、体积、`.d.ts` 和 `.js.map` 的本地路径及产品字段。版本、发布身份
|
|
90
|
+
与许可证确认属于发布责任人的操作,本仓库不自动执行发布。
|
|
91
|
+
|
|
92
|
+
详细 API 约束见 [`docs/api.md`](docs/api.md)。
|