@aalis/plugin-webui-server 0.15.0 → 0.16.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.
Files changed (79) hide show
  1. package/dist/attention.d.ts +2 -2
  2. package/dist/attention.d.ts.map +1 -1
  3. package/dist/attention.js +5 -4
  4. package/dist/attention.js.map +1 -1
  5. package/dist/auth.d.ts +13 -4
  6. package/dist/auth.d.ts.map +1 -1
  7. package/dist/auth.js +77 -27
  8. package/dist/auth.js.map +1 -1
  9. package/dist/client-switch-page.d.ts +25 -3
  10. package/dist/client-switch-page.d.ts.map +1 -1
  11. package/dist/client-switch-page.js +49 -19
  12. package/dist/client-switch-page.js.map +1 -1
  13. package/dist/gate.d.ts.map +1 -1
  14. package/dist/gate.js +2 -1
  15. package/dist/gate.js.map +1 -1
  16. package/dist/html.d.ts +15 -0
  17. package/dist/html.d.ts.map +1 -0
  18. package/dist/html.js +38 -0
  19. package/dist/html.js.map +1 -0
  20. package/dist/index.d.ts +4 -1
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +223 -244
  23. package/dist/index.js.map +1 -1
  24. package/dist/layout.d.ts +2 -1
  25. package/dist/layout.d.ts.map +1 -1
  26. package/dist/layout.js +5 -3
  27. package/dist/layout.js.map +1 -1
  28. package/dist/locales/en.d.ts +191 -0
  29. package/dist/locales/en.d.ts.map +1 -0
  30. package/dist/locales/en.js +191 -0
  31. package/dist/locales/en.js.map +1 -0
  32. package/dist/localize.d.ts +24 -0
  33. package/dist/localize.d.ts.map +1 -0
  34. package/dist/localize.js +68 -0
  35. package/dist/localize.js.map +1 -0
  36. package/dist/page-check.d.ts.map +1 -1
  37. package/dist/page-check.js +32 -25
  38. package/dist/page-check.js.map +1 -1
  39. package/dist/pages.d.ts +9 -7
  40. package/dist/pages.d.ts.map +1 -1
  41. package/dist/pages.js +77 -61
  42. package/dist/pages.js.map +1 -1
  43. package/dist/route.d.ts +5 -2
  44. package/dist/route.d.ts.map +1 -1
  45. package/dist/route.js +5 -2
  46. package/dist/route.js.map +1 -1
  47. package/dist/routes/files.d.ts.map +1 -1
  48. package/dist/routes/files.js +4 -3
  49. package/dist/routes/files.js.map +1 -1
  50. package/dist/routes/frames.js +3 -3
  51. package/dist/routes/frames.js.map +1 -1
  52. package/dist/routes/i18n.d.ts +20 -0
  53. package/dist/routes/i18n.d.ts.map +1 -0
  54. package/dist/routes/i18n.js +78 -0
  55. package/dist/routes/i18n.js.map +1 -0
  56. package/dist/routes/marketplace.d.ts.map +1 -1
  57. package/dist/routes/marketplace.js +27 -29
  58. package/dist/routes/marketplace.js.map +1 -1
  59. package/dist/routes/media.d.ts +3 -0
  60. package/dist/routes/media.d.ts.map +1 -1
  61. package/dist/routes/media.js +29 -26
  62. package/dist/routes/media.js.map +1 -1
  63. package/dist/routes/pages.d.ts +4 -2
  64. package/dist/routes/pages.d.ts.map +1 -1
  65. package/dist/routes/pages.js +36 -18
  66. package/dist/routes/pages.js.map +1 -1
  67. package/dist/routes/plugins.d.ts +5 -9
  68. package/dist/routes/plugins.d.ts.map +1 -1
  69. package/dist/routes/plugins.js +114 -129
  70. package/dist/routes/plugins.js.map +1 -1
  71. package/dist/routes/proxy.d.ts +3 -2
  72. package/dist/routes/proxy.d.ts.map +1 -1
  73. package/dist/routes/proxy.js +62 -41
  74. package/dist/routes/proxy.js.map +1 -1
  75. package/dist/texts.d.ts +381 -0
  76. package/dist/texts.d.ts.map +1 -0
  77. package/dist/texts.js +194 -0
  78. package/dist/texts.js.map +1 -0
  79. package/package.json +26 -23
@@ -2,35 +2,55 @@
2
2
  // routes/pages.ts — 声明式页面、会话面板与布局记录的 REST 路由
3
3
  //
4
4
  // 路径与返回形状见 api-webui 的 page.ts。页面的数据源与动作要把调用者交给插件,这两条路由自己解析身份(与 gate 同一判定);
5
- // 其余用 gate。闸门与校验在 pages.ts,这里只把请求交过去、把结果写回。布局记录存在插件数据里,存储服务不在时回 503。
5
+ // 其余用 gate。闸门与校验在 pages.ts,这里只把请求交过去、把结果连同它要的渲染选项写回。插件前端的字典是这一页所属插件
6
+ // 的(插件名取实例 id 第一个「:」之前的部分),原样交出。布局记录存在插件数据里,存储服务不在时回 503。
6
7
  // ============================================================
8
+ import { parseInstanceId } from '@aalis/core';
7
9
  import { LayoutFull, parseLayoutOperation } from '../layout.js';
10
+ import { renderWith, skipSchemaDefaults } from '../localize.js';
8
11
  import { route } from '../route.js';
12
+ import { t } from '../texts.js';
9
13
  export function registerPageRoutes(expressApp, deps, identify, gate) {
10
14
  const { registry, layout } = deps;
11
- const reply = (res, { status, body }) => res.status(status).json(body);
12
- const forbidden = (res) => res.status(403).json({ error: '需要 owner 权限' });
15
+ const reply = (res, { status, body, render }) => {
16
+ if (render)
17
+ renderWith(res, render);
18
+ res.status(status).json(body);
19
+ };
20
+ const forbidden = (res) => res.status(403).json({ error: t('ownerRequired') });
13
21
  route(expressApp, 'GET /api/pages', gate(), (_req, res) => {
14
- res.json({ pages: registry.views() });
22
+ const pages = registry.views();
23
+ const inputs = pages.flatMap(page => Object.values(page.actions ?? {}).map(action => action.input));
24
+ renderWith(res, { skip: skipSchemaDefaults(inputs) });
25
+ res.json({ pages });
15
26
  });
16
27
  route(expressApp, 'GET /api/session-pages', gate(), async (req, res) => {
17
28
  reply(res, await registry.panelPages(req.query.sessionId));
18
29
  });
30
+ route(expressApp, 'GET /api/pages/:instance/:pageKey/texts', gate(), (req, res) => {
31
+ const { instance, pageKey } = req.params;
32
+ if (!registry.placementOf({ instance, pageKey })) {
33
+ return res.status(404).json({ error: t('pageMissing', { page: pageKey, instance }) });
34
+ }
35
+ // 字典是原样数据:译文表的键可能恰好是文字对象的那几个
36
+ renderWith(res, { skip: () => true });
37
+ res.json(deps.texts(parseInstanceId(instance).moduleName));
38
+ });
19
39
  route(expressApp, 'GET /api/pages/:instance/:pageKey/data/:componentId', async (req, res) => {
20
40
  const caller = identify(req);
21
41
  if (!caller)
22
42
  return forbidden(res);
23
43
  const { instance, pageKey, componentId } = req.params;
24
- reply(res, await registry.data(instance, pageKey, componentId, req.query, caller));
44
+ reply(res, await registry.data(instance, pageKey, componentId, req.query, { caller }));
25
45
  });
26
46
  route(expressApp, 'POST /api/pages/:instance/:pageKey/actions/:action', async (req, res) => {
27
47
  const caller = identify(req);
28
48
  if (!caller)
29
49
  return forbidden(res);
30
50
  const { instance, pageKey, action } = req.params;
31
- reply(res, await registry.act(instance, pageKey, action, req.body, caller, req.socket.remoteAddress ?? '未知'));
51
+ reply(res, await registry.act(instance, pageKey, action, req.body, { caller }, req.socket.remoteAddress ?? '未知'));
32
52
  });
33
- const storageMissing = (res) => res.status(503).json({ error: '存储服务不在,布局记录读写不了' });
53
+ const storageMissing = (res) => res.status(503).json({ error: t('noStorageLayout') });
34
54
  route(expressApp, 'GET /api/layout', gate(), async (_req, res) => {
35
55
  if (!deps.storageReady())
36
56
  return storageMissing(res);
@@ -39,7 +59,7 @@ export function registerPageRoutes(expressApp, deps, identify, gate) {
39
59
  }
40
60
  catch (err) {
41
61
  deps.logger.warn('读取布局记录失败:', err);
42
- res.status(500).json({ error: '读取布局记录失败' });
62
+ res.status(500).json({ error: t('layoutReadFailed') });
43
63
  }
44
64
  });
45
65
  route(expressApp, 'POST /api/layout', gate(), async (req, res) => {
@@ -47,22 +67,20 @@ export function registerPageRoutes(expressApp, deps, identify, gate) {
47
67
  return storageMissing(res);
48
68
  const operation = parseLayoutOperation(req.body);
49
69
  if (!operation) {
50
- return res.status(400).json({
51
- error: '操作要是 { op, page } 或 { op, tab }:pin、unpin、move-up、move-down 带 page({ instance, pageKey }),' +
52
- 'open-tab、close-tab、tab-up、tab-down 带 tab({ host } 或 { instance, pageKey }),' +
53
- 'remove-tab 只带插件标签 tab({ instance, pageKey }),宿主标签只能关闭、不能移出',
54
- });
70
+ return res.status(400).json({ error: t('layoutOpInvalid') });
55
71
  }
56
72
  // 固定与打开插件标签只收此刻登记着、位置对的页面;其余只动记录,所属插件停用时也能改
57
73
  const wanted = operation.op === 'pin'
58
- ? { page: operation.page, placement: 'plugin', refusal: '只有位置为插件详情的页面能固定' }
74
+ ? { page: operation.page, placement: 'plugin', refusal: t('pinPluginOnly') }
59
75
  : operation.op === 'open-tab' && !('host' in operation.tab)
60
- ? { page: operation.tab, placement: 'session', refusal: '只有会话面板的页面能在面板里打开' }
76
+ ? { page: operation.tab, placement: 'session', refusal: t('openSessionOnly') }
61
77
  : undefined;
62
78
  if (wanted) {
63
79
  const placement = registry.placementOf(wanted.page);
64
80
  if (!placement) {
65
- return res.status(404).json({ error: `页面 ${wanted.page.pageKey}(${wanted.page.instance})不存在` });
81
+ return res
82
+ .status(404)
83
+ .json({ error: t('pageMissing', { page: wanted.page.pageKey, instance: wanted.page.instance }) });
66
84
  }
67
85
  if (placement !== wanted.placement)
68
86
  return res.status(400).json({ error: wanted.refusal });
@@ -75,11 +93,11 @@ export function registerPageRoutes(expressApp, deps, identify, gate) {
75
93
  }
76
94
  catch (err) {
77
95
  if (err instanceof LayoutFull) {
78
- res.status(409).json({ error: err.message });
96
+ res.status(409).json({ error: err.text });
79
97
  return;
80
98
  }
81
99
  deps.logger.warn('保存布局记录失败:', err);
82
- res.status(500).json({ error: '保存布局记录失败,记录没有改动' });
100
+ res.status(500).json({ error: t('layoutSaveFailed') });
83
101
  }
84
102
  });
85
103
  }
@@ -1 +1 @@
1
- {"version":3,"file":"pages.js","sourceRoot":"","sources":["../../src/routes/pages.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,6CAA6C;AAC7C,EAAE;AACF,4EAA4E;AAC5E,qEAAqE;AACrE,+DAA+D;AAO/D,OAAO,EAAE,UAAU,EAAoB,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAElF,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,MAAM,UAAU,kBAAkB,CAChC,UAA2B,EAC3B,IAOC,EACD,QAA6E,EAC7E,IAAe;IAEf,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAClC,MAAM,KAAK,GAAG,CAAI,GAAwC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAY,EAAE,EAAE,CACxF,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,SAAS,GAAG,CAAC,GAAoC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;IAE3G,KAAK,CAAC,UAAU,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QACxD,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,UAAU,EAAE,wBAAwB,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACrE,KAAK,CAAC,GAAG,EAAE,MAAM,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,UAAU,EAAE,qDAAqD,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QAC1F,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QACtD,KAAK,CAAC,GAAG,EAAE,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,UAAU,EAAE,oDAAoD,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACzF,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QACjD,KAAK,CAAC,GAAG,EAAE,MAAM,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC,CAAC;IAChH,CAAC,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,CAAC,GAAoC,EAAE,EAAE,CAC9D,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAErD,KAAK,CAAC,UAAU,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QAC/D,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAAE,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;QACrD,IAAI,CAAC;YACH,GAAG,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;YACnC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,UAAU,EAAE,kBAAkB,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QAC/D,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAAE,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC1B,KAAK,EACH,4FAA4F;oBAC5F,6EAA6E;oBAC7E,4DAA4D;aAC/D,CAAC,CAAC;QACL,CAAC;QACD,4CAA4C;QAC5C,MAAM,MAAM,GACV,SAAS,CAAC,EAAE,KAAK,KAAK;YACpB,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,EAAE;YAC3E,CAAC,CAAC,SAAS,CAAC,EAAE,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC,GAAG,CAAC;gBACzD,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,kBAAkB,EAAE;gBAC5E,CAAC,CAAC,SAAS,CAAC;QAClB,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACpD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,MAAM,EAAE,CAAC,CAAC;YAClG,CAAC;YACD,IAAI,SAAS,KAAK,MAAM,CAAC,SAAS;gBAAE,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7F,CAAC;QACD,IAAI,CAAC;YACH,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC3D,IAAI,OAAO;gBAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;YACnD,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,UAAU,EAAE,CAAC;gBAC9B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC7C,OAAO;YACT,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;YACnC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"pages.js","sourceRoot":"","sources":["../../src/routes/pages.ts"],"names":[],"mappings":"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"}
@@ -4,24 +4,20 @@ import type { PluginSourceService } from '@aalis/api-plugin-source';
4
4
  import type { ToolService } from '@aalis/api-tools';
5
5
  import type { ErrorResponse } from '@aalis/api-webui';
6
6
  import type { AppService, Logger, PluginManagerService, ServiceSelection, Services } from '@aalis/core';
7
+ import { type TextRef } from '@aalis/schema-i18n';
7
8
  import type express from 'express';
8
9
  import type { RouteGate } from '../gate.js';
9
- /**
10
- * 落盘被拒后运行态怎样与文件对齐:插件配置、新建的实例与服务偏好随配置文件热重载(文件里没有配置段的后缀实例会被卸载);
11
- * 启停只在重启时按文件登记。被拒的可能是配置文件,也可能是密钥文件,拒写原因里点了名,这里不指具体哪个文件
12
- */
13
- declare const RECONCILE: {
14
- readonly reload: "修好该文件后会按文件内容重载";
15
- readonly restart: "修好该文件后,重启时以文件内容为准";
16
- };
17
10
  /**
18
11
  * 管理动作改完运行态之后落盘;失败时回 `applied: true` 并返回 false:改动已在运行态生效、只是没写进文件,
19
12
  * 调用方别当成「没改成」去重试。宿主拒写(配置文件有尚未生效的外部修改)回 409,之后以文件为准对账;
20
13
  * 其它失败(权限、磁盘写满等)回 500,文件没变也不会触发重载,改动留在文档里,下一次成功保存时一并写入。
14
+ * `reconcile` 是落盘被拒后运行态怎样与文件对齐:插件配置、新建的实例与服务偏好随配置文件热重载(reload,文件里没有配置段的
15
+ * 后缀实例会被卸载);启停只在重启时按文件登记(restart)。被拒的可能是配置文件,也可能是密钥文件,拒写原因里点了名,
16
+ * 这里不指具体哪个文件。
21
17
  * `outcome` 是动作之后插件没有落在预期状态的说明(如激活失败转 error、仍在激活、保持禁用):落盘也失败时放在回执开头,
22
18
  * 两件事一并说明。
23
19
  */
24
- export declare function saveAfterApply(doc: Pick<HostConfig, 'save'>, res: express.Response<ErrorResponse>, reconcile: keyof typeof RECONCILE, outcome?: string): Promise<boolean>;
20
+ export declare function saveAfterApply(doc: Pick<HostConfig, 'save'>, res: express.Response<ErrorResponse>, reconcile: 'reload' | 'restart', outcome?: TextRef): Promise<boolean>;
25
21
  /** 插件管理 + 全局配置路由用到的能力 */
26
22
  interface PluginRoutesCaps {
27
23
  app: Pick<ServiceSelection<AppService>, 'present' | 'use'>;
@@ -1 +1 @@
1
- {"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/routes/plugins.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,EAAgC,KAAK,UAAU,EAAuB,MAAM,wBAAwB,CAAC;AAC5G,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,oBAAoB,EAAe,gBAAgB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAarH,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAO5C;;;GAGG;AACH,QAAA,MAAM,SAAS;;;CAGL,CAAC;AAEX;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,EAC7B,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,EACpC,SAAS,EAAE,MAAM,OAAO,SAAS,EACjC,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAQlB;AAgFD,yBAAyB;AACzB,UAAU,gBAAgB;IACxB,GAAG,EAAE,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,CAAC;IAC3D,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,CAAC;IACzE,iCAAiC;IACjC,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,CAAC;IACvE,wCAAwC;IACxC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,CAAC;IAClE,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,CAAC;IAC9D,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,CAAC;IACpE,oDAAoD;IACpD,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,CAAC,CAAC;IAC5D,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,QAAQ,IAAI,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACjD,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,8BAA8B;AAC9B,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,CAmnB/G"}
1
+ {"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/routes/plugins.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,EAEL,KAAK,UAAU,EAGhB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EACV,UAAU,EACV,MAAM,EACN,oBAAoB,EAGpB,gBAAgB,EAChB,QAAQ,EACT,MAAM,aAAa,CAAC;AAerB,OAAO,EAAU,KAAK,OAAO,EAAuB,MAAM,oBAAoB,CAAC;AAC/E,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAuB5C;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,EAC7B,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,EACpC,SAAS,EAAE,QAAQ,GAAG,SAAS,EAC/B,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,OAAO,CAAC,CAQlB;AAuED,yBAAyB;AACzB,UAAU,gBAAgB;IACxB,GAAG,EAAE,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,CAAC;IAC3D,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,CAAC;IACzE,iCAAiC;IACjC,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,CAAC;IACvE,wCAAwC;IACxC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,CAAC;IAClE,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,CAAC;IAC9D,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,CAAC;IACpE,oDAAoD;IACpD,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,CAAC,CAAC;IAC5D,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,QAAQ,IAAI,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACjD,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,8BAA8B;AAC9B,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,CAomB/G"}