@aalis/api-webui 0.9.3 → 0.11.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/README.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # @aalis/api-webui
2
2
 
3
- 类型/接口/能力声明包(只导出 `type` 与 `*Capabilities`,不含运行时逻辑)
3
+ 导出服务描述符(运行时值)与类型;不含服务实现
4
4
 
5
5
  ## 角色
6
6
 
7
- 类型/接口/能力声明包(只导出 `type` 与 `*Capabilities`,不含运行时逻辑)
7
+ 导出服务描述符(运行时值)与类型;不含服务实现
8
8
 
9
9
  ## 安装
10
10
 
@@ -15,10 +15,10 @@ pnpm add @aalis/api-webui
15
15
  ## 使用
16
16
 
17
17
  ```ts
18
- import type { /* ... */ } from '@aalis/api-webui';
19
- ```
18
+ import { webuiServer } from '@aalis/api-webui';
20
19
 
21
- 本包为 *-api 类型包;实现见对应的运行时插件。
20
+ // uses: { webui: webuiServer }
21
+ ```
22
22
 
23
23
  ## 许可
24
24
 
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { UserIdentity } from '@aalis/api-authority';
2
- import type { Context } from '@aalis/core';
2
+ import type { ServiceRef } from '@aalis/core';
3
3
  import type { ConfigSchema } from '@aalis/schema-config';
4
4
  /**
5
5
  * WebUI 服务 —— Web 管理后台
@@ -7,7 +7,6 @@ import type { ConfigSchema } from '@aalis/schema-config';
7
7
  * 负责启动 HTTP 服务器,提供 REST API(插件管理、配置、权限等)
8
8
  * 和 WebSocket(消息/日志推送),同时托管前端静态文件。
9
9
  *
10
- * 核心要求此服务必须运行。
11
10
  * 默认由 plugin-webui-server 提供,第三方可替换整个实现或仅替换前端部分。
12
11
  */
13
12
  export interface WebUIService {
@@ -15,20 +14,23 @@ export interface WebUIService {
15
14
  getPort(): number;
16
15
  /** 获取 HTTP 服务监听地址 */
17
16
  getHost(): string;
18
- /**
19
- * 设置前端静态文件目录
20
- * 允许外部插件在运行时替换前端
21
- */
22
- setClientDir?(dir: string): void;
23
17
  /** 注册一个 WebUI 页面;返回 dispose */
24
18
  registerPage(page: WebuiPage, contextId: string): () => void;
25
19
  /** 列出当前所有已注册的页面(含插件归属) */
26
20
  getPages(): Array<WebuiPage & {
27
21
  pluginName: string;
28
22
  }>;
29
- /** 按 contextId 批量清除(Context 拆卸时由 core 调用) */
30
- unregisterByPlugin(contextId: string): void;
23
+ /**
24
+ * 登记一个页面动作:宿主路由层(POST /api/page-action/:plugin/:method)在权限闸门放行后调用。
25
+ * 同一插件同名动作为替换;返回 dispose。
26
+ */
27
+ registerAction(method: string, handler: WebuiActionHandler, contextId: string): () => void;
31
28
  }
29
+ /**
30
+ * 页面动作处理函数。caller 是路由层解析出的调用者身份,可用来做业务级检查
31
+ * (如 owner 自检)。
32
+ */
33
+ export type WebuiActionHandler = (args: Record<string, unknown>, caller?: UserIdentity) => Promise<unknown>;
32
34
  /** 统计卡片 */
33
35
  export interface WebuiStatComponent {
34
36
  type: 'stat';
@@ -194,32 +196,13 @@ export interface WebuiPage {
194
196
  content?: WebuiComponent[];
195
197
  }
196
198
  /**
197
- * 通过 declaration merging 向 core 的 PluginModule 注入
198
- * 纯展示元数据字段(subsystem / extends)与 host-RPC 槽位(actions)。
199
- *
200
- * WebuiPage 注册路径为运行时 `useWebuiService(ctx).registerPage(...)`,
201
- * 不作为静态 module 字段存在。
199
+ * 通过 declaration merging 向插件定义注入展示元数据 extends。
200
+ * 页面与页面动作不是静态字段:在 apply 里经 `webuiServer.registerPage / registerAction` 登记。
202
201
  */
203
202
  declare module '@aalis/core' {
204
- interface PluginModule {
205
- /**
206
- * 子系统归属,仅用于 WebUI 分组展示。
207
- *
208
- * 可用 id 与中文 label 由本包的 `DEFAULT_SUBSYSTEM_METADATA` 提供,
209
- * 但允许使用任意自定义字符串(未匹配 metadata 时直接以 id 作为 label 显示)。
210
- */
211
- subsystem?: string;
203
+ interface PluginMeta {
212
204
  /** 声明该插件对 core 的扩展(新增事件、钩子),仅用于前端展示。 */
213
205
  extends?: ExtendDeclaration;
214
- /**
215
- * 插件 RPC 动作表 —— 供 host(webui-server 等)远程调用。
216
- *
217
- * core 不感知此字段;host 路由层(POST /api/page-action/:plugin/:method)
218
- * 在权限闸门放行后以插件自身的 `entry.context` 调用 handler。
219
- * 第三参 caller 为路由层解析出的调用者身份,handler 可用它做业务级
220
- * 检查(如"不能委托超出自身持有的能力");忽略该参数即向后兼容。
221
- */
222
- actions?: Record<string, (ctx: Context, args: Record<string, unknown>, caller?: UserIdentity) => Promise<unknown>>;
223
206
  }
224
207
  }
225
208
  declare module '@aalis/schema-config' {
@@ -236,63 +219,41 @@ declare module '@aalis/schema-config' {
236
219
  allowCustom?: boolean;
237
220
  }
238
221
  }
239
- /**
240
- * Scoped WebUI 服务:在插件 apply() 中注册页面,自动绑定到当前 ctx 生命周期。
241
- */
242
- export interface ScopedWebuiService {
243
- /** 注册页面;返回 dispose(与 ctx 生命周期绑定)。 */
244
- registerPage(page: WebuiPage): () => void;
245
- /** 获取底层 service(未就绪时为 undefined)。 */
246
- readonly raw: WebUIService | undefined;
247
- }
248
- /**
249
- * 获取 ScopedWebuiService。
250
- *
251
- * 实现委托给 `ctx.whenService('webui-server', ...)`:每次 webui-server
252
- * 重新 provide(bounce/replace)都会重新调用 `registerPage`,让插件页面
253
- * 自动重挂;上次注册的 cleanup 在 provider 下线时自动释放。
254
- */
255
- export declare function useWebuiService(ctx: Context): ScopedWebuiService;
256
222
  /**
257
223
  * 插件可以声明它对 core 做了哪些扩展,用于前端展示和文档生成。
258
224
  *
259
- * 仅是元数据描述,core 不会读取也不会校验,仅透传给 WebUI 展示。
260
- *
261
- * 字段名是 `extends`(PluginModule 契约与消费端一致);它是保留字,具名导出
262
- * 须用别名形式:
225
+ * 仅是元数据描述,core 不会读取也不会校验,仅透传给 WebUI 展示。写在 definePlugin 的 `extends` 字段里:
263
226
  *
264
227
  * @example
265
- * const ext: ExtendDeclaration = {
266
- * events: ['scheduler:tick', 'scheduler:error'],
267
- * hooks: ['schedule:before'],
268
- * };
269
- * export { ext as extends };
228
+ * definePlugin({
229
+ * name: '@aalis/plugin-scheduler',
230
+ * extends: { events: ['scheduler:tick', 'scheduler:error'], hooks: ['schedule:before'] },
231
+ * …
232
+ * });
270
233
  */
271
234
  export interface ExtendDeclaration {
272
235
  /** 该插件新增的自定义事件名 */
273
236
  events?: string[];
274
237
  /** 该插件新增的自定义钩子名 */
275
238
  hooks?: string[];
276
- /** 该插件向哪些服务混入了方法(服务名 → 方法名列表),仅用于前端展示。 */
277
- mixins?: Record<string, string[]>;
278
239
  }
279
240
  /**
280
241
  * 子系统展示目录条目。
281
242
  *
282
243
  * **职责边界**:
283
244
  * - 这是 **WebUI 展示层契约**,唯一消费者是 webui-server 的 `/api/service-groups` 路由。
284
- * - `core` 完全不知道 subsystem 概念,仅在 PluginModule 上保留一个透传字段
245
+ * - `core` 不解释 subsystem 的取值,插件定义上只有一个透传的字符串字段
285
246
  * `subsystem?: string`(不读不解释,纯粹搬运给 WebUI)。
286
247
  * - 本表只描述 **展示元数据**(中文 label / 排序 / icon),**不再写死插件归属**。
287
- * 归属由每个插件自己在 index.ts 中声明:`export const subsystem = 'llm';`
248
+ * 归属由每个插件在 `definePlugin({ subsystem: 'llm' })` 中声明。
288
249
  *
289
250
  * 解耦收益:
290
- * - 新增插件不需要改 webui-api(只改插件自身)
251
+ * - 新增插件不需要改 api-webui(只改插件自身)
291
252
  * - 新增子系统:只在本表加一行元数据即可(id 未匹配时回退为 id 直接展示)
292
- * - webui-api 不再反向耦合具体插件 npm 名
253
+ * - api-webui 不再反向耦合具体插件 npm 名
293
254
  */
294
255
  export interface SubsystemMetadata {
295
- /** subsystem id(与 PluginModule.subsystem 对应) */
256
+ /** subsystem id(与插件定义的 subsystem 字段对应) */
296
257
  id: string;
297
258
  /** 显示名(中文 label) */
298
259
  label: string;
@@ -311,18 +272,20 @@ export declare const DEFAULT_SUBSYSTEM_METADATA: readonly SubsystemMetadata[];
311
272
  * webui-server 托管。第三方前端两条接入:
312
273
  * - **纯静态包**:package.json 标 `aalis.client: true` + 含 `dist/index.html`,被
313
274
  * webui-server 自动发现挂载(无需 `apply`,runtime 不会把它当插件加载)。
314
- * - **主动覆盖**:插件 `apply` 里 `ctx.provide('webui-client', impl)`,优先于自动发现。
275
+ * - **主动覆盖**:插件 `apply` 里 `provide(webuiClient, impl, { label })`,优先于自动发现;
276
+ * 多前端切换时显示的名字优先取提供方插件的 `displayName`,没有时取 provide 的 `label` 选项。
315
277
  */
316
278
  export interface WebuiClientProvider {
317
279
  /** 返回含 index.html 的前端静态目录绝对路径 */
318
280
  getClientDir(): string;
319
- /** 可选展示名(多前端切换/选择时用) */
320
- label?: string;
321
281
  }
322
- declare module '@aalis/core' {
323
- interface ServiceTypeMap {
324
- 'webui-server': WebUIService;
325
- 'webui-client': WebuiClientProvider;
326
- }
282
+ export declare const webuiClient: import("@aalis/core").ServiceDescriptor<WebuiClientProvider, ServiceRef<WebuiClientProvider>>;
283
+ /** `webui-server` 的绑定接口:页面与页面动作的登记自动归属这次激活 */
284
+ export interface BoundWebui extends ServiceRef<WebUIService> {
285
+ /** 登记页面:提供者换人自动重挂,随激活撤回 */
286
+ registerPage(page: WebuiPage): () => void;
287
+ /** 登记页面动作:同名替换,提供者换人自动重挂,随激活撤回 */
288
+ registerAction(method: string, handler: WebuiActionHandler): () => void;
327
289
  }
290
+ export declare const webuiServer: import("@aalis/core").ServiceDescriptor<WebUIService, BoundWebui>;
328
291
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC3B,qBAAqB;IACrB,OAAO,IAAI,MAAM,CAAC;IAClB,qBAAqB;IACrB,OAAO,IAAI,MAAM,CAAC;IAClB;;;OAGG;IACH,YAAY,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,+BAA+B;IAC/B,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;IAC7D,0BAA0B;IAC1B,QAAQ,IAAI,KAAK,CAAC,SAAS,GAAG;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtD,6CAA6C;IAC7C,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7C;AAID,WAAW;AACX,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,WAAW;AACX,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,KAAK,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IACH;;;;OAIG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACvF,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,2CAA2C;IAC3C,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,4BAA4B;AAC5B,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf;;;;;;OAMG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,YAAY;AACZ,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,KAAK,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvG;AAED,aAAa;AACb,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,kBAAkB;AAClB,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,aAAa;AACb,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,cAAc,EAAE,CAAA;KAAE,CAAC,CAAC;CACzE;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2BAA2B;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzG;;;;;OAKG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,QAAQ,GAAG,YAAY,GAAG,SAAS,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChH,uCAAuC;IACvC,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACtF;AAED,qBAAqB;AACrB,MAAM,MAAM,cAAc,GACtB,kBAAkB,GAClB,mBAAmB,GACnB,kBAAkB,GAClB,qBAAqB,GACrB,kBAAkB,GAClB,sBAAsB,GACtB,kBAAkB,GAClB,mBAAmB,CAAC;AAExB;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,4BAA4B;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa;IACb,KAAK,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,OAAO,QAAQ,aAAa,CAAC;IAC3B,UAAU,YAAY;QACpB;;;;;WAKG;QACH,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,wCAAwC;QACxC,OAAO,CAAC,EAAE,iBAAiB,CAAC;QAC5B;;;;;;;WAOG;QACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;KACpH;CACF;AAED,OAAO,QAAQ,sBAAsB,CAAC;IACpC;;;OAGG;IACH,UAAU,WAAW;QACnB,wBAAwB;QACxB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,qFAAqF;QACrF,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,0CAA0C;QAC1C,WAAW,CAAC,EAAE,OAAO,CAAC;KACvB;CACF;AAID;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,qCAAqC;IACrC,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,IAAI,CAAC;IAC1C,qCAAqC;IACrC,QAAQ,CAAC,GAAG,EAAE,YAAY,GAAG,SAAS,CAAC;CACxC;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,kBAAkB,CAUhE;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,iBAAiB;IAChC,mBAAmB;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,mBAAmB;IACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACnC;AAID;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,iBAAiB;IAChC,gDAAgD;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,EAAE,SAAS,iBAAiB,EAkBjE,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC,iCAAiC;IACjC,YAAY,IAAI,MAAM,CAAC;IACvB,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAGD,OAAO,QAAQ,aAAa,CAAC;IAC3B,UAAU,cAAc;QACtB,cAAc,EAAE,YAAY,CAAC;QAC7B,cAAc,EAAE,mBAAmB,CAAC;KACrC;CACF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,26 +1,8 @@
1
1
  // ----- WebUI 服务接口与声明式页面组件 -----
2
2
  //
3
- // 此包提供 @aalis/core 中 WebuiPage skeleton 的完整扩展,
4
- // 以及所有声明式页面组件类型。
5
- // 任何需要声明 webuiPages 的插件应从本包导入相关类型。
6
- /**
7
- * 获取 ScopedWebuiService。
8
- *
9
- * 实现委托给 `ctx.whenService('webui-server', ...)`:每次 webui-server
10
- * 重新 provide(bounce/replace)都会重新调用 `registerPage`,让插件页面
11
- * 自动重挂;上次注册的 cleanup 在 provider 下线时自动释放。
12
- */
13
- export function useWebuiService(ctx) {
14
- const contextId = ctx.id || 'unknown';
15
- return {
16
- registerPage(page) {
17
- return ctx.whenService('webui-server', svc => svc.registerPage(page, contextId));
18
- },
19
- get raw() {
20
- return ctx.getService('webui-server');
21
- },
22
- };
23
- }
3
+ // WebUI 服务契约、声明式页面组件类型与服务描述符(WebuiPage 由本包直接导出)。
4
+ // 需要登记 WebUI 页面的插件从本包导入相关类型。
5
+ import { defineService, serviceRef } from '@aalis/core';
24
6
  /**
25
7
  * 默认子系统元数据。
26
8
  *
@@ -46,4 +28,20 @@ export const DEFAULT_SUBSYSTEM_METADATA = Object.freeze([
46
28
  { id: 'user', label: '用户', order: 140 },
47
29
  { id: 'external', label: '外部', order: 160 },
48
30
  ]);
31
+ // ----- 服务描述符(按激活绑定;调用型:绑定接口是 ServiceRef)-----
32
+ export const webuiClient = defineService('webui-client');
33
+ export const webuiServer = defineService('webui-server', port => {
34
+ const pages = port.registrar({
35
+ key: page => page.key,
36
+ register: (service, page) => service.registerPage(page, port.id),
37
+ });
38
+ const actions = port.registrar({
39
+ key: action => action.method,
40
+ register: (service, action) => service.registerAction(action.method, action.handler, port.id),
41
+ });
42
+ return serviceRef(port, {
43
+ registerPage: (page) => pages.add(page),
44
+ registerAction: (method, handler) => actions.add({ method, handler }),
45
+ });
46
+ });
49
47
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,EAAE;AACF,+CAA+C;AAC/C,iBAAiB;AACjB,mCAAmC;AAmPnC;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,MAAM,SAAS,GAAG,GAAG,CAAC,EAAE,IAAI,SAAS,CAAC;IACtC,OAAO;QACL,YAAY,CAAC,IAAe;YAC1B,OAAO,GAAG,CAAC,WAAW,CAAe,cAAc,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;QACjG,CAAC;QACD,IAAI,GAAG;YACL,OAAO,GAAG,CAAC,UAAU,CAAe,cAAc,CAAC,CAAC;QACtD,CAAC;KACF,CAAC;AACJ,CAAC;AAoDD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAiC,MAAM,CAAC,MAAM,CAAC;IACpF,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE;IACvC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;IACtC,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;IAC1C,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;IAC1C,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;IACtC,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE;IAClD,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;IACxC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;IACzC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;IACvC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;IACzC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;IACzC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;IAC1C,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;IACzC,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;IAC5C,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;IAC5C,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;IACvC,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;CAC5C,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,EAAE;AACF,iDAAiD;AACjD,6BAA6B;AAI7B,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAiQxD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAiC,MAAM,CAAC,MAAM,CAAC;IACpF,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE;IACvC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;IACtC,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;IAC1C,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;IAC1C,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;IACtC,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE;IAClD,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;IACxC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;IACzC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;IACvC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;IACzC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;IACzC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;IAC1C,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;IACzC,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;IAC5C,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;IAC5C,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;IACvC,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;CAC5C,CAAC,CAAC;AAeH,+CAA+C;AAC/C,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAsB,cAAc,CAAC,CAAC;AAY9E,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAA2B,cAAc,EAAE,IAAI,CAAC,EAAE;IACxF,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAY;QACtC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;QACrB,QAAQ,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;KACjE,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAkD;QAC9E,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM;QAC5B,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;KAC9F,CAAC,CAAC;IACH,OAAO,UAAU,CAAC,IAAI,EAAE;QACtB,YAAY,EAAE,CAAC,IAAe,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;QAClD,cAAc,EAAE,CAAC,MAAc,EAAE,OAA2B,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;KAClG,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aalis/api-webui",
3
- "version": "0.9.3",
3
+ "version": "0.11.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -19,19 +19,16 @@
19
19
  "dist"
20
20
  ],
21
21
  "dependencies": {
22
- "@aalis/api-authority": ">=0.5.0 <1.0.0",
23
- "@aalis/schema-config": ">=0.9.0 <1.0.0"
22
+ "@aalis/api-authority": ">=0.10.0 <1.0.0",
23
+ "@aalis/schema-config": ">=0.13.0 <1.0.0"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@types/node": "^22.0.0",
27
27
  "typescript": "^5.7.0",
28
- "@aalis/core": "0.14.0"
29
- },
30
- "aalis": {
31
- "types": true
28
+ "@aalis/core": "0.18.0"
32
29
  },
33
30
  "peerDependencies": {
34
- "@aalis/core": ">=0.2.0 <1.0.0"
31
+ "@aalis/core": ">=0.18.0 <1.0.0"
35
32
  },
36
33
  "keywords": [
37
34
  "aalis",