@next-core/runtime 1.11.0 → 1.12.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/dist/cjs/auth.js +17 -47
- package/dist/cjs/auth.js.map +1 -1
- package/dist/cjs/index.js +8 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/internal/Renderer.js +4 -4
- package/dist/cjs/internal/Renderer.js.map +1 -1
- package/dist/cjs/internal/Router.js +4 -6
- package/dist/cjs/internal/Router.js.map +1 -1
- package/dist/cjs/internal/Runtime.js +2 -0
- package/dist/cjs/internal/Runtime.js.map +1 -1
- package/dist/cjs/internal/compute/evaluate.js +10 -5
- package/dist/cjs/internal/compute/evaluate.js.map +1 -1
- package/dist/cjs/internal/compute/getGeneralGlobals.js +3 -2
- package/dist/cjs/internal/compute/getGeneralGlobals.js.map +1 -1
- package/dist/cjs/internal/matchRoutes.js +2 -2
- package/dist/cjs/internal/matchRoutes.js.map +1 -1
- package/dist/cjs/internal/secret_internals.js +2 -0
- package/dist/cjs/internal/secret_internals.js.map +1 -1
- package/dist/cjs/internal/test_only.js +22 -0
- package/dist/cjs/internal/test_only.js.map +1 -0
- package/dist/esm/auth.js +20 -46
- package/dist/esm/auth.js.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal/Renderer.js +5 -5
- package/dist/esm/internal/Renderer.js.map +1 -1
- package/dist/esm/internal/Router.js +4 -6
- package/dist/esm/internal/Router.js.map +1 -1
- package/dist/esm/internal/Runtime.js +2 -0
- package/dist/esm/internal/Runtime.js.map +1 -1
- package/dist/esm/internal/compute/evaluate.js +11 -6
- package/dist/esm/internal/compute/evaluate.js.map +1 -1
- package/dist/esm/internal/compute/getGeneralGlobals.js +3 -2
- package/dist/esm/internal/compute/getGeneralGlobals.js.map +1 -1
- package/dist/esm/internal/matchRoutes.js +2 -2
- package/dist/esm/internal/matchRoutes.js.map +1 -1
- package/dist/esm/internal/secret_internals.js +2 -0
- package/dist/esm/internal/secret_internals.js.map +1 -1
- package/dist/esm/internal/test_only.js +15 -0
- package/dist/esm/internal/test_only.js.map +1 -0
- package/dist/types/auth.d.ts +8 -19
- package/dist/types/index.d.ts +2 -1
- package/dist/types/internal/Runtime.d.ts +26 -2
- package/dist/types/internal/secret_internals.d.ts +2 -0
- package/dist/types/internal/test_only.d.ts +5 -0
- package/package.json +5 -6
- package/dist/cjs/internal/checkPermissions.js +0 -102
- package/dist/cjs/internal/checkPermissions.js.map +0 -1
- package/dist/cjs/internal/menu/computeMenuData.js +0 -37
- package/dist/cjs/internal/menu/computeMenuData.js.map +0 -1
- package/dist/cjs/internal/menu/constants.js +0 -13
- package/dist/cjs/internal/menu/constants.js.map +0 -1
- package/dist/cjs/internal/menu/fetchMenuById.js +0 -102
- package/dist/cjs/internal/menu/fetchMenuById.js.map +0 -1
- package/dist/cjs/internal/menu/fetchMenuTitle.js +0 -37
- package/dist/cjs/internal/menu/fetchMenuTitle.js.map +0 -1
- package/dist/cjs/internal/menu/getMenusOfStandaloneApp.js +0 -27
- package/dist/cjs/internal/menu/getMenusOfStandaloneApp.js.map +0 -1
- package/dist/cjs/internal/menu/interfaces.js +0 -4
- package/dist/cjs/internal/menu/interfaces.js.map +0 -1
- package/dist/cjs/internal/menu/loadDynamicMenuItems.js +0 -28
- package/dist/cjs/internal/menu/loadDynamicMenuItems.js.map +0 -1
- package/dist/cjs/internal/menu/mergeMenu.js +0 -74
- package/dist/cjs/internal/menu/mergeMenu.js.map +0 -1
- package/dist/cjs/internal/menu/reorderMenuItems.js +0 -20
- package/dist/cjs/internal/menu/reorderMenuItems.js.map +0 -1
- package/dist/esm/internal/checkPermissions.js +0 -107
- package/dist/esm/internal/checkPermissions.js.map +0 -1
- package/dist/esm/internal/menu/computeMenuData.js +0 -38
- package/dist/esm/internal/menu/computeMenuData.js.map +0 -1
- package/dist/esm/internal/menu/constants.js +0 -4
- package/dist/esm/internal/menu/constants.js.map +0 -1
- package/dist/esm/internal/menu/fetchMenuById.js +0 -104
- package/dist/esm/internal/menu/fetchMenuById.js.map +0 -1
- package/dist/esm/internal/menu/fetchMenuTitle.js +0 -38
- package/dist/esm/internal/menu/fetchMenuTitle.js.map +0 -1
- package/dist/esm/internal/menu/getMenusOfStandaloneApp.js +0 -19
- package/dist/esm/internal/menu/getMenusOfStandaloneApp.js.map +0 -1
- package/dist/esm/internal/menu/interfaces.js +0 -8
- package/dist/esm/internal/menu/interfaces.js.map +0 -1
- package/dist/esm/internal/menu/loadDynamicMenuItems.js +0 -28
- package/dist/esm/internal/menu/loadDynamicMenuItems.js.map +0 -1
- package/dist/esm/internal/menu/mergeMenu.js +0 -78
- package/dist/esm/internal/menu/mergeMenu.js.map +0 -1
- package/dist/esm/internal/menu/reorderMenuItems.js +0 -14
- package/dist/esm/internal/menu/reorderMenuItems.js.map +0 -1
- package/dist/types/internal/checkPermissions.d.ts +0 -17
- package/dist/types/internal/menu/computeMenuData.d.ts +0 -7
- package/dist/types/internal/menu/constants.d.ts +0 -3
- package/dist/types/internal/menu/fetchMenuById.d.ts +0 -3
- package/dist/types/internal/menu/fetchMenuTitle.d.ts +0 -2
- package/dist/types/internal/menu/getMenusOfStandaloneApp.d.ts +0 -2
- package/dist/types/internal/menu/interfaces.d.ts +0 -74
- package/dist/types/internal/menu/loadDynamicMenuItems.d.ts +0 -3
- package/dist/types/internal/menu/mergeMenu.d.ts +0 -3
- package/dist/types/internal/menu/reorderMenuItems.d.ts +0 -2
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.getMenusOfStandaloneApp = getMenusOfStandaloneApp;
|
|
7
|
-
var _Runtime = require("../Runtime.js");
|
|
8
|
-
function getMenusOfStandaloneApp(menuId, appId) {
|
|
9
|
-
var _ref, _storyboard$meta$inje, _storyboard$meta, _storyboard$meta2;
|
|
10
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
11
|
-
const storyboard = (0, _Runtime._internalApiGetStoryboardInBootstrapData)(appId);
|
|
12
|
-
const menus = (_ref = (_storyboard$meta$inje = (_storyboard$meta = storyboard.meta) === null || _storyboard$meta === void 0 ? void 0 : _storyboard$meta.injectMenus) !== null && _storyboard$meta$inje !== void 0 ? _storyboard$meta$inje : (_storyboard$meta2 = storyboard.meta) === null || _storyboard$meta2 === void 0 ? void 0 : _storyboard$meta2.menus) !== null && _ref !== void 0 ? _ref : [];
|
|
13
|
-
return menus.filter(menu => menu.menuId === menuId).map(menu => {
|
|
14
|
-
var _menu$app, _menu$app$;
|
|
15
|
-
return {
|
|
16
|
-
...menu,
|
|
17
|
-
...((_menu$app = menu.app) !== null && _menu$app !== void 0 && (_menu$app$ = _menu$app[0]) !== null && _menu$app$ !== void 0 && _menu$app$.appId ? {} : {
|
|
18
|
-
app: [{
|
|
19
|
-
appId
|
|
20
|
-
}]
|
|
21
|
-
})
|
|
22
|
-
};
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
// Todo: maybe: fetch menus from STANDALONE_MENU@EASYOPS
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=getMenusOfStandaloneApp.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getMenusOfStandaloneApp.js","names":["_Runtime","require","getMenusOfStandaloneApp","menuId","appId","_ref","_storyboard$meta$inje","_storyboard$meta","_storyboard$meta2","storyboard","_internalApiGetStoryboardInBootstrapData","menus","meta","injectMenus","filter","menu","map","_menu$app","_menu$app$","app"],"sources":["../../../../src/internal/menu/getMenusOfStandaloneApp.ts"],"sourcesContent":["import { _internalApiGetStoryboardInBootstrapData } from \"../Runtime.js\";\nimport { MenuRawData } from \"./interfaces.js\";\n\nexport function getMenusOfStandaloneApp(\n menuId: string,\n appId: string\n): MenuRawData[] {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const storyboard = _internalApiGetStoryboardInBootstrapData(appId)!;\n const menus = (storyboard.meta?.injectMenus ??\n storyboard.meta?.menus ??\n []) as MenuRawData[];\n\n return menus\n .filter((menu) => menu.menuId === menuId)\n .map((menu) => ({\n ...menu,\n ...(menu.app?.[0]?.appId ? {} : { app: [{ appId }] }),\n }));\n\n // Todo: maybe: fetch menus from STANDALONE_MENU@EASYOPS\n}\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAGO,SAASC,uBAAuBA,CACrCC,MAAc,EACdC,KAAa,EACE;EAAA,IAAAC,IAAA,EAAAC,qBAAA,EAAAC,gBAAA,EAAAC,iBAAA;EACf;EACA,MAAMC,UAAU,GAAG,IAAAC,iDAAwC,EAACN,KAAK,CAAE;EACnE,MAAMO,KAAK,IAAAN,IAAA,IAAAC,qBAAA,IAAAC,gBAAA,GAAIE,UAAU,CAACG,IAAI,cAAAL,gBAAA,uBAAfA,gBAAA,CAAiBM,WAAW,cAAAP,qBAAA,cAAAA,qBAAA,IAAAE,iBAAA,GACzCC,UAAU,CAACG,IAAI,cAAAJ,iBAAA,uBAAfA,iBAAA,CAAiBG,KAAK,cAAAN,IAAA,cAAAA,IAAA,GACtB,EAAoB;EAEtB,OAAOM,KAAK,CACTG,MAAM,CAAEC,IAAI,IAAKA,IAAI,CAACZ,MAAM,KAAKA,MAAM,CAAC,CACxCa,GAAG,CAAED,IAAI;IAAA,IAAAE,SAAA,EAAAC,UAAA;IAAA,OAAM;MACd,GAAGH,IAAI;MACP,IAAI,CAAAE,SAAA,GAAAF,IAAI,CAACI,GAAG,cAAAF,SAAA,gBAAAC,UAAA,GAARD,SAAA,CAAW,CAAC,CAAC,cAAAC,UAAA,eAAbA,UAAA,CAAed,KAAK,GAAG,CAAC,CAAC,GAAG;QAAEe,GAAG,EAAE,CAAC;UAAEf;QAAM,CAAC;MAAE,CAAC;IACtD,CAAC;EAAA,CAAC,CAAC;;EAEL;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.js","names":["_constants","require"],"sources":["../../../../src/internal/menu/interfaces.ts"],"sourcesContent":["import type { MetaI18n, MicroApp, ResolveConf } from \"@next-core/types\";\nimport {\n symbolAppId,\n symbolMenuI18nNamespace,\n symbolOverrideApp,\n} from \"./constants.js\";\n\n/** 原始菜单数据。 */\nexport interface MenuRawData {\n menuId: string;\n title: string;\n app: [\n {\n appId: string;\n }\n ];\n icon?: unknown;\n link?: string;\n titleDataSource?: TitleDataSource;\n items?: MenuItemRawData[];\n type?: \"main\" | \"inject\";\n injectMenuGroupId?: string;\n defaultCollapsed?: boolean;\n defaultCollapsedBreakpoint?: number;\n dynamicItems?: boolean;\n itemsResolve?: ResolveConf;\n i18n?: MetaI18n;\n overrideApp?: MicroApp;\n}\n\n/** 原始菜单项数据。 */\nexport type MenuItemRawData = Omit<SidebarMenuSimpleItem, \"type\"> & {\n children?: MenuItemRawData[];\n type?: \"default\" | \"group\";\n sort?: number;\n if?: string | boolean;\n defaultExpanded?: boolean;\n groupId?: string;\n};\n\ninterface TitleDataSource {\n objectId: string;\n instanceId: string;\n attributeId?: string;\n}\n\n/** 侧边栏基本菜单项的配置。 */\nexport interface SidebarMenuSimpleItem {\n /** 菜单项文本。 */\n text: string;\n\n /** 菜单项对应的系统内地址。 */\n // to?: LocationDescriptor;\n to?: unknown;\n\n /** 菜单项对应的外部链接地址。 */\n href?: string;\n\n /** 菜单项的图标。 */\n // icon?: MenuIcon;\n icon?: unknown;\n\n /** 菜单项链接打开的目标。 */\n target?: string;\n\n type?: \"default\";\n\n /** 高亮菜单项时是否使用精确匹配来对比当前地址和菜单项地址。 */\n exact?: boolean;\n\n /** 设置额外包含的匹配高亮菜单项的地址列表。 */\n activeIncludes?: string[];\n\n /** 设置需要被排除的匹配高亮菜单项的地址列表。 */\n activeExcludes?: string[];\n\n /** 设置匹配高亮菜单项时是否还对 search 参数进行比较。 */\n activeMatchSearch?: boolean;\n\n /** @internal */\n key?: string;\n}\n\nexport interface RuntimeMenuItemRawData extends MenuItemRawData {\n children?: RuntimeMenuItemRawData[];\n [symbolAppId]: string;\n [symbolMenuI18nNamespace]?: string;\n [symbolOverrideApp]?: MicroApp;\n}\n\nexport interface RuntimeMenuRawData extends MenuRawData {\n items: RuntimeMenuItemRawData[];\n // [symbolShouldCache]?: boolean;\n [symbolMenuI18nNamespace]?: string;\n [symbolOverrideApp]?: MicroApp;\n}\n"],"mappings":";;AACA,IAAAA,UAAA,GAAAC,OAAA"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.loadDynamicMenuItems = loadDynamicMenuItems;
|
|
7
|
-
var _Runtime = require("../Runtime.js");
|
|
8
|
-
var _resolveData = require("../data/resolveData.js");
|
|
9
|
-
async function loadDynamicMenuItems(menu, runtimeContext, menuWithI18n) {
|
|
10
|
-
if (menu.dynamicItems && menu.itemsResolve) {
|
|
11
|
-
const overrideAppId = menu.app[0].appId;
|
|
12
|
-
let newRuntimeContext = runtimeContext;
|
|
13
|
-
if (overrideAppId !== runtimeContext.app.id) {
|
|
14
|
-
const overrideApp = window.STANDALONE_MICRO_APPS ? menu.overrideApp : (0, _Runtime._internalApiGetAppInBootstrapData)(overrideAppId);
|
|
15
|
-
newRuntimeContext = {
|
|
16
|
-
...runtimeContext,
|
|
17
|
-
overrideApp,
|
|
18
|
-
appendI18nNamespace: menuWithI18n.get(menu)
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
const resolved = await (0, _resolveData.resolveData)({
|
|
22
|
-
transform: "items",
|
|
23
|
-
...menu.itemsResolve
|
|
24
|
-
}, newRuntimeContext);
|
|
25
|
-
menu.items = resolved.items;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=loadDynamicMenuItems.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loadDynamicMenuItems.js","names":["_Runtime","require","_resolveData","loadDynamicMenuItems","menu","runtimeContext","menuWithI18n","dynamicItems","itemsResolve","overrideAppId","app","appId","newRuntimeContext","id","overrideApp","window","STANDALONE_MICRO_APPS","_internalApiGetAppInBootstrapData","appendI18nNamespace","get","resolved","resolveData","transform","items"],"sources":["../../../../src/internal/menu/loadDynamicMenuItems.ts"],"sourcesContent":["import type { MenuItemRawData, MenuRawData } from \"./interfaces.js\";\nimport type { RuntimeContext } from \"../interfaces.js\";\nimport { _internalApiGetAppInBootstrapData } from \"../Runtime.js\";\nimport { resolveData } from \"../data/resolveData.js\";\n\nexport async function loadDynamicMenuItems(\n menu: MenuRawData,\n runtimeContext: RuntimeContext,\n menuWithI18n: WeakMap<MenuRawData, string>\n): Promise<void> {\n if (menu.dynamicItems && menu.itemsResolve) {\n const overrideAppId = menu.app[0].appId;\n let newRuntimeContext = runtimeContext;\n if (overrideAppId !== runtimeContext.app.id) {\n const overrideApp = window.STANDALONE_MICRO_APPS\n ? menu.overrideApp\n : _internalApiGetAppInBootstrapData(overrideAppId);\n newRuntimeContext = {\n ...runtimeContext,\n overrideApp,\n appendI18nNamespace: menuWithI18n.get(menu),\n };\n }\n const resolved = (await resolveData(\n {\n transform: \"items\",\n ...menu.itemsResolve,\n },\n newRuntimeContext\n )) as { items: MenuItemRawData[] };\n menu.items = resolved.items;\n }\n}\n"],"mappings":";;;;;;AAEA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAEO,eAAeE,oBAAoBA,CACxCC,IAAiB,EACjBC,cAA8B,EAC9BC,YAA0C,EAC3B;EACf,IAAIF,IAAI,CAACG,YAAY,IAAIH,IAAI,CAACI,YAAY,EAAE;IAC1C,MAAMC,aAAa,GAAGL,IAAI,CAACM,GAAG,CAAC,CAAC,CAAC,CAACC,KAAK;IACvC,IAAIC,iBAAiB,GAAGP,cAAc;IACtC,IAAII,aAAa,KAAKJ,cAAc,CAACK,GAAG,CAACG,EAAE,EAAE;MAC3C,MAAMC,WAAW,GAAGC,MAAM,CAACC,qBAAqB,GAC5CZ,IAAI,CAACU,WAAW,GAChB,IAAAG,0CAAiC,EAACR,aAAa,CAAC;MACpDG,iBAAiB,GAAG;QAClB,GAAGP,cAAc;QACjBS,WAAW;QACXI,mBAAmB,EAAEZ,YAAY,CAACa,GAAG,CAACf,IAAI;MAC5C,CAAC;IACH;IACA,MAAMgB,QAAQ,GAAI,MAAM,IAAAC,wBAAW,EACjC;MACEC,SAAS,EAAE,OAAO;MAClB,GAAGlB,IAAI,CAACI;IACV,CAAC,EACDI,iBAAiB,CACe;IAClCR,IAAI,CAACmB,KAAK,GAAGH,QAAQ,CAACG,KAAK;EAC7B;AACF"}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.mergeMenu = mergeMenu;
|
|
7
|
-
var _i18n = require("@next-core/i18n");
|
|
8
|
-
var _registerAppI18n = require("../registerAppI18n.js");
|
|
9
|
-
var _constants = require("./constants.js");
|
|
10
|
-
var _loadDynamicMenuItems = require("./loadDynamicMenuItems.js");
|
|
11
|
-
async function mergeMenu(menuList, runtimeContext) {
|
|
12
|
-
const mainMenu = menuList.find(menu => menu.type !== "inject");
|
|
13
|
-
if (!mainMenu) {
|
|
14
|
-
return undefined;
|
|
15
|
-
}
|
|
16
|
-
const validMenuList = [];
|
|
17
|
-
const injectWithMenus = new Map();
|
|
18
|
-
const menuWithI18n = new WeakMap();
|
|
19
|
-
for (const menu of menuList) {
|
|
20
|
-
if (menu.i18n) {
|
|
21
|
-
const menuI18nNamespace = (0, _registerAppI18n.getI18nNamespace)("menu", `${menu.menuId}~${menu.app[0].appId}+${menu.instanceId}`);
|
|
22
|
-
// Support any language in `menu.i18n`.
|
|
23
|
-
Object.entries(menu.i18n).forEach(([lang, resources]) => {
|
|
24
|
-
_i18n.i18n.addResourceBundle(lang, menuI18nNamespace, resources);
|
|
25
|
-
});
|
|
26
|
-
menuWithI18n.set(menu, menuI18nNamespace);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
await Promise.all(menuList.map(menu => (0, _loadDynamicMenuItems.loadDynamicMenuItems)(menu, runtimeContext, menuWithI18n)));
|
|
30
|
-
for (const menu of menuList) {
|
|
31
|
-
var _menu$items;
|
|
32
|
-
if ((_menu$items = menu.items) !== null && _menu$items !== void 0 && _menu$items.length) {
|
|
33
|
-
if (menu.type === "inject" && menu.injectMenuGroupId) {
|
|
34
|
-
let injectingMenus = injectWithMenus.get(menu.injectMenuGroupId);
|
|
35
|
-
if (!injectingMenus) {
|
|
36
|
-
injectingMenus = [];
|
|
37
|
-
injectWithMenus.set(menu.injectMenuGroupId, injectingMenus);
|
|
38
|
-
}
|
|
39
|
-
injectingMenus.push(menu);
|
|
40
|
-
} else {
|
|
41
|
-
validMenuList.push(menu);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
return {
|
|
46
|
-
...mainMenu,
|
|
47
|
-
items: validMenuList.flatMap(menu =>
|
|
48
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
49
|
-
processGroupInject(menu.items, menu, injectWithMenus, menuWithI18n)),
|
|
50
|
-
[_constants.symbolMenuI18nNamespace]: menuWithI18n.get(mainMenu),
|
|
51
|
-
[_constants.symbolOverrideApp]: mainMenu.overrideApp
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
function processGroupInject(items, menu, injectWithMenus, menuWithI18n) {
|
|
55
|
-
return items === null || items === void 0 ? void 0 : items.map(item => {
|
|
56
|
-
var _processGroupInject;
|
|
57
|
-
const foundInjectingMenus = item.groupId && injectWithMenus.get(item.groupId);
|
|
58
|
-
if (foundInjectingMenus) {
|
|
59
|
-
// Each menu to be injected with should be injected only once.
|
|
60
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
61
|
-
injectWithMenus.delete(item.groupId);
|
|
62
|
-
}
|
|
63
|
-
return {
|
|
64
|
-
...item,
|
|
65
|
-
children: ((_processGroupInject = processGroupInject(item.children, menu, injectWithMenus, menuWithI18n)) !== null && _processGroupInject !== void 0 ? _processGroupInject : []).concat(foundInjectingMenus ? foundInjectingMenus.flatMap(injectingMenu =>
|
|
66
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
67
|
-
processGroupInject(injectingMenu.items, injectingMenu, injectWithMenus, menuWithI18n)) : []),
|
|
68
|
-
[_constants.symbolAppId]: menu.app[0].appId,
|
|
69
|
-
[_constants.symbolMenuI18nNamespace]: menuWithI18n.get(menu),
|
|
70
|
-
[_constants.symbolOverrideApp]: menu.overrideApp
|
|
71
|
-
};
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
//# sourceMappingURL=mergeMenu.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mergeMenu.js","names":["_i18n","require","_registerAppI18n","_constants","_loadDynamicMenuItems","mergeMenu","menuList","runtimeContext","mainMenu","find","menu","type","undefined","validMenuList","injectWithMenus","Map","menuWithI18n","WeakMap","i18n","menuI18nNamespace","getI18nNamespace","menuId","app","appId","instanceId","Object","entries","forEach","lang","resources","addResourceBundle","set","Promise","all","map","loadDynamicMenuItems","_menu$items","items","length","injectMenuGroupId","injectingMenus","get","push","flatMap","processGroupInject","symbolMenuI18nNamespace","symbolOverrideApp","overrideApp","item","_processGroupInject","foundInjectingMenus","groupId","delete","children","concat","injectingMenu","symbolAppId"],"sources":["../../../../src/internal/menu/mergeMenu.ts"],"sourcesContent":["import { i18n } from \"@next-core/i18n\";\nimport { getI18nNamespace } from \"../registerAppI18n.js\";\nimport {\n symbolAppId,\n symbolMenuI18nNamespace,\n symbolOverrideApp,\n} from \"./constants.js\";\nimport type {\n MenuItemRawData,\n MenuRawData,\n RuntimeMenuItemRawData,\n RuntimeMenuRawData,\n} from \"./interfaces.js\";\nimport type { RuntimeContext } from \"../interfaces.js\";\nimport { loadDynamicMenuItems } from \"./loadDynamicMenuItems.js\";\n\nexport async function mergeMenu(\n menuList: MenuRawData[],\n runtimeContext: RuntimeContext\n): Promise<RuntimeMenuRawData | undefined> {\n const mainMenu = menuList.find((menu) => menu.type !== \"inject\");\n if (!mainMenu) {\n return undefined;\n }\n const validMenuList: MenuRawData[] = [];\n const injectWithMenus = new Map<string, MenuRawData[]>();\n const menuWithI18n = new WeakMap<MenuRawData, string>();\n\n for (const menu of menuList) {\n if (menu.i18n) {\n const menuI18nNamespace = getI18nNamespace(\n \"menu\",\n `${menu.menuId}~${menu.app[0].appId}+${\n (menu as { instanceId?: string }).instanceId\n }`\n );\n // Support any language in `menu.i18n`.\n Object.entries(menu.i18n).forEach(([lang, resources]) => {\n i18n.addResourceBundle(lang, menuI18nNamespace, resources);\n });\n menuWithI18n.set(menu, menuI18nNamespace);\n }\n }\n\n await Promise.all(\n menuList.map((menu) =>\n loadDynamicMenuItems(menu, runtimeContext, menuWithI18n)\n )\n );\n\n for (const menu of menuList) {\n if (menu.items?.length) {\n if (menu.type === \"inject\" && menu.injectMenuGroupId) {\n let injectingMenus = injectWithMenus.get(menu.injectMenuGroupId);\n if (!injectingMenus) {\n injectingMenus = [];\n injectWithMenus.set(menu.injectMenuGroupId, injectingMenus);\n }\n injectingMenus.push(menu);\n } else {\n validMenuList.push(menu);\n }\n }\n }\n\n return {\n ...mainMenu,\n items: validMenuList.flatMap(\n (menu) =>\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n processGroupInject(menu.items, menu, injectWithMenus, menuWithI18n)!\n ),\n [symbolMenuI18nNamespace]: menuWithI18n.get(mainMenu),\n [symbolOverrideApp]: mainMenu.overrideApp,\n };\n}\n\nfunction processGroupInject(\n items: MenuItemRawData[] | undefined,\n menu: MenuRawData,\n injectWithMenus: Map<string, MenuRawData[]>,\n menuWithI18n: WeakMap<MenuRawData, string>\n): RuntimeMenuItemRawData[] | undefined {\n return items?.map((item) => {\n const foundInjectingMenus =\n item.groupId && injectWithMenus.get(item.groupId);\n if (foundInjectingMenus) {\n // Each menu to be injected with should be injected only once.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n injectWithMenus.delete(item.groupId!);\n }\n return {\n ...item,\n children: (\n processGroupInject(\n item.children,\n menu,\n injectWithMenus,\n menuWithI18n\n ) ?? ([] as RuntimeMenuItemRawData[])\n ).concat(\n foundInjectingMenus\n ? foundInjectingMenus.flatMap(\n (injectingMenu) =>\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n processGroupInject(\n injectingMenu.items,\n injectingMenu,\n injectWithMenus,\n menuWithI18n\n )!\n )\n : ([] as RuntimeMenuItemRawData[])\n ),\n [symbolAppId]: menu.app[0].appId,\n [symbolMenuI18nNamespace]: menuWithI18n.get(menu),\n [symbolOverrideApp]: menu.overrideApp,\n };\n });\n}\n"],"mappings":"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"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.reorderMenuItems = reorderMenuItems;
|
|
7
|
-
var _lodash = require("lodash");
|
|
8
|
-
function reorderMenuItems(menuData) {
|
|
9
|
-
menuData.items = sortMenuItems(menuData.items).map(item => ({
|
|
10
|
-
...item,
|
|
11
|
-
children: sortMenuItems(item.children)
|
|
12
|
-
}));
|
|
13
|
-
}
|
|
14
|
-
function sortMenuItems(list) {
|
|
15
|
-
return (0, _lodash.sortBy)(list, item => {
|
|
16
|
-
var _item$sort;
|
|
17
|
-
return (_item$sort = item.sort) !== null && _item$sort !== void 0 ? _item$sort : -Infinity;
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=reorderMenuItems.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reorderMenuItems.js","names":["_lodash","require","reorderMenuItems","menuData","items","sortMenuItems","map","item","children","list","sortBy","_item$sort","sort","Infinity"],"sources":["../../../../src/internal/menu/reorderMenuItems.ts"],"sourcesContent":["import { sortBy } from \"lodash\";\nimport { MenuItemRawData, MenuRawData } from \"./interfaces.js\";\n\nexport function reorderMenuItems(menuData: MenuRawData): void {\n menuData.items = sortMenuItems(menuData.items).map((item) => ({\n ...item,\n children: sortMenuItems(item.children) as MenuItemRawData[],\n }));\n}\n\nfunction sortMenuItems(list: MenuItemRawData[] | undefined): MenuItemRawData[] {\n return sortBy(list, (item) => item.sort ?? -Infinity);\n}\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAGO,SAASC,gBAAgBA,CAACC,QAAqB,EAAQ;EAC5DA,QAAQ,CAACC,KAAK,GAAGC,aAAa,CAACF,QAAQ,CAACC,KAAK,CAAC,CAACE,GAAG,CAAEC,IAAI,KAAM;IAC5D,GAAGA,IAAI;IACPC,QAAQ,EAAEH,aAAa,CAACE,IAAI,CAACC,QAAQ;EACvC,CAAC,CAAC,CAAC;AACL;AAEA,SAASH,aAAaA,CAACI,IAAmC,EAAqB;EAC7E,OAAO,IAAAC,cAAM,EAACD,IAAI,EAAGF,IAAI;IAAA,IAAAI,UAAA;IAAA,QAAAA,UAAA,GAAKJ,IAAI,CAACK,IAAI,cAAAD,UAAA,cAAAA,UAAA,GAAI,CAACE,QAAQ;EAAA,EAAC;AACvD"}
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
2
|
-
import { difference } from "lodash";
|
|
3
|
-
import { scanPermissionActionsInAny, scanPermissionActionsInStoryboard } from "@next-core/utils/storyboard";
|
|
4
|
-
import { getAuth, isLoggedIn } from "../auth.js";
|
|
5
|
-
import { asyncComputeRealValue } from "./compute/computeRealValue.js";
|
|
6
|
-
import { hooks } from "./Runtime.js";
|
|
7
|
-
var checkedPermissions = [];
|
|
8
|
-
var permissionMap = new Map();
|
|
9
|
-
export function preCheckPermissions(storyboard) {
|
|
10
|
-
if (hooks !== null && hooks !== void 0 && hooks.validatePermissions && isLoggedIn() && !getAuth().isAdmin) {
|
|
11
|
-
var usedActions = scanPermissionActionsInStoryboard(storyboard);
|
|
12
|
-
return validatePermissions(usedActions);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
export function preCheckPermissionsForBrickOrRoute(_x, _x2) {
|
|
16
|
-
return _preCheckPermissionsForBrickOrRoute.apply(this, arguments);
|
|
17
|
-
}
|
|
18
|
-
function _preCheckPermissionsForBrickOrRoute() {
|
|
19
|
-
_preCheckPermissionsForBrickOrRoute = _asyncToGenerator(function* (container, runtimeContext) {
|
|
20
|
-
if (hooks !== null && hooks !== void 0 && hooks.validatePermissions && isLoggedIn() && !getAuth().isAdmin && Array.isArray(container.permissionsPreCheck)) {
|
|
21
|
-
var actions = yield asyncComputeRealValue(container.permissionsPreCheck, runtimeContext);
|
|
22
|
-
return validatePermissions(actions);
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
return _preCheckPermissionsForBrickOrRoute.apply(this, arguments);
|
|
26
|
-
}
|
|
27
|
-
export function preCheckPermissionsForAny(data) {
|
|
28
|
-
if (hooks !== null && hooks !== void 0 && hooks.validatePermissions && isLoggedIn() && !getAuth().isAdmin) {
|
|
29
|
-
var usedActions = scanPermissionActionsInAny(data);
|
|
30
|
-
return validatePermissions(usedActions);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
export function validatePermissions(_x3) {
|
|
34
|
-
return _validatePermissions.apply(this, arguments);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Check the current logged-in user whether to have all
|
|
39
|
-
* permissions of actions passed to it.
|
|
40
|
-
*
|
|
41
|
-
* @param actions - Required permission actions.
|
|
42
|
-
*/
|
|
43
|
-
function _validatePermissions() {
|
|
44
|
-
_validatePermissions = _asyncToGenerator(function* (usedActions) {
|
|
45
|
-
// Do not request known actions.
|
|
46
|
-
var actions = difference(usedActions, [...checkedPermissions]);
|
|
47
|
-
if (actions.length === 0) {
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
checkedPermissions.push(...actions);
|
|
51
|
-
try {
|
|
52
|
-
var result = yield hooks.validatePermissions({
|
|
53
|
-
actions
|
|
54
|
-
});
|
|
55
|
-
for (var item of result.actions) {
|
|
56
|
-
permissionMap.set(item.action, item.authorizationStatus);
|
|
57
|
-
if (item.authorizationStatus === "undefined") {
|
|
58
|
-
// eslint-disable-next-line no-console
|
|
59
|
-
console.error("Undefined permission action: \"".concat(item.action, "\""));
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
} catch (error) {
|
|
63
|
-
// Allow pre-check to fail, and
|
|
64
|
-
// make it not crash when the backend service is not updated.
|
|
65
|
-
// eslint-disable-next-line no-console
|
|
66
|
-
console.error("Pre-check permissions failed", error);
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
return _validatePermissions.apply(this, arguments);
|
|
70
|
-
}
|
|
71
|
-
export function checkPermissions() {
|
|
72
|
-
if (!isLoggedIn()) {
|
|
73
|
-
return false;
|
|
74
|
-
}
|
|
75
|
-
if (getAuth().isAdmin) {
|
|
76
|
-
return true;
|
|
77
|
-
}
|
|
78
|
-
for (var _len = arguments.length, actions = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
79
|
-
actions[_key] = arguments[_key];
|
|
80
|
-
}
|
|
81
|
-
for (var action of actions) {
|
|
82
|
-
// Only **exclusively authorized** permissions are ok.
|
|
83
|
-
// Those scenarios below will fail:
|
|
84
|
-
// - unauthorized actions (pre-check results)
|
|
85
|
-
// - undefined actions (pre-check results)
|
|
86
|
-
// - Un-pre-checked or pre-check failed
|
|
87
|
-
switch (permissionMap.get(action)) {
|
|
88
|
-
case "unauthorized":
|
|
89
|
-
case "undefined":
|
|
90
|
-
return false;
|
|
91
|
-
case undefined:
|
|
92
|
-
// eslint-disable-next-line no-console
|
|
93
|
-
console.error("Un-checked permission action: \"".concat(action, "\", please make sure the permission to check is defined in permissionsPreCheck."));
|
|
94
|
-
return false;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
return true;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* Reset permission pre-checks after logged-out.
|
|
102
|
-
*/
|
|
103
|
-
export function resetPermissionPreChecks() {
|
|
104
|
-
checkedPermissions.length = 0;
|
|
105
|
-
permissionMap.clear();
|
|
106
|
-
}
|
|
107
|
-
//# sourceMappingURL=checkPermissions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"checkPermissions.js","names":["difference","scanPermissionActionsInAny","scanPermissionActionsInStoryboard","getAuth","isLoggedIn","asyncComputeRealValue","hooks","checkedPermissions","permissionMap","Map","preCheckPermissions","storyboard","validatePermissions","isAdmin","usedActions","preCheckPermissionsForBrickOrRoute","_x","_x2","_preCheckPermissionsForBrickOrRoute","apply","arguments","_asyncToGenerator","container","runtimeContext","Array","isArray","permissionsPreCheck","actions","preCheckPermissionsForAny","data","_x3","_validatePermissions","length","push","result","item","set","action","authorizationStatus","console","error","concat","checkPermissions","_len","_key","get","undefined","resetPermissionPreChecks","clear"],"sources":["../../../src/internal/checkPermissions.ts"],"sourcesContent":["import { difference } from \"lodash\";\nimport {\n scanPermissionActionsInAny,\n scanPermissionActionsInStoryboard,\n} from \"@next-core/utils/storyboard\";\nimport type { BrickConf, RouteConf, Storyboard } from \"@next-core/types\";\nimport { getAuth, isLoggedIn } from \"../auth.js\";\nimport type { RuntimeContext } from \"./interfaces.js\";\nimport { asyncComputeRealValue } from \"./compute/computeRealValue.js\";\nimport { hooks } from \"./Runtime.js\";\n\ntype PermissionStatus = \"authorized\" | \"unauthorized\" | \"undefined\";\n\nconst checkedPermissions: string[] = [];\nconst permissionMap = new Map<string, PermissionStatus>();\n\nexport function preCheckPermissions(\n storyboard: Storyboard\n): Promise<void> | undefined {\n if (hooks?.validatePermissions && isLoggedIn() && !getAuth().isAdmin) {\n const usedActions = scanPermissionActionsInStoryboard(storyboard);\n return validatePermissions(usedActions);\n }\n}\n\nexport async function preCheckPermissionsForBrickOrRoute(\n container: BrickConf | RouteConf,\n runtimeContext: RuntimeContext\n) {\n if (\n hooks?.validatePermissions &&\n isLoggedIn() &&\n !getAuth().isAdmin &&\n Array.isArray(container.permissionsPreCheck)\n ) {\n const actions = (await asyncComputeRealValue(\n container.permissionsPreCheck,\n runtimeContext\n )) as string[];\n return validatePermissions(actions);\n }\n}\n\nexport function preCheckPermissionsForAny(\n data: unknown\n): Promise<void> | undefined {\n if (hooks?.validatePermissions && isLoggedIn() && !getAuth().isAdmin) {\n const usedActions = scanPermissionActionsInAny(data);\n return validatePermissions(usedActions);\n }\n}\n\nexport async function validatePermissions(\n usedActions: string[]\n): Promise<void> {\n // Do not request known actions.\n const actions = difference(usedActions, [...checkedPermissions]);\n if (actions.length === 0) {\n return;\n }\n checkedPermissions.push(...actions);\n try {\n const result = await hooks!.validatePermissions!({ actions });\n for (const item of result.actions!) {\n permissionMap.set(item.action!, item.authorizationStatus!);\n if (item.authorizationStatus === \"undefined\") {\n // eslint-disable-next-line no-console\n console.error(`Undefined permission action: \"${item.action}\"`);\n }\n }\n } catch (error) {\n // Allow pre-check to fail, and\n // make it not crash when the backend service is not updated.\n // eslint-disable-next-line no-console\n console.error(\"Pre-check permissions failed\", error);\n }\n}\n\n/**\n * Check the current logged-in user whether to have all\n * permissions of actions passed to it.\n *\n * @param actions - Required permission actions.\n */\nexport function checkPermissions(...actions: string[]): boolean {\n if (!isLoggedIn()) {\n return false;\n }\n\n if (getAuth().isAdmin) {\n return true;\n }\n\n for (const action of actions) {\n // Only **exclusively authorized** permissions are ok.\n // Those scenarios below will fail:\n // - unauthorized actions (pre-check results)\n // - undefined actions (pre-check results)\n // - Un-pre-checked or pre-check failed\n switch (permissionMap.get(action)) {\n case \"unauthorized\":\n case \"undefined\":\n return false;\n case undefined:\n // eslint-disable-next-line no-console\n console.error(\n `Un-checked permission action: \"${action}\", please make sure the permission to check is defined in permissionsPreCheck.`\n );\n return false;\n }\n }\n return true;\n}\n\n/**\n * Reset permission pre-checks after logged-out.\n */\nexport function resetPermissionPreChecks(): void {\n checkedPermissions.length = 0;\n permissionMap.clear();\n}\n"],"mappings":"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"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
2
|
-
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
3
|
-
import _objectSpread from "@babel/runtime/helpers/objectSpread2";
|
|
4
|
-
var _excluded = ["children"];
|
|
5
|
-
import { asyncComputeRealValue } from "../compute/computeRealValue.js";
|
|
6
|
-
import { _internalApiGetAppInBootstrapData } from "../Runtime.js";
|
|
7
|
-
import { symbolAppId, symbolMenuI18nNamespace, symbolOverrideApp } from "./constants.js";
|
|
8
|
-
export function computeMenuData(data, overrideAppId, runtimeContext) {
|
|
9
|
-
var newRuntimeContext = runtimeContext;
|
|
10
|
-
if (overrideAppId !== runtimeContext.app.id) {
|
|
11
|
-
var overrideApp = window.STANDALONE_MICRO_APPS ? data[symbolOverrideApp] : _internalApiGetAppInBootstrapData(overrideAppId);
|
|
12
|
-
newRuntimeContext = _objectSpread(_objectSpread({}, runtimeContext), {}, {
|
|
13
|
-
overrideApp,
|
|
14
|
-
appendI18nNamespace: data[symbolMenuI18nNamespace]
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
return asyncComputeRealValue(data, newRuntimeContext, {
|
|
18
|
-
ignoreSymbols: true
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
export function computeMenuItems(items, runtimeContext) {
|
|
22
|
-
return Promise.all(items.map( /*#__PURE__*/function () {
|
|
23
|
-
var _ref2 = _asyncToGenerator(function* (_ref) {
|
|
24
|
-
var {
|
|
25
|
-
children
|
|
26
|
-
} = _ref,
|
|
27
|
-
rest = _objectWithoutProperties(_ref, _excluded);
|
|
28
|
-
var [computedRest, computedChildren] = yield Promise.all([computeMenuData(rest, rest[symbolAppId], runtimeContext), children && (yield computeMenuItems(children, runtimeContext))]);
|
|
29
|
-
return _objectSpread(_objectSpread({}, computedRest), {}, {
|
|
30
|
-
children: computedChildren
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
return function (_x) {
|
|
34
|
-
return _ref2.apply(this, arguments);
|
|
35
|
-
};
|
|
36
|
-
}()));
|
|
37
|
-
}
|
|
38
|
-
//# sourceMappingURL=computeMenuData.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"computeMenuData.js","names":["asyncComputeRealValue","_internalApiGetAppInBootstrapData","symbolAppId","symbolMenuI18nNamespace","symbolOverrideApp","computeMenuData","data","overrideAppId","runtimeContext","newRuntimeContext","app","id","overrideApp","window","STANDALONE_MICRO_APPS","_objectSpread","appendI18nNamespace","ignoreSymbols","computeMenuItems","items","Promise","all","map","_ref2","_asyncToGenerator","_ref","children","rest","_objectWithoutProperties","_excluded","computedRest","computedChildren","_x","apply","arguments"],"sources":["../../../../src/internal/menu/computeMenuData.ts"],"sourcesContent":["import { asyncComputeRealValue } from \"../compute/computeRealValue.js\";\nimport type { RuntimeContext } from \"../interfaces.js\";\nimport type {\n RuntimeMenuItemRawData,\n RuntimeMenuRawData,\n} from \"./interfaces.js\";\nimport { _internalApiGetAppInBootstrapData } from \"../Runtime.js\";\nimport {\n symbolAppId,\n symbolMenuI18nNamespace,\n symbolOverrideApp,\n} from \"./constants.js\";\n\ntype RuntimeMenuRestRawData = Omit<RuntimeMenuRawData, \"app\" | \"items\">;\ntype RuntimeMenuItemRestRawData = Omit<RuntimeMenuItemRawData, \"children\">;\n\nexport function computeMenuData<\n T extends RuntimeMenuRestRawData | RuntimeMenuItemRestRawData\n>(data: T, overrideAppId: string, runtimeContext: RuntimeContext): Promise<T> {\n let newRuntimeContext = runtimeContext;\n if (overrideAppId !== runtimeContext.app.id) {\n const overrideApp = window.STANDALONE_MICRO_APPS\n ? data[symbolOverrideApp]\n : _internalApiGetAppInBootstrapData(overrideAppId);\n newRuntimeContext = {\n ...runtimeContext,\n overrideApp,\n appendI18nNamespace: data[symbolMenuI18nNamespace],\n };\n }\n return asyncComputeRealValue(data, newRuntimeContext, {\n ignoreSymbols: true,\n }) as Promise<T>;\n}\n\nexport function computeMenuItems(\n items: RuntimeMenuItemRawData[],\n runtimeContext: RuntimeContext\n): Promise<RuntimeMenuItemRawData[]> {\n return Promise.all(\n items.map(async ({ children, ...rest }) => {\n const [computedRest, computedChildren] = await Promise.all([\n computeMenuData(rest, rest[symbolAppId], runtimeContext),\n children && (await computeMenuItems(children, runtimeContext)),\n ]);\n return {\n ...computedRest,\n children: computedChildren,\n };\n })\n );\n}\n"],"mappings":";;;;AAAA,SAASA,qBAAqB,QAAQ,gCAAgC;AAMtE,SAASC,iCAAiC,QAAQ,eAAe;AACjE,SACEC,WAAW,EACXC,uBAAuB,EACvBC,iBAAiB,QACZ,gBAAgB;AAKvB,OAAO,SAASC,eAAeA,CAE7BC,IAAO,EAAEC,aAAqB,EAAEC,cAA8B,EAAc;EAC5E,IAAIC,iBAAiB,GAAGD,cAAc;EACtC,IAAID,aAAa,KAAKC,cAAc,CAACE,GAAG,CAACC,EAAE,EAAE;IAC3C,IAAMC,WAAW,GAAGC,MAAM,CAACC,qBAAqB,GAC5CR,IAAI,CAACF,iBAAiB,CAAC,GACvBH,iCAAiC,CAACM,aAAa,CAAC;IACpDE,iBAAiB,GAAAM,aAAA,CAAAA,aAAA,KACZP,cAAc;MACjBI,WAAW;MACXI,mBAAmB,EAAEV,IAAI,CAACH,uBAAuB;IAAC,EACnD;EACH;EACA,OAAOH,qBAAqB,CAACM,IAAI,EAAEG,iBAAiB,EAAE;IACpDQ,aAAa,EAAE;EACjB,CAAC,CAAC;AACJ;AAEA,OAAO,SAASC,gBAAgBA,CAC9BC,KAA+B,EAC/BX,cAA8B,EACK;EACnC,OAAOY,OAAO,CAACC,GAAG,CAChBF,KAAK,CAACG,GAAG;IAAA,IAAAC,KAAA,GAAAC,iBAAA,CAAC,WAAAC,IAAA,EAAiC;MAAA,IAA1B;UAAEC;QAAkB,CAAC,GAAAD,IAAA;QAANE,IAAI,GAAAC,wBAAA,CAAAH,IAAA,EAAAI,SAAA;MAClC,IAAM,CAACC,YAAY,EAAEC,gBAAgB,CAAC,SAASX,OAAO,CAACC,GAAG,CAAC,CACzDhB,eAAe,CAACsB,IAAI,EAAEA,IAAI,CAACzB,WAAW,CAAC,EAAEM,cAAc,CAAC,EACxDkB,QAAQ,WAAWR,gBAAgB,CAACQ,QAAQ,EAAElB,cAAc,CAAC,CAAC,CAC/D,CAAC;MACF,OAAAO,aAAA,CAAAA,aAAA,KACKe,YAAY;QACfJ,QAAQ,EAAEK;MAAgB;IAE9B,CAAC;IAAA,iBAAAC,EAAA;MAAA,OAAAT,KAAA,CAAAU,KAAA,OAAAC,SAAA;IAAA;EAAA,IAAC,CACH;AACH"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","names":["symbolAppId","Symbol","symbolMenuI18nNamespace","symbolOverrideApp"],"sources":["../../../../src/internal/menu/constants.ts"],"sourcesContent":["export const symbolAppId = Symbol(\"appId\");\nexport const symbolMenuI18nNamespace = Symbol(\"menuI18nNamespace\");\nexport const symbolOverrideApp = Symbol(\"overrideApp\");\n"],"mappings":"AAAA,OAAO,IAAMA,WAAW,GAAGC,MAAM,CAAC,OAAO,CAAC;AAC1C,OAAO,IAAMC,uBAAuB,GAAGD,MAAM,CAAC,mBAAmB,CAAC;AAClE,OAAO,IAAME,iBAAiB,GAAGF,MAAM,CAAC,aAAa,CAAC"}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import _objectSpread from "@babel/runtime/helpers/objectSpread2";
|
|
2
|
-
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
3
|
-
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
4
|
-
var _excluded = ["items", "app"];
|
|
5
|
-
import { InstanceApi_postSearch } from "@next-api-sdk/cmdb-sdk";
|
|
6
|
-
import { pick } from "lodash";
|
|
7
|
-
import { mergeMenu } from "./mergeMenu.js";
|
|
8
|
-
import { reorderMenuItems } from "./reorderMenuItems.js";
|
|
9
|
-
import { preCheckPermissionsForAny } from "../checkPermissions.js";
|
|
10
|
-
import { checkIfOfComputed } from "../compute/checkIf.js";
|
|
11
|
-
import { computeMenuItems, computeMenuData } from "./computeMenuData.js";
|
|
12
|
-
import { fetchMenuTitle } from "./fetchMenuTitle.js";
|
|
13
|
-
import { getMenusOfStandaloneApp } from "./getMenusOfStandaloneApp.js";
|
|
14
|
-
var menuPromises = new Map();
|
|
15
|
-
var menuCache = new Map();
|
|
16
|
-
export function getMenuById(menuId) {
|
|
17
|
-
return menuCache.get(menuId);
|
|
18
|
-
}
|
|
19
|
-
export function fetchMenuById(menuId, runtimeContext) {
|
|
20
|
-
var promise = menuPromises.get(menuId);
|
|
21
|
-
if (!promise) {
|
|
22
|
-
promise = _fetchMenuById(menuId, runtimeContext);
|
|
23
|
-
}
|
|
24
|
-
return promise;
|
|
25
|
-
}
|
|
26
|
-
function _fetchMenuById(_x, _x2) {
|
|
27
|
-
return _fetchMenuById2.apply(this, arguments);
|
|
28
|
-
}
|
|
29
|
-
function _fetchMenuById2() {
|
|
30
|
-
_fetchMenuById2 = _asyncToGenerator(function* (menuId, runtimeContext) {
|
|
31
|
-
var menuList = window.STANDALONE_MICRO_APPS ? getMenusOfStandaloneApp(menuId, runtimeContext.app.id) : (yield InstanceApi_postSearch("EASYOPS_STORYBOARD_MENU", {
|
|
32
|
-
page: 1,
|
|
33
|
-
page_size: 200,
|
|
34
|
-
fields: {
|
|
35
|
-
menuId: true,
|
|
36
|
-
title: true,
|
|
37
|
-
icon: true,
|
|
38
|
-
link: true,
|
|
39
|
-
titleDataSource: true,
|
|
40
|
-
defaultCollapsed: true,
|
|
41
|
-
defaultCollapsedBreakpoint: true,
|
|
42
|
-
type: true,
|
|
43
|
-
injectMenuGroupId: true,
|
|
44
|
-
dynamicItems: true,
|
|
45
|
-
itemsResolve: true,
|
|
46
|
-
items: true,
|
|
47
|
-
i18n: true,
|
|
48
|
-
"items.children": true,
|
|
49
|
-
"app.appId": true
|
|
50
|
-
},
|
|
51
|
-
query: {
|
|
52
|
-
menuId: {
|
|
53
|
-
$eq: menuId
|
|
54
|
-
},
|
|
55
|
-
app: {
|
|
56
|
-
$size: {
|
|
57
|
-
$gt: 0
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
})).list;
|
|
62
|
-
var menuData = yield mergeMenu(menuList, runtimeContext);
|
|
63
|
-
if (!menuData) {
|
|
64
|
-
throw new Error("Menu not found: ".concat(menuId));
|
|
65
|
-
}
|
|
66
|
-
reorderMenuItems(menuData);
|
|
67
|
-
var {
|
|
68
|
-
items,
|
|
69
|
-
app
|
|
70
|
-
} = menuData,
|
|
71
|
-
restMenuData = _objectWithoutProperties(menuData, _excluded);
|
|
72
|
-
var newRuntimeContext = _objectSpread(_objectSpread({}, runtimeContext), {}, {
|
|
73
|
-
pendingPermissionsPreCheck: [...runtimeContext.pendingPermissionsPreCheck, preCheckPermissionsForAny([items, restMenuData])]
|
|
74
|
-
});
|
|
75
|
-
delete newRuntimeContext.tplStateStoreId;
|
|
76
|
-
delete newRuntimeContext.forEachItem;
|
|
77
|
-
var rootAppId = app[0].appId;
|
|
78
|
-
var [computedMenuData, computedMenuItems] = yield Promise.all([computeMenuData(restMenuData, rootAppId, newRuntimeContext), computeMenuItems(items, newRuntimeContext)]);
|
|
79
|
-
var finalMenuData = _objectSpread(_objectSpread({
|
|
80
|
-
title: yield fetchMenuTitle(computedMenuData)
|
|
81
|
-
}, pick(computedMenuData, ["icon", "link", "defaultCollapsed", "defaultCollapsedBreakpoint"])), {}, {
|
|
82
|
-
menuItems: computedMenuItems.filter(checkIfOfComputed).map(item => {
|
|
83
|
-
var _item$children;
|
|
84
|
-
var children = (_item$children = item.children) === null || _item$children === void 0 ? void 0 : _item$children.filter(checkIfOfComputed);
|
|
85
|
-
return item.type === "group" ? {
|
|
86
|
-
type: "group",
|
|
87
|
-
title: item.text,
|
|
88
|
-
items: children
|
|
89
|
-
} : children !== null && children !== void 0 && children.length ? {
|
|
90
|
-
type: "subMenu",
|
|
91
|
-
title: item.text,
|
|
92
|
-
icon: item.icon,
|
|
93
|
-
items: children,
|
|
94
|
-
defaultExpanded: item.defaultExpanded
|
|
95
|
-
} : item;
|
|
96
|
-
})
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
// Todo(steve): reconsider the menu cache strategy
|
|
100
|
-
menuCache.set(menuId, finalMenuData);
|
|
101
|
-
});
|
|
102
|
-
return _fetchMenuById2.apply(this, arguments);
|
|
103
|
-
}
|
|
104
|
-
//# sourceMappingURL=fetchMenuById.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fetchMenuById.js","names":["InstanceApi_postSearch","pick","mergeMenu","reorderMenuItems","preCheckPermissionsForAny","checkIfOfComputed","computeMenuItems","computeMenuData","fetchMenuTitle","getMenusOfStandaloneApp","menuPromises","Map","menuCache","getMenuById","menuId","get","fetchMenuById","runtimeContext","promise","_fetchMenuById","_x","_x2","_fetchMenuById2","apply","arguments","_asyncToGenerator","menuList","window","STANDALONE_MICRO_APPS","app","id","page","page_size","fields","title","icon","link","titleDataSource","defaultCollapsed","defaultCollapsedBreakpoint","type","injectMenuGroupId","dynamicItems","itemsResolve","items","i18n","query","$eq","$size","$gt","list","menuData","Error","concat","restMenuData","_objectWithoutProperties","_excluded","newRuntimeContext","_objectSpread","pendingPermissionsPreCheck","tplStateStoreId","forEachItem","rootAppId","appId","computedMenuData","computedMenuItems","Promise","all","finalMenuData","menuItems","filter","map","item","_item$children","children","text","length","defaultExpanded","set"],"sources":["../../../../src/internal/menu/fetchMenuById.ts"],"sourcesContent":["import { InstanceApi_postSearch } from \"@next-api-sdk/cmdb-sdk\";\nimport { pick } from \"lodash\";\nimport { mergeMenu } from \"./mergeMenu.js\";\nimport { reorderMenuItems } from \"./reorderMenuItems.js\";\nimport { preCheckPermissionsForAny } from \"../checkPermissions.js\";\nimport type { RuntimeContext } from \"../interfaces.js\";\nimport type { MenuRawData } from \"./interfaces.js\";\nimport { checkIfOfComputed } from \"../compute/checkIf.js\";\nimport { computeMenuItems, computeMenuData } from \"./computeMenuData.js\";\nimport { fetchMenuTitle } from \"./fetchMenuTitle.js\";\nimport { getMenusOfStandaloneApp } from \"./getMenusOfStandaloneApp.js\";\n\nconst menuPromises = new Map<string, Promise<void>>();\n\nconst menuCache = new Map<string, unknown>();\n\nexport function getMenuById(menuId: string) {\n return menuCache.get(menuId);\n}\n\nexport function fetchMenuById(menuId: string, runtimeContext: RuntimeContext) {\n let promise = menuPromises.get(menuId);\n if (!promise) {\n promise = _fetchMenuById(menuId, runtimeContext);\n }\n return promise;\n}\n\nasync function _fetchMenuById(menuId: string, runtimeContext: RuntimeContext) {\n const menuList = window.STANDALONE_MICRO_APPS\n ? getMenusOfStandaloneApp(menuId, runtimeContext.app.id)\n : ((\n await InstanceApi_postSearch(\"EASYOPS_STORYBOARD_MENU\", {\n page: 1,\n page_size: 200,\n fields: {\n menuId: true,\n title: true,\n icon: true,\n link: true,\n titleDataSource: true,\n defaultCollapsed: true,\n defaultCollapsedBreakpoint: true,\n type: true,\n injectMenuGroupId: true,\n dynamicItems: true,\n itemsResolve: true,\n items: true,\n i18n: true,\n \"items.children\": true,\n \"app.appId\": true,\n },\n query: {\n menuId: {\n $eq: menuId,\n },\n app: {\n $size: {\n $gt: 0,\n },\n },\n },\n })\n ).list as MenuRawData[]);\n\n const menuData = await mergeMenu(menuList, runtimeContext);\n if (!menuData) {\n throw new Error(`Menu not found: ${menuId}`);\n }\n\n reorderMenuItems(menuData);\n\n const { items, app, ...restMenuData } = menuData;\n const newRuntimeContext: RuntimeContext = {\n ...runtimeContext,\n pendingPermissionsPreCheck: [\n ...runtimeContext.pendingPermissionsPreCheck,\n preCheckPermissionsForAny([items, restMenuData]),\n ],\n };\n delete newRuntimeContext.tplStateStoreId;\n delete newRuntimeContext.forEachItem;\n const rootAppId = app[0].appId;\n\n const [computedMenuData, computedMenuItems] = await Promise.all([\n computeMenuData(restMenuData, rootAppId, newRuntimeContext),\n computeMenuItems(items, newRuntimeContext),\n ]);\n\n const finalMenuData = {\n title: await fetchMenuTitle(computedMenuData),\n ...pick(computedMenuData, [\n \"icon\",\n \"link\",\n \"defaultCollapsed\",\n \"defaultCollapsedBreakpoint\",\n ]),\n menuItems: computedMenuItems.filter(checkIfOfComputed).map((item) => {\n const children = item.children?.filter(checkIfOfComputed);\n return item.type === \"group\"\n ? {\n type: \"group\",\n title: item.text,\n items: children,\n }\n : children?.length\n ? {\n type: \"subMenu\",\n title: item.text,\n icon: item.icon,\n items: children,\n defaultExpanded: item.defaultExpanded,\n }\n : item;\n }),\n };\n\n // Todo(steve): reconsider the menu cache strategy\n menuCache.set(menuId, finalMenuData);\n}\n"],"mappings":"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"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
2
|
-
import { isEmpty } from "lodash";
|
|
3
|
-
import { InstanceApi_getDetail } from "@next-api-sdk/cmdb-sdk";
|
|
4
|
-
var menuTitleCache = new Map();
|
|
5
|
-
export function fetchMenuTitle(_x) {
|
|
6
|
-
return _fetchMenuTitle.apply(this, arguments);
|
|
7
|
-
}
|
|
8
|
-
function _fetchMenuTitle() {
|
|
9
|
-
_fetchMenuTitle = _asyncToGenerator(function* (menuData) {
|
|
10
|
-
if (menuData.title || isEmpty(menuData.titleDataSource)) {
|
|
11
|
-
return menuData.title;
|
|
12
|
-
}
|
|
13
|
-
var cacheKey = JSON.stringify(menuData.titleDataSource);
|
|
14
|
-
if (menuTitleCache.has(cacheKey)) {
|
|
15
|
-
return menuTitleCache.get(cacheKey);
|
|
16
|
-
}
|
|
17
|
-
var {
|
|
18
|
-
objectId,
|
|
19
|
-
instanceId,
|
|
20
|
-
attributeId
|
|
21
|
-
} = menuData.titleDataSource;
|
|
22
|
-
var attr = attributeId !== null && attributeId !== void 0 ? attributeId : "name";
|
|
23
|
-
var instanceData = yield InstanceApi_getDetail(objectId, instanceId, {
|
|
24
|
-
fields: attr
|
|
25
|
-
});
|
|
26
|
-
var title;
|
|
27
|
-
if (attributeId === "#showKey" && Array.isArray(instanceData[attr])) {
|
|
28
|
-
var [primary, ...rest] = instanceData[attr];
|
|
29
|
-
title = rest.length > 0 ? "".concat(primary, "(").concat(rest.join(","), ")") : String(primary);
|
|
30
|
-
} else {
|
|
31
|
-
title = String(instanceData[attr]);
|
|
32
|
-
}
|
|
33
|
-
menuTitleCache.set(cacheKey, title);
|
|
34
|
-
return title;
|
|
35
|
-
});
|
|
36
|
-
return _fetchMenuTitle.apply(this, arguments);
|
|
37
|
-
}
|
|
38
|
-
//# sourceMappingURL=fetchMenuTitle.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fetchMenuTitle.js","names":["isEmpty","InstanceApi_getDetail","menuTitleCache","Map","fetchMenuTitle","_x","_fetchMenuTitle","apply","arguments","_asyncToGenerator","menuData","title","titleDataSource","cacheKey","JSON","stringify","has","get","objectId","instanceId","attributeId","attr","instanceData","fields","Array","isArray","primary","rest","length","concat","join","String","set"],"sources":["../../../../src/internal/menu/fetchMenuTitle.ts"],"sourcesContent":["import { isEmpty } from \"lodash\";\nimport { InstanceApi_getDetail } from \"@next-api-sdk/cmdb-sdk\";\nimport type { MenuRawData } from \"./interfaces.js\";\n\nconst menuTitleCache = new Map<string, string>();\n\nexport async function fetchMenuTitle(\n menuData: Pick<MenuRawData, \"title\" | \"titleDataSource\">\n) {\n if (menuData.title || isEmpty(menuData.titleDataSource)) {\n return menuData.title;\n }\n const cacheKey = JSON.stringify(menuData.titleDataSource);\n if (menuTitleCache.has(cacheKey)) {\n return menuTitleCache.get(cacheKey);\n }\n const { objectId, instanceId, attributeId } = menuData.titleDataSource;\n const attr = attributeId ?? \"name\";\n const instanceData = await InstanceApi_getDetail(objectId, instanceId, {\n fields: attr,\n });\n let title: string;\n if (attributeId === \"#showKey\" && Array.isArray(instanceData[attr])) {\n const [primary, ...rest] = instanceData[attr];\n title = rest.length > 0 ? `${primary}(${rest.join(\",\")})` : String(primary);\n } else {\n title = String(instanceData[attr]);\n }\n menuTitleCache.set(cacheKey, title);\n return title;\n}\n"],"mappings":";AAAA,SAASA,OAAO,QAAQ,QAAQ;AAChC,SAASC,qBAAqB,QAAQ,wBAAwB;AAG9D,IAAMC,cAAc,GAAG,IAAIC,GAAG,EAAkB;AAEhD,gBAAsBC,cAAcA,CAAAC,EAAA;EAAA,OAAAC,eAAA,CAAAC,KAAA,OAAAC,SAAA;AAAA;AAwBnC,SAAAF,gBAAA;EAAAA,eAAA,GAAAG,iBAAA,CAxBM,WACLC,QAAwD,EACxD;IACA,IAAIA,QAAQ,CAACC,KAAK,IAAIX,OAAO,CAACU,QAAQ,CAACE,eAAe,CAAC,EAAE;MACvD,OAAOF,QAAQ,CAACC,KAAK;IACvB;IACA,IAAME,QAAQ,GAAGC,IAAI,CAACC,SAAS,CAACL,QAAQ,CAACE,eAAe,CAAC;IACzD,IAAIV,cAAc,CAACc,GAAG,CAACH,QAAQ,CAAC,EAAE;MAChC,OAAOX,cAAc,CAACe,GAAG,CAACJ,QAAQ,CAAC;IACrC;IACA,IAAM;MAAEK,QAAQ;MAAEC,UAAU;MAAEC;IAAY,CAAC,GAAGV,QAAQ,CAACE,eAAe;IACtE,IAAMS,IAAI,GAAGD,WAAW,aAAXA,WAAW,cAAXA,WAAW,GAAI,MAAM;IAClC,IAAME,YAAY,SAASrB,qBAAqB,CAACiB,QAAQ,EAAEC,UAAU,EAAE;MACrEI,MAAM,EAAEF;IACV,CAAC,CAAC;IACF,IAAIV,KAAa;IACjB,IAAIS,WAAW,KAAK,UAAU,IAAII,KAAK,CAACC,OAAO,CAACH,YAAY,CAACD,IAAI,CAAC,CAAC,EAAE;MACnE,IAAM,CAACK,OAAO,EAAE,GAAGC,IAAI,CAAC,GAAGL,YAAY,CAACD,IAAI,CAAC;MAC7CV,KAAK,GAAGgB,IAAI,CAACC,MAAM,GAAG,CAAC,MAAAC,MAAA,CAAMH,OAAO,OAAAG,MAAA,CAAIF,IAAI,CAACG,IAAI,CAAC,GAAG,CAAC,SAAMC,MAAM,CAACL,OAAO,CAAC;IAC7E,CAAC,MAAM;MACLf,KAAK,GAAGoB,MAAM,CAACT,YAAY,CAACD,IAAI,CAAC,CAAC;IACpC;IACAnB,cAAc,CAAC8B,GAAG,CAACnB,QAAQ,EAAEF,KAAK,CAAC;IACnC,OAAOA,KAAK;EACd,CAAC;EAAA,OAAAL,eAAA,CAAAC,KAAA,OAAAC,SAAA;AAAA"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import _objectSpread from "@babel/runtime/helpers/objectSpread2";
|
|
2
|
-
import { _internalApiGetStoryboardInBootstrapData } from "../Runtime.js";
|
|
3
|
-
export function getMenusOfStandaloneApp(menuId, appId) {
|
|
4
|
-
var _ref, _storyboard$meta$inje, _storyboard$meta, _storyboard$meta2;
|
|
5
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
6
|
-
var storyboard = _internalApiGetStoryboardInBootstrapData(appId);
|
|
7
|
-
var menus = (_ref = (_storyboard$meta$inje = (_storyboard$meta = storyboard.meta) === null || _storyboard$meta === void 0 ? void 0 : _storyboard$meta.injectMenus) !== null && _storyboard$meta$inje !== void 0 ? _storyboard$meta$inje : (_storyboard$meta2 = storyboard.meta) === null || _storyboard$meta2 === void 0 ? void 0 : _storyboard$meta2.menus) !== null && _ref !== void 0 ? _ref : [];
|
|
8
|
-
return menus.filter(menu => menu.menuId === menuId).map(menu => {
|
|
9
|
-
var _menu$app, _menu$app$;
|
|
10
|
-
return _objectSpread(_objectSpread({}, menu), (_menu$app = menu.app) !== null && _menu$app !== void 0 && (_menu$app$ = _menu$app[0]) !== null && _menu$app$ !== void 0 && _menu$app$.appId ? {} : {
|
|
11
|
-
app: [{
|
|
12
|
-
appId
|
|
13
|
-
}]
|
|
14
|
-
});
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
// Todo: maybe: fetch menus from STANDALONE_MENU@EASYOPS
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=getMenusOfStandaloneApp.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getMenusOfStandaloneApp.js","names":["_internalApiGetStoryboardInBootstrapData","getMenusOfStandaloneApp","menuId","appId","_ref","_storyboard$meta$inje","_storyboard$meta","_storyboard$meta2","storyboard","menus","meta","injectMenus","filter","menu","map","_menu$app","_menu$app$","_objectSpread","app"],"sources":["../../../../src/internal/menu/getMenusOfStandaloneApp.ts"],"sourcesContent":["import { _internalApiGetStoryboardInBootstrapData } from \"../Runtime.js\";\nimport { MenuRawData } from \"./interfaces.js\";\n\nexport function getMenusOfStandaloneApp(\n menuId: string,\n appId: string\n): MenuRawData[] {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const storyboard = _internalApiGetStoryboardInBootstrapData(appId)!;\n const menus = (storyboard.meta?.injectMenus ??\n storyboard.meta?.menus ??\n []) as MenuRawData[];\n\n return menus\n .filter((menu) => menu.menuId === menuId)\n .map((menu) => ({\n ...menu,\n ...(menu.app?.[0]?.appId ? {} : { app: [{ appId }] }),\n }));\n\n // Todo: maybe: fetch menus from STANDALONE_MENU@EASYOPS\n}\n"],"mappings":";AAAA,SAASA,wCAAwC,QAAQ,eAAe;AAGxE,OAAO,SAASC,uBAAuBA,CACrCC,MAAc,EACdC,KAAa,EACE;EAAA,IAAAC,IAAA,EAAAC,qBAAA,EAAAC,gBAAA,EAAAC,iBAAA;EACf;EACA,IAAMC,UAAU,GAAGR,wCAAwC,CAACG,KAAK,CAAE;EACnE,IAAMM,KAAK,IAAAL,IAAA,IAAAC,qBAAA,IAAAC,gBAAA,GAAIE,UAAU,CAACE,IAAI,cAAAJ,gBAAA,uBAAfA,gBAAA,CAAiBK,WAAW,cAAAN,qBAAA,cAAAA,qBAAA,IAAAE,iBAAA,GACzCC,UAAU,CAACE,IAAI,cAAAH,iBAAA,uBAAfA,iBAAA,CAAiBE,KAAK,cAAAL,IAAA,cAAAA,IAAA,GACtB,EAAoB;EAEtB,OAAOK,KAAK,CACTG,MAAM,CAAEC,IAAI,IAAKA,IAAI,CAACX,MAAM,KAAKA,MAAM,CAAC,CACxCY,GAAG,CAAED,IAAI;IAAA,IAAAE,SAAA,EAAAC,UAAA;IAAA,OAAAC,aAAA,CAAAA,aAAA,KACLJ,IAAI,GACH,CAAAE,SAAA,GAAAF,IAAI,CAACK,GAAG,cAAAH,SAAA,gBAAAC,UAAA,GAARD,SAAA,CAAW,CAAC,CAAC,cAAAC,UAAA,eAAbA,UAAA,CAAeb,KAAK,GAAG,CAAC,CAAC,GAAG;MAAEe,GAAG,EAAE,CAAC;QAAEf;MAAM,CAAC;IAAE,CAAC;EAAA,CACpD,CAAC;;EAEL;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.js","names":["symbolAppId","symbolMenuI18nNamespace","symbolOverrideApp"],"sources":["../../../../src/internal/menu/interfaces.ts"],"sourcesContent":["import type { MetaI18n, MicroApp, ResolveConf } from \"@next-core/types\";\nimport {\n symbolAppId,\n symbolMenuI18nNamespace,\n symbolOverrideApp,\n} from \"./constants.js\";\n\n/** 原始菜单数据。 */\nexport interface MenuRawData {\n menuId: string;\n title: string;\n app: [\n {\n appId: string;\n }\n ];\n icon?: unknown;\n link?: string;\n titleDataSource?: TitleDataSource;\n items?: MenuItemRawData[];\n type?: \"main\" | \"inject\";\n injectMenuGroupId?: string;\n defaultCollapsed?: boolean;\n defaultCollapsedBreakpoint?: number;\n dynamicItems?: boolean;\n itemsResolve?: ResolveConf;\n i18n?: MetaI18n;\n overrideApp?: MicroApp;\n}\n\n/** 原始菜单项数据。 */\nexport type MenuItemRawData = Omit<SidebarMenuSimpleItem, \"type\"> & {\n children?: MenuItemRawData[];\n type?: \"default\" | \"group\";\n sort?: number;\n if?: string | boolean;\n defaultExpanded?: boolean;\n groupId?: string;\n};\n\ninterface TitleDataSource {\n objectId: string;\n instanceId: string;\n attributeId?: string;\n}\n\n/** 侧边栏基本菜单项的配置。 */\nexport interface SidebarMenuSimpleItem {\n /** 菜单项文本。 */\n text: string;\n\n /** 菜单项对应的系统内地址。 */\n // to?: LocationDescriptor;\n to?: unknown;\n\n /** 菜单项对应的外部链接地址。 */\n href?: string;\n\n /** 菜单项的图标。 */\n // icon?: MenuIcon;\n icon?: unknown;\n\n /** 菜单项链接打开的目标。 */\n target?: string;\n\n type?: \"default\";\n\n /** 高亮菜单项时是否使用精确匹配来对比当前地址和菜单项地址。 */\n exact?: boolean;\n\n /** 设置额外包含的匹配高亮菜单项的地址列表。 */\n activeIncludes?: string[];\n\n /** 设置需要被排除的匹配高亮菜单项的地址列表。 */\n activeExcludes?: string[];\n\n /** 设置匹配高亮菜单项时是否还对 search 参数进行比较。 */\n activeMatchSearch?: boolean;\n\n /** @internal */\n key?: string;\n}\n\nexport interface RuntimeMenuItemRawData extends MenuItemRawData {\n children?: RuntimeMenuItemRawData[];\n [symbolAppId]: string;\n [symbolMenuI18nNamespace]?: string;\n [symbolOverrideApp]?: MicroApp;\n}\n\nexport interface RuntimeMenuRawData extends MenuRawData {\n items: RuntimeMenuItemRawData[];\n // [symbolShouldCache]?: boolean;\n [symbolMenuI18nNamespace]?: string;\n [symbolOverrideApp]?: MicroApp;\n}\n"],"mappings":"AACA,SACEA,WAAW,EACXC,uBAAuB,EACvBC,iBAAiB,QACZ,gBAAgB;;AAEvB;;AAuBA;;AAgBA"}
|