@nocobase/plugin-client 2.2.0-beta.8 → 2.3.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/externalVersion.js +5 -5
- package/dist/locale/en-US.json +4 -0
- package/dist/locale/index.js +2 -1
- package/dist/locale/zh-CN.json +4 -0
- package/dist/node_modules/cronstrue/package.json +1 -1
- package/dist/server/appPortals.d.ts +33 -0
- package/dist/server/appPortals.js +168 -0
- package/dist/server/cron.js +5 -3
- package/dist/server/server.js +8 -1
- package/package.json +2 -2
package/dist/externalVersion.js
CHANGED
|
@@ -10,13 +10,13 @@
|
|
|
10
10
|
module.exports = {
|
|
11
11
|
"react": "18.2.0",
|
|
12
12
|
"react-i18next": "11.18.6",
|
|
13
|
-
"@nocobase/client": "2.
|
|
13
|
+
"@nocobase/client": "2.3.0-alpha.1",
|
|
14
14
|
"antd": "5.24.2",
|
|
15
15
|
"@ant-design/icons": "5.6.1",
|
|
16
16
|
"@formily/react": "2.3.7",
|
|
17
|
-
"@nocobase/utils": "2.
|
|
17
|
+
"@nocobase/utils": "2.3.0-alpha.1",
|
|
18
18
|
"lodash": "4.18.1",
|
|
19
|
-
"@nocobase/database": "2.
|
|
20
|
-
"@nocobase/client-v2": "2.
|
|
21
|
-
"@nocobase/server": "2.
|
|
19
|
+
"@nocobase/database": "2.3.0-alpha.1",
|
|
20
|
+
"@nocobase/client-v2": "2.3.0-alpha.1",
|
|
21
|
+
"@nocobase/server": "2.3.0-alpha.1"
|
|
22
22
|
};
|
package/dist/locale/en-US.json
CHANGED
|
@@ -205,6 +205,7 @@
|
|
|
205
205
|
"Block templates": "Block templates",
|
|
206
206
|
"Block title": "Block title",
|
|
207
207
|
"Menu linkage rules": "Menu linkage rules",
|
|
208
|
+
"Tab linkage rules": "Tab linkage rules",
|
|
208
209
|
"Built-in flow": "Specific flow",
|
|
209
210
|
"Built-in flow step": "Specific flow step",
|
|
210
211
|
"Block type": "Block type",
|
|
@@ -874,6 +875,7 @@
|
|
|
874
875
|
"Move up": "Move up",
|
|
875
876
|
"Move {{title}} to": "Move {{title}} to",
|
|
876
877
|
"Multiple": "Multiple",
|
|
878
|
+
"Multiple of": "Multiple of",
|
|
877
879
|
"Multiple select": "Multiple select",
|
|
878
880
|
"Multiply by": "Multiply by",
|
|
879
881
|
"Must be 1-50 characters in length (excluding @.<>\"'/)": "Must be 1-50 characters in length (excluding @.<>\"'/)",
|
|
@@ -907,6 +909,7 @@
|
|
|
907
909
|
"No blocks to connect": "No blocks to connect",
|
|
908
910
|
"No camera device detected": "No camera device detected",
|
|
909
911
|
"No configuration available.": "No configuration available.",
|
|
912
|
+
"No configured entries": "No configured entries",
|
|
910
913
|
"No available data currently": "No available data currently",
|
|
911
914
|
"No data": "No data",
|
|
912
915
|
"No event flows": "No event flows",
|
|
@@ -1258,6 +1261,7 @@
|
|
|
1258
1261
|
"Set block state": "Set block state",
|
|
1259
1262
|
"Set button state": "Set button state",
|
|
1260
1263
|
"Set menu item state": "Set menu item state",
|
|
1264
|
+
"Set tab state": "Set tab state",
|
|
1261
1265
|
"Set condition": "Set condition",
|
|
1262
1266
|
"Set data loading mode": "Set data loading mode",
|
|
1263
1267
|
"Set data scope": "Set data scope",
|
package/dist/locale/index.js
CHANGED
|
@@ -163,7 +163,8 @@ const languageCodes = {
|
|
|
163
163
|
"tk-TK": { label: "Turkmen" },
|
|
164
164
|
"tr-TR": { label: "T\xFCrk\xE7e" },
|
|
165
165
|
"uk-UA": { label: "\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430" },
|
|
166
|
-
"ur-PK": { label: "
|
|
166
|
+
"ur-PK": { label: "\u0627\u0631\u062F\u0648" },
|
|
167
|
+
"uz-UZ": { label: "O\u02BBzbekcha" },
|
|
167
168
|
"vi-VN": { label: "Ti\u1EBFng Vi\u1EC7t" },
|
|
168
169
|
"zh-CN": { label: "\u7B80\u4F53\u4E2D\u6587" },
|
|
169
170
|
"zh-HK": { label: "\u7E41\u9AD4\u4E2D\u6587\uFF08\u9999\u6E2F\uFF09" },
|
package/dist/locale/zh-CN.json
CHANGED
|
@@ -205,6 +205,7 @@
|
|
|
205
205
|
"Block templates": "区块模板",
|
|
206
206
|
"Block title": "区块标题",
|
|
207
207
|
"Menu linkage rules": "菜单联动规则",
|
|
208
|
+
"Tab linkage rules": "标签页联动规则",
|
|
208
209
|
"Block type": "区块类型",
|
|
209
210
|
"Blocks": "区块",
|
|
210
211
|
"Blue": "拂晓蓝",
|
|
@@ -905,6 +906,7 @@
|
|
|
905
906
|
"No blocks to connect": "没有可连接的区块",
|
|
906
907
|
"No camera device detected": "未检测到摄像头设备",
|
|
907
908
|
"No configuration available.": "无可配置项。",
|
|
909
|
+
"No configured entries": "未配置入口",
|
|
908
910
|
"No available data currently": "当前无可用数据",
|
|
909
911
|
"No data": "暂无数据",
|
|
910
912
|
"No event flows": "暂无事件流",
|
|
@@ -1258,6 +1260,7 @@
|
|
|
1258
1260
|
"Set block state": "设置区块状态",
|
|
1259
1261
|
"Set button state": "设置按钮状态",
|
|
1260
1262
|
"Set menu item state": "设置菜单项状态",
|
|
1263
|
+
"Set tab state": "设置标签页状态",
|
|
1261
1264
|
"Set condition": "设置条件",
|
|
1262
1265
|
"Set data loading mode": "设置数据加载方式",
|
|
1263
1266
|
"Set data scope": "设置数据范围",
|
|
@@ -1633,6 +1636,7 @@
|
|
|
1633
1636
|
"Enable select action": "启用选择操作",
|
|
1634
1637
|
"Enable remove action": "启用移除操作",
|
|
1635
1638
|
"Multiple": "多选",
|
|
1639
|
+
"Multiple of": "多倍数",
|
|
1636
1640
|
"Custom column width": "自定义列宽度",
|
|
1637
1641
|
"The block is hidden and only visible when the UI Editor is active": "当前区块已被隐藏,仅配置状态下显示",
|
|
1638
1642
|
"The field is hidden and only visible when the UI Editor is active": "当前字段已被隐藏,仅配置状态下显示",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"cronstrue","title":"cRonstrue","version":"2.47.0","description":"Convert cron expressions into human readable descriptions","author":"Brady Holt","license":"MIT","bugs":{"url":"https://github.com/bradymholt/cronstrue/issues"},"homepage":"https://github.com/bradymholt/cronstrue","keywords":["cron","cronjob","crontab","schedule","parser","cron expression","cron description","pretty cron","cron for humans","cron translated","cron english","cron schedule","cron english","cron schedule"],"main":"dist/cronstrue.js","bin":{"cronstrue":"bin/cli.js"},"typings":"dist/cronstrue.d.ts","files":["dist/","locales/","i18n.js","i18n.d.ts"],"repository":{"type":"git","url":"git+https://github.com/bradymholt/cronstrue.git"},"publishConfig":{"access":"public"},"prettier":{"printWidth":120},"devDependencies":{"@types/chai":"^4.2.11","@types/mocha":"^8.0.0","chai":"^4.2.0","handlebars":"^4.7.6","marked":"^4.0.10","mocha":"^10.1.0","pixl-xml":"^1.0.13","prettier":"^2.1.1","terser-webpack-plugin":"^5.3.1","ts-loader":"^9.2.6","ts-node":"^10.5.0","typescript":"^4.6.2","webpack":"^5.69.1","webpack-cli":"^4.9.2","xml2js":"^0.5.0"},"scripts":{"start":"npm run build","build":"npx tsc -p ./src --emitDeclarationOnly","test":"npx mocha --reporter spec --require ts-node/register \"./test/**/*.ts\"","prepublishOnly":"rm -rf ./dist && ./node_modules/webpack-cli/bin/cli.js && git add -A"},"dependencies":{},"_lastModified":"2026-
|
|
1
|
+
{"name":"cronstrue","title":"cRonstrue","version":"2.47.0","description":"Convert cron expressions into human readable descriptions","author":"Brady Holt","license":"MIT","bugs":{"url":"https://github.com/bradymholt/cronstrue/issues"},"homepage":"https://github.com/bradymholt/cronstrue","keywords":["cron","cronjob","crontab","schedule","parser","cron expression","cron description","pretty cron","cron for humans","cron translated","cron english","cron schedule","cron english","cron schedule"],"main":"dist/cronstrue.js","bin":{"cronstrue":"bin/cli.js"},"typings":"dist/cronstrue.d.ts","files":["dist/","locales/","i18n.js","i18n.d.ts"],"repository":{"type":"git","url":"git+https://github.com/bradymholt/cronstrue.git"},"publishConfig":{"access":"public"},"prettier":{"printWidth":120},"devDependencies":{"@types/chai":"^4.2.11","@types/mocha":"^8.0.0","chai":"^4.2.0","handlebars":"^4.7.6","marked":"^4.0.10","mocha":"^10.1.0","pixl-xml":"^1.0.13","prettier":"^2.1.1","terser-webpack-plugin":"^5.3.1","ts-loader":"^9.2.6","ts-node":"^10.5.0","typescript":"^4.6.2","webpack":"^5.69.1","webpack-cli":"^4.9.2","xml2js":"^0.5.0"},"scripts":{"start":"npm run build","build":"npx tsc -p ./src --emitDeclarationOnly","test":"npx mocha --reporter spec --require ts-node/register \"./test/**/*.ts\"","prepublishOnly":"rm -rf ./dist && ./node_modules/webpack-cli/bin/cli.js && git add -A"},"dependencies":{},"_lastModified":"2026-07-16T12:56:49.959Z"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
import type { AppStatus } from '@nocobase/server';
|
|
10
|
+
export type AppPortalAppStatus = AppStatus | Record<string, AppStatus> | null;
|
|
11
|
+
export type AppPortalAppItem = {
|
|
12
|
+
name: string;
|
|
13
|
+
title?: string | null;
|
|
14
|
+
icon?: string | null;
|
|
15
|
+
cname?: string | null;
|
|
16
|
+
ssoEnabled?: boolean;
|
|
17
|
+
target?: string;
|
|
18
|
+
status?: AppPortalAppStatus;
|
|
19
|
+
};
|
|
20
|
+
export type AppPortalItem = {
|
|
21
|
+
uid?: string | null;
|
|
22
|
+
appName: string;
|
|
23
|
+
title?: string | null;
|
|
24
|
+
icon?: string | null;
|
|
25
|
+
routePath: string;
|
|
26
|
+
layout?: string | null;
|
|
27
|
+
defaultPortal?: boolean;
|
|
28
|
+
};
|
|
29
|
+
export type StoredAppPortalItem = Omit<AppPortalItem, 'appName' | 'defaultPortal'>;
|
|
30
|
+
export declare function listAppPortals(currentAppName?: string | null): Promise<{
|
|
31
|
+
apps: AppPortalAppItem[];
|
|
32
|
+
portals: AppPortalItem[];
|
|
33
|
+
}>;
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
var __defProp = Object.defineProperty;
|
|
11
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
12
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
13
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
14
|
+
var __export = (target, all) => {
|
|
15
|
+
for (var name in all)
|
|
16
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
17
|
+
};
|
|
18
|
+
var __copyProps = (to, from, except, desc) => {
|
|
19
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
20
|
+
for (let key of __getOwnPropNames(from))
|
|
21
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
22
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
23
|
+
}
|
|
24
|
+
return to;
|
|
25
|
+
};
|
|
26
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
27
|
+
var appPortals_exports = {};
|
|
28
|
+
__export(appPortals_exports, {
|
|
29
|
+
listAppPortals: () => listAppPortals
|
|
30
|
+
});
|
|
31
|
+
module.exports = __toCommonJS(appPortals_exports);
|
|
32
|
+
var import_server = require("@nocobase/server");
|
|
33
|
+
const MAIN_APP_NAME = "main";
|
|
34
|
+
const MULTI_PORTAL_MANIFEST_NAMESPACE = "multi-portal";
|
|
35
|
+
const DEFAULT_PORTALS = [
|
|
36
|
+
{
|
|
37
|
+
uid: "__default_admin__",
|
|
38
|
+
title: "Admin",
|
|
39
|
+
icon: "DesktopOutlined",
|
|
40
|
+
routePath: "/admin",
|
|
41
|
+
layout: "desktop",
|
|
42
|
+
defaultPortal: true
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
uid: "__default_mobile__",
|
|
46
|
+
title: "Mobile",
|
|
47
|
+
icon: "MobileOutlined",
|
|
48
|
+
routePath: "/mobile",
|
|
49
|
+
layout: "mobile",
|
|
50
|
+
defaultPortal: true
|
|
51
|
+
}
|
|
52
|
+
];
|
|
53
|
+
function getCname(cname) {
|
|
54
|
+
const trimmed = cname == null ? void 0 : cname.trim();
|
|
55
|
+
return trimmed || null;
|
|
56
|
+
}
|
|
57
|
+
function getAppName(appModel) {
|
|
58
|
+
return typeof appModel.name === "string" && appModel.name ? appModel.name : null;
|
|
59
|
+
}
|
|
60
|
+
function getAppStatus(appName, statuses) {
|
|
61
|
+
return statuses[appName] ?? null;
|
|
62
|
+
}
|
|
63
|
+
function shouldUseCnameVisitUrl(options) {
|
|
64
|
+
const { cname, ssoEnabled, ssoCnameEnabled } = options;
|
|
65
|
+
return Boolean(cname && (!ssoEnabled || ssoCnameEnabled));
|
|
66
|
+
}
|
|
67
|
+
function toAppPortalAppItem(appModel, appSsoIssuer, target) {
|
|
68
|
+
var _a, _b, _c, _d;
|
|
69
|
+
const name = getAppName(appModel);
|
|
70
|
+
if (!name || name === MAIN_APP_NAME) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
const cname = getCname(appModel.cname);
|
|
74
|
+
const ssoEnabled = ((_b = (_a = appModel.options) == null ? void 0 : _a.sso) == null ? void 0 : _b.enabled) === true;
|
|
75
|
+
const ssoCnameEnabled = Boolean(((_d = (_c = appModel.options) == null ? void 0 : _c.sso) == null ? void 0 : _d.issuer) || appSsoIssuer);
|
|
76
|
+
return {
|
|
77
|
+
name,
|
|
78
|
+
title: appModel.title || name,
|
|
79
|
+
icon: appModel.icon || null,
|
|
80
|
+
cname: shouldUseCnameVisitUrl({ cname, ssoEnabled, ssoCnameEnabled }) ? cname : null,
|
|
81
|
+
ssoEnabled,
|
|
82
|
+
target
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function getPortalKey(item) {
|
|
86
|
+
return item.uid ? `${item.appName}:${item.uid}` : `${item.appName}:${item.routePath}`;
|
|
87
|
+
}
|
|
88
|
+
function addPortal(portals, item) {
|
|
89
|
+
if (!item.appName || !item.routePath) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
portals.set(getPortalKey(item), item);
|
|
93
|
+
}
|
|
94
|
+
function addDefaultPortals(portals, appNames) {
|
|
95
|
+
for (const appName of appNames) {
|
|
96
|
+
for (const portal of DEFAULT_PORTALS) {
|
|
97
|
+
addPortal(portals, {
|
|
98
|
+
...portal,
|
|
99
|
+
appName
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function addStoredPortals(portals, appName, storedPortals) {
|
|
105
|
+
if (!Array.isArray(storedPortals)) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
for (const portal of storedPortals) {
|
|
109
|
+
if (!portal || typeof portal.routePath !== "string" || !portal.routePath) {
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
addPortal(portals, {
|
|
113
|
+
uid: typeof portal.uid === "string" ? portal.uid : null,
|
|
114
|
+
appName,
|
|
115
|
+
title: typeof portal.title === "string" ? portal.title : null,
|
|
116
|
+
icon: typeof portal.icon === "string" ? portal.icon : null,
|
|
117
|
+
routePath: portal.routePath,
|
|
118
|
+
layout: typeof portal.layout === "string" ? portal.layout : null
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
async function listAppPortals(currentAppName) {
|
|
123
|
+
const supervisor = import_server.AppSupervisor.getInstance();
|
|
124
|
+
const appModels = await supervisor.listAppModels();
|
|
125
|
+
const apps = /* @__PURE__ */ new Map();
|
|
126
|
+
const appNames = /* @__PURE__ */ new Set([MAIN_APP_NAME]);
|
|
127
|
+
const target = currentAppName === MAIN_APP_NAME ? "_blank" : void 0;
|
|
128
|
+
const appSsoIssuer = supervisor.getAppSsoIssuer();
|
|
129
|
+
const appItems = appModels.map((appModel) => toAppPortalAppItem(appModel, appSsoIssuer, target));
|
|
130
|
+
if (currentAppName) {
|
|
131
|
+
appNames.add(currentAppName);
|
|
132
|
+
}
|
|
133
|
+
for (const app of appItems) {
|
|
134
|
+
if (!app) {
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
apps.set(app.name, app);
|
|
138
|
+
appNames.add(app.name);
|
|
139
|
+
}
|
|
140
|
+
if (appNames.size > 1 && !apps.has(MAIN_APP_NAME)) {
|
|
141
|
+
apps.set(MAIN_APP_NAME, {
|
|
142
|
+
name: MAIN_APP_NAME,
|
|
143
|
+
title: "Main",
|
|
144
|
+
icon: null
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
const appStatuses = await supervisor.getAppsStatuses(Array.from(appNames));
|
|
148
|
+
for (const app of apps.values()) {
|
|
149
|
+
app.status = getAppStatus(app.name, appStatuses);
|
|
150
|
+
}
|
|
151
|
+
const manifests = await supervisor.getAppManifests(
|
|
152
|
+
MULTI_PORTAL_MANIFEST_NAMESPACE,
|
|
153
|
+
Array.from(appNames)
|
|
154
|
+
);
|
|
155
|
+
const portals = /* @__PURE__ */ new Map();
|
|
156
|
+
addDefaultPortals(portals, appNames);
|
|
157
|
+
for (const appName of appNames) {
|
|
158
|
+
addStoredPortals(portals, appName, manifests[appName]);
|
|
159
|
+
}
|
|
160
|
+
return {
|
|
161
|
+
apps: [...apps.values()],
|
|
162
|
+
portals: [...portals.values()]
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
166
|
+
0 && (module.exports = {
|
|
167
|
+
listAppPortals
|
|
168
|
+
});
|
package/dist/server/cron.js
CHANGED
|
@@ -32,10 +32,12 @@ module.exports = __toCommonJS(cron_exports);
|
|
|
32
32
|
var import_utils = require("@nocobase/utils");
|
|
33
33
|
var import_path = require("path");
|
|
34
34
|
const getCronLocale = (lang) => {
|
|
35
|
-
const
|
|
36
|
-
const files =
|
|
35
|
+
const candidates = Array.from(/* @__PURE__ */ new Set([lang, lang.replace("-", "_")]));
|
|
36
|
+
const files = candidates.map((candidate) => (0, import_path.resolve)(__dirname, `./../locale/cron/${candidate}`));
|
|
37
37
|
if (process.env.APP_ENV !== "production") {
|
|
38
|
-
|
|
38
|
+
for (const candidate of candidates) {
|
|
39
|
+
files.push(`@nocobase/client/src/locale/cron/${candidate}`, `@nocobase/client/lib/locale/cron/${candidate}`);
|
|
40
|
+
}
|
|
39
41
|
}
|
|
40
42
|
for (const file of files) {
|
|
41
43
|
try {
|
package/dist/server/server.js
CHANGED
|
@@ -45,6 +45,7 @@ var import_utils = require("@nocobase/utils");
|
|
|
45
45
|
var import_lodash = __toESM(require("lodash"));
|
|
46
46
|
var process = __toESM(require("node:process"));
|
|
47
47
|
var import_path = require("path");
|
|
48
|
+
var import_appPortals = require("./appPortals");
|
|
48
49
|
var import_antd = require("./antd");
|
|
49
50
|
var import_cron = require("./cron");
|
|
50
51
|
var import_cronstrue = require("./cronstrue");
|
|
@@ -80,6 +81,7 @@ class PluginClientServer extends import_server.Plugin {
|
|
|
80
81
|
});
|
|
81
82
|
this.app.acl.allow("app", "getLang");
|
|
82
83
|
this.app.acl.allow("app", "getInfo");
|
|
84
|
+
this.app.acl.allow("app", "getPortals", "loggedIn");
|
|
83
85
|
this.app.acl.registerSnippet({
|
|
84
86
|
name: "app",
|
|
85
87
|
actions: ["app:restart", "app:refresh", "app:clearCache", "app:publishEvent"]
|
|
@@ -128,6 +130,11 @@ class PluginClientServer extends import_server.Plugin {
|
|
|
128
130
|
};
|
|
129
131
|
await next();
|
|
130
132
|
},
|
|
133
|
+
getPortals: async (ctx, next) => {
|
|
134
|
+
var _a;
|
|
135
|
+
ctx.body = await (0, import_appPortals.listAppPortals)((_a = ctx.app) == null ? void 0 : _a.name);
|
|
136
|
+
await next();
|
|
137
|
+
},
|
|
131
138
|
async clearCache(ctx, next) {
|
|
132
139
|
await ctx.cache.reset();
|
|
133
140
|
await next();
|
|
@@ -153,7 +160,7 @@ class PluginClientServer extends import_server.Plugin {
|
|
|
153
160
|
}
|
|
154
161
|
const { id, username } = ((_c = ctx.auth) == null ? void 0 : _c.user) ?? {};
|
|
155
162
|
const user = id ? { id, username } : void 0;
|
|
156
|
-
const eventName = `${command}
|
|
163
|
+
const eventName = `${command.replaceAll(":", ".")}.${plugin}`;
|
|
157
164
|
try {
|
|
158
165
|
await ctx.app.eventQueue.publish(eventName, {
|
|
159
166
|
plugin,
|
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"description": "Provides a client interface for the NocoBase server",
|
|
7
7
|
"description.ru-RU": "Предоставляет клиентский интерфейс для сервера NocoBase",
|
|
8
8
|
"description.zh-CN": "为 NocoBase 服务端提供客户端界面",
|
|
9
|
-
"version": "2.
|
|
9
|
+
"version": "2.3.0-alpha.1",
|
|
10
10
|
"main": "./dist/server/index.js",
|
|
11
11
|
"license": "Apache-2.0",
|
|
12
12
|
"devDependencies": {
|
|
@@ -23,5 +23,5 @@
|
|
|
23
23
|
"@nocobase/test": "2.x",
|
|
24
24
|
"@nocobase/utils": "2.x"
|
|
25
25
|
},
|
|
26
|
-
"gitHead": "
|
|
26
|
+
"gitHead": "2377df8ceb12549149017f7f14a61207bf6e49a2"
|
|
27
27
|
}
|