@next-core/easyops-runtime 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/cjs/auth.js +57 -0
  2. package/dist/cjs/auth.js.map +1 -0
  3. package/dist/cjs/checkPermissions.js +101 -0
  4. package/dist/cjs/checkPermissions.js.map +1 -0
  5. package/dist/cjs/index.js +14 -8
  6. package/dist/cjs/index.js.map +1 -1
  7. package/dist/cjs/menu/computeMenuData.js +36 -0
  8. package/dist/cjs/menu/computeMenuData.js.map +1 -0
  9. package/dist/cjs/menu/constants.js +13 -0
  10. package/dist/cjs/menu/constants.js.map +1 -0
  11. package/dist/cjs/menu/fetchMenuById.js +102 -0
  12. package/dist/cjs/menu/fetchMenuById.js.map +1 -0
  13. package/dist/cjs/menu/fetchMenuTitle.js +37 -0
  14. package/dist/cjs/menu/fetchMenuTitle.js.map +1 -0
  15. package/dist/cjs/menu/getMenusOfStandaloneApp.js +26 -0
  16. package/dist/cjs/menu/getMenusOfStandaloneApp.js.map +1 -0
  17. package/dist/cjs/menu/index.js +19 -0
  18. package/dist/cjs/menu/index.js.map +1 -0
  19. package/dist/cjs/menu/interfaces.js +4 -0
  20. package/dist/cjs/menu/interfaces.js.map +1 -0
  21. package/dist/cjs/menu/loadDynamicMenuItems.js +27 -0
  22. package/dist/cjs/menu/loadDynamicMenuItems.js.map +1 -0
  23. package/dist/cjs/menu/mergeMenu.js +73 -0
  24. package/dist/cjs/menu/mergeMenu.js.map +1 -0
  25. package/dist/cjs/menu/reorderMenuItems.js +20 -0
  26. package/dist/cjs/menu/reorderMenuItems.js.map +1 -0
  27. package/dist/esm/auth.js +47 -0
  28. package/dist/esm/auth.js.map +1 -0
  29. package/dist/esm/checkPermissions.js +106 -0
  30. package/dist/esm/checkPermissions.js.map +1 -0
  31. package/dist/esm/index.js +11 -1
  32. package/dist/esm/index.js.map +1 -1
  33. package/dist/esm/menu/computeMenuData.js +37 -0
  34. package/dist/esm/menu/computeMenuData.js.map +1 -0
  35. package/dist/esm/menu/constants.js +4 -0
  36. package/dist/esm/menu/constants.js.map +1 -0
  37. package/dist/esm/menu/fetchMenuById.js +104 -0
  38. package/dist/esm/menu/fetchMenuById.js.map +1 -0
  39. package/dist/esm/menu/fetchMenuTitle.js +38 -0
  40. package/dist/esm/menu/fetchMenuTitle.js.map +1 -0
  41. package/dist/esm/menu/getMenusOfStandaloneApp.js +18 -0
  42. package/dist/esm/menu/getMenusOfStandaloneApp.js.map +1 -0
  43. package/dist/esm/menu/index.js +2 -0
  44. package/dist/esm/menu/index.js.map +1 -0
  45. package/dist/esm/menu/interfaces.js +8 -0
  46. package/dist/esm/menu/interfaces.js.map +1 -0
  47. package/dist/esm/menu/loadDynamicMenuItems.js +27 -0
  48. package/dist/esm/menu/loadDynamicMenuItems.js.map +1 -0
  49. package/dist/esm/menu/mergeMenu.js +77 -0
  50. package/dist/esm/menu/mergeMenu.js.map +1 -0
  51. package/dist/esm/menu/reorderMenuItems.js +14 -0
  52. package/dist/esm/menu/reorderMenuItems.js.map +1 -0
  53. package/dist/types/auth.d.ts +19 -0
  54. package/dist/types/checkPermissions.d.ts +16 -0
  55. package/dist/types/index.d.ts +8 -1
  56. package/dist/types/menu/computeMenuData.d.ts +6 -0
  57. package/dist/types/menu/constants.d.ts +3 -0
  58. package/dist/types/menu/fetchMenuById.d.ts +3 -0
  59. package/dist/types/menu/fetchMenuTitle.d.ts +2 -0
  60. package/dist/types/menu/getMenusOfStandaloneApp.d.ts +2 -0
  61. package/dist/types/menu/index.d.ts +1 -0
  62. package/dist/types/menu/interfaces.d.ts +77 -0
  63. package/dist/types/menu/loadDynamicMenuItems.d.ts +2 -0
  64. package/dist/types/menu/mergeMenu.d.ts +2 -0
  65. package/dist/types/menu/reorderMenuItems.d.ts +2 -0
  66. package/package.json +5 -4
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.authenticate = authenticate;
7
+ exports.getAuth = getAuth;
8
+ exports.isLoggedIn = isLoggedIn;
9
+ exports.logout = logout;
10
+ var _checkPermissions = require("./checkPermissions.js");
11
+ const auth = {};
12
+
13
+ /** @internal */
14
+
15
+ /** @internal */
16
+ function authenticate(newAuth) {
17
+ Object.assign(auth, {
18
+ org: newAuth.org,
19
+ username: newAuth.username,
20
+ userInstanceId: newAuth.userInstanceId,
21
+ loginFrom: newAuth.loginFrom,
22
+ accessRule: newAuth.accessRule,
23
+ isAdmin: newAuth.isAdmin,
24
+ csrfToken: newAuth.csrfToken,
25
+ license: newAuth.license,
26
+ userShowValue: newAuth.userShowValue
27
+ });
28
+ }
29
+
30
+ /**
31
+ * 获取当前登录认证信息。
32
+ *
33
+ * @returns 当前登录认证信息。
34
+ */
35
+ function getAuth() {
36
+ return {
37
+ ...auth
38
+ };
39
+ }
40
+
41
+ /** @internal */
42
+ function logout() {
43
+ for (const key of Object.keys(auth)) {
44
+ auth[key] = undefined;
45
+ }
46
+ (0, _checkPermissions.resetPermissionPreChecks)();
47
+ }
48
+
49
+ /**
50
+ * 查看当前是否已登录。
51
+ *
52
+ * @returns 当前是否已登录。
53
+ */
54
+ function isLoggedIn() {
55
+ return auth.username !== undefined;
56
+ }
57
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","names":["_checkPermissions","require","auth","authenticate","newAuth","Object","assign","org","username","userInstanceId","loginFrom","accessRule","isAdmin","csrfToken","license","userShowValue","getAuth","logout","key","keys","undefined","resetPermissionPreChecks","isLoggedIn"],"sources":["../../src/auth.ts"],"sourcesContent":["import type { AuthApi_CheckLoginResponseBody } from \"@next-api-sdk/api-gateway-sdk\";\nimport { resetPermissionPreChecks } from \"./checkPermissions.js\";\n\nconst auth: AuthInfo = {};\n\n/** @internal */\nexport type AuthInfo = Omit<AuthApi_CheckLoginResponseBody, \"loggedIn\">;\n\n/** @internal */\nexport function authenticate(newAuth: AuthInfo): void {\n Object.assign(auth, {\n org: newAuth.org,\n username: newAuth.username,\n userInstanceId: newAuth.userInstanceId,\n loginFrom: newAuth.loginFrom,\n accessRule: newAuth.accessRule,\n isAdmin: newAuth.isAdmin,\n csrfToken: newAuth.csrfToken,\n license: newAuth.license,\n userShowValue: newAuth.userShowValue,\n });\n}\n\n/**\n * 获取当前登录认证信息。\n *\n * @returns 当前登录认证信息。\n */\nexport function getAuth(): AuthInfo {\n return {\n ...auth,\n };\n}\n\n/** @internal */\nexport function logout(): void {\n for (const key of Object.keys(auth) as (keyof AuthInfo)[]) {\n auth[key] = undefined;\n }\n resetPermissionPreChecks();\n}\n\n/**\n * 查看当前是否已登录。\n *\n * @returns 当前是否已登录。\n */\nexport function isLoggedIn(): boolean {\n return auth.username !== undefined;\n}\n"],"mappings":";;;;;;;;;AACA,IAAAA,iBAAA,GAAAC,OAAA;AAEA,MAAMC,IAAc,GAAG,CAAC,CAAC;;AAEzB;;AAGA;AACO,SAASC,YAAYA,CAACC,OAAiB,EAAQ;EACpDC,MAAM,CAACC,MAAM,CAACJ,IAAI,EAAE;IAClBK,GAAG,EAAEH,OAAO,CAACG,GAAG;IAChBC,QAAQ,EAAEJ,OAAO,CAACI,QAAQ;IAC1BC,cAAc,EAAEL,OAAO,CAACK,cAAc;IACtCC,SAAS,EAAEN,OAAO,CAACM,SAAS;IAC5BC,UAAU,EAAEP,OAAO,CAACO,UAAU;IAC9BC,OAAO,EAAER,OAAO,CAACQ,OAAO;IACxBC,SAAS,EAAET,OAAO,CAACS,SAAS;IAC5BC,OAAO,EAAEV,OAAO,CAACU,OAAO;IACxBC,aAAa,EAAEX,OAAO,CAACW;EACzB,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASC,OAAOA,CAAA,EAAa;EAClC,OAAO;IACL,GAAGd;EACL,CAAC;AACH;;AAEA;AACO,SAASe,MAAMA,CAAA,EAAS;EAC7B,KAAK,MAAMC,GAAG,IAAIb,MAAM,CAACc,IAAI,CAACjB,IAAI,CAAC,EAAwB;IACzDA,IAAI,CAACgB,GAAG,CAAC,GAAGE,SAAS;EACvB;EACA,IAAAC,0CAAwB,GAAE;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASC,UAAUA,CAAA,EAAY;EACpC,OAAOpB,IAAI,CAACM,QAAQ,KAAKY,SAAS;AACpC"}
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.checkPermissions = checkPermissions;
7
+ exports.preCheckPermissions = preCheckPermissions;
8
+ exports.preCheckPermissionsForAny = preCheckPermissionsForAny;
9
+ exports.preCheckPermissionsForBrickOrRoute = preCheckPermissionsForBrickOrRoute;
10
+ exports.resetPermissionPreChecks = resetPermissionPreChecks;
11
+ exports.validatePermissions = validatePermissions;
12
+ var _lodash = require("lodash");
13
+ var _storyboard = require("@next-core/utils/storyboard");
14
+ var _microAppSdk = require("@next-api-sdk/micro-app-sdk");
15
+ var _auth = require("./auth.js");
16
+ const checkedPermissions = [];
17
+ const permissionMap = new Map();
18
+ function preCheckPermissions(storyboard) {
19
+ if ((0, _auth.isLoggedIn)() && !(0, _auth.getAuth)().isAdmin) {
20
+ const usedActions = (0, _storyboard.scanPermissionActionsInStoryboard)(storyboard);
21
+ return validatePermissions(usedActions);
22
+ }
23
+ }
24
+ async function preCheckPermissionsForBrickOrRoute(container, asyncComputeRealValue) {
25
+ if ((0, _auth.isLoggedIn)() && !(0, _auth.getAuth)().isAdmin && Array.isArray(container.permissionsPreCheck)) {
26
+ const actions = await asyncComputeRealValue(container.permissionsPreCheck);
27
+ return validatePermissions(actions);
28
+ }
29
+ }
30
+ function preCheckPermissionsForAny(data) {
31
+ if ((0, _auth.isLoggedIn)() && !(0, _auth.getAuth)().isAdmin) {
32
+ const usedActions = (0, _storyboard.scanPermissionActionsInAny)(data);
33
+ return validatePermissions(usedActions);
34
+ }
35
+ }
36
+ async function validatePermissions(usedActions) {
37
+ // Do not request known actions.
38
+ const actions = (0, _lodash.difference)(usedActions, [...checkedPermissions]);
39
+ if (actions.length === 0) {
40
+ return;
41
+ }
42
+ checkedPermissions.push(...actions);
43
+ try {
44
+ const result = await (0, _microAppSdk.PermissionApi_validatePermissions)({
45
+ actions
46
+ });
47
+ for (const item of result.actions) {
48
+ permissionMap.set(item.action, item.authorizationStatus);
49
+ if (item.authorizationStatus === "undefined") {
50
+ // eslint-disable-next-line no-console
51
+ console.error(`Undefined permission action: "${item.action}"`);
52
+ }
53
+ }
54
+ } catch (error) {
55
+ // Allow pre-check to fail, and
56
+ // make it not crash when the backend service is not updated.
57
+ // eslint-disable-next-line no-console
58
+ console.error("Pre-check permissions failed", error);
59
+ }
60
+ }
61
+
62
+ /**
63
+ * Check the current logged-in user whether to have all
64
+ * permissions of actions passed to it.
65
+ *
66
+ * @param actions - Required permission actions.
67
+ */
68
+ function checkPermissions(...actions) {
69
+ if (!(0, _auth.isLoggedIn)()) {
70
+ return false;
71
+ }
72
+ if ((0, _auth.getAuth)().isAdmin) {
73
+ return true;
74
+ }
75
+ for (const action of actions) {
76
+ // Only **exclusively authorized** permissions are ok.
77
+ // Those scenarios below will fail:
78
+ // - unauthorized actions (pre-check results)
79
+ // - undefined actions (pre-check results)
80
+ // - Un-pre-checked or pre-check failed
81
+ switch (permissionMap.get(action)) {
82
+ case "unauthorized":
83
+ case "undefined":
84
+ return false;
85
+ case undefined:
86
+ // eslint-disable-next-line no-console
87
+ console.error(`Un-checked permission action: "${action}", please make sure the permission to check is defined in permissionsPreCheck.`);
88
+ return false;
89
+ }
90
+ }
91
+ return true;
92
+ }
93
+
94
+ /**
95
+ * Reset permission pre-checks after logged-out.
96
+ */
97
+ function resetPermissionPreChecks() {
98
+ checkedPermissions.length = 0;
99
+ permissionMap.clear();
100
+ }
101
+ //# sourceMappingURL=checkPermissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkPermissions.js","names":["_lodash","require","_storyboard","_microAppSdk","_auth","checkedPermissions","permissionMap","Map","preCheckPermissions","storyboard","isLoggedIn","getAuth","isAdmin","usedActions","scanPermissionActionsInStoryboard","validatePermissions","preCheckPermissionsForBrickOrRoute","container","asyncComputeRealValue","Array","isArray","permissionsPreCheck","actions","preCheckPermissionsForAny","data","scanPermissionActionsInAny","difference","length","push","result","PermissionApi_validatePermissions","item","set","action","authorizationStatus","console","error","checkPermissions","get","undefined","resetPermissionPreChecks","clear"],"sources":["../../src/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 { PermissionApi_validatePermissions } from \"@next-api-sdk/micro-app-sdk\";\nimport { getAuth, isLoggedIn } from \"./auth.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 (isLoggedIn() && !getAuth().isAdmin) {\n const usedActions = scanPermissionActionsInStoryboard(storyboard);\n return validatePermissions(usedActions);\n }\n}\n\nexport async function preCheckPermissionsForBrickOrRoute(\n container: BrickConf | RouteConf,\n asyncComputeRealValue: (value: unknown) => Promise<unknown>\n) {\n if (\n isLoggedIn() &&\n !getAuth().isAdmin &&\n Array.isArray(container.permissionsPreCheck)\n ) {\n const actions = (await asyncComputeRealValue(\n container.permissionsPreCheck\n )) as string[];\n return validatePermissions(actions);\n }\n}\n\nexport function preCheckPermissionsForAny(\n data: unknown\n): Promise<void> | undefined {\n if (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 PermissionApi_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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"}
package/dist/cjs/index.js CHANGED
@@ -4,16 +4,22 @@ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWild
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.flowApi = exports.checkInstalledApps = void 0;
8
- Object.defineProperty(exports, "validatePermissions", {
9
- enumerable: true,
10
- get: function () {
11
- return _microAppSdk.PermissionApi_validatePermissions;
12
- }
13
- });
14
- var _microAppSdk = require("@next-api-sdk/micro-app-sdk");
7
+ exports.menu = exports.flowApi = exports.checkPermissions = exports.checkInstalledApps = exports.auth = void 0;
8
+ var _checkPermissions2 = require("./checkPermissions.js");
15
9
  var _checkInstalledApps = _interopRequireWildcard(require("./checkInstalledApps.js"));
16
10
  exports.checkInstalledApps = _checkInstalledApps;
17
11
  var _flowApi = _interopRequireWildcard(require("./flowApi/index.js"));
18
12
  exports.flowApi = _flowApi;
13
+ var _auth = _interopRequireWildcard(require("./auth.js"));
14
+ exports.auth = _auth;
15
+ var _menu = _interopRequireWildcard(require("./menu/index.js"));
16
+ exports.menu = _menu;
17
+ // istanbul ignore file
18
+
19
+ const checkPermissions = Object.freeze({
20
+ checkPermissions: _checkPermissions2.checkPermissions,
21
+ preCheckPermissions: _checkPermissions2.preCheckPermissions,
22
+ preCheckPermissionsForBrickOrRoute: _checkPermissions2.preCheckPermissionsForBrickOrRoute
23
+ });
24
+ exports.checkPermissions = checkPermissions;
19
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_microAppSdk","require","_checkInstalledApps","_interopRequireWildcard","exports","checkInstalledApps","_flowApi","flowApi"],"sources":["../../src/index.ts"],"sourcesContent":["export { PermissionApi_validatePermissions as validatePermissions } from \"@next-api-sdk/micro-app-sdk\";\n\nexport * as checkInstalledApps from \"./checkInstalledApps.js\";\n\nexport * as flowApi from \"./flowApi/index.js\";\n"],"mappings":";;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAAuG,IAAAC,mBAAA,GAAAC,uBAAA,CAAAF,OAAA;AAAAG,OAAA,CAAAC,kBAAA,GAAAH,mBAAA;AAAA,IAAAI,QAAA,GAAAH,uBAAA,CAAAF,OAAA;AAAAG,OAAA,CAAAG,OAAA,GAAAD,QAAA"}
1
+ {"version":3,"file":"index.js","names":["_checkPermissions2","require","_checkInstalledApps","_interopRequireWildcard","exports","checkInstalledApps","_flowApi","flowApi","_auth","auth","_menu","menu","checkPermissions","Object","freeze","_checkPermissions","preCheckPermissions","preCheckPermissionsForBrickOrRoute"],"sources":["../../src/index.ts"],"sourcesContent":["// istanbul ignore file\nimport {\n checkPermissions as _checkPermissions,\n preCheckPermissions,\n preCheckPermissionsForBrickOrRoute,\n} from \"./checkPermissions.js\";\n\nexport * as checkInstalledApps from \"./checkInstalledApps.js\";\nexport * as flowApi from \"./flowApi/index.js\";\nexport * as auth from \"./auth.js\";\nexport * as menu from \"./menu/index.js\";\n\nexport const checkPermissions = Object.freeze({\n checkPermissions: _checkPermissions,\n preCheckPermissions,\n preCheckPermissionsForBrickOrRoute,\n});\n"],"mappings":";;;;;;;AACA,IAAAA,kBAAA,GAAAC,OAAA;AAI+B,IAAAC,mBAAA,GAAAC,uBAAA,CAAAF,OAAA;AAAAG,OAAA,CAAAC,kBAAA,GAAAH,mBAAA;AAAA,IAAAI,QAAA,GAAAH,uBAAA,CAAAF,OAAA;AAAAG,OAAA,CAAAG,OAAA,GAAAD,QAAA;AAAA,IAAAE,KAAA,GAAAL,uBAAA,CAAAF,OAAA;AAAAG,OAAA,CAAAK,IAAA,GAAAD,KAAA;AAAA,IAAAE,KAAA,GAAAP,uBAAA,CAAAF,OAAA;AAAAG,OAAA,CAAAO,IAAA,GAAAD,KAAA;AAL/B;;AAYO,MAAME,gBAAgB,GAAGC,MAAM,CAACC,MAAM,CAAC;EAC5CF,gBAAgB,EAAEG,mCAAiB;EACnCC,mBAAmB,EAAnBA,sCAAmB;EACnBC,kCAAkC,EAAlCA;AACF,CAAC,CAAC;AAACb,OAAA,CAAAQ,gBAAA,GAAAA,gBAAA"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.computeMenuData = computeMenuData;
7
+ exports.computeMenuItems = computeMenuItems;
8
+ var _constants = require("./constants.js");
9
+ function computeMenuData(data, overrideAppId, runtimeContext, helpers) {
10
+ let newRuntimeContext = runtimeContext;
11
+ if (overrideAppId !== runtimeContext.app.id) {
12
+ var _helpers$getStoryboar;
13
+ const overrideApp = window.STANDALONE_MICRO_APPS ? data[_constants.symbolOverrideApp] : (_helpers$getStoryboar = helpers.getStoryboardByAppId(overrideAppId)) === null || _helpers$getStoryboar === void 0 ? void 0 : _helpers$getStoryboar.app;
14
+ newRuntimeContext = {
15
+ ...runtimeContext,
16
+ overrideApp,
17
+ appendI18nNamespace: data[_constants.symbolMenuI18nNamespace]
18
+ };
19
+ }
20
+ return helpers.asyncComputeRealValue(data, newRuntimeContext, {
21
+ ignoreSymbols: true
22
+ });
23
+ }
24
+ function computeMenuItems(items, runtimeContext, helpers) {
25
+ return Promise.all(items.map(async ({
26
+ children,
27
+ ...rest
28
+ }) => {
29
+ const [computedRest, computedChildren] = await Promise.all([computeMenuData(rest, rest[_constants.symbolAppId], runtimeContext, helpers), children && (await computeMenuItems(children, runtimeContext, helpers))]);
30
+ return {
31
+ ...computedRest,
32
+ children: computedChildren
33
+ };
34
+ }));
35
+ }
36
+ //# sourceMappingURL=computeMenuData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"computeMenuData.js","names":["_constants","require","computeMenuData","data","overrideAppId","runtimeContext","helpers","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\";\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 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;AASO,SAASC,eAAeA,CAG7BC,IAAO,EACPC,aAAqB,EACrBC,cAA8B,EAC9BC,OAAuB,EACX;EACZ,IAAIC,iBAAiB,GAAGF,cAAc;EACtC,IAAID,aAAa,KAAKC,cAAc,CAACG,GAAG,CAACC,EAAE,EAAE;IAAA,IAAAC,qBAAA;IAC3C,MAAMC,WAAW,GAAGC,MAAM,CAACC,qBAAqB,GAC5CV,IAAI,CAACW,4BAAiB,CAAC,IAAAJ,qBAAA,GACvBJ,OAAO,CAACS,oBAAoB,CAACX,aAAa,CAAC,cAAAM,qBAAA,uBAA3CA,qBAAA,CAA6CF,GAAG;IACpDD,iBAAiB,GAAG;MAClB,GAAGF,cAAc;MACjBM,WAAW;MACXK,mBAAmB,EAAEb,IAAI,CAACc,kCAAuB;IACnD,CAAC;EACH;EACA,OAAOX,OAAO,CAACY,qBAAqB,CAACf,IAAI,EAAEI,iBAAiB,EAAE;IAC5DY,aAAa,EAAE;EACjB,CAAC,CAAC;AACJ;AAEO,SAASC,gBAAgBA,CAC9BC,KAA+B,EAC/BhB,cAA8B,EAC9BC,OAAuB,EACY;EACnC,OAAOgB,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,CACzDrB,eAAe,CAACwB,IAAI,EAAEA,IAAI,CAACG,sBAAW,CAAC,EAAExB,cAAc,EAAEC,OAAO,CAAC,EACjEmB,QAAQ,KAAK,MAAML,gBAAgB,CAACK,QAAQ,EAAEpB,cAAc,EAAEC,OAAO,CAAC,CAAC,CACxE,CAAC;IACF,OAAO;MACL,GAAGqB,YAAY;MACfF,QAAQ,EAAEG;IACZ,CAAC;EACH,CAAC,CAAC,CACH;AACH"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.symbolOverrideApp = exports.symbolMenuI18nNamespace = exports.symbolAppId = void 0;
7
+ const symbolAppId = Symbol("appId");
8
+ exports.symbolAppId = symbolAppId;
9
+ const symbolMenuI18nNamespace = Symbol("menuI18nNamespace");
10
+ exports.symbolMenuI18nNamespace = symbolMenuI18nNamespace;
11
+ const symbolOverrideApp = Symbol("overrideApp");
12
+ exports.symbolOverrideApp = symbolOverrideApp;
13
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","names":["symbolAppId","Symbol","exports","symbolMenuI18nNamespace","symbolOverrideApp"],"sources":["../../../src/menu/constants.ts"],"sourcesContent":["export const symbolAppId = Symbol(\"appId\");\nexport const symbolMenuI18nNamespace = Symbol(\"menuI18nNamespace\");\nexport const symbolOverrideApp = Symbol(\"overrideApp\");\n"],"mappings":";;;;;;AAAO,MAAMA,WAAW,GAAGC,MAAM,CAAC,OAAO,CAAC;AAACC,OAAA,CAAAF,WAAA,GAAAA,WAAA;AACpC,MAAMG,uBAAuB,GAAGF,MAAM,CAAC,mBAAmB,CAAC;AAACC,OAAA,CAAAC,uBAAA,GAAAA,uBAAA;AAC5D,MAAMC,iBAAiB,GAAGH,MAAM,CAAC,aAAa,CAAC;AAACC,OAAA,CAAAE,iBAAA,GAAAA,iBAAA"}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.fetchMenuById = fetchMenuById;
7
+ exports.getMenuById = getMenuById;
8
+ var _cmdbSdk = require("@next-api-sdk/cmdb-sdk");
9
+ var _lodash = require("lodash");
10
+ var _runtime = require("@next-core/runtime");
11
+ var _mergeMenu = require("./mergeMenu.js");
12
+ var _reorderMenuItems = require("./reorderMenuItems.js");
13
+ var _computeMenuData = require("./computeMenuData.js");
14
+ var _fetchMenuTitle = require("./fetchMenuTitle.js");
15
+ var _getMenusOfStandaloneApp = require("./getMenusOfStandaloneApp.js");
16
+ var _checkPermissions = require("../checkPermissions.js");
17
+ const menuPromises = new Map();
18
+ const menuCache = new Map();
19
+ function getMenuById(menuId) {
20
+ return menuCache.get(menuId);
21
+ }
22
+ function fetchMenuById(menuId, runtimeContext, helpers) {
23
+ let promise = menuPromises.get(menuId);
24
+ if (!promise) {
25
+ promise = _fetchMenuById(menuId, runtimeContext, helpers);
26
+ }
27
+ return promise;
28
+ }
29
+ async function _fetchMenuById(menuId, runtimeContext, helpers) {
30
+ const menuList = window.STANDALONE_MICRO_APPS ? (0, _getMenusOfStandaloneApp.getMenusOfStandaloneApp)(menuId, runtimeContext.app.id, helpers) : (await (0, _cmdbSdk.InstanceApi_postSearch)("EASYOPS_STORYBOARD_MENU", {
31
+ page: 1,
32
+ page_size: 200,
33
+ fields: {
34
+ menuId: true,
35
+ title: true,
36
+ icon: true,
37
+ link: true,
38
+ titleDataSource: true,
39
+ defaultCollapsed: true,
40
+ defaultCollapsedBreakpoint: true,
41
+ type: true,
42
+ injectMenuGroupId: true,
43
+ dynamicItems: true,
44
+ itemsResolve: true,
45
+ items: true,
46
+ i18n: true,
47
+ "items.children": true,
48
+ "app.appId": true
49
+ },
50
+ query: {
51
+ menuId: {
52
+ $eq: menuId
53
+ },
54
+ app: {
55
+ $size: {
56
+ $gt: 0
57
+ }
58
+ }
59
+ }
60
+ })).list;
61
+ const menuData = await (0, _mergeMenu.mergeMenu)(menuList, runtimeContext, helpers);
62
+ if (!menuData) {
63
+ throw new Error(`Menu not found: ${menuId}`);
64
+ }
65
+ (0, _reorderMenuItems.reorderMenuItems)(menuData);
66
+ const {
67
+ items,
68
+ app,
69
+ ...restMenuData
70
+ } = menuData;
71
+ const newRuntimeContext = {
72
+ ...runtimeContext,
73
+ pendingPermissionsPreCheck: [...runtimeContext.pendingPermissionsPreCheck, (0, _checkPermissions.preCheckPermissionsForAny)([items, restMenuData])]
74
+ };
75
+ delete newRuntimeContext.tplStateStoreId;
76
+ delete newRuntimeContext.forEachItem;
77
+ const rootAppId = app[0].appId;
78
+ const [computedMenuData, computedMenuItems] = await Promise.all([(0, _computeMenuData.computeMenuData)(restMenuData, rootAppId, newRuntimeContext, helpers), (0, _computeMenuData.computeMenuItems)(items, newRuntimeContext, helpers)]);
79
+ const finalMenuData = {
80
+ title: await (0, _fetchMenuTitle.fetchMenuTitle)(computedMenuData),
81
+ ...(0, _lodash.pick)(computedMenuData, ["icon", "link", "defaultCollapsed", "defaultCollapsedBreakpoint"]),
82
+ menuItems: computedMenuItems.filter(_runtime.checkIfOfComputed).map(item => {
83
+ var _item$children;
84
+ const children = (_item$children = item.children) === null || _item$children === void 0 ? void 0 : _item$children.filter(_runtime.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
+ //# sourceMappingURL=fetchMenuById.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchMenuById.js","names":["_cmdbSdk","require","_lodash","_runtime","_mergeMenu","_reorderMenuItems","_computeMenuData","_fetchMenuTitle","_getMenusOfStandaloneApp","_checkPermissions","menuPromises","Map","menuCache","getMenuById","menuId","get","fetchMenuById","runtimeContext","helpers","promise","_fetchMenuById","menuList","window","STANDALONE_MICRO_APPS","getMenusOfStandaloneApp","app","id","InstanceApi_postSearch","page","page_size","fields","title","icon","link","titleDataSource","defaultCollapsed","defaultCollapsedBreakpoint","type","injectMenuGroupId","dynamicItems","itemsResolve","items","i18n","query","$eq","$size","$gt","list","menuData","mergeMenu","Error","reorderMenuItems","restMenuData","newRuntimeContext","pendingPermissionsPreCheck","preCheckPermissionsForAny","tplStateStoreId","forEachItem","rootAppId","appId","computedMenuData","computedMenuItems","Promise","all","computeMenuData","computeMenuItems","finalMenuData","fetchMenuTitle","pick","menuItems","filter","checkIfOfComputed","map","item","_item$children","children","text","length","defaultExpanded","set"],"sources":["../../../src/menu/fetchMenuById.ts"],"sourcesContent":["import { InstanceApi_postSearch } from \"@next-api-sdk/cmdb-sdk\";\nimport { pick } from \"lodash\";\nimport { checkIfOfComputed } from \"@next-core/runtime\";\nimport { mergeMenu } from \"./mergeMenu.js\";\nimport { reorderMenuItems } from \"./reorderMenuItems.js\";\nimport type {\n MenuRawData,\n RuntimeContext,\n RuntimeHelpers,\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\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 : ((\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 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, 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: 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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"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.fetchMenuTitle = fetchMenuTitle;
7
+ var _lodash = require("lodash");
8
+ var _cmdbSdk = require("@next-api-sdk/cmdb-sdk");
9
+ const menuTitleCache = new Map();
10
+ async function fetchMenuTitle(menuData) {
11
+ if (menuData.title || (0, _lodash.isEmpty)(menuData.titleDataSource)) {
12
+ return menuData.title;
13
+ }
14
+ const cacheKey = JSON.stringify(menuData.titleDataSource);
15
+ if (menuTitleCache.has(cacheKey)) {
16
+ return menuTitleCache.get(cacheKey);
17
+ }
18
+ const {
19
+ objectId,
20
+ instanceId,
21
+ attributeId
22
+ } = menuData.titleDataSource;
23
+ const attr = attributeId !== null && attributeId !== void 0 ? attributeId : "name";
24
+ const instanceData = await (0, _cmdbSdk.InstanceApi_getDetail)(objectId, instanceId, {
25
+ fields: attr
26
+ });
27
+ let title;
28
+ if (attributeId === "#showKey" && Array.isArray(instanceData[attr])) {
29
+ const [primary, ...rest] = instanceData[attr];
30
+ title = rest.length > 0 ? `${primary}(${rest.join(",")})` : String(primary);
31
+ } else {
32
+ title = String(instanceData[attr]);
33
+ }
34
+ menuTitleCache.set(cacheKey, title);
35
+ return title;
36
+ }
37
+ //# sourceMappingURL=fetchMenuTitle.js.map
@@ -0,0 +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,EAAkB;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"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getMenusOfStandaloneApp = getMenusOfStandaloneApp;
7
+ function getMenusOfStandaloneApp(menuId, appId, helpers) {
8
+ var _ref, _storyboard$meta$inje, _storyboard$meta, _storyboard$meta2;
9
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
10
+ const storyboard = helpers.getStoryboardByAppId(appId);
11
+ 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 : [];
12
+ return menus.filter(menu => menu.menuId === menuId).map(menu => {
13
+ var _menu$app, _menu$app$;
14
+ return {
15
+ ...menu,
16
+ ...((_menu$app = menu.app) !== null && _menu$app !== void 0 && (_menu$app$ = _menu$app[0]) !== null && _menu$app$ !== void 0 && _menu$app$.appId ? {} : {
17
+ app: [{
18
+ appId
19
+ }]
20
+ })
21
+ };
22
+ });
23
+
24
+ // Todo: maybe: fetch menus from STANDALONE_MENU@EASYOPS
25
+ }
26
+ //# sourceMappingURL=getMenusOfStandaloneApp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getMenusOfStandaloneApp.js","names":["getMenusOfStandaloneApp","menuId","appId","helpers","_ref","_storyboard$meta$inje","_storyboard$meta","_storyboard$meta2","storyboard","getStoryboardByAppId","menus","meta","injectMenus","filter","menu","map","_menu$app","_menu$app$","app"],"sources":["../../../src/menu/getMenusOfStandaloneApp.ts"],"sourcesContent":["import { MenuRawData, RuntimeHelpers } from \"./interfaces.js\";\n\nexport function getMenusOfStandaloneApp(\n menuId: string,\n appId: string,\n helpers: RuntimeHelpers\n): MenuRawData[] {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const storyboard = helpers.getStoryboardByAppId(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":";;;;;;AAEO,SAASA,uBAAuBA,CACrCC,MAAc,EACdC,KAAa,EACbC,OAAuB,EACR;EAAA,IAAAC,IAAA,EAAAC,qBAAA,EAAAC,gBAAA,EAAAC,iBAAA;EACf;EACA,MAAMC,UAAU,GAAGL,OAAO,CAACM,oBAAoB,CAACP,KAAK,CAAE;EACvD,MAAMQ,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,CAACb,MAAM,KAAKA,MAAM,CAAC,CACxCc,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,CAAef,KAAK,GAAG,CAAC,CAAC,GAAG;QAAEgB,GAAG,EAAE,CAAC;UAAEhB;QAAM,CAAC;MAAE,CAAC;IACtD,CAAC;EAAA,CAAC,CAAC;;EAEL;AACF"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "fetchMenuById", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _fetchMenuById.fetchMenuById;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "getMenuById", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _fetchMenuById.getMenuById;
16
+ }
17
+ });
18
+ var _fetchMenuById = require("./fetchMenuById.js");
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_fetchMenuById","require"],"sources":["../../../src/menu/index.ts"],"sourcesContent":["export { getMenuById, fetchMenuById } from \"./fetchMenuById.js\";\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA"}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ var _constants = require("./constants.js");
4
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +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 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"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.loadDynamicMenuItems = loadDynamicMenuItems;
7
+ async function loadDynamicMenuItems(menu, runtimeContext, menuWithI18n, helpers) {
8
+ if (menu.dynamicItems && menu.itemsResolve) {
9
+ const overrideAppId = menu.app[0].appId;
10
+ let newRuntimeContext = runtimeContext;
11
+ if (overrideAppId !== runtimeContext.app.id) {
12
+ var _helpers$getStoryboar;
13
+ const overrideApp = window.STANDALONE_MICRO_APPS ? menu.overrideApp : (_helpers$getStoryboar = helpers.getStoryboardByAppId(overrideAppId)) === null || _helpers$getStoryboar === void 0 ? void 0 : _helpers$getStoryboar.app;
14
+ newRuntimeContext = {
15
+ ...runtimeContext,
16
+ overrideApp,
17
+ appendI18nNamespace: menuWithI18n.get(menu)
18
+ };
19
+ }
20
+ const resolved = await helpers.resolveData({
21
+ transform: "items",
22
+ ...menu.itemsResolve
23
+ }, newRuntimeContext);
24
+ menu.items = resolved.items;
25
+ }
26
+ }
27
+ //# sourceMappingURL=loadDynamicMenuItems.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadDynamicMenuItems.js","names":["loadDynamicMenuItems","menu","runtimeContext","menuWithI18n","helpers","dynamicItems","itemsResolve","overrideAppId","app","appId","newRuntimeContext","id","_helpers$getStoryboar","overrideApp","window","STANDALONE_MICRO_APPS","getStoryboardByAppId","appendI18nNamespace","get","resolved","resolveData","transform","items"],"sources":["../../../src/menu/loadDynamicMenuItems.ts"],"sourcesContent":["import type {\n RuntimeContext,\n MenuItemRawData,\n MenuRawData,\n RuntimeHelpers,\n} from \"./interfaces.js\";\n\nexport async function loadDynamicMenuItems(\n menu: MenuRawData,\n runtimeContext: RuntimeContext,\n menuWithI18n: WeakMap<MenuRawData, string>,\n helpers: RuntimeHelpers\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 : helpers.getStoryboardByAppId(overrideAppId)?.app;\n newRuntimeContext = {\n ...runtimeContext,\n overrideApp,\n appendI18nNamespace: menuWithI18n.get(menu),\n };\n }\n const resolved = (await helpers.resolveData(\n {\n transform: \"items\",\n ...menu.itemsResolve,\n },\n newRuntimeContext\n )) as { items: MenuItemRawData[] };\n menu.items = resolved.items;\n }\n}\n"],"mappings":";;;;;;AAOO,eAAeA,oBAAoBA,CACxCC,IAAiB,EACjBC,cAA8B,EAC9BC,YAA0C,EAC1CC,OAAuB,EACR;EACf,IAAIH,IAAI,CAACI,YAAY,IAAIJ,IAAI,CAACK,YAAY,EAAE;IAC1C,MAAMC,aAAa,GAAGN,IAAI,CAACO,GAAG,CAAC,CAAC,CAAC,CAACC,KAAK;IACvC,IAAIC,iBAAiB,GAAGR,cAAc;IACtC,IAAIK,aAAa,KAAKL,cAAc,CAACM,GAAG,CAACG,EAAE,EAAE;MAAA,IAAAC,qBAAA;MAC3C,MAAMC,WAAW,GAAGC,MAAM,CAACC,qBAAqB,GAC5Cd,IAAI,CAACY,WAAW,IAAAD,qBAAA,GAChBR,OAAO,CAACY,oBAAoB,CAACT,aAAa,CAAC,cAAAK,qBAAA,uBAA3CA,qBAAA,CAA6CJ,GAAG;MACpDE,iBAAiB,GAAG;QAClB,GAAGR,cAAc;QACjBW,WAAW;QACXI,mBAAmB,EAAEd,YAAY,CAACe,GAAG,CAACjB,IAAI;MAC5C,CAAC;IACH;IACA,MAAMkB,QAAQ,GAAI,MAAMf,OAAO,CAACgB,WAAW,CACzC;MACEC,SAAS,EAAE,OAAO;MAClB,GAAGpB,IAAI,CAACK;IACV,CAAC,EACDI,iBAAiB,CACe;IAClCT,IAAI,CAACqB,KAAK,GAAGH,QAAQ,CAACG,KAAK;EAC7B;AACF"}
@@ -0,0 +1,73 @@
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 _constants = require("./constants.js");
9
+ var _loadDynamicMenuItems = require("./loadDynamicMenuItems.js");
10
+ async function mergeMenu(menuList, runtimeContext, helpers) {
11
+ const mainMenu = menuList.find(menu => menu.type !== "inject");
12
+ if (!mainMenu) {
13
+ return undefined;
14
+ }
15
+ const validMenuList = [];
16
+ const injectWithMenus = new Map();
17
+ const menuWithI18n = new WeakMap();
18
+ for (const menu of menuList) {
19
+ if (menu.i18n) {
20
+ const menuI18nNamespace = `menu/${menu.menuId}~${menu.app[0].appId}+${menu.instanceId}`;
21
+ // Support any language in `menu.i18n`.
22
+ Object.entries(menu.i18n).forEach(([lang, resources]) => {
23
+ _i18n.i18n.addResourceBundle(lang, menuI18nNamespace, resources);
24
+ });
25
+ menuWithI18n.set(menu, menuI18nNamespace);
26
+ }
27
+ }
28
+ await Promise.all(menuList.map(menu => (0, _loadDynamicMenuItems.loadDynamicMenuItems)(menu, runtimeContext, menuWithI18n, helpers)));
29
+ for (const menu of menuList) {
30
+ var _menu$items;
31
+ if ((_menu$items = menu.items) !== null && _menu$items !== void 0 && _menu$items.length) {
32
+ if (menu.type === "inject" && menu.injectMenuGroupId) {
33
+ let injectingMenus = injectWithMenus.get(menu.injectMenuGroupId);
34
+ if (!injectingMenus) {
35
+ injectingMenus = [];
36
+ injectWithMenus.set(menu.injectMenuGroupId, injectingMenus);
37
+ }
38
+ injectingMenus.push(menu);
39
+ } else {
40
+ validMenuList.push(menu);
41
+ }
42
+ }
43
+ }
44
+ return {
45
+ ...mainMenu,
46
+ items: validMenuList.flatMap(menu =>
47
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
48
+ processGroupInject(menu.items, menu, injectWithMenus, menuWithI18n)),
49
+ [_constants.symbolMenuI18nNamespace]: menuWithI18n.get(mainMenu),
50
+ [_constants.symbolOverrideApp]: mainMenu.overrideApp
51
+ };
52
+ }
53
+ function processGroupInject(items, menu, injectWithMenus, menuWithI18n) {
54
+ return items === null || items === void 0 ? void 0 : items.map(item => {
55
+ var _processGroupInject;
56
+ const foundInjectingMenus = item.groupId && injectWithMenus.get(item.groupId);
57
+ if (foundInjectingMenus) {
58
+ // Each menu to be injected with should be injected only once.
59
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
60
+ injectWithMenus.delete(item.groupId);
61
+ }
62
+ return {
63
+ ...item,
64
+ children: ((_processGroupInject = processGroupInject(item.children, menu, injectWithMenus, menuWithI18n)) !== null && _processGroupInject !== void 0 ? _processGroupInject : []).concat(foundInjectingMenus ? foundInjectingMenus.flatMap(injectingMenu =>
65
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
66
+ processGroupInject(injectingMenu.items, injectingMenu, injectWithMenus, menuWithI18n)) : []),
67
+ [_constants.symbolAppId]: menu.app[0].appId,
68
+ [_constants.symbolMenuI18nNamespace]: menuWithI18n.get(menu),
69
+ [_constants.symbolOverrideApp]: menu.overrideApp
70
+ };
71
+ });
72
+ }
73
+ //# sourceMappingURL=mergeMenu.js.map