@zhin.js/pagemanager 2.0.3 → 2.0.5
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 +20 -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/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 +22 -0
- package/lib/plugin-runtime/console-catalog.d.ts.map +1 -0
- package/lib/plugin-runtime/console-catalog.js +69 -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 +27 -3
package/README.md
CHANGED
|
@@ -35,6 +35,26 @@ pnpm add @zhin.js/pagemanager
|
|
|
35
35
|
|
|
36
36
|
类型(`ConsoleServerOptions`、`PluginServerRegisterHostApi` 等)自 `./consoleServerOptions.js` 导出。
|
|
37
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
|
+
|
|
38
58
|
## 插件注册 Entry
|
|
39
59
|
|
|
40
60
|
在插件 Node 侧通过 `web` 上下文获取 **PageManager 实例**(非静态全局):
|
|
@@ -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"}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { mkdir, readFile, rename, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { basename, dirname, join, relative, resolve, sep } from 'node:path';
|
|
4
|
+
import { build as esbuild } from 'esbuild';
|
|
5
|
+
import { pageRoute } from '@zhin.js/console-contract';
|
|
6
|
+
import { rootPluginId } from '@zhin.js/plugin-runtime';
|
|
7
|
+
import { assertLayoutModule, extractPageMetadata, } from './static-metadata.js';
|
|
8
|
+
import { ALLOWED_ESM_CANONICAL, rewriteBareImportsForBrowser, } from '../node/esmForBrowser.js';
|
|
9
|
+
const pageFeature = 'zhin.page';
|
|
10
|
+
const layoutFeature = 'zhin.layout';
|
|
11
|
+
/** Host-shared React/router graph — never bundle (single instance via `/esm/*`). */
|
|
12
|
+
const BROWSER_EXTERNALS = [...ALLOWED_ESM_CANONICAL];
|
|
13
|
+
/**
|
|
14
|
+
* Browser-only stubs for build-time contracts. Page `meta` is already extracted by
|
|
15
|
+
* static-metadata; the runtime only needs `definePage`/`defineLayout` as identity so
|
|
16
|
+
* we never leave a bare `@zhin.js/*` import for the browser to resolve.
|
|
17
|
+
*/
|
|
18
|
+
const CONSOLE_CONTRACT_STUB = [
|
|
19
|
+
'export function definePage(metadata = {}) { return metadata; }',
|
|
20
|
+
'export function defineLayout(metadata = {}) { return metadata; }',
|
|
21
|
+
'export function normalizePageMetadata(_name, metadata) { return metadata; }',
|
|
22
|
+
'export function normalizeClientModuleArtifact(value) { return value; }',
|
|
23
|
+
].join('\n');
|
|
24
|
+
export class TypeScriptClientBuilder {
|
|
25
|
+
#outDir;
|
|
26
|
+
#projectRoot;
|
|
27
|
+
#publicBase;
|
|
28
|
+
/** Console public base for rewritten bare imports (`/esm/…`); defaults to `/`. */
|
|
29
|
+
#consoleBasePath;
|
|
30
|
+
#manifestFile;
|
|
31
|
+
constructor(options) {
|
|
32
|
+
this.#outDir = resolve(options.outDir);
|
|
33
|
+
this.#projectRoot = resolve(options.projectRoot ?? process.cwd());
|
|
34
|
+
this.#publicBase = `/${trimSlashes(options.publicBase ?? '@zhin/client')}`;
|
|
35
|
+
this.#consoleBasePath = options.consoleBasePath ?? '/';
|
|
36
|
+
this.#manifestFile = resolve(options.manifestFile ?? join(this.#outDir, 'pages.manifest.json'));
|
|
37
|
+
}
|
|
38
|
+
async load(source, request) {
|
|
39
|
+
const absSource = resolve(source);
|
|
40
|
+
const text = await readFile(absSource, 'utf8');
|
|
41
|
+
const metadata = metadataFor(text, absSource, request);
|
|
42
|
+
const hash = contentHash(text);
|
|
43
|
+
const fileName = `${safe(request.owner)}-${safe(request.localName)}-${hash}.js`;
|
|
44
|
+
const output = join(this.#outDir, fileName);
|
|
45
|
+
// Bundle page TSX (inlines `@zhin.js/console-contract` stubs) + wrap with
|
|
46
|
+
// `export function register(api)` so Remote Console loadConsoleEntries can mount it.
|
|
47
|
+
// Then rewrite React bare imports to Host `/esm/<enc>.mjs`.
|
|
48
|
+
const bundled = await bundlePageEntry(absSource, this.#projectRoot, request, metadata);
|
|
49
|
+
const code = rewriteBareImportsForBrowser(bundled, this.#consoleBasePath, '');
|
|
50
|
+
await atomicWrite(output, code);
|
|
51
|
+
return Object.freeze({
|
|
52
|
+
module: `${this.#publicBase}/${fileName}`,
|
|
53
|
+
hash,
|
|
54
|
+
metadata,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
async build(entries) {
|
|
58
|
+
const records = [];
|
|
59
|
+
for (const entry of [...entries].sort(compareEntry)) {
|
|
60
|
+
const artifact = await this.load(entry.source, entry);
|
|
61
|
+
records.push(Object.freeze({
|
|
62
|
+
...entry,
|
|
63
|
+
source: manifestSource(this.#projectRoot, entry.source),
|
|
64
|
+
...artifact,
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
67
|
+
const manifest = Object.freeze({
|
|
68
|
+
protocol: 1,
|
|
69
|
+
entries: Object.freeze(records),
|
|
70
|
+
});
|
|
71
|
+
await atomicWrite(this.#manifestFile, `${JSON.stringify(manifest, null, 2)}\n`);
|
|
72
|
+
return manifest;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
async function bundlePageEntry(absSource, projectRoot, request, metadata) {
|
|
76
|
+
// Layout modules stay bare components (no Console shell register contract).
|
|
77
|
+
if (String(request.feature) === layoutFeature) {
|
|
78
|
+
return bundleSource(absSource, projectRoot);
|
|
79
|
+
}
|
|
80
|
+
const meta = (metadata && typeof metadata === 'object' ? metadata : {});
|
|
81
|
+
const route = safePageRoute(request.owner, request.localName);
|
|
82
|
+
const title = meta.title ?? request.localName;
|
|
83
|
+
const icon = meta.icon;
|
|
84
|
+
const hideInNav = meta.hideInNav === true;
|
|
85
|
+
const wrapperSource = buildPageRegisterWrapper(absSource, {
|
|
86
|
+
route,
|
|
87
|
+
title,
|
|
88
|
+
icon,
|
|
89
|
+
hideInNav,
|
|
90
|
+
localName: request.localName,
|
|
91
|
+
});
|
|
92
|
+
const result = await esbuild({
|
|
93
|
+
stdin: {
|
|
94
|
+
contents: wrapperSource,
|
|
95
|
+
resolveDir: dirname(absSource),
|
|
96
|
+
sourcefile: `${request.localName}.register.tsx`,
|
|
97
|
+
loader: 'tsx',
|
|
98
|
+
},
|
|
99
|
+
bundle: true,
|
|
100
|
+
write: false,
|
|
101
|
+
format: 'esm',
|
|
102
|
+
platform: 'browser',
|
|
103
|
+
target: 'es2022',
|
|
104
|
+
jsx: 'automatic',
|
|
105
|
+
sourcemap: false,
|
|
106
|
+
logLevel: 'silent',
|
|
107
|
+
absWorkingDir: projectRoot,
|
|
108
|
+
nodePaths: [
|
|
109
|
+
join(dirname(absSource), 'node_modules'),
|
|
110
|
+
join(projectRoot, 'node_modules'),
|
|
111
|
+
],
|
|
112
|
+
external: BROWSER_EXTERNALS,
|
|
113
|
+
plugins: [consoleContractStubPlugin()],
|
|
114
|
+
});
|
|
115
|
+
const file = result.outputFiles?.[0];
|
|
116
|
+
if (!file)
|
|
117
|
+
throw new Error(`esbuild produced no output for ${absSource}`);
|
|
118
|
+
return file.text;
|
|
119
|
+
}
|
|
120
|
+
async function bundleSource(absSource, projectRoot) {
|
|
121
|
+
const result = await esbuild({
|
|
122
|
+
entryPoints: [absSource],
|
|
123
|
+
bundle: true,
|
|
124
|
+
write: false,
|
|
125
|
+
format: 'esm',
|
|
126
|
+
platform: 'browser',
|
|
127
|
+
target: 'es2022',
|
|
128
|
+
jsx: 'automatic',
|
|
129
|
+
sourcemap: false,
|
|
130
|
+
logLevel: 'silent',
|
|
131
|
+
absWorkingDir: projectRoot,
|
|
132
|
+
nodePaths: [
|
|
133
|
+
join(dirname(absSource), 'node_modules'),
|
|
134
|
+
join(projectRoot, 'node_modules'),
|
|
135
|
+
],
|
|
136
|
+
external: BROWSER_EXTERNALS,
|
|
137
|
+
plugins: [consoleContractStubPlugin()],
|
|
138
|
+
});
|
|
139
|
+
const file = result.outputFiles?.[0];
|
|
140
|
+
if (!file)
|
|
141
|
+
throw new Error(`esbuild produced no output for ${absSource}`);
|
|
142
|
+
return file.text;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Wrap a convention page (default export component + optional meta) into the
|
|
146
|
+
* Remote Console entry contract: `export function register(api)`.
|
|
147
|
+
*/
|
|
148
|
+
function buildPageRegisterWrapper(absSource, options) {
|
|
149
|
+
// abs path import so esbuild resolves the real page regardless of stdin dir.
|
|
150
|
+
const pageImport = JSON.stringify(absSource);
|
|
151
|
+
const route = JSON.stringify(options.route);
|
|
152
|
+
const title = JSON.stringify(options.title);
|
|
153
|
+
const icon = options.icon === undefined ? 'undefined' : JSON.stringify(options.icon);
|
|
154
|
+
const hideInNav = options.hideInNav ? 'true' : 'false';
|
|
155
|
+
const toolId = JSON.stringify(options.localName);
|
|
156
|
+
// Re-export `meta` only when present via namespace — a hard
|
|
157
|
+
// `export { meta } from page` fails esbuild for pages that only
|
|
158
|
+
// export a default component (no meta).
|
|
159
|
+
return `
|
|
160
|
+
import Page, * as pageNs from ${pageImport};
|
|
161
|
+
export { default } from ${pageImport};
|
|
162
|
+
export const meta = pageNs.meta;
|
|
163
|
+
|
|
164
|
+
export function register(api) {
|
|
165
|
+
const Component = Page?.default ?? Page;
|
|
166
|
+
if (typeof Component !== 'function' && (typeof Component !== 'object' || Component == null)) {
|
|
167
|
+
throw new Error('Page module default export is not a React component');
|
|
168
|
+
}
|
|
169
|
+
const m = pageNs.meta && typeof pageNs.meta === 'object' ? pageNs.meta : {};
|
|
170
|
+
const route = ${route};
|
|
171
|
+
const name = typeof m.title === 'string' && m.title ? m.title : ${title};
|
|
172
|
+
const icon = m.icon ?? ${icon};
|
|
173
|
+
const element = api.React.createElement(Component);
|
|
174
|
+
api.addRoute({
|
|
175
|
+
path: route,
|
|
176
|
+
name,
|
|
177
|
+
element,
|
|
178
|
+
...(icon != null ? { icon } : {}),
|
|
179
|
+
meta: { hideInMenu: m.hideInNav === true || ${hideInNav} },
|
|
180
|
+
});
|
|
181
|
+
if (typeof api.addTool === 'function') {
|
|
182
|
+
api.addTool({
|
|
183
|
+
id: ${toolId},
|
|
184
|
+
name,
|
|
185
|
+
path: route,
|
|
186
|
+
...(icon != null ? { icon } : {}),
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
`;
|
|
191
|
+
}
|
|
192
|
+
/** Safe pageRoute — adversarial/invalid localName falls back to a sanitized path. */
|
|
193
|
+
function safePageRoute(owner, localName) {
|
|
194
|
+
try {
|
|
195
|
+
return pageRoute(owner, rootPluginId(), localName);
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
const slug = safe(localName) || 'page';
|
|
199
|
+
return `/p-${slug}`;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
function consoleContractStubPlugin() {
|
|
203
|
+
return {
|
|
204
|
+
name: 'zhin-console-contract-stub',
|
|
205
|
+
setup(build) {
|
|
206
|
+
build.onResolve({ filter: /^@zhin\.js\/console-contract$/ }, () => ({
|
|
207
|
+
path: 'zhin-console-contract-stub',
|
|
208
|
+
namespace: 'zhin-virtual',
|
|
209
|
+
}));
|
|
210
|
+
build.onLoad({ filter: /.*/, namespace: 'zhin-virtual' }, () => ({
|
|
211
|
+
contents: CONSOLE_CONTRACT_STUB,
|
|
212
|
+
loader: 'js',
|
|
213
|
+
}));
|
|
214
|
+
},
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
function manifestSource(root, source) {
|
|
218
|
+
const result = relative(root, resolve(source));
|
|
219
|
+
if (!result || result === '..' || result.startsWith(`..${sep}`)) {
|
|
220
|
+
throw new Error(`Client source is outside project Root: ${source}`);
|
|
221
|
+
}
|
|
222
|
+
return result.split(sep).join('/');
|
|
223
|
+
}
|
|
224
|
+
function metadataFor(source, fileName, request) {
|
|
225
|
+
if (request.feature === pageFeature)
|
|
226
|
+
return extractPageMetadata(source, fileName);
|
|
227
|
+
if (request.feature === layoutFeature) {
|
|
228
|
+
assertLayoutModule(source, fileName);
|
|
229
|
+
return undefined;
|
|
230
|
+
}
|
|
231
|
+
throw new Error(`Unsupported client Feature: ${request.feature}`);
|
|
232
|
+
}
|
|
233
|
+
function contentHash(source) {
|
|
234
|
+
return createHash('sha256').update(source).digest('hex').slice(0, 16);
|
|
235
|
+
}
|
|
236
|
+
function safe(value) {
|
|
237
|
+
const result = trimDashes(value.replace(/[^a-z0-9-]+/giu, '-')).toLowerCase();
|
|
238
|
+
return result || 'root';
|
|
239
|
+
}
|
|
240
|
+
/** 线性裁剪首尾 `/`(等价于 /^\/+|\/+$/gu,无回溯 — js/polynomial-redos)。 */
|
|
241
|
+
function trimSlashes(value) {
|
|
242
|
+
let start = 0;
|
|
243
|
+
let end = value.length;
|
|
244
|
+
while (start < end && value[start] === '/')
|
|
245
|
+
start += 1;
|
|
246
|
+
while (end > start && value[end - 1] === '/')
|
|
247
|
+
end -= 1;
|
|
248
|
+
return value.slice(start, end);
|
|
249
|
+
}
|
|
250
|
+
/** 线性裁剪首尾 `-`(等价于 /^-+|-+$/gu,无回溯 — js/polynomial-redos)。 */
|
|
251
|
+
function trimDashes(value) {
|
|
252
|
+
let start = 0;
|
|
253
|
+
let end = value.length;
|
|
254
|
+
while (start < end && value[start] === '-')
|
|
255
|
+
start += 1;
|
|
256
|
+
while (end > start && value[end - 1] === '-')
|
|
257
|
+
end -= 1;
|
|
258
|
+
return value.slice(start, end);
|
|
259
|
+
}
|
|
260
|
+
function compareEntry(left, right) {
|
|
261
|
+
return left.owner.localeCompare(right.owner)
|
|
262
|
+
|| String(left.feature).localeCompare(String(right.feature))
|
|
263
|
+
|| left.localName.localeCompare(right.localName)
|
|
264
|
+
|| left.source.localeCompare(right.source);
|
|
265
|
+
}
|
|
266
|
+
async function atomicWrite(path, content) {
|
|
267
|
+
await mkdir(dirname(path), { recursive: true });
|
|
268
|
+
const temporary = join(dirname(path), `.${basename(path)}.${process.pid}.tmp`);
|
|
269
|
+
await writeFile(temporary, content);
|
|
270
|
+
await rename(temporary, path);
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=typescript-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript-builder.js","sourceRoot":"","sources":["../../src/client-build/typescript-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"esmForBrowser.d.ts","sourceRoot":"","sources":["../../src/node/esmForBrowser.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,qBAAqB,aAQhC,CAAC;AAsDH,yFAAyF;AACzF,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAO/E;AAGD,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE1D;
|
|
1
|
+
{"version":3,"file":"esmForBrowser.d.ts","sourceRoot":"","sources":["../../src/node/esmForBrowser.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,qBAAqB,aAQhC,CAAC;AAsDH,yFAAyF;AACzF,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAO/E;AAGD,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE1D;AAgDD,wBAAsB,4BAA4B,CAChD,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAuCjB;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,MAAM,CAWR"}
|
|
@@ -97,7 +97,10 @@ function resolveNamedExports(canonical, resolveDir) {
|
|
|
97
97
|
function buildHostProxyModule(canonical, namedExports) {
|
|
98
98
|
const lines = [
|
|
99
99
|
`const _m = globalThis[${JSON.stringify(CONSOLE_SHARED_MODULES_KEY)}]?.get(${JSON.stringify(canonical)});`,
|
|
100
|
-
|
|
100
|
+
// Prefer Host-registered React (single instance with shell). If the shell has not
|
|
101
|
+
// populated SHARED_MODULES yet, fall through is not possible at static ESM time —
|
|
102
|
+
// throw a clear error pointing operators at the shell/Host contract.
|
|
103
|
+
`if (!_m) throw new Error("[zhin-console] Host module not registered: ${canonical}. Remote Console must set globalThis.${CONSOLE_SHARED_MODULES_KEY} before loading plugin entries.");`,
|
|
101
104
|
`export default _m;`,
|
|
102
105
|
...namedExports.map((n) => `export const ${n} = _m.${n};`),
|
|
103
106
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"esmForBrowser.js","sourceRoot":"","sources":["../../src/node/esmForBrowser.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"esmForBrowser.js","sourceRoot":"","sources":["../../src/node/esmForBrowser.ts"],"names":[],"mappings":"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"}
|
package/lib/node/index.d.ts
CHANGED
|
@@ -7,4 +7,6 @@ export { attachConsoleClientHost } from "./startHost.js";
|
|
|
7
7
|
export type { EntryStore } from "./entryStore.js";
|
|
8
8
|
export { createInMemoryEntryStore } from "./entryStore.js";
|
|
9
9
|
export { PageManager, mountConsoleRouter } from "./pageManager.js";
|
|
10
|
+
/** Browser ESM bare-import rewrite + Host React/router proxies (for Plugin Runtime client chunks). */
|
|
11
|
+
export { ALLOWED_ESM_CANONICAL, decodeSpecifierSegment, encodeSpecifierSegment, getOrBuildCanonicalEsmBundle, joinConsolePublicPath, rewriteBareImportsForBrowser, } from "./esmForBrowser.js";
|
|
10
12
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/node/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,oBAAoB,EACpB,8BAA8B,EAC9B,2BAA2B,EAC3B,2BAA2B,EAC3B,oBAAoB,EACpB,2BAA2B,GAC5B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,YAAY,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAEzD,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,oBAAoB,EACpB,8BAA8B,EAC9B,2BAA2B,EAC3B,2BAA2B,EAC3B,oBAAoB,EACpB,2BAA2B,GAC5B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,YAAY,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAEzD,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEnE,sGAAsG;AACtG,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,4BAA4B,EAC5B,qBAAqB,EACrB,4BAA4B,GAC7B,MAAM,oBAAoB,CAAC"}
|
package/lib/node/index.js
CHANGED
|
@@ -4,4 +4,6 @@ export { serverRuntimeEnv } from "./env.js";
|
|
|
4
4
|
export { attachConsoleClientHost } from "./startHost.js";
|
|
5
5
|
export { createInMemoryEntryStore } from "./entryStore.js";
|
|
6
6
|
export { PageManager, mountConsoleRouter } from "./pageManager.js";
|
|
7
|
+
/** Browser ESM bare-import rewrite + Host React/router proxies (for Plugin Runtime client chunks). */
|
|
8
|
+
export { ALLOWED_ESM_CANONICAL, decodeSpecifierSegment, encodeSpecifierSegment, getOrBuildCanonicalEsmBundle, joinConsolePublicPath, rewriteBareImportsForBrowser, } from "./esmForBrowser.js";
|
|
7
9
|
//# sourceMappingURL=index.js.map
|
package/lib/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAGzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAGzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEnE,sGAAsG;AACtG,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,4BAA4B,EAC5B,qBAAqB,EACrB,4BAA4B,GAC7B,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AccessSnapshot, PageManifest } from '@zhin.js/console-contract';
|
|
2
|
+
export interface AccessIndex {
|
|
3
|
+
readonly permissions: ReadonlySet<string>;
|
|
4
|
+
readonly roles: ReadonlySet<string>;
|
|
5
|
+
}
|
|
6
|
+
export declare function createAccessIndex(access: AccessSnapshot): AccessIndex;
|
|
7
|
+
export declare function allowsPage(page: PageManifest, access: AccessIndex): boolean;
|
|
8
|
+
//# sourceMappingURL=access.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../../src/plugin-runtime/access.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9E,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACrC;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,WAAW,CAKrE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAG3E"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export function createAccessIndex(access) {
|
|
2
|
+
return Object.freeze({
|
|
3
|
+
permissions: new Set(access.permissions),
|
|
4
|
+
roles: new Set(access.roles),
|
|
5
|
+
});
|
|
6
|
+
}
|
|
7
|
+
export function allowsPage(page, access) {
|
|
8
|
+
return page.requiredPermissions.every((permission) => access.permissions.has(permission))
|
|
9
|
+
&& page.requiredRoles.every((role) => access.roles.has(role));
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=access.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access.js","sourceRoot":"","sources":["../../src/plugin-runtime/access.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,iBAAiB,CAAC,MAAsB;IACtD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,WAAW,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC;QACxC,KAAK,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;KAC7B,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAkB,EAAE,MAAmB;IAChE,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;WACpF,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { AccessSnapshot, LayoutManifest, LayoutSlot, NavNode, PageManifest } from '@zhin.js/console-contract';
|
|
2
|
+
import type { PluginId, RuntimeSnapshot } from '@zhin.js/plugin-runtime';
|
|
3
|
+
export type RouteMatch = {
|
|
4
|
+
readonly status: 'found';
|
|
5
|
+
readonly page: Readonly<PageManifest>;
|
|
6
|
+
} | {
|
|
7
|
+
readonly status: 'forbidden';
|
|
8
|
+
readonly page: Readonly<PageManifest>;
|
|
9
|
+
} | {
|
|
10
|
+
readonly status: 'missing';
|
|
11
|
+
};
|
|
12
|
+
export declare class ConsoleCatalog {
|
|
13
|
+
#private;
|
|
14
|
+
readonly generation: number;
|
|
15
|
+
constructor(snapshot: RuntimeSnapshot, access: AccessSnapshot, active?: () => boolean);
|
|
16
|
+
pages(): readonly Readonly<PageManifest>[];
|
|
17
|
+
match(path: string): RouteMatch;
|
|
18
|
+
navigation(): readonly Readonly<NavNode>[];
|
|
19
|
+
layouts(owner: PluginId, slot: LayoutSlot): readonly Readonly<LayoutManifest>[];
|
|
20
|
+
fallback(owner: PluginId): string | undefined;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=console-catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console-catalog.d.ts","sourceRoot":"","sources":["../../src/plugin-runtime/console-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,UAAU,EACV,OAAO,EACP,YAAY,EACb,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAa,QAAQ,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAMpF,MAAM,MAAM,UAAU,GAClB;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAA;CAAE,GACnE;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAA;CAAE,GACvE;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;CAAE,CAAC;AAEnC,qBAAa,cAAc;;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAQ1B,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,cAAc,EACtB,MAAM,GAAE,MAAM,OAAoB;IAUpC,KAAK,IAAI,SAAS,QAAQ,CAAC,YAAY,CAAC,EAAE;IAK1C,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU;IAS/B,UAAU,IAAI,SAAS,QAAQ,CAAC,OAAO,CAAC,EAAE;IAK1C,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,GAAG,SAAS,QAAQ,CAAC,cAAc,CAAC,EAAE;IAM/E,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS;CAe9C"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { LayoutIndex, layoutFeatureId } from '@zhin.js/layout';
|
|
2
|
+
import { PageIndex, pageFeatureId } from '@zhin.js/page';
|
|
3
|
+
import { allowsPage, createAccessIndex } from './access.js';
|
|
4
|
+
import { buildNavigation } from './navigation.js';
|
|
5
|
+
export class ConsoleCatalog {
|
|
6
|
+
generation;
|
|
7
|
+
#snapshot;
|
|
8
|
+
#pages;
|
|
9
|
+
#layouts;
|
|
10
|
+
#access;
|
|
11
|
+
#active;
|
|
12
|
+
constructor(snapshot, access, active = () => true) {
|
|
13
|
+
this.generation = snapshot.generation;
|
|
14
|
+
this.#snapshot = snapshot;
|
|
15
|
+
this.#pages = projection(snapshot, pageFeatureId, PageIndex);
|
|
16
|
+
this.#layouts = projection(snapshot, layoutFeatureId, LayoutIndex);
|
|
17
|
+
this.#access = createAccessIndex(access);
|
|
18
|
+
this.#active = active;
|
|
19
|
+
}
|
|
20
|
+
pages() {
|
|
21
|
+
this.#assertActive();
|
|
22
|
+
return Object.freeze((this.#pages?.list() ?? []).filter((page) => allowsPage(page, this.#access)));
|
|
23
|
+
}
|
|
24
|
+
match(path) {
|
|
25
|
+
this.#assertActive();
|
|
26
|
+
const page = this.#pages?.route(path);
|
|
27
|
+
if (!page)
|
|
28
|
+
return Object.freeze({ status: 'missing' });
|
|
29
|
+
return allowsPage(page, this.#access)
|
|
30
|
+
? Object.freeze({ status: 'found', page })
|
|
31
|
+
: Object.freeze({ status: 'forbidden', page });
|
|
32
|
+
}
|
|
33
|
+
navigation() {
|
|
34
|
+
this.#assertActive();
|
|
35
|
+
return buildNavigation(this.#snapshot, this.pages());
|
|
36
|
+
}
|
|
37
|
+
layouts(owner, slot) {
|
|
38
|
+
this.#assertActive();
|
|
39
|
+
if (!this.#snapshot.tree.has(owner))
|
|
40
|
+
throw new Error(`Unknown Layout owner: ${owner}`);
|
|
41
|
+
return this.#layouts?.chain(owner, slot) ?? Object.freeze([]);
|
|
42
|
+
}
|
|
43
|
+
fallback(owner) {
|
|
44
|
+
this.#assertActive();
|
|
45
|
+
if (!this.#snapshot.tree.has(owner))
|
|
46
|
+
throw new Error(`Unknown Page fallback owner: ${owner}`);
|
|
47
|
+
let current = owner;
|
|
48
|
+
while (current) {
|
|
49
|
+
const page = this.#pages?.ownedBy(current).find((candidate) => allowsPage(candidate, this.#access));
|
|
50
|
+
if (page)
|
|
51
|
+
return page.route;
|
|
52
|
+
current = this.#snapshot.tree.get(current)?.parent;
|
|
53
|
+
}
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
#assertActive() {
|
|
57
|
+
if (!this.#active())
|
|
58
|
+
throw new Error('Console catalog view scope has ended');
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function projection(snapshot, id, constructor) {
|
|
62
|
+
const value = snapshot.projections.get(id);
|
|
63
|
+
return value
|
|
64
|
+
&& typeof value === 'object'
|
|
65
|
+
&& Object.prototype.isPrototypeOf.call(constructor.prototype, value)
|
|
66
|
+
? value
|
|
67
|
+
: undefined;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=console-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console-catalog.js","sourceRoot":"","sources":["../../src/plugin-runtime/console-catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type SnapshotStore } from '@zhin.js/plugin-runtime';
|
|
2
|
+
import type { AccessSnapshot } from '@zhin.js/console-contract';
|
|
3
|
+
import { ConsoleCatalog } from './console-catalog.js';
|
|
4
|
+
export declare const consoleRuntimeToken: import("@zhin.js/plugin-runtime").Token<ConsoleRuntime>;
|
|
5
|
+
export declare class ConsoleRuntime {
|
|
6
|
+
#private;
|
|
7
|
+
attach(snapshots: SnapshotStore): void;
|
|
8
|
+
runView<TResult>(access: AccessSnapshot, operation: (catalog: ConsoleCatalog) => TResult | Promise<TResult>): Promise<TResult>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=console-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console-runtime.d.ts","sourceRoot":"","sources":["../../src/plugin-runtime/console-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,eAAO,MAAM,mBAAmB,yDAAsD,CAAC;AAEvF,qBAAa,cAAc;;IAGzB,MAAM,CAAC,SAAS,EAAE,aAAa,GAAG,IAAI;IAOhC,OAAO,CAAC,OAAO,EACnB,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GACjE,OAAO,CAAC,OAAO,CAAC;CAWpB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { createToken } from '@zhin.js/plugin-runtime';
|
|
2
|
+
import { ConsoleCatalog } from './console-catalog.js';
|
|
3
|
+
export const consoleRuntimeToken = createToken('zhin.console.runtime');
|
|
4
|
+
export class ConsoleRuntime {
|
|
5
|
+
#snapshots;
|
|
6
|
+
attach(snapshots) {
|
|
7
|
+
if (this.#snapshots && this.#snapshots !== snapshots) {
|
|
8
|
+
throw new Error('ConsoleRuntime is already attached to another Root');
|
|
9
|
+
}
|
|
10
|
+
this.#snapshots = snapshots;
|
|
11
|
+
}
|
|
12
|
+
async runView(access, operation) {
|
|
13
|
+
if (!this.#snapshots)
|
|
14
|
+
throw new Error('ConsoleRuntime is not attached to a Root');
|
|
15
|
+
const lease = this.#snapshots.acquire();
|
|
16
|
+
let active = true;
|
|
17
|
+
try {
|
|
18
|
+
return await operation(new ConsoleCatalog(lease.value, access, () => active));
|
|
19
|
+
}
|
|
20
|
+
finally {
|
|
21
|
+
active = false;
|
|
22
|
+
lease.release();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=console-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console-runtime.js","sourceRoot":"","sources":["../../src/plugin-runtime/console-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAsB,MAAM,yBAAyB,CAAC;AAE1E,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAiB,sBAAsB,CAAC,CAAC;AAEvF,MAAM,OAAO,cAAc;IACzB,UAAU,CAAiB;IAE3B,MAAM,CAAC,SAAwB;QAC7B,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,OAAO,CACX,MAAsB,EACtB,SAAkE;QAElE,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAClF,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxC,IAAI,MAAM,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC;YACH,OAAO,MAAM,SAAS,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAChF,CAAC;gBAAS,CAAC;YACT,MAAM,GAAG,KAAK,CAAC;YACf,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugin-runtime/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugin-runtime/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { NavNode, PageManifest } from '@zhin.js/console-contract';
|
|
2
|
+
import type { RuntimeSnapshot } from '@zhin.js/plugin-runtime';
|
|
3
|
+
export declare function buildNavigation(snapshot: RuntimeSnapshot, pages: readonly Readonly<PageManifest>[]): readonly Readonly<NavNode>[];
|
|
4
|
+
//# sourceMappingURL=navigation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/plugin-runtime/navigation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,KAAK,EAAgC,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE7F,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE,SAAS,QAAQ,CAAC,YAAY,CAAC,EAAE,GACvC,SAAS,QAAQ,CAAC,OAAO,CAAC,EAAE,CAiC9B"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export function buildNavigation(snapshot, pages) {
|
|
2
|
+
const byOwner = new Map();
|
|
3
|
+
for (const page of pages) {
|
|
4
|
+
if (page.hideInNav)
|
|
5
|
+
continue;
|
|
6
|
+
const owned = byOwner.get(page.owner) ?? [];
|
|
7
|
+
owned.push(page);
|
|
8
|
+
byOwner.set(page.owner, owned);
|
|
9
|
+
}
|
|
10
|
+
const visit = (id) => {
|
|
11
|
+
const plugin = requiredPlugin(snapshot, id);
|
|
12
|
+
const leaves = (byOwner.get(id) ?? []).map(pageNode);
|
|
13
|
+
const groups = plugin.children
|
|
14
|
+
.map(visit)
|
|
15
|
+
.filter((node) => node !== undefined);
|
|
16
|
+
const children = Object.freeze([...leaves, ...groups].sort(compareNode));
|
|
17
|
+
if (children.length === 0)
|
|
18
|
+
return undefined;
|
|
19
|
+
return Object.freeze({
|
|
20
|
+
id: plugin.id,
|
|
21
|
+
type: 'plugin',
|
|
22
|
+
label: plugin.metadata?.displayName ?? plugin.instanceKey,
|
|
23
|
+
icon: plugin.metadata?.icon,
|
|
24
|
+
order: plugin.metadata?.order ?? 100,
|
|
25
|
+
children,
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
const root = requiredPlugin(snapshot, snapshot.root);
|
|
29
|
+
const rootPages = (byOwner.get(snapshot.root) ?? []).map(pageNode);
|
|
30
|
+
const groups = root.children
|
|
31
|
+
.map(visit)
|
|
32
|
+
.filter((node) => node !== undefined);
|
|
33
|
+
return Object.freeze([...rootPages, ...groups].sort(compareNode));
|
|
34
|
+
}
|
|
35
|
+
function pageNode(page) {
|
|
36
|
+
return Object.freeze({
|
|
37
|
+
id: page.id,
|
|
38
|
+
type: 'page',
|
|
39
|
+
label: page.title,
|
|
40
|
+
icon: page.icon,
|
|
41
|
+
path: page.route,
|
|
42
|
+
order: page.order,
|
|
43
|
+
children: Object.freeze([]),
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
function compareNode(left, right) {
|
|
47
|
+
return left.order - right.order
|
|
48
|
+
|| left.type.localeCompare(right.type)
|
|
49
|
+
|| left.id.localeCompare(right.id);
|
|
50
|
+
}
|
|
51
|
+
function requiredPlugin(snapshot, id) {
|
|
52
|
+
const node = snapshot.tree.get(id);
|
|
53
|
+
if (!node)
|
|
54
|
+
throw new Error(`Unknown Plugin in Console tree: ${id}`);
|
|
55
|
+
return node;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=navigation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../src/plugin-runtime/navigation.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zhin.js/pagemanager",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.5",
|
|
4
4
|
"description": "Zhin PageManager Host runtime: entries, esbuild pipeline (no UI; contract in @zhin.js/contract)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -13,6 +13,16 @@
|
|
|
13
13
|
"types": "./lib/node/index.d.ts",
|
|
14
14
|
"import": "./lib/node/index.js",
|
|
15
15
|
"default": "./lib/node/index.js"
|
|
16
|
+
},
|
|
17
|
+
"./plugin-runtime": {
|
|
18
|
+
"types": "./lib/plugin-runtime/index.d.ts",
|
|
19
|
+
"development": "./src/plugin-runtime/index.ts",
|
|
20
|
+
"import": "./lib/plugin-runtime/index.js"
|
|
21
|
+
},
|
|
22
|
+
"./client-build": {
|
|
23
|
+
"types": "./lib/client-build/index.d.ts",
|
|
24
|
+
"development": "./src/client-build/index.ts",
|
|
25
|
+
"import": "./lib/client-build/index.js"
|
|
16
26
|
}
|
|
17
27
|
},
|
|
18
28
|
"dependencies": {
|
|
@@ -21,7 +31,11 @@
|
|
|
21
31
|
"koa": "^3.2.1",
|
|
22
32
|
"koa-compose": "^4.1.0",
|
|
23
33
|
"koa-static": "^5.0.0",
|
|
24
|
-
"@zhin.js/contract": "1.0.
|
|
34
|
+
"@zhin.js/contract": "1.0.5",
|
|
35
|
+
"@zhin.js/console-contract": "1.0.0",
|
|
36
|
+
"@zhin.js/layout": "1.0.2",
|
|
37
|
+
"@zhin.js/page": "1.0.2",
|
|
38
|
+
"@zhin.js/plugin-runtime": "1.1.0"
|
|
25
39
|
},
|
|
26
40
|
"devDependencies": {
|
|
27
41
|
"@types/koa": "^3.0.3",
|
|
@@ -30,7 +44,17 @@
|
|
|
30
44
|
"@types/koa__router": "^12.0.4",
|
|
31
45
|
"@types/node": "^26.1.0",
|
|
32
46
|
"rimraf": "^6.0.1",
|
|
33
|
-
"typescript": "^6.0.2"
|
|
47
|
+
"typescript": "^6.0.2",
|
|
48
|
+
"@zhin.js/feature-kit": "1.0.2",
|
|
49
|
+
"@zhin.js/runtime": "1.0.2"
|
|
50
|
+
},
|
|
51
|
+
"peerDependencies": {
|
|
52
|
+
"typescript": ">=5.8.0 <7.0.0"
|
|
53
|
+
},
|
|
54
|
+
"peerDependenciesMeta": {
|
|
55
|
+
"typescript": {
|
|
56
|
+
"optional": true
|
|
57
|
+
}
|
|
34
58
|
},
|
|
35
59
|
"files": [
|
|
36
60
|
"lib"
|