@zhin.js/pagemanager 0.0.0 → 1.1.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/README.md +86 -0
- package/lib/client-build/index.d.ts +6 -0
- package/lib/client-build/index.d.ts.map +1 -0
- package/lib/client-build/index.js +6 -0
- package/lib/client-build/index.js.map +1 -0
- package/lib/client-build/manifest-loader.d.ts +9 -0
- package/lib/client-build/manifest-loader.d.ts.map +1 -0
- package/lib/client-build/manifest-loader.js +47 -0
- package/lib/client-build/manifest-loader.js.map +1 -0
- package/lib/client-build/module-runtime.d.ts +17 -0
- package/lib/client-build/module-runtime.d.ts.map +1 -0
- package/lib/client-build/module-runtime.js +28 -0
- package/lib/client-build/module-runtime.js.map +1 -0
- package/lib/client-build/static-metadata.d.ts +9 -0
- package/lib/client-build/static-metadata.d.ts.map +1 -0
- package/lib/client-build/static-metadata.js +126 -0
- package/lib/client-build/static-metadata.js.map +1 -0
- package/lib/client-build/types.d.ts +26 -0
- package/lib/client-build/types.d.ts.map +1 -0
- package/lib/client-build/types.js +2 -0
- package/lib/client-build/types.js.map +1 -0
- package/lib/client-build/typescript-builder.d.ts +9 -0
- package/lib/client-build/typescript-builder.d.ts.map +1 -0
- package/lib/client-build/typescript-builder.js +272 -0
- package/lib/client-build/typescript-builder.js.map +1 -0
- package/lib/node/esmForBrowser.d.ts.map +1 -1
- package/lib/node/esmForBrowser.js +4 -1
- package/lib/node/esmForBrowser.js.map +1 -1
- package/lib/node/index.d.ts +2 -0
- package/lib/node/index.d.ts.map +1 -1
- package/lib/node/index.js +2 -0
- package/lib/node/index.js.map +1 -1
- package/lib/node/pageManager.d.ts +1 -1
- package/lib/node/pageManager.d.ts.map +1 -1
- package/lib/node/pageManager.js +1 -1
- package/lib/node/pageManager.js.map +1 -1
- package/lib/plugin-runtime/access.d.ts +8 -0
- package/lib/plugin-runtime/access.d.ts.map +1 -0
- package/lib/plugin-runtime/access.js +11 -0
- package/lib/plugin-runtime/access.js.map +1 -0
- package/lib/plugin-runtime/console-catalog.d.ts +28 -0
- package/lib/plugin-runtime/console-catalog.d.ts.map +1 -0
- package/lib/plugin-runtime/console-catalog.js +102 -0
- package/lib/plugin-runtime/console-catalog.js.map +1 -0
- package/lib/plugin-runtime/console-runtime.d.ts +10 -0
- package/lib/plugin-runtime/console-runtime.d.ts.map +1 -0
- package/lib/plugin-runtime/console-runtime.js +26 -0
- package/lib/plugin-runtime/console-runtime.js.map +1 -0
- package/lib/plugin-runtime/index.d.ts +5 -0
- package/lib/plugin-runtime/index.d.ts.map +1 -0
- package/lib/plugin-runtime/index.js +5 -0
- package/lib/plugin-runtime/index.js.map +1 -0
- package/lib/plugin-runtime/navigation.d.ts +4 -0
- package/lib/plugin-runtime/navigation.d.ts.map +1 -0
- package/lib/plugin-runtime/navigation.js +57 -0
- package/lib/plugin-runtime/navigation.js.map +1 -0
- package/package.json +40 -8
package/README.md
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# @zhin.js/pagemanager
|
|
2
|
+
|
|
3
|
+
Remote Console **Node 侧运行时**:PageManager、EntryStore、`GET /entries`、esbuild 打包与 `/@dev` 开发资源路由。无 UI;契约在 `@zhin.js/contract`,浏览器 SDK 在 `@zhin.js/client`。
|
|
4
|
+
|
|
5
|
+
> **路径约定**:本包位于 `packages/console/pagemanager/`。源码在 `src/node/`,构建产物在 `lib/node/`。
|
|
6
|
+
|
|
7
|
+
## 分层
|
|
8
|
+
|
|
9
|
+
见 [Console 栈概览](../README.md):
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
@zhin.js/contract → @zhin.js/pagemanager → @zhin.js/client → zhin-console(独立仓库)
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
领域术语与关系图见 **[CONTEXT.md](./CONTEXT.md)**。
|
|
16
|
+
|
|
17
|
+
## 安装
|
|
18
|
+
|
|
19
|
+
Monorepo 内 workspace 依赖;对外发布时:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
pnpm add @zhin.js/pagemanager
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## 主要导出
|
|
26
|
+
|
|
27
|
+
| 导出 | 用途 |
|
|
28
|
+
|------|------|
|
|
29
|
+
| `PageManager` | 控制台服务端运行时;拥有 EntryStore,注册 Console Entry |
|
|
30
|
+
| `mountConsoleRouter` | 挂载 entries 与静态/dev 资源路由 |
|
|
31
|
+
| `createInMemoryEntryStore` / `EntryStore` | Entry 目录 |
|
|
32
|
+
| `buildEntriesResponse` / `rewriteEntriesForClient` | 序列化 `GET /entries` 响应 |
|
|
33
|
+
| `attachConsoleClientHost` | 将 Console 路由挂到现有 Koa Host |
|
|
34
|
+
| `serverRuntimeEnv` | development / production 运行时标记 |
|
|
35
|
+
|
|
36
|
+
类型(`ConsoleServerOptions`、`PluginServerRegisterHostApi` 等)自 `./consoleServerOptions.js` 导出。
|
|
37
|
+
|
|
38
|
+
## Plugin Runtime
|
|
39
|
+
|
|
40
|
+
`@zhin.js/pagemanager/plugin-runtime` 提供 snapshot-coherent 的 `ConsoleRuntime`。一次
|
|
41
|
+
`runView()` 在完整回调期间持有同一 generation lease,route guard、权限过滤、Navigation
|
|
42
|
+
树和 Layout fallback chain 都从同一个 Page/Layout projection 读取;回调结束后 catalog
|
|
43
|
+
失效,避免浏览器模块 URL 跨 generation 逃逸。
|
|
44
|
+
|
|
45
|
+
该子路径不引入 React、Router 或客户端编译器。Page 与 Layout 的约定式发现分别由
|
|
46
|
+
`@zhin.js/page`、`@zhin.js/layout` 提供,wire types 来自零依赖
|
|
47
|
+
`@zhin.js/console-contract`。
|
|
48
|
+
|
|
49
|
+
## Client Build
|
|
50
|
+
|
|
51
|
+
`@zhin.js/pagemanager/client-build` 是可选的 TypeScript AST/build adapter。它静态提取
|
|
52
|
+
`definePage()` 的 JSON-like metadata,生成 content-hash ESM 与
|
|
53
|
+
`pages.manifest.json`,生产 loader 不记录构建机绝对路径。
|
|
54
|
+
|
|
55
|
+
TypeScript 是 optional peer,不进入默认 PageManager 或 Plugin Runtime 的生产闭包。
|
|
56
|
+
选择该子路径的构建 workspace 需要显式安装兼容版本的 `typescript`。
|
|
57
|
+
|
|
58
|
+
## 插件注册 Entry
|
|
59
|
+
|
|
60
|
+
在插件 Node 侧通过 `web` 上下文获取 **PageManager 实例**(非静态全局):
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
useContext('web', (pageManager) => {
|
|
64
|
+
pageManager.addEntry({
|
|
65
|
+
id: 'my-plugin',
|
|
66
|
+
name: 'My Plugin',
|
|
67
|
+
dev: '/@dev/plugins/my-plugin/client/index.tsx',
|
|
68
|
+
prod: '/@assets/my-plugin/client/index.js',
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
浏览器侧由 `@zhin.js/client` 的 `loadConsoleEntries` 拉取并动态 `import`。
|
|
74
|
+
|
|
75
|
+
## 构建
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
pnpm --filter @zhin.js/pagemanager build
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## 相关文档
|
|
82
|
+
|
|
83
|
+
- [Remote Console 使用说明](../../../docs/console-remote.md)
|
|
84
|
+
- [@zhin.js/contract](../contract/README.md)
|
|
85
|
+
- [@zhin.js/client](../client/README.md)
|
|
86
|
+
- [@zhin.js/host-http(Console/HTTP Host 传输)](../../host/http/README.md)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client-build/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client-build/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ClientModuleRequest } from '@zhin.js/feature-kit';
|
|
2
|
+
import type { ClientArtifactManifest, ClientModuleLoader } from './types.js';
|
|
3
|
+
export declare class ManifestClientModuleLoader implements ClientModuleLoader {
|
|
4
|
+
#private;
|
|
5
|
+
constructor(manifest: ClientArtifactManifest);
|
|
6
|
+
static fromFile(path: string): Promise<ManifestClientModuleLoader>;
|
|
7
|
+
load<T = unknown>(_source: string, request: ClientModuleRequest): Promise<T>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=manifest-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-loader.d.ts","sourceRoot":"","sources":["../../src/client-build/manifest-loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EACV,sBAAsB,EAEtB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB,qBAAa,0BAA2B,YAAW,kBAAkB;;gBAGvD,QAAQ,EAAE,sBAAsB;WAc/B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAKlE,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,CAAC,CAAC;CASnF"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
export class ManifestClientModuleLoader {
|
|
3
|
+
#entries;
|
|
4
|
+
constructor(manifest) {
|
|
5
|
+
if (manifest.protocol !== 1 || !Array.isArray(manifest.entries)) {
|
|
6
|
+
throw new TypeError('Unsupported client artifact manifest');
|
|
7
|
+
}
|
|
8
|
+
const entries = new Map();
|
|
9
|
+
for (const candidate of manifest.entries) {
|
|
10
|
+
const entry = validateEntry(candidate);
|
|
11
|
+
const key = artifactKey(entry);
|
|
12
|
+
if (entries.has(key))
|
|
13
|
+
throw new Error(`Duplicate client artifact: ${key}`);
|
|
14
|
+
entries.set(key, Object.freeze({ ...entry }));
|
|
15
|
+
}
|
|
16
|
+
this.#entries = entries;
|
|
17
|
+
}
|
|
18
|
+
static async fromFile(path) {
|
|
19
|
+
const parsed = JSON.parse(await readFile(path, 'utf8'));
|
|
20
|
+
return new ManifestClientModuleLoader(parsed);
|
|
21
|
+
}
|
|
22
|
+
async load(_source, request) {
|
|
23
|
+
const entry = this.#entries.get(artifactKey(request));
|
|
24
|
+
if (!entry)
|
|
25
|
+
throw new Error(`Missing client artifact for ${request.feature}:${request.localName}`);
|
|
26
|
+
return Object.freeze({
|
|
27
|
+
module: entry.module,
|
|
28
|
+
hash: entry.hash,
|
|
29
|
+
metadata: entry.metadata,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function artifactKey(request) {
|
|
34
|
+
return `${request.owner}\0${request.feature}\0${request.localName}`;
|
|
35
|
+
}
|
|
36
|
+
function validateEntry(value) {
|
|
37
|
+
if (!value || typeof value !== 'object')
|
|
38
|
+
throw new TypeError('Invalid client artifact entry');
|
|
39
|
+
const entry = value;
|
|
40
|
+
for (const field of ['source', 'owner', 'feature', 'localName', 'module', 'hash']) {
|
|
41
|
+
if (typeof entry[field] !== 'string' || !entry[field]) {
|
|
42
|
+
throw new TypeError(`Invalid client artifact ${field}`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return entry;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=manifest-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-loader.js","sourceRoot":"","sources":["../../src/client-build/manifest-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAQ5C,MAAM,OAAO,0BAA0B;IAC5B,QAAQ,CAAsD;IAEvE,YAAY,QAAgC;QAC1C,IAAI,QAAQ,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;QAC9D,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,GAAG,EAA0C,CAAC;QAClE,KAAK,MAAM,SAAS,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;YACvC,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAG,EAAE,CAAC,CAAC;YAC3E,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAY;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAA2B,CAAC;QAClF,OAAO,IAAI,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,IAAI,CAAc,OAAe,EAAE,OAA4B;QACnE,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QACnG,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACzB,CAAM,CAAC;IACV,CAAC;CACF;AAED,SAAS,WAAW,CAAC,OAA4B;IAC/C,OAAO,GAAG,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC;AACtE,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,MAAM,IAAI,SAAS,CAAC,+BAA+B,CAAC,CAAC;IAC9F,MAAM,KAAK,GAAG,KAAsC,CAAC;IACrD,KAAK,MAAM,KAAK,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAU,EAAE,CAAC;QAC3F,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACtD,MAAM,IAAI,SAAS,CAAC,2BAA2B,KAAK,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IACD,OAAO,KAA6B,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Dispose } from '@zhin.js/plugin-runtime';
|
|
2
|
+
import type { ClientModuleRequest } from '@zhin.js/feature-kit';
|
|
3
|
+
import type { ModuleRuntime } from '@zhin.js/runtime';
|
|
4
|
+
import type { ClientModuleLoader } from './types.js';
|
|
5
|
+
/** Adds client artifact loading while preserving the server ModuleRuntime authority. */
|
|
6
|
+
export declare class ClientBuildModuleRuntime implements ModuleRuntime {
|
|
7
|
+
private readonly server;
|
|
8
|
+
private readonly client;
|
|
9
|
+
constructor(server: ModuleRuntime, client: ClientModuleLoader);
|
|
10
|
+
load<T = unknown>(source: string): Promise<T>;
|
|
11
|
+
loadClientModule<T = unknown>(source: string, request: ClientModuleRequest): Promise<T>;
|
|
12
|
+
invalidate(source: string): Promise<void> | void;
|
|
13
|
+
affectedSources(source: string): readonly string[];
|
|
14
|
+
watch(listener: (source: string) => void): Dispose;
|
|
15
|
+
close(): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=module-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-runtime.d.ts","sourceRoot":"","sources":["../../src/client-build/module-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,wFAAwF;AACxF,qBAAa,wBAAyB,YAAW,aAAa;IAE1D,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,kBAAkB;IAG7C,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAI7C,gBAAgB,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,CAAC,CAAC;IAIvF,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAIhD,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE;IAIlD,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO;IAIlD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAGvB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/** Adds client artifact loading while preserving the server ModuleRuntime authority. */
|
|
2
|
+
export class ClientBuildModuleRuntime {
|
|
3
|
+
server;
|
|
4
|
+
client;
|
|
5
|
+
constructor(server, client) {
|
|
6
|
+
this.server = server;
|
|
7
|
+
this.client = client;
|
|
8
|
+
}
|
|
9
|
+
load(source) {
|
|
10
|
+
return this.server.load(source);
|
|
11
|
+
}
|
|
12
|
+
loadClientModule(source, request) {
|
|
13
|
+
return this.client.load(source, request);
|
|
14
|
+
}
|
|
15
|
+
invalidate(source) {
|
|
16
|
+
return this.server.invalidate?.(source);
|
|
17
|
+
}
|
|
18
|
+
affectedSources(source) {
|
|
19
|
+
return this.server.affectedSources?.(source) ?? [source];
|
|
20
|
+
}
|
|
21
|
+
watch(listener) {
|
|
22
|
+
return this.server.watch?.(listener) ?? (() => undefined);
|
|
23
|
+
}
|
|
24
|
+
close() {
|
|
25
|
+
return this.server.close();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=module-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-runtime.js","sourceRoot":"","sources":["../../src/client-build/module-runtime.ts"],"names":[],"mappings":"AAKA,wFAAwF;AACxF,MAAM,OAAO,wBAAwB;IAEhB;IACA;IAFnB,YACmB,MAAqB,EACrB,MAA0B;QAD1B,WAAM,GAAN,MAAM,CAAe;QACrB,WAAM,GAAN,MAAM,CAAoB;IAC1C,CAAC;IAEJ,IAAI,CAAc,MAAc;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAI,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,gBAAgB,CAAc,MAAc,EAAE,OAA4B;QACxE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAI,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,UAAU,CAAC,MAAc;QACvB,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,eAAe,CAAC,MAAc;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,QAAkC;QACtC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function extractPageMetadata(source: string, fileName: string): unknown;
|
|
2
|
+
export declare function assertLayoutModule(source: string, fileName: string): void;
|
|
3
|
+
export declare class ClientSourceError extends Error {
|
|
4
|
+
readonly source: string;
|
|
5
|
+
readonly line: number;
|
|
6
|
+
readonly column: number;
|
|
7
|
+
constructor(source: string, line: number, column: number, message: string);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=static-metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-metadata.d.ts","sourceRoot":"","sources":["../../src/client-build/static-metadata.ts"],"names":[],"mappings":"AAEA,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAgB7E;AAmBD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAGzE;AAyED,qBAAa,iBAAkB,SAAQ,KAAK;IAExC,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM;gBAFd,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM;CAKlB"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
export function extractPageMetadata(source, fileName) {
|
|
3
|
+
const file = ts.createSourceFile(fileName, source, ts.ScriptTarget.Latest, true, scriptKind(fileName));
|
|
4
|
+
assertDefaultExport(file);
|
|
5
|
+
let metadata;
|
|
6
|
+
let found = false;
|
|
7
|
+
for (const statement of file.statements) {
|
|
8
|
+
if (!ts.isVariableStatement(statement) || !hasModifier(statement, ts.SyntaxKind.ExportKeyword))
|
|
9
|
+
continue;
|
|
10
|
+
for (const declaration of statement.declarationList.declarations) {
|
|
11
|
+
if (!ts.isIdentifier(declaration.name) || declaration.name.text !== 'meta')
|
|
12
|
+
continue;
|
|
13
|
+
if (found)
|
|
14
|
+
fail(file, declaration, 'Page module exports meta more than once');
|
|
15
|
+
found = true;
|
|
16
|
+
assertDefinePageImport(file, declaration);
|
|
17
|
+
metadata = parseDefinePage(file, declaration.initializer);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return metadata;
|
|
21
|
+
}
|
|
22
|
+
function assertDefinePageImport(file, node) {
|
|
23
|
+
const found = file.statements.some((statement) => {
|
|
24
|
+
if (!ts.isImportDeclaration(statement)
|
|
25
|
+
|| !ts.isStringLiteral(statement.moduleSpecifier)
|
|
26
|
+
|| statement.moduleSpecifier.text !== '@zhin.js/console-contract')
|
|
27
|
+
return false;
|
|
28
|
+
const bindings = statement.importClause?.namedBindings;
|
|
29
|
+
return bindings && ts.isNamedImports(bindings)
|
|
30
|
+
&& bindings.elements.some((element) => element.name.text === 'definePage'
|
|
31
|
+
&& (element.propertyName?.text ?? element.name.text) === 'definePage');
|
|
32
|
+
});
|
|
33
|
+
if (!found)
|
|
34
|
+
fail(file, node, 'Page meta requires a named definePage import from @zhin.js/console-contract');
|
|
35
|
+
}
|
|
36
|
+
export function assertLayoutModule(source, fileName) {
|
|
37
|
+
const file = ts.createSourceFile(fileName, source, ts.ScriptTarget.Latest, true, scriptKind(fileName));
|
|
38
|
+
assertDefaultExport(file);
|
|
39
|
+
}
|
|
40
|
+
function parseDefinePage(file, expression) {
|
|
41
|
+
if (!expression || !ts.isCallExpression(expression)
|
|
42
|
+
|| !ts.isIdentifier(expression.expression) || expression.expression.text !== 'definePage') {
|
|
43
|
+
fail(file, expression ?? file, 'Page meta must be definePage({...})');
|
|
44
|
+
}
|
|
45
|
+
if (expression.arguments.length > 1)
|
|
46
|
+
fail(file, expression, 'definePage() accepts at most one argument');
|
|
47
|
+
const argument = expression.arguments[0];
|
|
48
|
+
return argument ? literal(file, argument) : {};
|
|
49
|
+
}
|
|
50
|
+
function literal(file, node) {
|
|
51
|
+
if (ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node))
|
|
52
|
+
return node.text;
|
|
53
|
+
if (ts.isNumericLiteral(node))
|
|
54
|
+
return Number(node.text);
|
|
55
|
+
if (node.kind === ts.SyntaxKind.TrueKeyword)
|
|
56
|
+
return true;
|
|
57
|
+
if (node.kind === ts.SyntaxKind.FalseKeyword)
|
|
58
|
+
return false;
|
|
59
|
+
if (node.kind === ts.SyntaxKind.NullKeyword)
|
|
60
|
+
return null;
|
|
61
|
+
if (ts.isPrefixUnaryExpression(node)
|
|
62
|
+
&& node.operator === ts.SyntaxKind.MinusToken && ts.isNumericLiteral(node.operand)) {
|
|
63
|
+
return -Number(node.operand.text);
|
|
64
|
+
}
|
|
65
|
+
if (ts.isArrayLiteralExpression(node)) {
|
|
66
|
+
return node.elements.map((element) => {
|
|
67
|
+
if (ts.isSpreadElement(element) || ts.isOmittedExpression(element)) {
|
|
68
|
+
fail(file, element, 'Page metadata arrays cannot contain spreads or holes');
|
|
69
|
+
}
|
|
70
|
+
return literal(file, element);
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
if (ts.isObjectLiteralExpression(node)) {
|
|
74
|
+
const result = {};
|
|
75
|
+
for (const property of node.properties) {
|
|
76
|
+
if (!ts.isPropertyAssignment(property)) {
|
|
77
|
+
fail(file, property, 'Page metadata only supports static property assignments');
|
|
78
|
+
}
|
|
79
|
+
const name = propertyName(file, property.name);
|
|
80
|
+
if (Object.hasOwn(result, name))
|
|
81
|
+
fail(file, property.name, `Duplicate Page metadata key: ${name}`);
|
|
82
|
+
result[name] = literal(file, property.initializer);
|
|
83
|
+
}
|
|
84
|
+
return result;
|
|
85
|
+
}
|
|
86
|
+
fail(file, node, 'Page metadata must contain JSON-like literals only');
|
|
87
|
+
}
|
|
88
|
+
function propertyName(file, name) {
|
|
89
|
+
if (ts.isIdentifier(name) || ts.isStringLiteral(name) || ts.isNumericLiteral(name))
|
|
90
|
+
return name.text;
|
|
91
|
+
fail(file, name, 'Page metadata does not support computed property names');
|
|
92
|
+
}
|
|
93
|
+
function assertDefaultExport(file) {
|
|
94
|
+
const found = file.statements.some((statement) => {
|
|
95
|
+
if (ts.isExportAssignment(statement))
|
|
96
|
+
return !statement.isExportEquals;
|
|
97
|
+
return (ts.isFunctionDeclaration(statement) || ts.isClassDeclaration(statement))
|
|
98
|
+
&& hasModifier(statement, ts.SyntaxKind.ExportKeyword)
|
|
99
|
+
&& hasModifier(statement, ts.SyntaxKind.DefaultKeyword);
|
|
100
|
+
});
|
|
101
|
+
if (!found)
|
|
102
|
+
fail(file, file, 'Client module must have a default export');
|
|
103
|
+
}
|
|
104
|
+
function hasModifier(node, kind) {
|
|
105
|
+
return ts.canHaveModifiers(node) && ts.getModifiers(node)?.some((modifier) => modifier.kind === kind) === true;
|
|
106
|
+
}
|
|
107
|
+
function scriptKind(fileName) {
|
|
108
|
+
return fileName.endsWith('.tsx') ? ts.ScriptKind.TSX : ts.ScriptKind.TS;
|
|
109
|
+
}
|
|
110
|
+
function fail(file, node, message) {
|
|
111
|
+
const position = file.getLineAndCharacterOfPosition(node.getStart(file, false));
|
|
112
|
+
throw new ClientSourceError(file.fileName, position.line + 1, position.character + 1, message);
|
|
113
|
+
}
|
|
114
|
+
export class ClientSourceError extends Error {
|
|
115
|
+
source;
|
|
116
|
+
line;
|
|
117
|
+
column;
|
|
118
|
+
constructor(source, line, column, message) {
|
|
119
|
+
super(`${source}:${line}:${column} ${message}`);
|
|
120
|
+
this.source = source;
|
|
121
|
+
this.line = line;
|
|
122
|
+
this.column = column;
|
|
123
|
+
this.name = 'ClientSourceError';
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=static-metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-metadata.js","sourceRoot":"","sources":["../../src/client-build/static-metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ClientModuleArtifact } from '@zhin.js/console-contract';
|
|
2
|
+
import type { ClientModuleRequest } from '@zhin.js/feature-kit';
|
|
3
|
+
export interface ClientBuildEntry extends ClientModuleRequest {
|
|
4
|
+
readonly source: string;
|
|
5
|
+
}
|
|
6
|
+
export interface ClientArtifactRecord extends ClientBuildEntry, ClientModuleArtifact {
|
|
7
|
+
}
|
|
8
|
+
export interface ClientArtifactManifest {
|
|
9
|
+
readonly protocol: 1;
|
|
10
|
+
readonly entries: readonly ClientArtifactRecord[];
|
|
11
|
+
}
|
|
12
|
+
export interface ClientModuleLoader {
|
|
13
|
+
load<T = unknown>(source: string, request: ClientModuleRequest): Promise<T>;
|
|
14
|
+
}
|
|
15
|
+
export interface TypeScriptClientBuilderOptions {
|
|
16
|
+
readonly outDir: string;
|
|
17
|
+
readonly projectRoot?: string;
|
|
18
|
+
readonly publicBase?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Console public base used when rewriting bare React imports to `/esm/…`.
|
|
21
|
+
* Defaults to `/` (Host root). Must match the base passed to `GET /esm/:enc.mjs`.
|
|
22
|
+
*/
|
|
23
|
+
readonly consoleBasePath?: string;
|
|
24
|
+
readonly manifestFile?: string;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client-build/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,MAAM,WAAW,gBAAiB,SAAQ,mBAAmB;IAC3D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAqB,SAAQ,gBAAgB,EAAE,oBAAoB;CAAG;AAEvF,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,SAAS,oBAAoB,EAAE,CAAC;CACnD;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC7E;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/client-build/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ClientModuleRequest } from '@zhin.js/feature-kit';
|
|
2
|
+
import type { ClientArtifactManifest, ClientBuildEntry, ClientModuleLoader, TypeScriptClientBuilderOptions } from './types.js';
|
|
3
|
+
export declare class TypeScriptClientBuilder implements ClientModuleLoader {
|
|
4
|
+
#private;
|
|
5
|
+
constructor(options: TypeScriptClientBuilderOptions);
|
|
6
|
+
load<T = unknown>(source: string, request: ClientModuleRequest): Promise<T>;
|
|
7
|
+
build(entries: readonly ClientBuildEntry[]): Promise<Readonly<ClientArtifactManifest>>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=typescript-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript-builder.d.ts","sourceRoot":"","sources":["../../src/client-build/typescript-builder.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAUhE,OAAO,KAAK,EACV,sBAAsB,EAEtB,gBAAgB,EAChB,kBAAkB,EAClB,8BAA8B,EAC/B,MAAM,YAAY,CAAC;AAoBpB,qBAAa,uBAAwB,YAAW,kBAAkB;;gBAQpD,OAAO,EAAE,8BAA8B;IAQ7C,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,CAAC,CAAC;IAoB3E,KAAK,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;CAiB7F"}
|