@next-core/easyops-runtime 0.6.34 → 0.6.35

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.
@@ -10,7 +10,7 @@ var _general = require("@next-core/utils/general");
10
10
  var _pipes = require("@next-core/pipes");
11
11
  var _cook = require("@next-core/cook");
12
12
  function computeMenuData(data, overrideAppId, runtimeContext, helpers) {
13
- if ("titleDataSource" in data && (0, _general.isObject)(data.titleDataSource) && Object.entries(data.titleDataSource).every(([key, value]) => value === null || value === "")) {
13
+ if ("titleDataSource" in data && (0, _general.isObject)(data.titleDataSource) && Object.entries(data.titleDataSource).every(([, value]) => value === null || value === "")) {
14
14
  delete data.titleDataSource;
15
15
  }
16
16
  if ("if" in data && data.if === null) {
@@ -1 +1 @@
1
- {"version":3,"file":"computeMenuData.js","names":["_constants","require","_general","_pipes","_cook","computeMenuData","data","overrideAppId","runtimeContext","helpers","isObject","titleDataSource","Object","entries","every","key","value","if","to","isEvaluable","yaml","pipes","some","hasOwnProperty","newRuntimeContext","app","id","_helpers$getStoryboar","overrideApp","window","STANDALONE_MICRO_APPS","symbolOverrideApp","getStoryboardByAppId","appendI18nNamespace","symbolMenuI18nNamespace","asyncComputeRealValue","ignoreSymbols","computeMenuItems","items","Promise","all","map","children","rest","computedRest","computedChildren","symbolAppId"],"sources":["../../../src/menu/computeMenuData.ts"],"sourcesContent":["import type {\n RuntimeContext,\n RuntimeHelpers,\n RuntimeMenuItemRawData,\n RuntimeMenuRawData,\n} from \"./interfaces.js\";\nimport {\n symbolAppId,\n symbolMenuI18nNamespace,\n symbolOverrideApp,\n} from \"./constants.js\";\nimport { hasOwnProperty, isObject } from \"@next-core/utils/general\";\nimport { pipes } from \"@next-core/pipes\";\nimport { isEvaluable } from \"@next-core/cook\";\n\ntype RuntimeMenuRestRawData = Omit<RuntimeMenuRawData, \"app\" | \"items\">;\ntype RuntimeMenuItemRestRawData = Omit<RuntimeMenuItemRawData, \"children\">;\n\nexport function computeMenuData<\n T extends RuntimeMenuRestRawData | RuntimeMenuItemRestRawData\n>(\n data: T,\n overrideAppId: string,\n runtimeContext: RuntimeContext,\n helpers: RuntimeHelpers\n): Promise<T> {\n if (\n \"titleDataSource\" in data &&\n isObject(data.titleDataSource) &&\n Object.entries(data.titleDataSource).every(\n ([key, value]) => value === null || value === \"\"\n )\n ) {\n delete data.titleDataSource;\n }\n if (\"if\" in data && data.if === null) {\n delete data.if;\n }\n if (\"to\" in data && data.to && !isEvaluable(data.to as string)) {\n const yaml = pipes.yaml(data.to as string);\n\n if (\n isObject(yaml) &&\n [\"pathname\", \"search\", \"hash\"].some((key) => hasOwnProperty(yaml, key))\n ) {\n data.to = yaml;\n }\n }\n\n let newRuntimeContext = runtimeContext;\n if (overrideAppId !== runtimeContext.app.id) {\n const overrideApp = window.STANDALONE_MICRO_APPS\n ? data[symbolOverrideApp]\n : helpers.getStoryboardByAppId(overrideAppId)?.app;\n newRuntimeContext = {\n ...runtimeContext,\n overrideApp,\n appendI18nNamespace: data[symbolMenuI18nNamespace],\n };\n }\n return helpers.asyncComputeRealValue(data, newRuntimeContext, {\n ignoreSymbols: true,\n }) as Promise<T>;\n}\n\nexport function computeMenuItems(\n items: RuntimeMenuItemRawData[],\n runtimeContext: RuntimeContext,\n helpers: RuntimeHelpers\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, helpers),\n children && (await computeMenuItems(children, runtimeContext, helpers)),\n ]);\n return {\n ...computedRest,\n children: computedChildren,\n };\n })\n );\n}\n"],"mappings":";;;;;;;AAMA,IAAAA,UAAA,GAAAC,OAAA;AAKA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA;AAKO,SAASI,eAAeA,CAG7BC,IAAO,EACPC,aAAqB,EACrBC,cAA8B,EAC9BC,OAAuB,EACX;EACZ,IACE,iBAAiB,IAAIH,IAAI,IACzB,IAAAI,iBAAQ,EAACJ,IAAI,CAACK,eAAe,CAAC,IAC9BC,MAAM,CAACC,OAAO,CAACP,IAAI,CAACK,eAAe,CAAC,CAACG,KAAK,CACxC,CAAC,CAACC,GAAG,EAAEC,KAAK,CAAC,KAAKA,KAAK,KAAK,IAAI,IAAIA,KAAK,KAAK,EAChD,CAAC,EACD;IACA,OAAOV,IAAI,CAACK,eAAe;EAC7B;EACA,IAAI,IAAI,IAAIL,IAAI,IAAIA,IAAI,CAACW,EAAE,KAAK,IAAI,EAAE;IACpC,OAAOX,IAAI,CAACW,EAAE;EAChB;EACA,IAAI,IAAI,IAAIX,IAAI,IAAIA,IAAI,CAACY,EAAE,IAAI,CAAC,IAAAC,iBAAW,EAACb,IAAI,CAACY,EAAY,CAAC,EAAE;IAC9D,MAAME,IAAI,GAAGC,YAAK,CAACD,IAAI,CAACd,IAAI,CAACY,EAAY,CAAC;IAE1C,IACE,IAAAR,iBAAQ,EAACU,IAAI,CAAC,IACd,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAACE,IAAI,CAAEP,GAAG,IAAK,IAAAQ,uBAAc,EAACH,IAAI,EAAEL,GAAG,CAAC,CAAC,EACvE;MACAT,IAAI,CAACY,EAAE,GAAGE,IAAI;IAChB;EACF;EAEA,IAAII,iBAAiB,GAAGhB,cAAc;EACtC,IAAID,aAAa,KAAKC,cAAc,CAACiB,GAAG,CAACC,EAAE,EAAE;IAAA,IAAAC,qBAAA;IAC3C,MAAMC,WAAW,GAAGC,MAAM,CAACC,qBAAqB,GAC5CxB,IAAI,CAACyB,4BAAiB,CAAC,IAAAJ,qBAAA,GACvBlB,OAAO,CAACuB,oBAAoB,CAACzB,aAAa,CAAC,cAAAoB,qBAAA,uBAA3CA,qBAAA,CAA6CF,GAAG;IACpDD,iBAAiB,GAAG;MAClB,GAAGhB,cAAc;MACjBoB,WAAW;MACXK,mBAAmB,EAAE3B,IAAI,CAAC4B,kCAAuB;IACnD,CAAC;EACH;EACA,OAAOzB,OAAO,CAAC0B,qBAAqB,CAAC7B,IAAI,EAAEkB,iBAAiB,EAAE;IAC5DY,aAAa,EAAE;EACjB,CAAC,CAAC;AACJ;AAEO,SAASC,gBAAgBA,CAC9BC,KAA+B,EAC/B9B,cAA8B,EAC9BC,OAAuB,EACY;EACnC,OAAO8B,OAAO,CAACC,GAAG,CAChBF,KAAK,CAACG,GAAG,CAAC,OAAO;IAAEC,QAAQ;IAAE,GAAGC;EAAK,CAAC,KAAK;IACzC,MAAM,CAACC,YAAY,EAAEC,gBAAgB,CAAC,GAAG,MAAMN,OAAO,CAACC,GAAG,CAAC,CACzDnC,eAAe,CAACsC,IAAI,EAAEA,IAAI,CAACG,sBAAW,CAAC,EAAEtC,cAAc,EAAEC,OAAO,CAAC,EACjEiC,QAAQ,KAAK,MAAML,gBAAgB,CAACK,QAAQ,EAAElC,cAAc,EAAEC,OAAO,CAAC,CAAC,CACxE,CAAC;IACF,OAAO;MACL,GAAGmC,YAAY;MACfF,QAAQ,EAAEG;IACZ,CAAC;EACH,CAAC,CACH,CAAC;AACH"}
1
+ {"version":3,"file":"computeMenuData.js","names":["_constants","require","_general","_pipes","_cook","computeMenuData","data","overrideAppId","runtimeContext","helpers","isObject","titleDataSource","Object","entries","every","value","if","to","isEvaluable","yaml","pipes","some","key","hasOwnProperty","newRuntimeContext","app","id","_helpers$getStoryboar","overrideApp","window","STANDALONE_MICRO_APPS","symbolOverrideApp","getStoryboardByAppId","appendI18nNamespace","symbolMenuI18nNamespace","asyncComputeRealValue","ignoreSymbols","computeMenuItems","items","Promise","all","map","children","rest","computedRest","computedChildren","symbolAppId"],"sources":["../../../src/menu/computeMenuData.ts"],"sourcesContent":["import type {\n RuntimeContext,\n RuntimeHelpers,\n RuntimeMenuItemRawData,\n RuntimeMenuRawData,\n} from \"./interfaces.js\";\nimport {\n symbolAppId,\n symbolMenuI18nNamespace,\n symbolOverrideApp,\n} from \"./constants.js\";\nimport { hasOwnProperty, isObject } from \"@next-core/utils/general\";\nimport { pipes } from \"@next-core/pipes\";\nimport { isEvaluable } from \"@next-core/cook\";\n\ntype RuntimeMenuRestRawData = Omit<RuntimeMenuRawData, \"app\" | \"items\">;\ntype RuntimeMenuItemRestRawData = Omit<RuntimeMenuItemRawData, \"children\">;\n\nexport function computeMenuData<\n T extends RuntimeMenuRestRawData | RuntimeMenuItemRestRawData,\n>(\n data: T,\n overrideAppId: string,\n runtimeContext: RuntimeContext,\n helpers: RuntimeHelpers\n): Promise<T> {\n if (\n \"titleDataSource\" in data &&\n isObject(data.titleDataSource) &&\n Object.entries(data.titleDataSource).every(\n ([, value]) => value === null || value === \"\"\n )\n ) {\n delete data.titleDataSource;\n }\n if (\"if\" in data && data.if === null) {\n delete data.if;\n }\n if (\"to\" in data && data.to && !isEvaluable(data.to as string)) {\n const yaml = pipes.yaml(data.to as string);\n\n if (\n isObject(yaml) &&\n [\"pathname\", \"search\", \"hash\"].some((key) => hasOwnProperty(yaml, key))\n ) {\n data.to = yaml;\n }\n }\n\n let newRuntimeContext = runtimeContext;\n if (overrideAppId !== runtimeContext.app.id) {\n const overrideApp = window.STANDALONE_MICRO_APPS\n ? data[symbolOverrideApp]\n : helpers.getStoryboardByAppId(overrideAppId)?.app;\n newRuntimeContext = {\n ...runtimeContext,\n overrideApp,\n appendI18nNamespace: data[symbolMenuI18nNamespace],\n };\n }\n return helpers.asyncComputeRealValue(data, newRuntimeContext, {\n ignoreSymbols: true,\n }) as Promise<T>;\n}\n\nexport function computeMenuItems(\n items: RuntimeMenuItemRawData[],\n runtimeContext: RuntimeContext,\n helpers: RuntimeHelpers\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, helpers),\n children && (await computeMenuItems(children, runtimeContext, helpers)),\n ]);\n return {\n ...computedRest,\n children: computedChildren,\n };\n })\n );\n}\n"],"mappings":";;;;;;;AAMA,IAAAA,UAAA,GAAAC,OAAA;AAKA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA;AAKO,SAASI,eAAeA,CAG7BC,IAAO,EACPC,aAAqB,EACrBC,cAA8B,EAC9BC,OAAuB,EACX;EACZ,IACE,iBAAiB,IAAIH,IAAI,IACzB,IAAAI,iBAAQ,EAACJ,IAAI,CAACK,eAAe,CAAC,IAC9BC,MAAM,CAACC,OAAO,CAACP,IAAI,CAACK,eAAe,CAAC,CAACG,KAAK,CACxC,CAAC,GAAGC,KAAK,CAAC,KAAKA,KAAK,KAAK,IAAI,IAAIA,KAAK,KAAK,EAC7C,CAAC,EACD;IACA,OAAOT,IAAI,CAACK,eAAe;EAC7B;EACA,IAAI,IAAI,IAAIL,IAAI,IAAIA,IAAI,CAACU,EAAE,KAAK,IAAI,EAAE;IACpC,OAAOV,IAAI,CAACU,EAAE;EAChB;EACA,IAAI,IAAI,IAAIV,IAAI,IAAIA,IAAI,CAACW,EAAE,IAAI,CAAC,IAAAC,iBAAW,EAACZ,IAAI,CAACW,EAAY,CAAC,EAAE;IAC9D,MAAME,IAAI,GAAGC,YAAK,CAACD,IAAI,CAACb,IAAI,CAACW,EAAY,CAAC;IAE1C,IACE,IAAAP,iBAAQ,EAACS,IAAI,CAAC,IACd,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAACE,IAAI,CAAEC,GAAG,IAAK,IAAAC,uBAAc,EAACJ,IAAI,EAAEG,GAAG,CAAC,CAAC,EACvE;MACAhB,IAAI,CAACW,EAAE,GAAGE,IAAI;IAChB;EACF;EAEA,IAAIK,iBAAiB,GAAGhB,cAAc;EACtC,IAAID,aAAa,KAAKC,cAAc,CAACiB,GAAG,CAACC,EAAE,EAAE;IAAA,IAAAC,qBAAA;IAC3C,MAAMC,WAAW,GAAGC,MAAM,CAACC,qBAAqB,GAC5CxB,IAAI,CAACyB,4BAAiB,CAAC,IAAAJ,qBAAA,GACvBlB,OAAO,CAACuB,oBAAoB,CAACzB,aAAa,CAAC,cAAAoB,qBAAA,uBAA3CA,qBAAA,CAA6CF,GAAG;IACpDD,iBAAiB,GAAG;MAClB,GAAGhB,cAAc;MACjBoB,WAAW;MACXK,mBAAmB,EAAE3B,IAAI,CAAC4B,kCAAuB;IACnD,CAAC;EACH;EACA,OAAOzB,OAAO,CAAC0B,qBAAqB,CAAC7B,IAAI,EAAEkB,iBAAiB,EAAE;IAC5DY,aAAa,EAAE;EACjB,CAAC,CAAC;AACJ;AAEO,SAASC,gBAAgBA,CAC9BC,KAA+B,EAC/B9B,cAA8B,EAC9BC,OAAuB,EACY;EACnC,OAAO8B,OAAO,CAACC,GAAG,CAChBF,KAAK,CAACG,GAAG,CAAC,OAAO;IAAEC,QAAQ;IAAE,GAAGC;EAAK,CAAC,KAAK;IACzC,MAAM,CAACC,YAAY,EAAEC,gBAAgB,CAAC,GAAG,MAAMN,OAAO,CAACC,GAAG,CAAC,CACzDnC,eAAe,CAACsC,IAAI,EAAEA,IAAI,CAACG,sBAAW,CAAC,EAAEtC,cAAc,EAAEC,OAAO,CAAC,EACjEiC,QAAQ,KAAK,MAAML,gBAAgB,CAACK,QAAQ,EAAElC,cAAc,EAAEC,OAAO,CAAC,CAAC,CACxE,CAAC;IACF,OAAO;MACL,GAAGmC,YAAY;MACfF,QAAQ,EAAEG;IACZ,CAAC;EACH,CAAC,CACH,CAAC;AACH"}
@@ -17,14 +17,16 @@ var _getMenusOfStandaloneApp = require("./getMenusOfStandaloneApp.js");
17
17
  var _checkPermissions = require("../checkPermissions.js");
18
18
  const menuPromises = new Map();
19
19
  const menuCache = new Map();
20
- function walkMenuItems(menuItems) {
20
+ function transformMenuItems(menuItems) {
21
21
  return menuItems === null || menuItems === void 0 ? void 0 : menuItems.filter(_runtime.checkIfOfComputed).map(item => {
22
- const children = walkMenuItems(item.children);
23
- return item.type === "group" ? {
22
+ const children = transformMenuItems(item.children);
23
+ const transformedMenuItem = item.type === "group" ? {
24
24
  type: "group",
25
25
  title: item.text,
26
26
  childLayout: item.childLayout,
27
- items: children
27
+ items: children,
28
+ groupId: item.groupId,
29
+ groupFrom: item.groupFrom
28
30
  } : children !== null && children !== void 0 && children.length ? {
29
31
  type: "subMenu",
30
32
  childLayout: item.childLayout,
@@ -32,7 +34,8 @@ function walkMenuItems(menuItems) {
32
34
  icon: item.icon,
33
35
  items: children,
34
36
  defaultExpanded: item.defaultExpanded
35
- } : item;
37
+ } : (0, _lodash.omit)(item, ["type", "items", "children"]);
38
+ return transformedMenuItem;
36
39
  });
37
40
  }
38
41
  function getMenuById(menuId) {
@@ -101,7 +104,7 @@ async function _fetchMenuById(menuId, runtimeContext, helpers) {
101
104
  const finalMenuData = {
102
105
  title: await (0, _fetchMenuTitle.fetchMenuTitle)(computedMenuData),
103
106
  ...(0, _lodash.pick)(computedMenuData, ["icon", "link", "defaultCollapsed", "defaultCollapsedBreakpoint"]),
104
- menuItems: walkMenuItems(computedMenuItems)
107
+ menuItems: transformMenuItems(computedMenuItems)
105
108
  };
106
109
 
107
110
  // Todo(steve): reconsider the menu cache strategy
@@ -1 +1 @@
1
- {"version":3,"file":"fetchMenuById.js","names":["_cmdbSdk","require","_microAppSdk","_lodash","_runtime","_mergeMenu","_reorderMenuItems","_computeMenuData","_fetchMenuTitle","_getMenusOfStandaloneApp","_checkPermissions","menuPromises","Map","menuCache","walkMenuItems","menuItems","filter","checkIfOfComputed","map","item","children","type","title","text","childLayout","items","length","icon","defaultExpanded","getMenuById","menuId","get","fetchMenuById","runtimeContext","helpers","promise","_fetchMenuById","menuList","window","STANDALONE_MICRO_APPS","getMenusOfStandaloneApp","app","id","flags","InstalledMicroAppApi_getMenusInfo","menuObjectId","menus","InstanceApi_postSearch","page","page_size","fields","link","titleDataSource","defaultCollapsed","defaultCollapsedBreakpoint","injectMenuGroupId","dynamicItems","itemsResolve","i18n","query","$eq","$size","$gt","list","menuData","mergeMenu","Error","reorderMenu","restMenuData","newRuntimeContext","pendingPermissionsPreCheck","preCheckPermissionsForAny","tplStateStoreId","forEachItem","forEachIndex","rootAppId","appId","computedMenuData","computedMenuItems","Promise","all","computeMenuData","computeMenuItems","finalMenuData","fetchMenuTitle","pick","set"],"sources":["../../../src/menu/fetchMenuById.ts"],"sourcesContent":["import { InstanceApi_postSearch } from \"@next-api-sdk/cmdb-sdk\";\nimport { InstalledMicroAppApi_getMenusInfo } from \"@next-api-sdk/micro-app-sdk\";\nimport { pick } from \"lodash\";\nimport { checkIfOfComputed } from \"@next-core/runtime\";\nimport { mergeMenu } from \"./mergeMenu.js\";\nimport { reorderMenu } from \"./reorderMenuItems.js\";\nimport type {\n MenuRawData,\n RuntimeContext,\n RuntimeHelpers,\n RuntimeMenuItemRawData,\n} from \"./interfaces.js\";\nimport { computeMenuItems, computeMenuData } from \"./computeMenuData.js\";\nimport { fetchMenuTitle } from \"./fetchMenuTitle.js\";\nimport { getMenusOfStandaloneApp } from \"./getMenusOfStandaloneApp.js\";\nimport { preCheckPermissionsForAny } from \"../checkPermissions.js\";\n\nconst menuPromises = new Map<string, Promise<void>>();\n\nconst menuCache = new Map<string, unknown>();\n\nfunction walkMenuItems(menuItems: RuntimeMenuItemRawData[]): unknown[] {\n return menuItems?.filter(checkIfOfComputed).map((item) => {\n const children = walkMenuItems(item.children!);\n return item.type === \"group\"\n ? {\n type: \"group\",\n title: item.text,\n childLayout: item.childLayout,\n items: children,\n }\n : children?.length\n ? {\n type: \"subMenu\",\n childLayout: item.childLayout,\n title: item.text,\n icon: item.icon,\n items: children,\n defaultExpanded: item.defaultExpanded,\n }\n : item;\n });\n}\n\nexport function getMenuById(menuId: string) {\n return menuCache.get(menuId);\n}\n\nexport function fetchMenuById(\n menuId: string,\n runtimeContext: RuntimeContext,\n helpers: RuntimeHelpers\n) {\n let promise = menuPromises.get(menuId);\n if (!promise) {\n promise = _fetchMenuById(menuId, runtimeContext, helpers);\n }\n return promise;\n}\n\nasync function _fetchMenuById(\n menuId: string,\n runtimeContext: RuntimeContext,\n helpers: RuntimeHelpers\n) {\n const menuList = window.STANDALONE_MICRO_APPS\n ? getMenusOfStandaloneApp(menuId, runtimeContext.app.id, helpers)\n : runtimeContext.flags[\"three-level-menu-layout\"]\n ? ((\n await InstalledMicroAppApi_getMenusInfo(menuId, {\n menuObjectId: \"EASYOPS_STORYBOARD_MENU\",\n })\n ).menus as MenuRawData[])\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, helpers);\n if (!menuData) {\n throw new Error(`Menu not found: ${menuId}`);\n }\n\n reorderMenu(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 delete newRuntimeContext.forEachIndex;\n const rootAppId = app[0].appId;\n\n const [computedMenuData, computedMenuItems] = await Promise.all([\n computeMenuData(restMenuData, rootAppId, newRuntimeContext, helpers),\n computeMenuItems(items, newRuntimeContext, helpers),\n ]);\n\n const finalMenuData = {\n title: await fetchMenuTitle(computedMenuData),\n ...pick(computedMenuData, [\n \"icon\",\n \"link\",\n \"defaultCollapsed\",\n \"defaultCollapsedBreakpoint\",\n ]),\n menuItems: walkMenuItems(computedMenuItems),\n };\n\n // Todo(steve): reconsider the menu cache strategy\n menuCache.set(menuId, finalMenuData);\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AACA,IAAAI,UAAA,GAAAJ,OAAA;AACA,IAAAK,iBAAA,GAAAL,OAAA;AAOA,IAAAM,gBAAA,GAAAN,OAAA;AACA,IAAAO,eAAA,GAAAP,OAAA;AACA,IAAAQ,wBAAA,GAAAR,OAAA;AACA,IAAAS,iBAAA,GAAAT,OAAA;AAEA,MAAMU,YAAY,GAAG,IAAIC,GAAG,CAAwB,CAAC;AAErD,MAAMC,SAAS,GAAG,IAAID,GAAG,CAAkB,CAAC;AAE5C,SAASE,aAAaA,CAACC,SAAmC,EAAa;EACrE,OAAOA,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAEC,MAAM,CAACC,0BAAiB,CAAC,CAACC,GAAG,CAAEC,IAAI,IAAK;IACxD,MAAMC,QAAQ,GAAGN,aAAa,CAACK,IAAI,CAACC,QAAS,CAAC;IAC9C,OAAOD,IAAI,CAACE,IAAI,KAAK,OAAO,GACxB;MACEA,IAAI,EAAE,OAAO;MACbC,KAAK,EAAEH,IAAI,CAACI,IAAI;MAChBC,WAAW,EAAEL,IAAI,CAACK,WAAW;MAC7BC,KAAK,EAAEL;IACT,CAAC,GACDA,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAEM,MAAM,GAChB;MACEL,IAAI,EAAE,SAAS;MACfG,WAAW,EAAEL,IAAI,CAACK,WAAW;MAC7BF,KAAK,EAAEH,IAAI,CAACI,IAAI;MAChBI,IAAI,EAAER,IAAI,CAACQ,IAAI;MACfF,KAAK,EAAEL,QAAQ;MACfQ,eAAe,EAAET,IAAI,CAACS;IACxB,CAAC,GACDT,IAAI;EACV,CAAC,CAAC;AACJ;AAEO,SAASU,WAAWA,CAACC,MAAc,EAAE;EAC1C,OAAOjB,SAAS,CAACkB,GAAG,CAACD,MAAM,CAAC;AAC9B;AAEO,SAASE,aAAaA,CAC3BF,MAAc,EACdG,cAA8B,EAC9BC,OAAuB,EACvB;EACA,IAAIC,OAAO,GAAGxB,YAAY,CAACoB,GAAG,CAACD,MAAM,CAAC;EACtC,IAAI,CAACK,OAAO,EAAE;IACZA,OAAO,GAAGC,cAAc,CAACN,MAAM,EAAEG,cAAc,EAAEC,OAAO,CAAC;EAC3D;EACA,OAAOC,OAAO;AAChB;AAEA,eAAeC,cAAcA,CAC3BN,MAAc,EACdG,cAA8B,EAC9BC,OAAuB,EACvB;EACA,MAAMG,QAAQ,GAAGC,MAAM,CAACC,qBAAqB,GACzC,IAAAC,gDAAuB,EAACV,MAAM,EAAEG,cAAc,CAACQ,GAAG,CAACC,EAAE,EAAER,OAAO,CAAC,GAC/DD,cAAc,CAACU,KAAK,CAAC,yBAAyB,CAAC,GAC9C,CACC,MAAM,IAAAC,8CAAiC,EAACd,MAAM,EAAE;IAC9Ce,YAAY,EAAE;EAChB,CAAC,CAAC,EACFC,KAAK,GACN,CACC,MAAM,IAAAC,+BAAsB,EAAC,yBAAyB,EAAE;IACtDC,IAAI,EAAE,CAAC;IACPC,SAAS,EAAE,GAAG;IACdC,MAAM,EAAE;MACNpB,MAAM,EAAE,IAAI;MACZR,KAAK,EAAE,IAAI;MACXK,IAAI,EAAE,IAAI;MACVwB,IAAI,EAAE,IAAI;MACVC,eAAe,EAAE,IAAI;MACrBC,gBAAgB,EAAE,IAAI;MACtBC,0BAA0B,EAAE,IAAI;MAChCjC,IAAI,EAAE,IAAI;MACVkC,iBAAiB,EAAE,IAAI;MACvBC,YAAY,EAAE,IAAI;MAClBC,YAAY,EAAE,IAAI;MAClBhC,KAAK,EAAE,IAAI;MACXiC,IAAI,EAAE,IAAI;MACV,gBAAgB,EAAE,IAAI;MACtB,WAAW,EAAE;IACf,CAAC;IACDC,KAAK,EAAE;MACL7B,MAAM,EAAE;QACN8B,GAAG,EAAE9B;MACP,CAAC;MACDW,GAAG,EAAE;QACHoB,KAAK,EAAE;UACLC,GAAG,EAAE;QACP;MACF;IACF;EACF,CAAC,CAAC,EACFC,IAAsB;EAE5B,MAAMC,QAAQ,GAAG,MAAM,IAAAC,oBAAS,EAAC5B,QAAQ,EAAEJ,cAAc,EAAEC,OAAO,CAAC;EACnE,IAAI,CAAC8B,QAAQ,EAAE;IACb,MAAM,IAAIE,KAAK,CAAE,mBAAkBpC,MAAO,EAAC,CAAC;EAC9C;EAEA,IAAAqC,6BAAW,EAACH,QAAQ,CAAC;EAErB,MAAM;IAAEvC,KAAK;IAAEgB,GAAG;IAAE,GAAG2B;EAAa,CAAC,GAAGJ,QAAQ;EAChD,MAAMK,iBAAiC,GAAG;IACxC,GAAGpC,cAAc;IACjBqC,0BAA0B,EAAE,CAC1B,GAAGrC,cAAc,CAACqC,0BAA0B,EAC5C,IAAAC,2CAAyB,EAAC,CAAC9C,KAAK,EAAE2C,YAAY,CAAC,CAAC;EAEpD,CAAC;EACD,OAAOC,iBAAiB,CAACG,eAAe;EACxC,OAAOH,iBAAiB,CAACI,WAAW;EACpC,OAAOJ,iBAAiB,CAACK,YAAY;EACrC,MAAMC,SAAS,GAAGlC,GAAG,CAAC,CAAC,CAAC,CAACmC,KAAK;EAE9B,MAAM,CAACC,gBAAgB,EAAEC,iBAAiB,CAAC,GAAG,MAAMC,OAAO,CAACC,GAAG,CAAC,CAC9D,IAAAC,gCAAe,EAACb,YAAY,EAAEO,SAAS,EAAEN,iBAAiB,EAAEnC,OAAO,CAAC,EACpE,IAAAgD,iCAAgB,EAACzD,KAAK,EAAE4C,iBAAiB,EAAEnC,OAAO,CAAC,CACpD,CAAC;EAEF,MAAMiD,aAAa,GAAG;IACpB7D,KAAK,EAAE,MAAM,IAAA8D,8BAAc,EAACP,gBAAgB,CAAC;IAC7C,GAAG,IAAAQ,YAAI,EAACR,gBAAgB,EAAE,CACxB,MAAM,EACN,MAAM,EACN,kBAAkB,EAClB,4BAA4B,CAC7B,CAAC;IACF9D,SAAS,EAAED,aAAa,CAACgE,iBAAiB;EAC5C,CAAC;;EAED;EACAjE,SAAS,CAACyE,GAAG,CAACxD,MAAM,EAAEqD,aAAa,CAAC;AACtC"}
1
+ {"version":3,"file":"fetchMenuById.js","names":["_cmdbSdk","require","_microAppSdk","_lodash","_runtime","_mergeMenu","_reorderMenuItems","_computeMenuData","_fetchMenuTitle","_getMenusOfStandaloneApp","_checkPermissions","menuPromises","Map","menuCache","transformMenuItems","menuItems","filter","checkIfOfComputed","map","item","children","transformedMenuItem","type","title","text","childLayout","items","groupId","groupFrom","length","icon","defaultExpanded","omit","getMenuById","menuId","get","fetchMenuById","runtimeContext","helpers","promise","_fetchMenuById","menuList","window","STANDALONE_MICRO_APPS","getMenusOfStandaloneApp","app","id","flags","InstalledMicroAppApi_getMenusInfo","menuObjectId","menus","InstanceApi_postSearch","page","page_size","fields","link","titleDataSource","defaultCollapsed","defaultCollapsedBreakpoint","injectMenuGroupId","dynamicItems","itemsResolve","i18n","query","$eq","$size","$gt","list","menuData","mergeMenu","Error","reorderMenu","restMenuData","newRuntimeContext","pendingPermissionsPreCheck","preCheckPermissionsForAny","tplStateStoreId","forEachItem","forEachIndex","rootAppId","appId","computedMenuData","computedMenuItems","Promise","all","computeMenuData","computeMenuItems","finalMenuData","fetchMenuTitle","pick","set"],"sources":["../../../src/menu/fetchMenuById.ts"],"sourcesContent":["import { InstanceApi_postSearch } from \"@next-api-sdk/cmdb-sdk\";\nimport { InstalledMicroAppApi_getMenusInfo } from \"@next-api-sdk/micro-app-sdk\";\nimport { omit, pick } from \"lodash\";\nimport { checkIfOfComputed } from \"@next-core/runtime\";\nimport { mergeMenu } from \"./mergeMenu.js\";\nimport { reorderMenu } from \"./reorderMenuItems.js\";\nimport type {\n MenuRawData,\n RuntimeContext,\n RuntimeHelpers,\n RuntimeMenuItemRawData,\n SidebarMenu,\n SidebarMenuItem,\n} from \"./interfaces.js\";\nimport { computeMenuItems, computeMenuData } from \"./computeMenuData.js\";\nimport { fetchMenuTitle } from \"./fetchMenuTitle.js\";\nimport { getMenusOfStandaloneApp } from \"./getMenusOfStandaloneApp.js\";\nimport { preCheckPermissionsForAny } from \"../checkPermissions.js\";\n\nconst menuPromises = new Map<string, Promise<void>>();\n\nconst menuCache = new Map<string, SidebarMenu>();\n\nfunction transformMenuItems(\n menuItems: RuntimeMenuItemRawData[] | undefined\n): SidebarMenuItem[] | undefined {\n return menuItems?.filter(checkIfOfComputed).map((item) => {\n const children = transformMenuItems(item.children);\n const transformedMenuItem: SidebarMenuItem =\n item.type === \"group\"\n ? {\n type: \"group\",\n title: item.text,\n childLayout: item.childLayout,\n items: children,\n groupId: item.groupId,\n groupFrom: item.groupFrom,\n }\n : children?.length\n ? {\n type: \"subMenu\",\n childLayout: item.childLayout,\n title: item.text,\n icon: item.icon,\n items: children,\n defaultExpanded: item.defaultExpanded,\n }\n : (omit(item, [\"type\", \"items\", \"children\"]) as SidebarMenuItem);\n return transformedMenuItem;\n });\n}\n\nexport function getMenuById(menuId: string) {\n return menuCache.get(menuId);\n}\n\nexport function fetchMenuById(\n menuId: string,\n runtimeContext: RuntimeContext,\n helpers: RuntimeHelpers\n) {\n let promise = menuPromises.get(menuId);\n if (!promise) {\n promise = _fetchMenuById(menuId, runtimeContext, helpers);\n }\n return promise;\n}\n\nasync function _fetchMenuById(\n menuId: string,\n runtimeContext: RuntimeContext,\n helpers: RuntimeHelpers\n) {\n const menuList = window.STANDALONE_MICRO_APPS\n ? getMenusOfStandaloneApp(menuId, runtimeContext.app.id, helpers)\n : runtimeContext.flags[\"three-level-menu-layout\"]\n ? ((\n await InstalledMicroAppApi_getMenusInfo(menuId, {\n menuObjectId: \"EASYOPS_STORYBOARD_MENU\",\n })\n ).menus as MenuRawData[])\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, helpers);\n if (!menuData) {\n throw new Error(`Menu not found: ${menuId}`);\n }\n\n reorderMenu(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 delete newRuntimeContext.forEachIndex;\n const rootAppId = app[0].appId;\n\n const [computedMenuData, computedMenuItems] = await Promise.all([\n computeMenuData(restMenuData, rootAppId, newRuntimeContext, helpers),\n computeMenuItems(items, newRuntimeContext, helpers),\n ]);\n\n const finalMenuData: SidebarMenu = {\n title: await fetchMenuTitle(computedMenuData),\n ...pick(computedMenuData, [\n \"icon\",\n \"link\",\n \"defaultCollapsed\",\n \"defaultCollapsedBreakpoint\",\n ]),\n menuItems: transformMenuItems(computedMenuItems)!,\n };\n\n // Todo(steve): reconsider the menu cache strategy\n menuCache.set(menuId, finalMenuData);\n}\n"],"mappings":"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"}
@@ -12,8 +12,9 @@ async function fetchMenuTitle(menuData) {
12
12
  return menuData.title;
13
13
  }
14
14
  const cacheKey = JSON.stringify(menuData.titleDataSource);
15
- if (menuTitleCache.has(cacheKey)) {
16
- return menuTitleCache.get(cacheKey);
15
+ const cachedTitle = menuTitleCache.get(cacheKey);
16
+ if (cachedTitle !== undefined) {
17
+ return cachedTitle;
17
18
  }
18
19
  const {
19
20
  objectId,
@@ -1 +1 @@
1
- {"version":3,"file":"fetchMenuTitle.js","names":["_lodash","require","_cmdbSdk","menuTitleCache","Map","fetchMenuTitle","menuData","title","isEmpty","titleDataSource","cacheKey","JSON","stringify","has","get","objectId","instanceId","attributeId","attr","instanceData","InstanceApi_getDetail","fields","Array","isArray","primary","rest","length","join","String","set"],"sources":["../../../src/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,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAGA,MAAME,cAAc,GAAG,IAAIC,GAAG,CAAiB,CAAC;AAEzC,eAAeC,cAAcA,CAClCC,QAAwD,EACxD;EACA,IAAIA,QAAQ,CAACC,KAAK,IAAI,IAAAC,eAAO,EAACF,QAAQ,CAACG,eAAe,CAAC,EAAE;IACvD,OAAOH,QAAQ,CAACC,KAAK;EACvB;EACA,MAAMG,QAAQ,GAAGC,IAAI,CAACC,SAAS,CAACN,QAAQ,CAACG,eAAe,CAAC;EACzD,IAAIN,cAAc,CAACU,GAAG,CAACH,QAAQ,CAAC,EAAE;IAChC,OAAOP,cAAc,CAACW,GAAG,CAACJ,QAAQ,CAAC;EACrC;EACA,MAAM;IAAEK,QAAQ;IAAEC,UAAU;IAAEC;EAAY,CAAC,GAAGX,QAAQ,CAACG,eAAe;EACtE,MAAMS,IAAI,GAAGD,WAAW,aAAXA,WAAW,cAAXA,WAAW,GAAI,MAAM;EAClC,MAAME,YAAY,GAAG,MAAM,IAAAC,8BAAqB,EAACL,QAAQ,EAAEC,UAAU,EAAE;IACrEK,MAAM,EAAEH;EACV,CAAC,CAAC;EACF,IAAIX,KAAa;EACjB,IAAIU,WAAW,KAAK,UAAU,IAAIK,KAAK,CAACC,OAAO,CAACJ,YAAY,CAACD,IAAI,CAAC,CAAC,EAAE;IACnE,MAAM,CAACM,OAAO,EAAE,GAAGC,IAAI,CAAC,GAAGN,YAAY,CAACD,IAAI,CAAC;IAC7CX,KAAK,GAAGkB,IAAI,CAACC,MAAM,GAAG,CAAC,GAAI,GAAEF,OAAQ,IAAGC,IAAI,CAACE,IAAI,CAAC,GAAG,CAAE,GAAE,GAAGC,MAAM,CAACJ,OAAO,CAAC;EAC7E,CAAC,MAAM;IACLjB,KAAK,GAAGqB,MAAM,CAACT,YAAY,CAACD,IAAI,CAAC,CAAC;EACpC;EACAf,cAAc,CAAC0B,GAAG,CAACnB,QAAQ,EAAEH,KAAK,CAAC;EACnC,OAAOA,KAAK;AACd"}
1
+ {"version":3,"file":"fetchMenuTitle.js","names":["_lodash","require","_cmdbSdk","menuTitleCache","Map","fetchMenuTitle","menuData","title","isEmpty","titleDataSource","cacheKey","JSON","stringify","cachedTitle","get","undefined","objectId","instanceId","attributeId","attr","instanceData","InstanceApi_getDetail","fields","Array","isArray","primary","rest","length","join","String","set"],"sources":["../../../src/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): Promise<string> {\n if (menuData.title || isEmpty(menuData.titleDataSource)) {\n return menuData.title;\n }\n const cacheKey = JSON.stringify(menuData.titleDataSource);\n const cachedTitle = menuTitleCache.get(cacheKey);\n if (cachedTitle !== undefined) {\n return cachedTitle;\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,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAGA,MAAME,cAAc,GAAG,IAAIC,GAAG,CAAiB,CAAC;AAEzC,eAAeC,cAAcA,CAClCC,QAAwD,EACvC;EACjB,IAAIA,QAAQ,CAACC,KAAK,IAAI,IAAAC,eAAO,EAACF,QAAQ,CAACG,eAAe,CAAC,EAAE;IACvD,OAAOH,QAAQ,CAACC,KAAK;EACvB;EACA,MAAMG,QAAQ,GAAGC,IAAI,CAACC,SAAS,CAACN,QAAQ,CAACG,eAAe,CAAC;EACzD,MAAMI,WAAW,GAAGV,cAAc,CAACW,GAAG,CAACJ,QAAQ,CAAC;EAChD,IAAIG,WAAW,KAAKE,SAAS,EAAE;IAC7B,OAAOF,WAAW;EACpB;EACA,MAAM;IAAEG,QAAQ;IAAEC,UAAU;IAAEC;EAAY,CAAC,GAAGZ,QAAQ,CAACG,eAAe;EACtE,MAAMU,IAAI,GAAGD,WAAW,aAAXA,WAAW,cAAXA,WAAW,GAAI,MAAM;EAClC,MAAME,YAAY,GAAG,MAAM,IAAAC,8BAAqB,EAACL,QAAQ,EAAEC,UAAU,EAAE;IACrEK,MAAM,EAAEH;EACV,CAAC,CAAC;EACF,IAAIZ,KAAa;EACjB,IAAIW,WAAW,KAAK,UAAU,IAAIK,KAAK,CAACC,OAAO,CAACJ,YAAY,CAACD,IAAI,CAAC,CAAC,EAAE;IACnE,MAAM,CAACM,OAAO,EAAE,GAAGC,IAAI,CAAC,GAAGN,YAAY,CAACD,IAAI,CAAC;IAC7CZ,KAAK,GAAGmB,IAAI,CAACC,MAAM,GAAG,CAAC,GAAI,GAAEF,OAAQ,IAAGC,IAAI,CAACE,IAAI,CAAC,GAAG,CAAE,GAAE,GAAGC,MAAM,CAACJ,OAAO,CAAC;EAC7E,CAAC,MAAM;IACLlB,KAAK,GAAGsB,MAAM,CAACT,YAAY,CAACD,IAAI,CAAC,CAAC;EACpC;EACAhB,cAAc,CAAC2B,GAAG,CAACpB,QAAQ,EAAEH,KAAK,CAAC;EACnC,OAAOA,KAAK;AACd"}
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.js","names":["_constants","require"],"sources":["../../../src/menu/interfaces.ts"],"sourcesContent":["import type { MetaI18n, MicroApp, ResolveConf } from \"@next-core/types\";\nimport type {\n RuntimeHooksMenuHelpers,\n __secret_internals,\n} from \"@next-core/runtime\";\nimport {\n symbolAppId,\n symbolMenuI18nNamespace,\n symbolOverrideApp,\n} from \"./constants.js\";\n\nexport type RuntimeContext = __secret_internals.RuntimeContext;\n\nexport type RuntimeHelpers = RuntimeHooksMenuHelpers;\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 childLayout?: \"default\" | \"category\";\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":";;AAKA,IAAAA,UAAA,GAAAC,OAAA"}
1
+ {"version":3,"file":"interfaces.js","names":["_constants","require"],"sources":["../../../src/menu/interfaces.ts"],"sourcesContent":["import type { MetaI18n, MicroApp, ResolveConf } from \"@next-core/types\";\nimport type {\n RuntimeHooksMenuHelpers,\n __secret_internals,\n} from \"@next-core/runtime\";\nimport {\n symbolAppId,\n symbolMenuI18nNamespace,\n symbolOverrideApp,\n} from \"./constants.js\";\n\nexport type RuntimeContext = __secret_internals.RuntimeContext;\n\nexport type RuntimeHelpers = RuntimeHooksMenuHelpers;\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 childLayout?: \"default\" | \"category\";\n sort?: number;\n if?: string | boolean;\n defaultExpanded?: boolean;\n groupId?: string;\n groupFrom?: 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\nexport interface SidebarMenu {\n /** 菜单标题。 */\n title: string;\n /** 菜单标题对应的图标。 */\n icon?: unknown;\n /** 菜单标题对应的链接地址。 */\n link?: unknown;\n /** 是否默认折叠。 */\n defaultCollapsed?: boolean;\n /** 针对小于特定尺寸的屏幕(例如 1600px),是否默认折叠。 */\n defaultCollapsedBreakpoint?: number;\n /** 菜单项列表。 */\n menuItems: SidebarMenuItem[];\n}\n\n/** 侧边栏菜单项配置。 */\nexport type SidebarMenuItem = SidebarMenuSimpleItem | SidebarMenuGroup;\n\n/** 侧边栏分组菜单项的配置。 */\nexport interface SidebarMenuGroup {\n /** 分组 Id。 */\n groupId?: string;\n\n /** 分组来源。 */\n groupFrom?: string;\n\n /** 分组类型。 */\n type: \"group\" | \"subMenu\";\n\n /** 分组标题。 */\n title: string;\n\n /** {@inheritDoc SidebarMenuSimpleItem.icon } */\n icon?: unknown;\n\n /** 该分组下的子菜单项列表。 */\n items?: SidebarMenuItem[];\n\n /** @internal */\n key?: string;\n\n /** 该分组下的子菜单是否默认展开。 */\n defaultExpanded?: boolean;\n\n /** 子菜单项的布局方式。 */\n childLayout?: \"default\" | \"category\" | \"siteMap\";\n}\n"],"mappings":";;AAKA,IAAAA,UAAA,GAAAC,OAAA"}
@@ -8,7 +8,7 @@ import { pipes } from "@next-core/pipes";
8
8
  import { isEvaluable } from "@next-core/cook";
9
9
  export function computeMenuData(data, overrideAppId, runtimeContext, helpers) {
10
10
  if ("titleDataSource" in data && isObject(data.titleDataSource) && Object.entries(data.titleDataSource).every(_ref => {
11
- var [key, value] = _ref;
11
+ var [, value] = _ref;
12
12
  return value === null || value === "";
13
13
  })) {
14
14
  delete data.titleDataSource;
@@ -1 +1 @@
1
- {"version":3,"file":"computeMenuData.js","names":["symbolAppId","symbolMenuI18nNamespace","symbolOverrideApp","hasOwnProperty","isObject","pipes","isEvaluable","computeMenuData","data","overrideAppId","runtimeContext","helpers","titleDataSource","Object","entries","every","_ref","key","value","if","to","yaml","some","newRuntimeContext","app","id","_helpers$getStoryboar","overrideApp","window","STANDALONE_MICRO_APPS","getStoryboardByAppId","_objectSpread","appendI18nNamespace","asyncComputeRealValue","ignoreSymbols","computeMenuItems","items","Promise","all","map","_ref3","_asyncToGenerator","_ref2","children","rest","_objectWithoutProperties","_excluded","computedRest","computedChildren","_x","apply","arguments"],"sources":["../../../src/menu/computeMenuData.ts"],"sourcesContent":["import type {\n RuntimeContext,\n RuntimeHelpers,\n RuntimeMenuItemRawData,\n RuntimeMenuRawData,\n} from \"./interfaces.js\";\nimport {\n symbolAppId,\n symbolMenuI18nNamespace,\n symbolOverrideApp,\n} from \"./constants.js\";\nimport { hasOwnProperty, isObject } from \"@next-core/utils/general\";\nimport { pipes } from \"@next-core/pipes\";\nimport { isEvaluable } from \"@next-core/cook\";\n\ntype RuntimeMenuRestRawData = Omit<RuntimeMenuRawData, \"app\" | \"items\">;\ntype RuntimeMenuItemRestRawData = Omit<RuntimeMenuItemRawData, \"children\">;\n\nexport function computeMenuData<\n T extends RuntimeMenuRestRawData | RuntimeMenuItemRestRawData\n>(\n data: T,\n overrideAppId: string,\n runtimeContext: RuntimeContext,\n helpers: RuntimeHelpers\n): Promise<T> {\n if (\n \"titleDataSource\" in data &&\n isObject(data.titleDataSource) &&\n Object.entries(data.titleDataSource).every(\n ([key, value]) => value === null || value === \"\"\n )\n ) {\n delete data.titleDataSource;\n }\n if (\"if\" in data && data.if === null) {\n delete data.if;\n }\n if (\"to\" in data && data.to && !isEvaluable(data.to as string)) {\n const yaml = pipes.yaml(data.to as string);\n\n if (\n isObject(yaml) &&\n [\"pathname\", \"search\", \"hash\"].some((key) => hasOwnProperty(yaml, key))\n ) {\n data.to = yaml;\n }\n }\n\n let newRuntimeContext = runtimeContext;\n if (overrideAppId !== runtimeContext.app.id) {\n const overrideApp = window.STANDALONE_MICRO_APPS\n ? data[symbolOverrideApp]\n : helpers.getStoryboardByAppId(overrideAppId)?.app;\n newRuntimeContext = {\n ...runtimeContext,\n overrideApp,\n appendI18nNamespace: data[symbolMenuI18nNamespace],\n };\n }\n return helpers.asyncComputeRealValue(data, newRuntimeContext, {\n ignoreSymbols: true,\n }) as Promise<T>;\n}\n\nexport function computeMenuItems(\n items: RuntimeMenuItemRawData[],\n runtimeContext: RuntimeContext,\n helpers: RuntimeHelpers\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, helpers),\n children && (await computeMenuItems(children, runtimeContext, helpers)),\n ]);\n return {\n ...computedRest,\n children: computedChildren,\n };\n })\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"computeMenuData.js","names":["symbolAppId","symbolMenuI18nNamespace","symbolOverrideApp","hasOwnProperty","isObject","pipes","isEvaluable","computeMenuData","data","overrideAppId","runtimeContext","helpers","titleDataSource","Object","entries","every","_ref","value","if","to","yaml","some","key","newRuntimeContext","app","id","_helpers$getStoryboar","overrideApp","window","STANDALONE_MICRO_APPS","getStoryboardByAppId","_objectSpread","appendI18nNamespace","asyncComputeRealValue","ignoreSymbols","computeMenuItems","items","Promise","all","map","_ref3","_asyncToGenerator","_ref2","children","rest","_objectWithoutProperties","_excluded","computedRest","computedChildren","_x","apply","arguments"],"sources":["../../../src/menu/computeMenuData.ts"],"sourcesContent":["import type {\n RuntimeContext,\n RuntimeHelpers,\n RuntimeMenuItemRawData,\n RuntimeMenuRawData,\n} from \"./interfaces.js\";\nimport {\n symbolAppId,\n symbolMenuI18nNamespace,\n symbolOverrideApp,\n} from \"./constants.js\";\nimport { hasOwnProperty, isObject } from \"@next-core/utils/general\";\nimport { pipes } from \"@next-core/pipes\";\nimport { isEvaluable } from \"@next-core/cook\";\n\ntype RuntimeMenuRestRawData = Omit<RuntimeMenuRawData, \"app\" | \"items\">;\ntype RuntimeMenuItemRestRawData = Omit<RuntimeMenuItemRawData, \"children\">;\n\nexport function computeMenuData<\n T extends RuntimeMenuRestRawData | RuntimeMenuItemRestRawData,\n>(\n data: T,\n overrideAppId: string,\n runtimeContext: RuntimeContext,\n helpers: RuntimeHelpers\n): Promise<T> {\n if (\n \"titleDataSource\" in data &&\n isObject(data.titleDataSource) &&\n Object.entries(data.titleDataSource).every(\n ([, value]) => value === null || value === \"\"\n )\n ) {\n delete data.titleDataSource;\n }\n if (\"if\" in data && data.if === null) {\n delete data.if;\n }\n if (\"to\" in data && data.to && !isEvaluable(data.to as string)) {\n const yaml = pipes.yaml(data.to as string);\n\n if (\n isObject(yaml) &&\n [\"pathname\", \"search\", \"hash\"].some((key) => hasOwnProperty(yaml, key))\n ) {\n data.to = yaml;\n }\n }\n\n let newRuntimeContext = runtimeContext;\n if (overrideAppId !== runtimeContext.app.id) {\n const overrideApp = window.STANDALONE_MICRO_APPS\n ? data[symbolOverrideApp]\n : helpers.getStoryboardByAppId(overrideAppId)?.app;\n newRuntimeContext = {\n ...runtimeContext,\n overrideApp,\n appendI18nNamespace: data[symbolMenuI18nNamespace],\n };\n }\n return helpers.asyncComputeRealValue(data, newRuntimeContext, {\n ignoreSymbols: true,\n }) as Promise<T>;\n}\n\nexport function computeMenuItems(\n items: RuntimeMenuItemRawData[],\n runtimeContext: RuntimeContext,\n helpers: RuntimeHelpers\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, helpers),\n children && (await computeMenuItems(children, runtimeContext, helpers)),\n ]);\n return {\n ...computedRest,\n children: computedChildren,\n };\n })\n );\n}\n"],"mappings":"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"}
@@ -4,7 +4,7 @@ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
4
4
  var _excluded = ["items", "app"];
5
5
  import { InstanceApi_postSearch } from "@next-api-sdk/cmdb-sdk";
6
6
  import { InstalledMicroAppApi_getMenusInfo } from "@next-api-sdk/micro-app-sdk";
7
- import { pick } from "lodash";
7
+ import { omit, pick } from "lodash";
8
8
  import { checkIfOfComputed } from "@next-core/runtime";
9
9
  import { mergeMenu } from "./mergeMenu.js";
10
10
  import { reorderMenu } from "./reorderMenuItems.js";
@@ -14,14 +14,16 @@ import { getMenusOfStandaloneApp } from "./getMenusOfStandaloneApp.js";
14
14
  import { preCheckPermissionsForAny } from "../checkPermissions.js";
15
15
  var menuPromises = new Map();
16
16
  var menuCache = new Map();
17
- function walkMenuItems(menuItems) {
17
+ function transformMenuItems(menuItems) {
18
18
  return menuItems === null || menuItems === void 0 ? void 0 : menuItems.filter(checkIfOfComputed).map(item => {
19
- var children = walkMenuItems(item.children);
20
- return item.type === "group" ? {
19
+ var children = transformMenuItems(item.children);
20
+ var transformedMenuItem = item.type === "group" ? {
21
21
  type: "group",
22
22
  title: item.text,
23
23
  childLayout: item.childLayout,
24
- items: children
24
+ items: children,
25
+ groupId: item.groupId,
26
+ groupFrom: item.groupFrom
25
27
  } : children !== null && children !== void 0 && children.length ? {
26
28
  type: "subMenu",
27
29
  childLayout: item.childLayout,
@@ -29,7 +31,8 @@ function walkMenuItems(menuItems) {
29
31
  icon: item.icon,
30
32
  items: children,
31
33
  defaultExpanded: item.defaultExpanded
32
- } : item;
34
+ } : omit(item, ["type", "items", "children"]);
35
+ return transformedMenuItem;
33
36
  });
34
37
  }
35
38
  export function getMenuById(menuId) {
@@ -101,7 +104,7 @@ function _fetchMenuById2() {
101
104
  var finalMenuData = _objectSpread(_objectSpread({
102
105
  title: yield fetchMenuTitle(computedMenuData)
103
106
  }, pick(computedMenuData, ["icon", "link", "defaultCollapsed", "defaultCollapsedBreakpoint"])), {}, {
104
- menuItems: walkMenuItems(computedMenuItems)
107
+ menuItems: transformMenuItems(computedMenuItems)
105
108
  });
106
109
 
107
110
  // Todo(steve): reconsider the menu cache strategy
@@ -1 +1 @@
1
- {"version":3,"file":"fetchMenuById.js","names":["InstanceApi_postSearch","InstalledMicroAppApi_getMenusInfo","pick","checkIfOfComputed","mergeMenu","reorderMenu","computeMenuItems","computeMenuData","fetchMenuTitle","getMenusOfStandaloneApp","preCheckPermissionsForAny","menuPromises","Map","menuCache","walkMenuItems","menuItems","filter","map","item","children","type","title","text","childLayout","items","length","icon","defaultExpanded","getMenuById","menuId","get","fetchMenuById","runtimeContext","helpers","promise","_fetchMenuById","_x","_x2","_x3","_fetchMenuById2","apply","arguments","_asyncToGenerator","menuList","window","STANDALONE_MICRO_APPS","app","id","flags","menuObjectId","menus","page","page_size","fields","link","titleDataSource","defaultCollapsed","defaultCollapsedBreakpoint","injectMenuGroupId","dynamicItems","itemsResolve","i18n","query","$eq","$size","$gt","list","menuData","Error","concat","restMenuData","_objectWithoutProperties","_excluded","newRuntimeContext","_objectSpread","pendingPermissionsPreCheck","tplStateStoreId","forEachItem","forEachIndex","rootAppId","appId","computedMenuData","computedMenuItems","Promise","all","finalMenuData","set"],"sources":["../../../src/menu/fetchMenuById.ts"],"sourcesContent":["import { InstanceApi_postSearch } from \"@next-api-sdk/cmdb-sdk\";\nimport { InstalledMicroAppApi_getMenusInfo } from \"@next-api-sdk/micro-app-sdk\";\nimport { pick } from \"lodash\";\nimport { checkIfOfComputed } from \"@next-core/runtime\";\nimport { mergeMenu } from \"./mergeMenu.js\";\nimport { reorderMenu } from \"./reorderMenuItems.js\";\nimport type {\n MenuRawData,\n RuntimeContext,\n RuntimeHelpers,\n RuntimeMenuItemRawData,\n} from \"./interfaces.js\";\nimport { computeMenuItems, computeMenuData } from \"./computeMenuData.js\";\nimport { fetchMenuTitle } from \"./fetchMenuTitle.js\";\nimport { getMenusOfStandaloneApp } from \"./getMenusOfStandaloneApp.js\";\nimport { preCheckPermissionsForAny } from \"../checkPermissions.js\";\n\nconst menuPromises = new Map<string, Promise<void>>();\n\nconst menuCache = new Map<string, unknown>();\n\nfunction walkMenuItems(menuItems: RuntimeMenuItemRawData[]): unknown[] {\n return menuItems?.filter(checkIfOfComputed).map((item) => {\n const children = walkMenuItems(item.children!);\n return item.type === \"group\"\n ? {\n type: \"group\",\n title: item.text,\n childLayout: item.childLayout,\n items: children,\n }\n : children?.length\n ? {\n type: \"subMenu\",\n childLayout: item.childLayout,\n title: item.text,\n icon: item.icon,\n items: children,\n defaultExpanded: item.defaultExpanded,\n }\n : item;\n });\n}\n\nexport function getMenuById(menuId: string) {\n return menuCache.get(menuId);\n}\n\nexport function fetchMenuById(\n menuId: string,\n runtimeContext: RuntimeContext,\n helpers: RuntimeHelpers\n) {\n let promise = menuPromises.get(menuId);\n if (!promise) {\n promise = _fetchMenuById(menuId, runtimeContext, helpers);\n }\n return promise;\n}\n\nasync function _fetchMenuById(\n menuId: string,\n runtimeContext: RuntimeContext,\n helpers: RuntimeHelpers\n) {\n const menuList = window.STANDALONE_MICRO_APPS\n ? getMenusOfStandaloneApp(menuId, runtimeContext.app.id, helpers)\n : runtimeContext.flags[\"three-level-menu-layout\"]\n ? ((\n await InstalledMicroAppApi_getMenusInfo(menuId, {\n menuObjectId: \"EASYOPS_STORYBOARD_MENU\",\n })\n ).menus as MenuRawData[])\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, helpers);\n if (!menuData) {\n throw new Error(`Menu not found: ${menuId}`);\n }\n\n reorderMenu(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 delete newRuntimeContext.forEachIndex;\n const rootAppId = app[0].appId;\n\n const [computedMenuData, computedMenuItems] = await Promise.all([\n computeMenuData(restMenuData, rootAppId, newRuntimeContext, helpers),\n computeMenuItems(items, newRuntimeContext, helpers),\n ]);\n\n const finalMenuData = {\n title: await fetchMenuTitle(computedMenuData),\n ...pick(computedMenuData, [\n \"icon\",\n \"link\",\n \"defaultCollapsed\",\n \"defaultCollapsedBreakpoint\",\n ]),\n menuItems: walkMenuItems(computedMenuItems),\n };\n\n // Todo(steve): reconsider the menu cache strategy\n menuCache.set(menuId, finalMenuData);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"fetchMenuById.js","names":["InstanceApi_postSearch","InstalledMicroAppApi_getMenusInfo","omit","pick","checkIfOfComputed","mergeMenu","reorderMenu","computeMenuItems","computeMenuData","fetchMenuTitle","getMenusOfStandaloneApp","preCheckPermissionsForAny","menuPromises","Map","menuCache","transformMenuItems","menuItems","filter","map","item","children","transformedMenuItem","type","title","text","childLayout","items","groupId","groupFrom","length","icon","defaultExpanded","getMenuById","menuId","get","fetchMenuById","runtimeContext","helpers","promise","_fetchMenuById","_x","_x2","_x3","_fetchMenuById2","apply","arguments","_asyncToGenerator","menuList","window","STANDALONE_MICRO_APPS","app","id","flags","menuObjectId","menus","page","page_size","fields","link","titleDataSource","defaultCollapsed","defaultCollapsedBreakpoint","injectMenuGroupId","dynamicItems","itemsResolve","i18n","query","$eq","$size","$gt","list","menuData","Error","concat","restMenuData","_objectWithoutProperties","_excluded","newRuntimeContext","_objectSpread","pendingPermissionsPreCheck","tplStateStoreId","forEachItem","forEachIndex","rootAppId","appId","computedMenuData","computedMenuItems","Promise","all","finalMenuData","set"],"sources":["../../../src/menu/fetchMenuById.ts"],"sourcesContent":["import { InstanceApi_postSearch } from \"@next-api-sdk/cmdb-sdk\";\nimport { InstalledMicroAppApi_getMenusInfo } from \"@next-api-sdk/micro-app-sdk\";\nimport { omit, pick } from \"lodash\";\nimport { checkIfOfComputed } from \"@next-core/runtime\";\nimport { mergeMenu } from \"./mergeMenu.js\";\nimport { reorderMenu } from \"./reorderMenuItems.js\";\nimport type {\n MenuRawData,\n RuntimeContext,\n RuntimeHelpers,\n RuntimeMenuItemRawData,\n SidebarMenu,\n SidebarMenuItem,\n} from \"./interfaces.js\";\nimport { computeMenuItems, computeMenuData } from \"./computeMenuData.js\";\nimport { fetchMenuTitle } from \"./fetchMenuTitle.js\";\nimport { getMenusOfStandaloneApp } from \"./getMenusOfStandaloneApp.js\";\nimport { preCheckPermissionsForAny } from \"../checkPermissions.js\";\n\nconst menuPromises = new Map<string, Promise<void>>();\n\nconst menuCache = new Map<string, SidebarMenu>();\n\nfunction transformMenuItems(\n menuItems: RuntimeMenuItemRawData[] | undefined\n): SidebarMenuItem[] | undefined {\n return menuItems?.filter(checkIfOfComputed).map((item) => {\n const children = transformMenuItems(item.children);\n const transformedMenuItem: SidebarMenuItem =\n item.type === \"group\"\n ? {\n type: \"group\",\n title: item.text,\n childLayout: item.childLayout,\n items: children,\n groupId: item.groupId,\n groupFrom: item.groupFrom,\n }\n : children?.length\n ? {\n type: \"subMenu\",\n childLayout: item.childLayout,\n title: item.text,\n icon: item.icon,\n items: children,\n defaultExpanded: item.defaultExpanded,\n }\n : (omit(item, [\"type\", \"items\", \"children\"]) as SidebarMenuItem);\n return transformedMenuItem;\n });\n}\n\nexport function getMenuById(menuId: string) {\n return menuCache.get(menuId);\n}\n\nexport function fetchMenuById(\n menuId: string,\n runtimeContext: RuntimeContext,\n helpers: RuntimeHelpers\n) {\n let promise = menuPromises.get(menuId);\n if (!promise) {\n promise = _fetchMenuById(menuId, runtimeContext, helpers);\n }\n return promise;\n}\n\nasync function _fetchMenuById(\n menuId: string,\n runtimeContext: RuntimeContext,\n helpers: RuntimeHelpers\n) {\n const menuList = window.STANDALONE_MICRO_APPS\n ? getMenusOfStandaloneApp(menuId, runtimeContext.app.id, helpers)\n : runtimeContext.flags[\"three-level-menu-layout\"]\n ? ((\n await InstalledMicroAppApi_getMenusInfo(menuId, {\n menuObjectId: \"EASYOPS_STORYBOARD_MENU\",\n })\n ).menus as MenuRawData[])\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, helpers);\n if (!menuData) {\n throw new Error(`Menu not found: ${menuId}`);\n }\n\n reorderMenu(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 delete newRuntimeContext.forEachIndex;\n const rootAppId = app[0].appId;\n\n const [computedMenuData, computedMenuItems] = await Promise.all([\n computeMenuData(restMenuData, rootAppId, newRuntimeContext, helpers),\n computeMenuItems(items, newRuntimeContext, helpers),\n ]);\n\n const finalMenuData: SidebarMenu = {\n title: await fetchMenuTitle(computedMenuData),\n ...pick(computedMenuData, [\n \"icon\",\n \"link\",\n \"defaultCollapsed\",\n \"defaultCollapsedBreakpoint\",\n ]),\n menuItems: transformMenuItems(computedMenuItems)!,\n };\n\n // Todo(steve): reconsider the menu cache strategy\n menuCache.set(menuId, finalMenuData);\n}\n"],"mappings":"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"}
@@ -11,8 +11,9 @@ function _fetchMenuTitle() {
11
11
  return menuData.title;
12
12
  }
13
13
  var cacheKey = JSON.stringify(menuData.titleDataSource);
14
- if (menuTitleCache.has(cacheKey)) {
15
- return menuTitleCache.get(cacheKey);
14
+ var cachedTitle = menuTitleCache.get(cacheKey);
15
+ if (cachedTitle !== undefined) {
16
+ return cachedTitle;
16
17
  }
17
18
  var {
18
19
  objectId,
@@ -1 +1 @@
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/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,CAAiB,CAAC;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
+ {"version":3,"file":"fetchMenuTitle.js","names":["isEmpty","InstanceApi_getDetail","menuTitleCache","Map","fetchMenuTitle","_x","_fetchMenuTitle","apply","arguments","_asyncToGenerator","menuData","title","titleDataSource","cacheKey","JSON","stringify","cachedTitle","get","undefined","objectId","instanceId","attributeId","attr","instanceData","fields","Array","isArray","primary","rest","length","concat","join","String","set"],"sources":["../../../src/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): Promise<string> {\n if (menuData.title || isEmpty(menuData.titleDataSource)) {\n return menuData.title;\n }\n const cacheKey = JSON.stringify(menuData.titleDataSource);\n const cachedTitle = menuTitleCache.get(cacheKey);\n if (cachedTitle !== undefined) {\n return cachedTitle;\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,CAAiB,CAAC;AAEhD,gBAAsBC,cAAcA,CAAAC,EAAA;EAAA,OAAAC,eAAA,CAAAC,KAAA,OAAAC,SAAA;AAAA;AAyBnC,SAAAF,gBAAA;EAAAA,eAAA,GAAAG,iBAAA,CAzBM,WACLC,QAAwD,EACvC;IACjB,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,IAAMI,WAAW,GAAGd,cAAc,CAACe,GAAG,CAACJ,QAAQ,CAAC;IAChD,IAAIG,WAAW,KAAKE,SAAS,EAAE;MAC7B,OAAOF,WAAW;IACpB;IACA,IAAM;MAAEG,QAAQ;MAAEC,UAAU;MAAEC;IAAY,CAAC,GAAGX,QAAQ,CAACE,eAAe;IACtE,IAAMU,IAAI,GAAGD,WAAW,aAAXA,WAAW,cAAXA,WAAW,GAAI,MAAM;IAClC,IAAME,YAAY,SAAStB,qBAAqB,CAACkB,QAAQ,EAAEC,UAAU,EAAE;MACrEI,MAAM,EAAEF;IACV,CAAC,CAAC;IACF,IAAIX,KAAa;IACjB,IAAIU,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;MAC7CX,KAAK,GAAGiB,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;MACLhB,KAAK,GAAGqB,MAAM,CAACT,YAAY,CAACD,IAAI,CAAC,CAAC;IACpC;IACApB,cAAc,CAAC+B,GAAG,CAACpB,QAAQ,EAAEF,KAAK,CAAC;IACnC,OAAOA,KAAK;EACd,CAAC;EAAA,OAAAL,eAAA,CAAAC,KAAA,OAAAC,SAAA;AAAA"}
@@ -5,4 +5,8 @@ import { symbolAppId, symbolMenuI18nNamespace, symbolOverrideApp } from "./const
5
5
  /** 原始菜单项数据。 */
6
6
 
7
7
  /** 侧边栏基本菜单项的配置。 */
8
+
9
+ /** 侧边栏菜单项配置。 */
10
+
11
+ /** 侧边栏分组菜单项的配置。 */
8
12
  //# sourceMappingURL=interfaces.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.js","names":["symbolAppId","symbolMenuI18nNamespace","symbolOverrideApp"],"sources":["../../../src/menu/interfaces.ts"],"sourcesContent":["import type { MetaI18n, MicroApp, ResolveConf } from \"@next-core/types\";\nimport type {\n RuntimeHooksMenuHelpers,\n __secret_internals,\n} from \"@next-core/runtime\";\nimport {\n symbolAppId,\n symbolMenuI18nNamespace,\n symbolOverrideApp,\n} from \"./constants.js\";\n\nexport type RuntimeContext = __secret_internals.RuntimeContext;\n\nexport type RuntimeHelpers = RuntimeHooksMenuHelpers;\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 childLayout?: \"default\" | \"category\";\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":"AAKA,SACEA,WAAW,EACXC,uBAAuB,EACvBC,iBAAiB,QACZ,gBAAgB;;AAMvB;;AAuBA;;AAiBA"}
1
+ {"version":3,"file":"interfaces.js","names":["symbolAppId","symbolMenuI18nNamespace","symbolOverrideApp"],"sources":["../../../src/menu/interfaces.ts"],"sourcesContent":["import type { MetaI18n, MicroApp, ResolveConf } from \"@next-core/types\";\nimport type {\n RuntimeHooksMenuHelpers,\n __secret_internals,\n} from \"@next-core/runtime\";\nimport {\n symbolAppId,\n symbolMenuI18nNamespace,\n symbolOverrideApp,\n} from \"./constants.js\";\n\nexport type RuntimeContext = __secret_internals.RuntimeContext;\n\nexport type RuntimeHelpers = RuntimeHooksMenuHelpers;\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 childLayout?: \"default\" | \"category\";\n sort?: number;\n if?: string | boolean;\n defaultExpanded?: boolean;\n groupId?: string;\n groupFrom?: 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\nexport interface SidebarMenu {\n /** 菜单标题。 */\n title: string;\n /** 菜单标题对应的图标。 */\n icon?: unknown;\n /** 菜单标题对应的链接地址。 */\n link?: unknown;\n /** 是否默认折叠。 */\n defaultCollapsed?: boolean;\n /** 针对小于特定尺寸的屏幕(例如 1600px),是否默认折叠。 */\n defaultCollapsedBreakpoint?: number;\n /** 菜单项列表。 */\n menuItems: SidebarMenuItem[];\n}\n\n/** 侧边栏菜单项配置。 */\nexport type SidebarMenuItem = SidebarMenuSimpleItem | SidebarMenuGroup;\n\n/** 侧边栏分组菜单项的配置。 */\nexport interface SidebarMenuGroup {\n /** 分组 Id。 */\n groupId?: string;\n\n /** 分组来源。 */\n groupFrom?: string;\n\n /** 分组类型。 */\n type: \"group\" | \"subMenu\";\n\n /** 分组标题。 */\n title: string;\n\n /** {@inheritDoc SidebarMenuSimpleItem.icon } */\n icon?: unknown;\n\n /** 该分组下的子菜单项列表。 */\n items?: SidebarMenuItem[];\n\n /** @internal */\n key?: string;\n\n /** 该分组下的子菜单是否默认展开。 */\n defaultExpanded?: boolean;\n\n /** 子菜单项的布局方式。 */\n childLayout?: \"default\" | \"category\" | \"siteMap\";\n}\n"],"mappings":"AAKA,SACEA,WAAW,EACXC,uBAAuB,EACvBC,iBAAiB,QACZ,gBAAgB;;AAMvB;;AAuBA;;AAkBA;;AAkEA;;AAGA"}
@@ -1,3 +1,3 @@
1
- import type { RuntimeContext, RuntimeHelpers } from "./interfaces.js";
2
- export declare function getMenuById(menuId: string): unknown;
1
+ import type { RuntimeContext, RuntimeHelpers, SidebarMenu } from "./interfaces.js";
2
+ export declare function getMenuById(menuId: string): SidebarMenu | undefined;
3
3
  export declare function fetchMenuById(menuId: string, runtimeContext: RuntimeContext, helpers: RuntimeHelpers): Promise<void>;
@@ -1,2 +1,2 @@
1
1
  import type { MenuRawData } from "./interfaces.js";
2
- export declare function fetchMenuTitle(menuData: Pick<MenuRawData, "title" | "titleDataSource">): Promise<string | undefined>;
2
+ export declare function fetchMenuTitle(menuData: Pick<MenuRawData, "title" | "titleDataSource">): Promise<string>;
@@ -34,6 +34,7 @@ export type MenuItemRawData = Omit<SidebarMenuSimpleItem, "type"> & {
34
34
  if?: string | boolean;
35
35
  defaultExpanded?: boolean;
36
36
  groupId?: string;
37
+ groupFrom?: string;
37
38
  };
38
39
  interface TitleDataSource {
39
40
  objectId: string;
@@ -75,4 +76,41 @@ export interface RuntimeMenuRawData extends MenuRawData {
75
76
  [symbolMenuI18nNamespace]?: string;
76
77
  [symbolOverrideApp]?: MicroApp;
77
78
  }
79
+ export interface SidebarMenu {
80
+ /** 菜单标题。 */
81
+ title: string;
82
+ /** 菜单标题对应的图标。 */
83
+ icon?: unknown;
84
+ /** 菜单标题对应的链接地址。 */
85
+ link?: unknown;
86
+ /** 是否默认折叠。 */
87
+ defaultCollapsed?: boolean;
88
+ /** 针对小于特定尺寸的屏幕(例如 1600px),是否默认折叠。 */
89
+ defaultCollapsedBreakpoint?: number;
90
+ /** 菜单项列表。 */
91
+ menuItems: SidebarMenuItem[];
92
+ }
93
+ /** 侧边栏菜单项配置。 */
94
+ export type SidebarMenuItem = SidebarMenuSimpleItem | SidebarMenuGroup;
95
+ /** 侧边栏分组菜单项的配置。 */
96
+ export interface SidebarMenuGroup {
97
+ /** 分组 Id。 */
98
+ groupId?: string;
99
+ /** 分组来源。 */
100
+ groupFrom?: string;
101
+ /** 分组类型。 */
102
+ type: "group" | "subMenu";
103
+ /** 分组标题。 */
104
+ title: string;
105
+ /** {@inheritDoc SidebarMenuSimpleItem.icon } */
106
+ icon?: unknown;
107
+ /** 该分组下的子菜单项列表。 */
108
+ items?: SidebarMenuItem[];
109
+ /** @internal */
110
+ key?: string;
111
+ /** 该分组下的子菜单是否默认展开。 */
112
+ defaultExpanded?: boolean;
113
+ /** 子菜单项的布局方式。 */
114
+ childLayout?: "default" | "category" | "siteMap";
115
+ }
78
116
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@next-core/easyops-runtime",
3
- "version": "0.6.34",
3
+ "version": "0.6.35",
4
4
  "homepage": "https://github.com/easyops-cn/next-core/tree/v3/packages/easyops-runtime",
5
5
  "license": "GPL-3.0",
6
6
  "repository": {
@@ -59,5 +59,5 @@
59
59
  "jest-websocket-mock": "^2.4.1",
60
60
  "whatwg-fetch": "^3.6.18"
61
61
  },
62
- "gitHead": "5cd16e207c1077b78a54ab87d5f1130bab78d86b"
62
+ "gitHead": "68162f822ee51b6a0fa61a65309b6ecad7a1992f"
63
63
  }