@next-core/easyops-runtime 0.3.0 → 0.3.2

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.
@@ -1 +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"}
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,EAAC,CAAC;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASC,UAAUA,CAAA,EAAY;EACpC,OAAOpB,IAAI,CAACM,QAAQ,KAAKY,SAAS;AACpC"}
@@ -1 +1 @@
1
- {"version":3,"file":"checkInstalledApps.js","names":["_storyboard","require","_microAppStandaloneSdk","checkingApps","Map","checkedApps","preCheckInstalledApps","storyboard","hasAppInBootstrap","window","STANDALONE_MICRO_APPS","NO_AUTH_GUARD","appIds","scanInstalledAppsUsage","searchIds","appId","has","push","length","promise","RuntimeApi_searchMicroAppStandalone","query","$in","fields","catch","error","console","set","then","result","_result$list","app","list","find","item","checkedApp","id","undefined","waitForCheckingApps","Promise","all","map","get","getCheckedApp","_storyboard$meta","usage","usedArgs","Set","customTemplates","menus","meta","traverseStoryboardExpressions","routes","node","parent","collectInstalledAppsHasUsage"],"sources":["../../src/checkInstalledApps.ts"],"sourcesContent":["import type { MicroApp, Storyboard } from \"@next-core/types\";\nimport {\n traverseStoryboardExpressions,\n collectInstalledAppsHasUsage,\n type MemberCallUsage,\n} from \"@next-core/utils/storyboard\";\nimport { RuntimeApi_searchMicroAppStandalone } from \"@next-api-sdk/micro-app-standalone-sdk\";\n\ntype AppForCheck = Pick<MicroApp, \"id\" | \"currentVersion\" | \"installStatus\">;\n\nconst checkingApps = new Map<string, Promise<AppForCheck | undefined>>();\nconst checkedApps = new Map<string, AppForCheck | undefined>();\n\nexport function preCheckInstalledApps(\n storyboard: Storyboard,\n hasAppInBootstrap: (appId: string) => boolean\n) {\n if (window.STANDALONE_MICRO_APPS && !window.NO_AUTH_GUARD) {\n const appIds = scanInstalledAppsUsage(storyboard);\n const searchIds: string[] = [];\n for (const appId of appIds) {\n // Do not check these apps already checking or in bootstrap.\n if (!checkingApps.has(appId) && !hasAppInBootstrap(appId)) {\n searchIds.push(appId);\n }\n }\n if (searchIds.length === 0) {\n return;\n }\n const promise = RuntimeApi_searchMicroAppStandalone({\n query: { appId: { $in: searchIds } },\n fields: [\"appId\", \"currentVersion\", \"installStatus\"],\n }).catch((error) => {\n // Allow search micro app 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(\"Get off site standalone micro-apps failed\", error);\n });\n for (const appId of searchIds) {\n checkingApps.set(\n appId,\n promise.then((result) => {\n const app = result?.list?.find((item) => item.appId === appId);\n const checkedApp = app\n ? {\n ...app,\n id: appId,\n }\n : undefined;\n checkedApps.set(appId, checkedApp);\n return checkedApp;\n })\n );\n }\n }\n}\n\nexport async function waitForCheckingApps(appIds: string[]) {\n await Promise.all(appIds.map((appId) => checkingApps.get(appId)));\n}\n\nexport function getCheckedApp(appId: string) {\n if (window.STANDALONE_MICRO_APPS) {\n return checkedApps.get(appId);\n }\n}\n\nfunction scanInstalledAppsUsage(storyboard: Storyboard) {\n const usage: MemberCallUsage = {\n usedArgs: new Set(),\n };\n // `INSTALLED_APPS.has(...)` is not available in storyboard functions\n const { customTemplates, menus } = storyboard.meta ?? {};\n traverseStoryboardExpressions(\n [storyboard.routes, customTemplates, menus],\n (node, parent) => {\n collectInstalledAppsHasUsage(usage, node, parent);\n },\n \"INSTALLED_APPS\"\n );\n return [...usage.usedArgs];\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"checkInstalledApps.js","names":["_storyboard","require","_microAppStandaloneSdk","checkingApps","Map","checkedApps","preCheckInstalledApps","storyboard","hasAppInBootstrap","window","STANDALONE_MICRO_APPS","NO_AUTH_GUARD","appIds","scanInstalledAppsUsage","searchIds","appId","has","push","length","promise","RuntimeApi_searchMicroAppStandalone","query","$in","fields","catch","error","console","set","then","result","_result$list","app","list","find","item","checkedApp","id","undefined","waitForCheckingApps","Promise","all","map","get","getCheckedApp","_storyboard$meta","usage","usedArgs","Set","customTemplates","menus","meta","traverseStoryboardExpressions","routes","node","parent","collectInstalledAppsHasUsage"],"sources":["../../src/checkInstalledApps.ts"],"sourcesContent":["import type { MicroApp, Storyboard } from \"@next-core/types\";\nimport {\n traverseStoryboardExpressions,\n collectInstalledAppsHasUsage,\n type MemberCallUsage,\n} from \"@next-core/utils/storyboard\";\nimport { RuntimeApi_searchMicroAppStandalone } from \"@next-api-sdk/micro-app-standalone-sdk\";\n\ntype AppForCheck = Pick<MicroApp, \"id\" | \"currentVersion\" | \"installStatus\">;\n\nconst checkingApps = new Map<string, Promise<AppForCheck | undefined>>();\nconst checkedApps = new Map<string, AppForCheck | undefined>();\n\nexport function preCheckInstalledApps(\n storyboard: Storyboard,\n hasAppInBootstrap: (appId: string) => boolean\n) {\n if (window.STANDALONE_MICRO_APPS && !window.NO_AUTH_GUARD) {\n const appIds = scanInstalledAppsUsage(storyboard);\n const searchIds: string[] = [];\n for (const appId of appIds) {\n // Do not check these apps already checking or in bootstrap.\n if (!checkingApps.has(appId) && !hasAppInBootstrap(appId)) {\n searchIds.push(appId);\n }\n }\n if (searchIds.length === 0) {\n return;\n }\n const promise = RuntimeApi_searchMicroAppStandalone({\n query: { appId: { $in: searchIds } },\n fields: [\"appId\", \"currentVersion\", \"installStatus\"],\n }).catch((error) => {\n // Allow search micro app 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(\"Get off site standalone micro-apps failed\", error);\n });\n for (const appId of searchIds) {\n checkingApps.set(\n appId,\n promise.then((result) => {\n const app = result?.list?.find((item) => item.appId === appId);\n const checkedApp = app\n ? {\n ...app,\n id: appId,\n }\n : undefined;\n checkedApps.set(appId, checkedApp);\n return checkedApp;\n })\n );\n }\n }\n}\n\nexport async function waitForCheckingApps(appIds: string[]) {\n await Promise.all(appIds.map((appId) => checkingApps.get(appId)));\n}\n\nexport function getCheckedApp(appId: string) {\n if (window.STANDALONE_MICRO_APPS) {\n return checkedApps.get(appId);\n }\n}\n\nfunction scanInstalledAppsUsage(storyboard: Storyboard) {\n const usage: MemberCallUsage = {\n usedArgs: new Set(),\n };\n // `INSTALLED_APPS.has(...)` is not available in storyboard functions\n const { customTemplates, menus } = storyboard.meta ?? {};\n traverseStoryboardExpressions(\n [storyboard.routes, customTemplates, menus],\n (node, parent) => {\n collectInstalledAppsHasUsage(usage, node, parent);\n },\n \"INSTALLED_APPS\"\n );\n return [...usage.usedArgs];\n}\n"],"mappings":"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"}
@@ -1 +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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"}
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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"CollectContracts.js","names":["contractsMap","Map","widgetContractMap","addContract","contracts","map","forEach","contract","set","namespaceId","name","collectContract","collectWidgetContract","clearCollectWidgetContract","clear","getContract","get"],"sources":["../../../src/flowApi/CollectContracts.ts"],"sourcesContent":["import { Contract } from \"@next-core/types\";\n\nconst contractsMap: Map<string, Contract> = new Map();\nconst widgetContractMap: Map<string, Contract> = new Map();\n\nconst addContract = (\n contracts: Contract[] | undefined,\n map: Map<string, Contract>\n): void => {\n contracts?.forEach((contract) => {\n map.set(`${contract.namespaceId}.${contract.name}`, contract);\n });\n};\n\nexport function collectContract(contracts: Contract[] | undefined): void {\n addContract(contracts, contractsMap);\n}\n\nexport function collectWidgetContract(contracts: Contract[] | undefined): void {\n addContract(contracts, widgetContractMap);\n}\n\nexport function clearCollectWidgetContract(): void {\n widgetContractMap.clear();\n}\n\nexport function getContract(name: string): Contract | undefined {\n return contractsMap.get(name) || widgetContractMap.get(name);\n}\n"],"mappings":";;;;;;;;;AAEA,MAAMA,YAAmC,GAAG,IAAIC,GAAG,EAAE;AACrD,MAAMC,iBAAwC,GAAG,IAAID,GAAG,EAAE;AAE1D,MAAME,WAAW,GAAGA,CAClBC,SAAiC,EACjCC,GAA0B,KACjB;EACTD,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAEE,OAAO,CAAEC,QAAQ,IAAK;IAC/BF,GAAG,CAACG,GAAG,CAAE,GAAED,QAAQ,CAACE,WAAY,IAAGF,QAAQ,CAACG,IAAK,EAAC,EAAEH,QAAQ,CAAC;EAC/D,CAAC,CAAC;AACJ,CAAC;AAEM,SAASI,eAAeA,CAACP,SAAiC,EAAQ;EACvED,WAAW,CAACC,SAAS,EAAEJ,YAAY,CAAC;AACtC;AAEO,SAASY,qBAAqBA,CAACR,SAAiC,EAAQ;EAC7ED,WAAW,CAACC,SAAS,EAAEF,iBAAiB,CAAC;AAC3C;AAEO,SAASW,0BAA0BA,CAAA,EAAS;EACjDX,iBAAiB,CAACY,KAAK,EAAE;AAC3B;AAEO,SAASC,WAAWA,CAACL,IAAY,EAAwB;EAC9D,OAAOV,YAAY,CAACgB,GAAG,CAACN,IAAI,CAAC,IAAIR,iBAAiB,CAACc,GAAG,CAACN,IAAI,CAAC;AAC9D"}
1
+ {"version":3,"file":"CollectContracts.js","names":["contractsMap","Map","widgetContractMap","addContract","contracts","map","forEach","contract","set","namespaceId","name","collectContract","collectWidgetContract","clearCollectWidgetContract","clear","getContract","get"],"sources":["../../../src/flowApi/CollectContracts.ts"],"sourcesContent":["import { Contract } from \"@next-core/types\";\n\nconst contractsMap: Map<string, Contract> = new Map();\nconst widgetContractMap: Map<string, Contract> = new Map();\n\nconst addContract = (\n contracts: Contract[] | undefined,\n map: Map<string, Contract>\n): void => {\n contracts?.forEach((contract) => {\n map.set(`${contract.namespaceId}.${contract.name}`, contract);\n });\n};\n\nexport function collectContract(contracts: Contract[] | undefined): void {\n addContract(contracts, contractsMap);\n}\n\nexport function collectWidgetContract(contracts: Contract[] | undefined): void {\n addContract(contracts, widgetContractMap);\n}\n\nexport function clearCollectWidgetContract(): void {\n widgetContractMap.clear();\n}\n\nexport function getContract(name: string): Contract | undefined {\n return contractsMap.get(name) || widgetContractMap.get(name);\n}\n"],"mappings":";;;;;;;;;AAEA,MAAMA,YAAmC,GAAG,IAAIC,GAAG,CAAC,CAAC;AACrD,MAAMC,iBAAwC,GAAG,IAAID,GAAG,CAAC,CAAC;AAE1D,MAAME,WAAW,GAAGA,CAClBC,SAAiC,EACjCC,GAA0B,KACjB;EACTD,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAEE,OAAO,CAAEC,QAAQ,IAAK;IAC/BF,GAAG,CAACG,GAAG,CAAE,GAAED,QAAQ,CAACE,WAAY,IAAGF,QAAQ,CAACG,IAAK,EAAC,EAAEH,QAAQ,CAAC;EAC/D,CAAC,CAAC;AACJ,CAAC;AAEM,SAASI,eAAeA,CAACP,SAAiC,EAAQ;EACvED,WAAW,CAACC,SAAS,EAAEJ,YAAY,CAAC;AACtC;AAEO,SAASY,qBAAqBA,CAACR,SAAiC,EAAQ;EAC7ED,WAAW,CAACC,SAAS,EAAEF,iBAAiB,CAAC;AAC3C;AAEO,SAASW,0BAA0BA,CAAA,EAAS;EACjDX,iBAAiB,CAACY,KAAK,CAAC,CAAC;AAC3B;AAEO,SAASC,WAAWA,CAACL,IAAY,EAAwB;EAC9D,OAAOV,YAAY,CAACgB,GAAG,CAACN,IAAI,CAAC,IAAIR,iBAAiB,CAACc,GAAG,CAACN,IAAI,CAAC;AAC9D"}
@@ -1 +1 @@
1
- {"version":3,"file":"FlowApi.js","names":["_jsYaml","_interopRequireDefault","require","_apiGatewaySdk","_CollectContracts","flowApiDefinitionPromiseMap","Map","isFlowApiProvider","provider","includes","getArgsOfFlowApi","originalArgs","method","Error","apiDefinition","fetchFlowApiDefinition","apiProfile","getApiProfileFromApiDefinition","getApiArgsFromApiProfile","uri","apiMethod","ext_fields","name","namespace","serviceName","responseWrapper","version","isFileType","request","isDownload","fileName","shift","url","args","getTransformedUriAndRestArgs","originalUri","prefix","restArgs","slice","transformedUri","replace","api","_contract$endpoint","_contract$response","contract","yaml","safeLoad","schema","JSON_SCHEMA","json","endpoint","response","wrapper","toLowerCase","type","promise","get","_fetchFlowApiDefinition","set","namespaceName","nameWithVersion","split","getContract","namespaceId","contractData","ContractApi_searchSingleContract","contractName","_contractData$namespa","_contractData$namespa2"],"sources":["../../../src/flowApi/FlowApi.ts"],"sourcesContent":["import yaml from \"js-yaml\";\nimport { ContractApi_searchSingleContract } from \"@next-api-sdk/api-gateway-sdk\";\nimport { ContractRequest, ContractResponse, ExtField } from \"@next-core/types\";\nimport { getContract } from \"./CollectContracts.js\";\n\nconst flowApiDefinitionPromiseMap = new Map<\n string,\n Promise<CustomApiDefinition | undefined>\n>();\n\n// Legacy Custom API: `${namespace}@${name}`\n// Flow API: `${namespace}@${name}:${version}`\nexport function isFlowApiProvider(provider: string): boolean {\n return provider.includes(\"@\");\n}\n\nexport async function getArgsOfFlowApi(\n provider: string,\n originalArgs: unknown[],\n method?: string\n): Promise<unknown[]> {\n if (!provider.includes(\":\")) {\n throw new Error(\n `You're using legacy Custom API \"${provider}\" which is dropped in v3, please use Flow API instead`\n );\n }\n\n const apiDefinition = await fetchFlowApiDefinition(provider);\n\n if (!apiDefinition) {\n throw new Error(`Flow API not found: \"${provider}\"`);\n }\n\n const apiProfile = getApiProfileFromApiDefinition(provider, apiDefinition);\n\n return getApiArgsFromApiProfile(apiProfile, originalArgs, method);\n}\n\nfunction getApiArgsFromApiProfile(\n {\n uri,\n method: apiMethod,\n ext_fields,\n name,\n namespace,\n serviceName,\n responseWrapper,\n version,\n isFileType,\n request,\n }: CustomApiProfile,\n originalArgs: unknown[],\n method?: string\n): unknown[] {\n const isDownload = isFileType && method === \"saveAs\";\n let fileName: string | undefined;\n if (isDownload) {\n fileName = originalArgs.shift() as string;\n }\n\n const { url, args } = getTransformedUriAndRestArgs(\n uri,\n originalArgs,\n name,\n namespace,\n serviceName,\n version\n );\n\n return [\n ...(isDownload ? [fileName] : []),\n {\n url,\n originalUri: uri,\n method: apiMethod,\n ext_fields,\n responseWrapper,\n request,\n isFileType,\n },\n ...args,\n ];\n}\n\nfunction getTransformedUriAndRestArgs(\n uri: string,\n originalArgs: unknown[],\n name: string,\n namespace: string,\n serviceName: string | undefined,\n version?: string\n): { url: string; args: unknown[] } {\n const prefix = version\n ? serviceName\n ? `api/gateway/${serviceName}`\n : `api/gateway/${namespace}.${name}@${version}`\n : `api/gateway/api_service.${namespace}.${name}`;\n const restArgs = originalArgs.slice();\n const transformedUri = uri.replace(\n /:([^/]+)/g,\n () => restArgs.shift() as string\n );\n return {\n url: prefix + transformedUri,\n args: restArgs,\n };\n}\n\nfunction getApiProfileFromApiDefinition(\n provider: string,\n api: CustomApiDefinition\n): CustomApiProfile {\n const contract: CustomApiDefinition[\"contract\"] =\n typeof api.contract === \"string\"\n ? (yaml.safeLoad(api.contract, {\n schema: yaml.JSON_SCHEMA,\n json: true,\n }) as CustomApiDefinition[\"contract\"])\n : api.contract;\n const { uri, method = \"GET\", ext_fields } = contract?.endpoint ?? {};\n const responseWrapper = contract?.response\n ? contract.response.wrapper !== false\n : false;\n if (!uri) {\n throw new Error(\n `Missing endpoint.uri in contract of provider \"${provider}\"`\n );\n }\n return {\n uri,\n method: method.toLowerCase() === \"list\" ? \"get\" : method,\n ext_fields,\n name: api.name,\n namespace: api.namespace,\n serviceName: api.serviceName,\n version: api.version,\n isFileType: contract?.response?.type === \"file\",\n responseWrapper,\n request: contract?.request,\n };\n}\n\nfunction fetchFlowApiDefinition(\n provider: string\n): Promise<CustomApiDefinition | undefined> {\n let promise = flowApiDefinitionPromiseMap.get(provider);\n if (!promise) {\n promise = _fetchFlowApiDefinition(provider);\n flowApiDefinitionPromiseMap.set(provider, promise);\n }\n return promise;\n}\n\nasync function _fetchFlowApiDefinition(\n provider: string\n): Promise<CustomApiDefinition | undefined> {\n const [namespaceName, nameWithVersion] = provider.split(\"@\");\n const [name, version] = nameWithVersion.split(\":\");\n\n const contract = getContract(`${namespaceName}.${name}`);\n if (contract) {\n return {\n name: contract.name,\n namespace: contract.namespaceId,\n serviceName: contract.serviceName,\n version: contract.version,\n contract: {\n endpoint: contract.endpoint,\n response: contract.response,\n request: contract.request,\n },\n };\n } else {\n const { contractData } = await ContractApi_searchSingleContract({\n contractName: `${namespaceName}.${name}`,\n version,\n });\n\n // return undefined if don't found contract\n if (contractData) {\n return {\n name: contractData.name,\n namespace: contractData.namespace?.[0]?.name,\n serviceName: contractData.serviceName,\n version: contractData.version,\n contract: {\n endpoint: contractData.endpoint,\n response: contractData.response,\n request: contractData.request,\n },\n };\n }\n }\n}\n\nexport interface CustomApiDefinition {\n name: string;\n namespace: string;\n version?: string;\n serviceName?: string;\n contract?: {\n endpoint: {\n ext_fields?: ExtField[];\n uri: string;\n method:\n | \"POST\"\n | \"post\"\n | \"PUT\"\n | \"put\"\n | \"GET\"\n | \"get\"\n | \"DELETE\"\n | \"delete\"\n | \"LIST\"\n | \"list\"\n | \"PATCH\"\n | \"patch\"\n | \"HEAD\"\n | \"head\";\n };\n request?: ContractRequest;\n response?: ContractResponse;\n };\n}\n\nexport interface CustomApiProfile {\n uri: string;\n method: string;\n name: string;\n namespace: string;\n serviceName?: string;\n responseWrapper: boolean;\n version?: string;\n isFileType?: boolean;\n ext_fields?: ExtField[];\n request?: ContractRequest;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"FlowApi.js","names":["_jsYaml","_interopRequireDefault","require","_apiGatewaySdk","_CollectContracts","flowApiDefinitionPromiseMap","Map","isFlowApiProvider","provider","includes","getArgsOfFlowApi","originalArgs","method","Error","apiDefinition","fetchFlowApiDefinition","apiProfile","getApiProfileFromApiDefinition","getApiArgsFromApiProfile","uri","apiMethod","ext_fields","name","namespace","serviceName","responseWrapper","version","isFileType","request","isDownload","fileName","shift","url","args","getTransformedUriAndRestArgs","originalUri","prefix","restArgs","slice","transformedUri","replace","api","_contract$endpoint","_contract$response","contract","yaml","safeLoad","schema","JSON_SCHEMA","json","endpoint","response","wrapper","toLowerCase","type","promise","get","_fetchFlowApiDefinition","set","namespaceName","nameWithVersion","split","getContract","namespaceId","contractData","ContractApi_searchSingleContract","contractName","_contractData$namespa","_contractData$namespa2"],"sources":["../../../src/flowApi/FlowApi.ts"],"sourcesContent":["import yaml from \"js-yaml\";\nimport { ContractApi_searchSingleContract } from \"@next-api-sdk/api-gateway-sdk\";\nimport { ContractRequest, ContractResponse, ExtField } from \"@next-core/types\";\nimport { getContract } from \"./CollectContracts.js\";\n\nconst flowApiDefinitionPromiseMap = new Map<\n string,\n Promise<CustomApiDefinition | undefined>\n>();\n\n// Legacy Custom API: `${namespace}@${name}`\n// Flow API: `${namespace}@${name}:${version}`\nexport function isFlowApiProvider(provider: string): boolean {\n return provider.includes(\"@\");\n}\n\nexport async function getArgsOfFlowApi(\n provider: string,\n originalArgs: unknown[],\n method?: string\n): Promise<unknown[]> {\n if (!provider.includes(\":\")) {\n throw new Error(\n `You're using legacy Custom API \"${provider}\" which is dropped in v3, please use Flow API instead`\n );\n }\n\n const apiDefinition = await fetchFlowApiDefinition(provider);\n\n if (!apiDefinition) {\n throw new Error(`Flow API not found: \"${provider}\"`);\n }\n\n const apiProfile = getApiProfileFromApiDefinition(provider, apiDefinition);\n\n return getApiArgsFromApiProfile(apiProfile, originalArgs, method);\n}\n\nfunction getApiArgsFromApiProfile(\n {\n uri,\n method: apiMethod,\n ext_fields,\n name,\n namespace,\n serviceName,\n responseWrapper,\n version,\n isFileType,\n request,\n }: CustomApiProfile,\n originalArgs: unknown[],\n method?: string\n): unknown[] {\n const isDownload = isFileType && method === \"saveAs\";\n let fileName: string | undefined;\n if (isDownload) {\n fileName = originalArgs.shift() as string;\n }\n\n const { url, args } = getTransformedUriAndRestArgs(\n uri,\n originalArgs,\n name,\n namespace,\n serviceName,\n version\n );\n\n return [\n ...(isDownload ? [fileName] : []),\n {\n url,\n originalUri: uri,\n method: apiMethod,\n ext_fields,\n responseWrapper,\n request,\n isFileType,\n },\n ...args,\n ];\n}\n\nfunction getTransformedUriAndRestArgs(\n uri: string,\n originalArgs: unknown[],\n name: string,\n namespace: string,\n serviceName: string | undefined,\n version?: string\n): { url: string; args: unknown[] } {\n const prefix = version\n ? serviceName\n ? `api/gateway/${serviceName}`\n : `api/gateway/${namespace}.${name}@${version}`\n : `api/gateway/api_service.${namespace}.${name}`;\n const restArgs = originalArgs.slice();\n const transformedUri = uri.replace(\n /:([^/]+)/g,\n () => restArgs.shift() as string\n );\n return {\n url: prefix + transformedUri,\n args: restArgs,\n };\n}\n\nfunction getApiProfileFromApiDefinition(\n provider: string,\n api: CustomApiDefinition\n): CustomApiProfile {\n const contract: CustomApiDefinition[\"contract\"] =\n typeof api.contract === \"string\"\n ? (yaml.safeLoad(api.contract, {\n schema: yaml.JSON_SCHEMA,\n json: true,\n }) as CustomApiDefinition[\"contract\"])\n : api.contract;\n const { uri, method = \"GET\", ext_fields } = contract?.endpoint ?? {};\n const responseWrapper = contract?.response\n ? contract.response.wrapper !== false\n : false;\n if (!uri) {\n throw new Error(\n `Missing endpoint.uri in contract of provider \"${provider}\"`\n );\n }\n return {\n uri,\n method: method.toLowerCase() === \"list\" ? \"get\" : method,\n ext_fields,\n name: api.name,\n namespace: api.namespace,\n serviceName: api.serviceName,\n version: api.version,\n isFileType: contract?.response?.type === \"file\",\n responseWrapper,\n request: contract?.request,\n };\n}\n\nfunction fetchFlowApiDefinition(\n provider: string\n): Promise<CustomApiDefinition | undefined> {\n let promise = flowApiDefinitionPromiseMap.get(provider);\n if (!promise) {\n promise = _fetchFlowApiDefinition(provider);\n flowApiDefinitionPromiseMap.set(provider, promise);\n }\n return promise;\n}\n\nasync function _fetchFlowApiDefinition(\n provider: string\n): Promise<CustomApiDefinition | undefined> {\n const [namespaceName, nameWithVersion] = provider.split(\"@\");\n const [name, version] = nameWithVersion.split(\":\");\n\n const contract = getContract(`${namespaceName}.${name}`);\n if (contract) {\n return {\n name: contract.name,\n namespace: contract.namespaceId,\n serviceName: contract.serviceName,\n version: contract.version,\n contract: {\n endpoint: contract.endpoint,\n response: contract.response,\n request: contract.request,\n },\n };\n } else {\n const { contractData } = await ContractApi_searchSingleContract({\n contractName: `${namespaceName}.${name}`,\n version,\n });\n\n // return undefined if don't found contract\n if (contractData) {\n return {\n name: contractData.name,\n namespace: contractData.namespace?.[0]?.name,\n serviceName: contractData.serviceName,\n version: contractData.version,\n contract: {\n endpoint: contractData.endpoint,\n response: contractData.response,\n request: contractData.request,\n },\n };\n }\n }\n}\n\nexport interface CustomApiDefinition {\n name: string;\n namespace: string;\n version?: string;\n serviceName?: string;\n contract?: {\n endpoint: {\n ext_fields?: ExtField[];\n uri: string;\n method:\n | \"POST\"\n | \"post\"\n | \"PUT\"\n | \"put\"\n | \"GET\"\n | \"get\"\n | \"DELETE\"\n | \"delete\"\n | \"LIST\"\n | \"list\"\n | \"PATCH\"\n | \"patch\"\n | \"HEAD\"\n | \"head\";\n };\n request?: ContractRequest;\n response?: ContractResponse;\n };\n}\n\nexport interface CustomApiProfile {\n uri: string;\n method: string;\n name: string;\n namespace: string;\n serviceName?: string;\n responseWrapper: boolean;\n version?: string;\n isFileType?: boolean;\n ext_fields?: ExtField[];\n request?: ContractRequest;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FlowApiProvider.js","names":["_general","require","_http","_lodash","FLOW_API_PROVIDER","exports","hasFields","ext_fields","type","some","item","source","processExtFields","args","hasQueryParams","hasBodyParams","data","params","options","hasFileType","request","processFields","fields","isEmpty","field","includes","transformFormData","FormData","formData","key","value","Object","entries","Array","isArray","forEach","v","append","isObject","Blob","Date","k","callFlowApi","url","originalUri","method","responseWrapper","isFileType","isSimpleRequest","toLowerCase","defaultOptions","responseType","response","_originalUri$match$le","_originalUri$match","_request$fields$lengt","_request$fields","noParams","match","length","http","simpleRequest","isUploadType","result","requestWithBody","registerFlowApiProvider","customElements","define","createProviderClass"],"sources":["../../../src/flowApi/FlowApiProvider.ts"],"sourcesContent":["import { createProviderClass } from \"@next-core/utils/general\";\nimport {\n ExtField,\n ContractRequest,\n ContractField,\n ContractFieldItem,\n} from \"@next-core/types\";\nimport { http, HttpOptions, HttpParams } from \"@next-core/http\";\nimport { isEmpty, isObject } from \"lodash\";\n\nexport const FLOW_API_PROVIDER = \"core.provider-flow-api\";\n\nexport interface CustomApiParams {\n url: string;\n originalUri?: string;\n method?: string;\n responseWrapper?: boolean;\n ext_fields?: ExtField[];\n request?: ContractRequest;\n isFileType?: boolean;\n}\nfunction hasFields(ext_fields: ExtField[], type: \"query\" | \"body\"): boolean {\n return ext_fields.some((item) => item.source === type);\n}\n\nexport function processExtFields(\n ext_fields: ExtField[],\n ...args: unknown[]\n): { data: unknown; options: HttpOptions } {\n const hasQueryParams = hasFields(ext_fields, \"query\");\n const hasBodyParams = hasFields(ext_fields, \"body\");\n\n if (hasQueryParams) {\n if (hasBodyParams) {\n const [data, params, options] = args;\n return {\n data: data,\n options: {\n params: params as HttpParams,\n ...(options as HttpOptions),\n },\n };\n }\n\n const [params, options] = args;\n return {\n data: {},\n options: {\n params: params as HttpParams,\n ...(options as HttpOptions),\n },\n };\n }\n\n // only hasBodyParams or default\n const [data, options] = args;\n return {\n data,\n options: options as HttpOptions,\n };\n}\n\nexport function hasFileType(request: ContractRequest | undefined): boolean {\n if (!request || request.type !== \"object\") {\n return false;\n }\n\n const processFields = (fields: ContractField[] | undefined): boolean => {\n return (\n !isEmpty(fields) &&\n fields!.some(\n (field) =>\n [\"file\", \"file[]\"].includes((field as ContractFieldItem).type) ||\n processFields((field as ContractFieldItem).fields)\n )\n );\n };\n\n return processFields(request.fields);\n}\n\nexport function transformFormData(\n data: Record<string, unknown> | FormData\n): FormData {\n if (data instanceof FormData) {\n return data;\n }\n\n const formData = new FormData();\n for (const [key, value] of Object.entries(data)) {\n if (Array.isArray(value)) {\n value.forEach((v) => {\n formData.append(key, v);\n });\n } else if (\n isObject(value) &&\n !(value instanceof Blob) &&\n !(value instanceof Date)\n ) {\n Object.entries(value).forEach(([k, v]) => {\n formData.append(`${key}[${k}]`, v);\n });\n } else {\n formData.append(key, value as string);\n }\n }\n\n return formData;\n}\n\nexport async function callFlowApi(\n {\n url,\n originalUri,\n method = \"GET\",\n responseWrapper = true,\n ext_fields = [],\n request,\n isFileType,\n }: CustomApiParams,\n ...args: unknown[]\n): Promise<unknown> {\n const isSimpleRequest = [\"get\", \"delete\", \"head\"].includes(\n method.toLowerCase()\n );\n const defaultOptions: HttpOptions = isFileType\n ? { responseType: \"blob\" }\n : {};\n let response: { data?: unknown };\n\n if (isSimpleRequest) {\n const noParams =\n originalUri && request?.type === \"object\"\n ? (originalUri.match(/:([^/]+)/g)?.length ?? 0) ===\n (request.fields?.length ?? 0)\n : false;\n let params: HttpParams | undefined;\n let options: HttpOptions | undefined;\n\n if (noParams) {\n [options] = args as [HttpOptions?];\n } else {\n [params, options] = args as [HttpParams?, HttpOptions?];\n }\n\n response = await http.simpleRequest(method, url, {\n params,\n ...defaultOptions,\n ...(options as HttpOptions),\n });\n } else {\n const isUploadType = hasFileType(request);\n const result = processExtFields(ext_fields, ...args);\n\n response = await http.requestWithBody(\n method,\n url,\n isUploadType ? transformFormData(result.data as any) : result.data,\n { ...defaultOptions, ...result.options }\n );\n }\n\n return (isFileType ? false : responseWrapper) ? response.data : response;\n}\n\nexport function registerFlowApiProvider(): void {\n customElements.define(FLOW_API_PROVIDER, createProviderClass(callFlowApi));\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"FlowApiProvider.js","names":["_general","require","_http","_lodash","FLOW_API_PROVIDER","exports","hasFields","ext_fields","type","some","item","source","processExtFields","args","hasQueryParams","hasBodyParams","data","params","options","hasFileType","request","processFields","fields","isEmpty","field","includes","transformFormData","FormData","formData","key","value","Object","entries","Array","isArray","forEach","v","append","isObject","Blob","Date","k","callFlowApi","url","originalUri","method","responseWrapper","isFileType","isSimpleRequest","toLowerCase","defaultOptions","responseType","response","_originalUri$match$le","_originalUri$match","_request$fields$lengt","_request$fields","noParams","match","length","http","simpleRequest","isUploadType","result","requestWithBody","registerFlowApiProvider","customElements","define","createProviderClass"],"sources":["../../../src/flowApi/FlowApiProvider.ts"],"sourcesContent":["import { createProviderClass } from \"@next-core/utils/general\";\nimport {\n ExtField,\n ContractRequest,\n ContractField,\n ContractFieldItem,\n} from \"@next-core/types\";\nimport { http, HttpOptions, HttpParams } from \"@next-core/http\";\nimport { isEmpty, isObject } from \"lodash\";\n\nexport const FLOW_API_PROVIDER = \"core.provider-flow-api\";\n\nexport interface CustomApiParams {\n url: string;\n originalUri?: string;\n method?: string;\n responseWrapper?: boolean;\n ext_fields?: ExtField[];\n request?: ContractRequest;\n isFileType?: boolean;\n}\nfunction hasFields(ext_fields: ExtField[], type: \"query\" | \"body\"): boolean {\n return ext_fields.some((item) => item.source === type);\n}\n\nexport function processExtFields(\n ext_fields: ExtField[],\n ...args: unknown[]\n): { data: unknown; options: HttpOptions } {\n const hasQueryParams = hasFields(ext_fields, \"query\");\n const hasBodyParams = hasFields(ext_fields, \"body\");\n\n if (hasQueryParams) {\n if (hasBodyParams) {\n const [data, params, options] = args;\n return {\n data: data,\n options: {\n params: params as HttpParams,\n ...(options as HttpOptions),\n },\n };\n }\n\n const [params, options] = args;\n return {\n data: {},\n options: {\n params: params as HttpParams,\n ...(options as HttpOptions),\n },\n };\n }\n\n // only hasBodyParams or default\n const [data, options] = args;\n return {\n data,\n options: options as HttpOptions,\n };\n}\n\nexport function hasFileType(request: ContractRequest | undefined): boolean {\n if (!request || request.type !== \"object\") {\n return false;\n }\n\n const processFields = (fields: ContractField[] | undefined): boolean => {\n return (\n !isEmpty(fields) &&\n fields!.some(\n (field) =>\n [\"file\", \"file[]\"].includes((field as ContractFieldItem).type) ||\n processFields((field as ContractFieldItem).fields)\n )\n );\n };\n\n return processFields(request.fields);\n}\n\nexport function transformFormData(\n data: Record<string, unknown> | FormData\n): FormData {\n if (data instanceof FormData) {\n return data;\n }\n\n const formData = new FormData();\n for (const [key, value] of Object.entries(data)) {\n if (Array.isArray(value)) {\n value.forEach((v) => {\n formData.append(key, v);\n });\n } else if (\n isObject(value) &&\n !(value instanceof Blob) &&\n !(value instanceof Date)\n ) {\n Object.entries(value).forEach(([k, v]) => {\n formData.append(`${key}[${k}]`, v);\n });\n } else {\n formData.append(key, value as string);\n }\n }\n\n return formData;\n}\n\nexport async function callFlowApi(\n {\n url,\n originalUri,\n method = \"GET\",\n responseWrapper = true,\n ext_fields = [],\n request,\n isFileType,\n }: CustomApiParams,\n ...args: unknown[]\n): Promise<unknown> {\n const isSimpleRequest = [\"get\", \"delete\", \"head\"].includes(\n method.toLowerCase()\n );\n const defaultOptions: HttpOptions = isFileType\n ? { responseType: \"blob\" }\n : {};\n let response: { data?: unknown };\n\n if (isSimpleRequest) {\n const noParams =\n originalUri && request?.type === \"object\"\n ? (originalUri.match(/:([^/]+)/g)?.length ?? 0) ===\n (request.fields?.length ?? 0)\n : false;\n let params: HttpParams | undefined;\n let options: HttpOptions | undefined;\n\n if (noParams) {\n [options] = args as [HttpOptions?];\n } else {\n [params, options] = args as [HttpParams?, HttpOptions?];\n }\n\n response = await http.simpleRequest(method, url, {\n params,\n ...defaultOptions,\n ...(options as HttpOptions),\n });\n } else {\n const isUploadType = hasFileType(request);\n const result = processExtFields(ext_fields, ...args);\n\n response = await http.requestWithBody(\n method,\n url,\n isUploadType ? transformFormData(result.data as any) : result.data,\n { ...defaultOptions, ...result.options }\n );\n }\n\n return (isFileType ? false : responseWrapper) ? response.data : response;\n}\n\nexport function registerFlowApiProvider(): void {\n customElements.define(FLOW_API_PROVIDER, createProviderClass(callFlowApi));\n}\n"],"mappings":"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"}
@@ -1 +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"}
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,CACH,CAAC;AACH"}
@@ -1 +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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"}
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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"}
@@ -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,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"}
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 +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"}
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,iBACF,CAAkC;IAClCT,IAAI,CAACqB,KAAK,GAAGH,QAAQ,CAACG,KAAK;EAC7B;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"mergeMenu.js","names":["_i18n","require","_constants","_loadDynamicMenuItems","mergeMenu","menuList","runtimeContext","helpers","mainMenu","find","menu","type","undefined","validMenuList","injectWithMenus","Map","menuWithI18n","WeakMap","i18n","menuI18nNamespace","menuId","app","appId","instanceId","Object","entries","forEach","lang","resources","addResourceBundle","set","Promise","all","map","loadDynamicMenuItems","_menu$items","items","length","injectMenuGroupId","injectingMenus","get","push","flatMap","processGroupInject","symbolMenuI18nNamespace","symbolOverrideApp","overrideApp","item","_processGroupInject","foundInjectingMenus","groupId","delete","children","concat","injectingMenu","symbolAppId"],"sources":["../../../src/menu/mergeMenu.ts"],"sourcesContent":["import { i18n } from \"@next-core/i18n\";\nimport {\n symbolAppId,\n symbolMenuI18nNamespace,\n symbolOverrideApp,\n} from \"./constants.js\";\nimport type {\n RuntimeContext,\n MenuItemRawData,\n MenuRawData,\n RuntimeMenuItemRawData,\n RuntimeMenuRawData,\n RuntimeHelpers,\n} from \"./interfaces.js\";\nimport { loadDynamicMenuItems } from \"./loadDynamicMenuItems.js\";\n\nexport async function mergeMenu(\n menuList: MenuRawData[],\n runtimeContext: RuntimeContext,\n helpers: RuntimeHelpers\n): Promise<RuntimeMenuRawData | undefined> {\n const mainMenu = menuList.find((menu) => menu.type !== \"inject\");\n if (!mainMenu) {\n return undefined;\n }\n const validMenuList: MenuRawData[] = [];\n const injectWithMenus = new Map<string, MenuRawData[]>();\n const menuWithI18n = new WeakMap<MenuRawData, string>();\n\n for (const menu of menuList) {\n if (menu.i18n) {\n const menuI18nNamespace = `menu/${menu.menuId}~${menu.app[0].appId}+${\n (menu as { instanceId?: string }).instanceId\n }`;\n // Support any language in `menu.i18n`.\n Object.entries(menu.i18n).forEach(([lang, resources]) => {\n i18n.addResourceBundle(lang, menuI18nNamespace, resources);\n });\n menuWithI18n.set(menu, menuI18nNamespace);\n }\n }\n\n await Promise.all(\n menuList.map((menu) =>\n loadDynamicMenuItems(menu, runtimeContext, menuWithI18n, helpers)\n )\n );\n\n for (const menu of menuList) {\n if (menu.items?.length) {\n if (menu.type === \"inject\" && menu.injectMenuGroupId) {\n let injectingMenus = injectWithMenus.get(menu.injectMenuGroupId);\n if (!injectingMenus) {\n injectingMenus = [];\n injectWithMenus.set(menu.injectMenuGroupId, injectingMenus);\n }\n injectingMenus.push(menu);\n } else {\n validMenuList.push(menu);\n }\n }\n }\n\n return {\n ...mainMenu,\n items: validMenuList.flatMap(\n (menu) =>\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n processGroupInject(menu.items, menu, injectWithMenus, menuWithI18n)!\n ),\n [symbolMenuI18nNamespace]: menuWithI18n.get(mainMenu),\n [symbolOverrideApp]: mainMenu.overrideApp,\n };\n}\n\nfunction processGroupInject(\n items: MenuItemRawData[] | undefined,\n menu: MenuRawData,\n injectWithMenus: Map<string, MenuRawData[]>,\n menuWithI18n: WeakMap<MenuRawData, string>\n): RuntimeMenuItemRawData[] | undefined {\n return items?.map((item) => {\n const foundInjectingMenus =\n item.groupId && injectWithMenus.get(item.groupId);\n if (foundInjectingMenus) {\n // Each menu to be injected with should be injected only once.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n injectWithMenus.delete(item.groupId!);\n }\n return {\n ...item,\n children: (\n processGroupInject(\n item.children,\n menu,\n injectWithMenus,\n menuWithI18n\n ) ?? ([] as RuntimeMenuItemRawData[])\n ).concat(\n foundInjectingMenus\n ? foundInjectingMenus.flatMap(\n (injectingMenu) =>\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n processGroupInject(\n injectingMenu.items,\n injectingMenu,\n injectWithMenus,\n menuWithI18n\n )!\n )\n : ([] as RuntimeMenuItemRawData[])\n ),\n [symbolAppId]: menu.app[0].appId,\n [symbolMenuI18nNamespace]: menuWithI18n.get(menu),\n [symbolOverrideApp]: menu.overrideApp,\n };\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"mergeMenu.js","names":["_i18n","require","_constants","_loadDynamicMenuItems","mergeMenu","menuList","runtimeContext","helpers","mainMenu","find","menu","type","undefined","validMenuList","injectWithMenus","Map","menuWithI18n","WeakMap","i18n","menuI18nNamespace","menuId","app","appId","instanceId","Object","entries","forEach","lang","resources","addResourceBundle","set","Promise","all","map","loadDynamicMenuItems","_menu$items","items","length","injectMenuGroupId","injectingMenus","get","push","flatMap","processGroupInject","symbolMenuI18nNamespace","symbolOverrideApp","overrideApp","item","_processGroupInject","foundInjectingMenus","groupId","delete","children","concat","injectingMenu","symbolAppId"],"sources":["../../../src/menu/mergeMenu.ts"],"sourcesContent":["import { i18n } from \"@next-core/i18n\";\nimport {\n symbolAppId,\n symbolMenuI18nNamespace,\n symbolOverrideApp,\n} from \"./constants.js\";\nimport type {\n RuntimeContext,\n MenuItemRawData,\n MenuRawData,\n RuntimeMenuItemRawData,\n RuntimeMenuRawData,\n RuntimeHelpers,\n} from \"./interfaces.js\";\nimport { loadDynamicMenuItems } from \"./loadDynamicMenuItems.js\";\n\nexport async function mergeMenu(\n menuList: MenuRawData[],\n runtimeContext: RuntimeContext,\n helpers: RuntimeHelpers\n): Promise<RuntimeMenuRawData | undefined> {\n const mainMenu = menuList.find((menu) => menu.type !== \"inject\");\n if (!mainMenu) {\n return undefined;\n }\n const validMenuList: MenuRawData[] = [];\n const injectWithMenus = new Map<string, MenuRawData[]>();\n const menuWithI18n = new WeakMap<MenuRawData, string>();\n\n for (const menu of menuList) {\n if (menu.i18n) {\n const menuI18nNamespace = `menu/${menu.menuId}~${menu.app[0].appId}+${\n (menu as { instanceId?: string }).instanceId\n }`;\n // Support any language in `menu.i18n`.\n Object.entries(menu.i18n).forEach(([lang, resources]) => {\n i18n.addResourceBundle(lang, menuI18nNamespace, resources);\n });\n menuWithI18n.set(menu, menuI18nNamespace);\n }\n }\n\n await Promise.all(\n menuList.map((menu) =>\n loadDynamicMenuItems(menu, runtimeContext, menuWithI18n, helpers)\n )\n );\n\n for (const menu of menuList) {\n if (menu.items?.length) {\n if (menu.type === \"inject\" && menu.injectMenuGroupId) {\n let injectingMenus = injectWithMenus.get(menu.injectMenuGroupId);\n if (!injectingMenus) {\n injectingMenus = [];\n injectWithMenus.set(menu.injectMenuGroupId, injectingMenus);\n }\n injectingMenus.push(menu);\n } else {\n validMenuList.push(menu);\n }\n }\n }\n\n return {\n ...mainMenu,\n items: validMenuList.flatMap(\n (menu) =>\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n processGroupInject(menu.items, menu, injectWithMenus, menuWithI18n)!\n ),\n [symbolMenuI18nNamespace]: menuWithI18n.get(mainMenu),\n [symbolOverrideApp]: mainMenu.overrideApp,\n };\n}\n\nfunction processGroupInject(\n items: MenuItemRawData[] | undefined,\n menu: MenuRawData,\n injectWithMenus: Map<string, MenuRawData[]>,\n menuWithI18n: WeakMap<MenuRawData, string>\n): RuntimeMenuItemRawData[] | undefined {\n return items?.map((item) => {\n const foundInjectingMenus =\n item.groupId && injectWithMenus.get(item.groupId);\n if (foundInjectingMenus) {\n // Each menu to be injected with should be injected only once.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n injectWithMenus.delete(item.groupId!);\n }\n return {\n ...item,\n children: (\n processGroupInject(\n item.children,\n menu,\n injectWithMenus,\n menuWithI18n\n ) ?? ([] as RuntimeMenuItemRawData[])\n ).concat(\n foundInjectingMenus\n ? foundInjectingMenus.flatMap(\n (injectingMenu) =>\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n processGroupInject(\n injectingMenu.items,\n injectingMenu,\n injectWithMenus,\n menuWithI18n\n )!\n )\n : ([] as RuntimeMenuItemRawData[])\n ),\n [symbolAppId]: menu.app[0].appId,\n [symbolMenuI18nNamespace]: menuWithI18n.get(menu),\n [symbolOverrideApp]: menu.overrideApp,\n };\n });\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","names":["resetPermissionPreChecks","auth","authenticate","newAuth","Object","assign","org","username","userInstanceId","loginFrom","accessRule","isAdmin","csrfToken","license","userShowValue","getAuth","_objectSpread","logout","key","keys","undefined","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,SAASA,wBAAwB,QAAQ,uBAAuB;AAEhE,IAAMC,IAAc,GAAG,CAAC,CAAC;;AAEzB;;AAGA;AACA,OAAO,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;AACA,OAAO,SAASC,OAAOA,CAAA,EAAa;EAClC,OAAAC,aAAA,KACKf,IAAI;AAEX;;AAEA;AACA,OAAO,SAASgB,MAAMA,CAAA,EAAS;EAC7B,KAAK,IAAMC,GAAG,IAAId,MAAM,CAACe,IAAI,CAAClB,IAAI,CAAC,EAAwB;IACzDA,IAAI,CAACiB,GAAG,CAAC,GAAGE,SAAS;EACvB;EACApB,wBAAwB,EAAE;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASqB,UAAUA,CAAA,EAAY;EACpC,OAAOpB,IAAI,CAACM,QAAQ,KAAKa,SAAS;AACpC"}
1
+ {"version":3,"file":"auth.js","names":["resetPermissionPreChecks","auth","authenticate","newAuth","Object","assign","org","username","userInstanceId","loginFrom","accessRule","isAdmin","csrfToken","license","userShowValue","getAuth","_objectSpread","logout","key","keys","undefined","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,SAASA,wBAAwB,QAAQ,uBAAuB;AAEhE,IAAMC,IAAc,GAAG,CAAC,CAAC;;AAEzB;;AAGA;AACA,OAAO,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;AACA,OAAO,SAASC,OAAOA,CAAA,EAAa;EAClC,OAAAC,aAAA,KACKf,IAAI;AAEX;;AAEA;AACA,OAAO,SAASgB,MAAMA,CAAA,EAAS;EAC7B,KAAK,IAAMC,GAAG,IAAId,MAAM,CAACe,IAAI,CAAClB,IAAI,CAAC,EAAwB;IACzDA,IAAI,CAACiB,GAAG,CAAC,GAAGE,SAAS;EACvB;EACApB,wBAAwB,CAAC,CAAC;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASqB,UAAUA,CAAA,EAAY;EACpC,OAAOpB,IAAI,CAACM,QAAQ,KAAKa,SAAS;AACpC"}
@@ -1 +1 @@
1
- {"version":3,"file":"checkInstalledApps.js","names":["traverseStoryboardExpressions","collectInstalledAppsHasUsage","RuntimeApi_searchMicroAppStandalone","checkingApps","Map","checkedApps","preCheckInstalledApps","storyboard","hasAppInBootstrap","window","STANDALONE_MICRO_APPS","NO_AUTH_GUARD","appIds","scanInstalledAppsUsage","searchIds","appId","has","push","length","promise","query","$in","fields","catch","error","console","_loop","_appId2","set","then","result","_result$list","app","list","find","item","checkedApp","_objectSpread","id","undefined","waitForCheckingApps","_x","_waitForCheckingApps","apply","arguments","_asyncToGenerator","Promise","all","map","get","getCheckedApp","_storyboard$meta","usage","usedArgs","Set","customTemplates","menus","meta","routes","node","parent"],"sources":["../../src/checkInstalledApps.ts"],"sourcesContent":["import type { MicroApp, Storyboard } from \"@next-core/types\";\nimport {\n traverseStoryboardExpressions,\n collectInstalledAppsHasUsage,\n type MemberCallUsage,\n} from \"@next-core/utils/storyboard\";\nimport { RuntimeApi_searchMicroAppStandalone } from \"@next-api-sdk/micro-app-standalone-sdk\";\n\ntype AppForCheck = Pick<MicroApp, \"id\" | \"currentVersion\" | \"installStatus\">;\n\nconst checkingApps = new Map<string, Promise<AppForCheck | undefined>>();\nconst checkedApps = new Map<string, AppForCheck | undefined>();\n\nexport function preCheckInstalledApps(\n storyboard: Storyboard,\n hasAppInBootstrap: (appId: string) => boolean\n) {\n if (window.STANDALONE_MICRO_APPS && !window.NO_AUTH_GUARD) {\n const appIds = scanInstalledAppsUsage(storyboard);\n const searchIds: string[] = [];\n for (const appId of appIds) {\n // Do not check these apps already checking or in bootstrap.\n if (!checkingApps.has(appId) && !hasAppInBootstrap(appId)) {\n searchIds.push(appId);\n }\n }\n if (searchIds.length === 0) {\n return;\n }\n const promise = RuntimeApi_searchMicroAppStandalone({\n query: { appId: { $in: searchIds } },\n fields: [\"appId\", \"currentVersion\", \"installStatus\"],\n }).catch((error) => {\n // Allow search micro app 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(\"Get off site standalone micro-apps failed\", error);\n });\n for (const appId of searchIds) {\n checkingApps.set(\n appId,\n promise.then((result) => {\n const app = result?.list?.find((item) => item.appId === appId);\n const checkedApp = app\n ? {\n ...app,\n id: appId,\n }\n : undefined;\n checkedApps.set(appId, checkedApp);\n return checkedApp;\n })\n );\n }\n }\n}\n\nexport async function waitForCheckingApps(appIds: string[]) {\n await Promise.all(appIds.map((appId) => checkingApps.get(appId)));\n}\n\nexport function getCheckedApp(appId: string) {\n if (window.STANDALONE_MICRO_APPS) {\n return checkedApps.get(appId);\n }\n}\n\nfunction scanInstalledAppsUsage(storyboard: Storyboard) {\n const usage: MemberCallUsage = {\n usedArgs: new Set(),\n };\n // `INSTALLED_APPS.has(...)` is not available in storyboard functions\n const { customTemplates, menus } = storyboard.meta ?? {};\n traverseStoryboardExpressions(\n [storyboard.routes, customTemplates, menus],\n (node, parent) => {\n collectInstalledAppsHasUsage(usage, node, parent);\n },\n \"INSTALLED_APPS\"\n );\n return [...usage.usedArgs];\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"checkInstalledApps.js","names":["traverseStoryboardExpressions","collectInstalledAppsHasUsage","RuntimeApi_searchMicroAppStandalone","checkingApps","Map","checkedApps","preCheckInstalledApps","storyboard","hasAppInBootstrap","window","STANDALONE_MICRO_APPS","NO_AUTH_GUARD","appIds","scanInstalledAppsUsage","searchIds","appId","has","push","length","promise","query","$in","fields","catch","error","console","_loop","_appId2","set","then","result","_result$list","app","list","find","item","checkedApp","_objectSpread","id","undefined","waitForCheckingApps","_x","_waitForCheckingApps","apply","arguments","_asyncToGenerator","Promise","all","map","get","getCheckedApp","_storyboard$meta","usage","usedArgs","Set","customTemplates","menus","meta","routes","node","parent"],"sources":["../../src/checkInstalledApps.ts"],"sourcesContent":["import type { MicroApp, Storyboard } from \"@next-core/types\";\nimport {\n traverseStoryboardExpressions,\n collectInstalledAppsHasUsage,\n type MemberCallUsage,\n} from \"@next-core/utils/storyboard\";\nimport { RuntimeApi_searchMicroAppStandalone } from \"@next-api-sdk/micro-app-standalone-sdk\";\n\ntype AppForCheck = Pick<MicroApp, \"id\" | \"currentVersion\" | \"installStatus\">;\n\nconst checkingApps = new Map<string, Promise<AppForCheck | undefined>>();\nconst checkedApps = new Map<string, AppForCheck | undefined>();\n\nexport function preCheckInstalledApps(\n storyboard: Storyboard,\n hasAppInBootstrap: (appId: string) => boolean\n) {\n if (window.STANDALONE_MICRO_APPS && !window.NO_AUTH_GUARD) {\n const appIds = scanInstalledAppsUsage(storyboard);\n const searchIds: string[] = [];\n for (const appId of appIds) {\n // Do not check these apps already checking or in bootstrap.\n if (!checkingApps.has(appId) && !hasAppInBootstrap(appId)) {\n searchIds.push(appId);\n }\n }\n if (searchIds.length === 0) {\n return;\n }\n const promise = RuntimeApi_searchMicroAppStandalone({\n query: { appId: { $in: searchIds } },\n fields: [\"appId\", \"currentVersion\", \"installStatus\"],\n }).catch((error) => {\n // Allow search micro app 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(\"Get off site standalone micro-apps failed\", error);\n });\n for (const appId of searchIds) {\n checkingApps.set(\n appId,\n promise.then((result) => {\n const app = result?.list?.find((item) => item.appId === appId);\n const checkedApp = app\n ? {\n ...app,\n id: appId,\n }\n : undefined;\n checkedApps.set(appId, checkedApp);\n return checkedApp;\n })\n );\n }\n }\n}\n\nexport async function waitForCheckingApps(appIds: string[]) {\n await Promise.all(appIds.map((appId) => checkingApps.get(appId)));\n}\n\nexport function getCheckedApp(appId: string) {\n if (window.STANDALONE_MICRO_APPS) {\n return checkedApps.get(appId);\n }\n}\n\nfunction scanInstalledAppsUsage(storyboard: Storyboard) {\n const usage: MemberCallUsage = {\n usedArgs: new Set(),\n };\n // `INSTALLED_APPS.has(...)` is not available in storyboard functions\n const { customTemplates, menus } = storyboard.meta ?? {};\n traverseStoryboardExpressions(\n [storyboard.routes, customTemplates, menus],\n (node, parent) => {\n collectInstalledAppsHasUsage(usage, node, parent);\n },\n \"INSTALLED_APPS\"\n );\n return [...usage.usedArgs];\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"checkPermissions.js","names":["difference","scanPermissionActionsInAny","scanPermissionActionsInStoryboard","PermissionApi_validatePermissions","getAuth","isLoggedIn","checkedPermissions","permissionMap","Map","preCheckPermissions","storyboard","isAdmin","usedActions","validatePermissions","preCheckPermissionsForBrickOrRoute","_x","_x2","_preCheckPermissionsForBrickOrRoute","apply","arguments","_asyncToGenerator","container","asyncComputeRealValue","Array","isArray","permissionsPreCheck","actions","preCheckPermissionsForAny","data","_x3","_validatePermissions","length","push","result","item","set","action","authorizationStatus","console","error","concat","checkPermissions","_len","_key","get","undefined","resetPermissionPreChecks","clear"],"sources":["../../src/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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"}
1
+ {"version":3,"file":"checkPermissions.js","names":["difference","scanPermissionActionsInAny","scanPermissionActionsInStoryboard","PermissionApi_validatePermissions","getAuth","isLoggedIn","checkedPermissions","permissionMap","Map","preCheckPermissions","storyboard","isAdmin","usedActions","validatePermissions","preCheckPermissionsForBrickOrRoute","_x","_x2","_preCheckPermissionsForBrickOrRoute","apply","arguments","_asyncToGenerator","container","asyncComputeRealValue","Array","isArray","permissionsPreCheck","actions","preCheckPermissionsForAny","data","_x3","_validatePermissions","length","push","result","item","set","action","authorizationStatus","console","error","concat","checkPermissions","_len","_key","get","undefined","resetPermissionPreChecks","clear"],"sources":["../../src/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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"CollectContracts.js","names":["contractsMap","Map","widgetContractMap","addContract","contracts","map","forEach","contract","set","concat","namespaceId","name","collectContract","collectWidgetContract","clearCollectWidgetContract","clear","getContract","get"],"sources":["../../../src/flowApi/CollectContracts.ts"],"sourcesContent":["import { Contract } from \"@next-core/types\";\n\nconst contractsMap: Map<string, Contract> = new Map();\nconst widgetContractMap: Map<string, Contract> = new Map();\n\nconst addContract = (\n contracts: Contract[] | undefined,\n map: Map<string, Contract>\n): void => {\n contracts?.forEach((contract) => {\n map.set(`${contract.namespaceId}.${contract.name}`, contract);\n });\n};\n\nexport function collectContract(contracts: Contract[] | undefined): void {\n addContract(contracts, contractsMap);\n}\n\nexport function collectWidgetContract(contracts: Contract[] | undefined): void {\n addContract(contracts, widgetContractMap);\n}\n\nexport function clearCollectWidgetContract(): void {\n widgetContractMap.clear();\n}\n\nexport function getContract(name: string): Contract | undefined {\n return contractsMap.get(name) || widgetContractMap.get(name);\n}\n"],"mappings":"AAEA,IAAMA,YAAmC,GAAG,IAAIC,GAAG,EAAE;AACrD,IAAMC,iBAAwC,GAAG,IAAID,GAAG,EAAE;AAE1D,IAAME,WAAW,GAAGA,CAClBC,SAAiC,EACjCC,GAA0B,KACjB;EACTD,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAEE,OAAO,CAAEC,QAAQ,IAAK;IAC/BF,GAAG,CAACG,GAAG,IAAAC,MAAA,CAAIF,QAAQ,CAACG,WAAW,OAAAD,MAAA,CAAIF,QAAQ,CAACI,IAAI,GAAIJ,QAAQ,CAAC;EAC/D,CAAC,CAAC;AACJ,CAAC;AAED,OAAO,SAASK,eAAeA,CAACR,SAAiC,EAAQ;EACvED,WAAW,CAACC,SAAS,EAAEJ,YAAY,CAAC;AACtC;AAEA,OAAO,SAASa,qBAAqBA,CAACT,SAAiC,EAAQ;EAC7ED,WAAW,CAACC,SAAS,EAAEF,iBAAiB,CAAC;AAC3C;AAEA,OAAO,SAASY,0BAA0BA,CAAA,EAAS;EACjDZ,iBAAiB,CAACa,KAAK,EAAE;AAC3B;AAEA,OAAO,SAASC,WAAWA,CAACL,IAAY,EAAwB;EAC9D,OAAOX,YAAY,CAACiB,GAAG,CAACN,IAAI,CAAC,IAAIT,iBAAiB,CAACe,GAAG,CAACN,IAAI,CAAC;AAC9D"}
1
+ {"version":3,"file":"CollectContracts.js","names":["contractsMap","Map","widgetContractMap","addContract","contracts","map","forEach","contract","set","concat","namespaceId","name","collectContract","collectWidgetContract","clearCollectWidgetContract","clear","getContract","get"],"sources":["../../../src/flowApi/CollectContracts.ts"],"sourcesContent":["import { Contract } from \"@next-core/types\";\n\nconst contractsMap: Map<string, Contract> = new Map();\nconst widgetContractMap: Map<string, Contract> = new Map();\n\nconst addContract = (\n contracts: Contract[] | undefined,\n map: Map<string, Contract>\n): void => {\n contracts?.forEach((contract) => {\n map.set(`${contract.namespaceId}.${contract.name}`, contract);\n });\n};\n\nexport function collectContract(contracts: Contract[] | undefined): void {\n addContract(contracts, contractsMap);\n}\n\nexport function collectWidgetContract(contracts: Contract[] | undefined): void {\n addContract(contracts, widgetContractMap);\n}\n\nexport function clearCollectWidgetContract(): void {\n widgetContractMap.clear();\n}\n\nexport function getContract(name: string): Contract | undefined {\n return contractsMap.get(name) || widgetContractMap.get(name);\n}\n"],"mappings":"AAEA,IAAMA,YAAmC,GAAG,IAAIC,GAAG,CAAC,CAAC;AACrD,IAAMC,iBAAwC,GAAG,IAAID,GAAG,CAAC,CAAC;AAE1D,IAAME,WAAW,GAAGA,CAClBC,SAAiC,EACjCC,GAA0B,KACjB;EACTD,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAEE,OAAO,CAAEC,QAAQ,IAAK;IAC/BF,GAAG,CAACG,GAAG,IAAAC,MAAA,CAAIF,QAAQ,CAACG,WAAW,OAAAD,MAAA,CAAIF,QAAQ,CAACI,IAAI,GAAIJ,QAAQ,CAAC;EAC/D,CAAC,CAAC;AACJ,CAAC;AAED,OAAO,SAASK,eAAeA,CAACR,SAAiC,EAAQ;EACvED,WAAW,CAACC,SAAS,EAAEJ,YAAY,CAAC;AACtC;AAEA,OAAO,SAASa,qBAAqBA,CAACT,SAAiC,EAAQ;EAC7ED,WAAW,CAACC,SAAS,EAAEF,iBAAiB,CAAC;AAC3C;AAEA,OAAO,SAASY,0BAA0BA,CAAA,EAAS;EACjDZ,iBAAiB,CAACa,KAAK,CAAC,CAAC;AAC3B;AAEA,OAAO,SAASC,WAAWA,CAACL,IAAY,EAAwB;EAC9D,OAAOX,YAAY,CAACiB,GAAG,CAACN,IAAI,CAAC,IAAIT,iBAAiB,CAACe,GAAG,CAACN,IAAI,CAAC;AAC9D"}
@@ -1 +1 @@
1
- {"version":3,"file":"FlowApi.js","names":["yaml","ContractApi_searchSingleContract","getContract","flowApiDefinitionPromiseMap","Map","isFlowApiProvider","provider","includes","getArgsOfFlowApi","_x","_x2","_x3","_getArgsOfFlowApi","apply","arguments","_asyncToGenerator","originalArgs","method","Error","concat","apiDefinition","fetchFlowApiDefinition","apiProfile","getApiProfileFromApiDefinition","getApiArgsFromApiProfile","_ref","uri","apiMethod","ext_fields","name","namespace","serviceName","responseWrapper","version","isFileType","request","isDownload","fileName","shift","url","args","getTransformedUriAndRestArgs","originalUri","prefix","restArgs","slice","transformedUri","replace","api","_contract$endpoint","_contract$response","contract","safeLoad","schema","JSON_SCHEMA","json","endpoint","response","wrapper","toLowerCase","type","promise","get","_fetchFlowApiDefinition","set","_x4","_fetchFlowApiDefinition2","namespaceName","nameWithVersion","split","namespaceId","contractData","contractName","_contractData$namespa","_contractData$namespa2"],"sources":["../../../src/flowApi/FlowApi.ts"],"sourcesContent":["import yaml from \"js-yaml\";\nimport { ContractApi_searchSingleContract } from \"@next-api-sdk/api-gateway-sdk\";\nimport { ContractRequest, ContractResponse, ExtField } from \"@next-core/types\";\nimport { getContract } from \"./CollectContracts.js\";\n\nconst flowApiDefinitionPromiseMap = new Map<\n string,\n Promise<CustomApiDefinition | undefined>\n>();\n\n// Legacy Custom API: `${namespace}@${name}`\n// Flow API: `${namespace}@${name}:${version}`\nexport function isFlowApiProvider(provider: string): boolean {\n return provider.includes(\"@\");\n}\n\nexport async function getArgsOfFlowApi(\n provider: string,\n originalArgs: unknown[],\n method?: string\n): Promise<unknown[]> {\n if (!provider.includes(\":\")) {\n throw new Error(\n `You're using legacy Custom API \"${provider}\" which is dropped in v3, please use Flow API instead`\n );\n }\n\n const apiDefinition = await fetchFlowApiDefinition(provider);\n\n if (!apiDefinition) {\n throw new Error(`Flow API not found: \"${provider}\"`);\n }\n\n const apiProfile = getApiProfileFromApiDefinition(provider, apiDefinition);\n\n return getApiArgsFromApiProfile(apiProfile, originalArgs, method);\n}\n\nfunction getApiArgsFromApiProfile(\n {\n uri,\n method: apiMethod,\n ext_fields,\n name,\n namespace,\n serviceName,\n responseWrapper,\n version,\n isFileType,\n request,\n }: CustomApiProfile,\n originalArgs: unknown[],\n method?: string\n): unknown[] {\n const isDownload = isFileType && method === \"saveAs\";\n let fileName: string | undefined;\n if (isDownload) {\n fileName = originalArgs.shift() as string;\n }\n\n const { url, args } = getTransformedUriAndRestArgs(\n uri,\n originalArgs,\n name,\n namespace,\n serviceName,\n version\n );\n\n return [\n ...(isDownload ? [fileName] : []),\n {\n url,\n originalUri: uri,\n method: apiMethod,\n ext_fields,\n responseWrapper,\n request,\n isFileType,\n },\n ...args,\n ];\n}\n\nfunction getTransformedUriAndRestArgs(\n uri: string,\n originalArgs: unknown[],\n name: string,\n namespace: string,\n serviceName: string | undefined,\n version?: string\n): { url: string; args: unknown[] } {\n const prefix = version\n ? serviceName\n ? `api/gateway/${serviceName}`\n : `api/gateway/${namespace}.${name}@${version}`\n : `api/gateway/api_service.${namespace}.${name}`;\n const restArgs = originalArgs.slice();\n const transformedUri = uri.replace(\n /:([^/]+)/g,\n () => restArgs.shift() as string\n );\n return {\n url: prefix + transformedUri,\n args: restArgs,\n };\n}\n\nfunction getApiProfileFromApiDefinition(\n provider: string,\n api: CustomApiDefinition\n): CustomApiProfile {\n const contract: CustomApiDefinition[\"contract\"] =\n typeof api.contract === \"string\"\n ? (yaml.safeLoad(api.contract, {\n schema: yaml.JSON_SCHEMA,\n json: true,\n }) as CustomApiDefinition[\"contract\"])\n : api.contract;\n const { uri, method = \"GET\", ext_fields } = contract?.endpoint ?? {};\n const responseWrapper = contract?.response\n ? contract.response.wrapper !== false\n : false;\n if (!uri) {\n throw new Error(\n `Missing endpoint.uri in contract of provider \"${provider}\"`\n );\n }\n return {\n uri,\n method: method.toLowerCase() === \"list\" ? \"get\" : method,\n ext_fields,\n name: api.name,\n namespace: api.namespace,\n serviceName: api.serviceName,\n version: api.version,\n isFileType: contract?.response?.type === \"file\",\n responseWrapper,\n request: contract?.request,\n };\n}\n\nfunction fetchFlowApiDefinition(\n provider: string\n): Promise<CustomApiDefinition | undefined> {\n let promise = flowApiDefinitionPromiseMap.get(provider);\n if (!promise) {\n promise = _fetchFlowApiDefinition(provider);\n flowApiDefinitionPromiseMap.set(provider, promise);\n }\n return promise;\n}\n\nasync function _fetchFlowApiDefinition(\n provider: string\n): Promise<CustomApiDefinition | undefined> {\n const [namespaceName, nameWithVersion] = provider.split(\"@\");\n const [name, version] = nameWithVersion.split(\":\");\n\n const contract = getContract(`${namespaceName}.${name}`);\n if (contract) {\n return {\n name: contract.name,\n namespace: contract.namespaceId,\n serviceName: contract.serviceName,\n version: contract.version,\n contract: {\n endpoint: contract.endpoint,\n response: contract.response,\n request: contract.request,\n },\n };\n } else {\n const { contractData } = await ContractApi_searchSingleContract({\n contractName: `${namespaceName}.${name}`,\n version,\n });\n\n // return undefined if don't found contract\n if (contractData) {\n return {\n name: contractData.name,\n namespace: contractData.namespace?.[0]?.name,\n serviceName: contractData.serviceName,\n version: contractData.version,\n contract: {\n endpoint: contractData.endpoint,\n response: contractData.response,\n request: contractData.request,\n },\n };\n }\n }\n}\n\nexport interface CustomApiDefinition {\n name: string;\n namespace: string;\n version?: string;\n serviceName?: string;\n contract?: {\n endpoint: {\n ext_fields?: ExtField[];\n uri: string;\n method:\n | \"POST\"\n | \"post\"\n | \"PUT\"\n | \"put\"\n | \"GET\"\n | \"get\"\n | \"DELETE\"\n | \"delete\"\n | \"LIST\"\n | \"list\"\n | \"PATCH\"\n | \"patch\"\n | \"HEAD\"\n | \"head\";\n };\n request?: ContractRequest;\n response?: ContractResponse;\n };\n}\n\nexport interface CustomApiProfile {\n uri: string;\n method: string;\n name: string;\n namespace: string;\n serviceName?: string;\n responseWrapper: boolean;\n version?: string;\n isFileType?: boolean;\n ext_fields?: ExtField[];\n request?: ContractRequest;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"FlowApi.js","names":["yaml","ContractApi_searchSingleContract","getContract","flowApiDefinitionPromiseMap","Map","isFlowApiProvider","provider","includes","getArgsOfFlowApi","_x","_x2","_x3","_getArgsOfFlowApi","apply","arguments","_asyncToGenerator","originalArgs","method","Error","concat","apiDefinition","fetchFlowApiDefinition","apiProfile","getApiProfileFromApiDefinition","getApiArgsFromApiProfile","_ref","uri","apiMethod","ext_fields","name","namespace","serviceName","responseWrapper","version","isFileType","request","isDownload","fileName","shift","url","args","getTransformedUriAndRestArgs","originalUri","prefix","restArgs","slice","transformedUri","replace","api","_contract$endpoint","_contract$response","contract","safeLoad","schema","JSON_SCHEMA","json","endpoint","response","wrapper","toLowerCase","type","promise","get","_fetchFlowApiDefinition","set","_x4","_fetchFlowApiDefinition2","namespaceName","nameWithVersion","split","namespaceId","contractData","contractName","_contractData$namespa","_contractData$namespa2"],"sources":["../../../src/flowApi/FlowApi.ts"],"sourcesContent":["import yaml from \"js-yaml\";\nimport { ContractApi_searchSingleContract } from \"@next-api-sdk/api-gateway-sdk\";\nimport { ContractRequest, ContractResponse, ExtField } from \"@next-core/types\";\nimport { getContract } from \"./CollectContracts.js\";\n\nconst flowApiDefinitionPromiseMap = new Map<\n string,\n Promise<CustomApiDefinition | undefined>\n>();\n\n// Legacy Custom API: `${namespace}@${name}`\n// Flow API: `${namespace}@${name}:${version}`\nexport function isFlowApiProvider(provider: string): boolean {\n return provider.includes(\"@\");\n}\n\nexport async function getArgsOfFlowApi(\n provider: string,\n originalArgs: unknown[],\n method?: string\n): Promise<unknown[]> {\n if (!provider.includes(\":\")) {\n throw new Error(\n `You're using legacy Custom API \"${provider}\" which is dropped in v3, please use Flow API instead`\n );\n }\n\n const apiDefinition = await fetchFlowApiDefinition(provider);\n\n if (!apiDefinition) {\n throw new Error(`Flow API not found: \"${provider}\"`);\n }\n\n const apiProfile = getApiProfileFromApiDefinition(provider, apiDefinition);\n\n return getApiArgsFromApiProfile(apiProfile, originalArgs, method);\n}\n\nfunction getApiArgsFromApiProfile(\n {\n uri,\n method: apiMethod,\n ext_fields,\n name,\n namespace,\n serviceName,\n responseWrapper,\n version,\n isFileType,\n request,\n }: CustomApiProfile,\n originalArgs: unknown[],\n method?: string\n): unknown[] {\n const isDownload = isFileType && method === \"saveAs\";\n let fileName: string | undefined;\n if (isDownload) {\n fileName = originalArgs.shift() as string;\n }\n\n const { url, args } = getTransformedUriAndRestArgs(\n uri,\n originalArgs,\n name,\n namespace,\n serviceName,\n version\n );\n\n return [\n ...(isDownload ? [fileName] : []),\n {\n url,\n originalUri: uri,\n method: apiMethod,\n ext_fields,\n responseWrapper,\n request,\n isFileType,\n },\n ...args,\n ];\n}\n\nfunction getTransformedUriAndRestArgs(\n uri: string,\n originalArgs: unknown[],\n name: string,\n namespace: string,\n serviceName: string | undefined,\n version?: string\n): { url: string; args: unknown[] } {\n const prefix = version\n ? serviceName\n ? `api/gateway/${serviceName}`\n : `api/gateway/${namespace}.${name}@${version}`\n : `api/gateway/api_service.${namespace}.${name}`;\n const restArgs = originalArgs.slice();\n const transformedUri = uri.replace(\n /:([^/]+)/g,\n () => restArgs.shift() as string\n );\n return {\n url: prefix + transformedUri,\n args: restArgs,\n };\n}\n\nfunction getApiProfileFromApiDefinition(\n provider: string,\n api: CustomApiDefinition\n): CustomApiProfile {\n const contract: CustomApiDefinition[\"contract\"] =\n typeof api.contract === \"string\"\n ? (yaml.safeLoad(api.contract, {\n schema: yaml.JSON_SCHEMA,\n json: true,\n }) as CustomApiDefinition[\"contract\"])\n : api.contract;\n const { uri, method = \"GET\", ext_fields } = contract?.endpoint ?? {};\n const responseWrapper = contract?.response\n ? contract.response.wrapper !== false\n : false;\n if (!uri) {\n throw new Error(\n `Missing endpoint.uri in contract of provider \"${provider}\"`\n );\n }\n return {\n uri,\n method: method.toLowerCase() === \"list\" ? \"get\" : method,\n ext_fields,\n name: api.name,\n namespace: api.namespace,\n serviceName: api.serviceName,\n version: api.version,\n isFileType: contract?.response?.type === \"file\",\n responseWrapper,\n request: contract?.request,\n };\n}\n\nfunction fetchFlowApiDefinition(\n provider: string\n): Promise<CustomApiDefinition | undefined> {\n let promise = flowApiDefinitionPromiseMap.get(provider);\n if (!promise) {\n promise = _fetchFlowApiDefinition(provider);\n flowApiDefinitionPromiseMap.set(provider, promise);\n }\n return promise;\n}\n\nasync function _fetchFlowApiDefinition(\n provider: string\n): Promise<CustomApiDefinition | undefined> {\n const [namespaceName, nameWithVersion] = provider.split(\"@\");\n const [name, version] = nameWithVersion.split(\":\");\n\n const contract = getContract(`${namespaceName}.${name}`);\n if (contract) {\n return {\n name: contract.name,\n namespace: contract.namespaceId,\n serviceName: contract.serviceName,\n version: contract.version,\n contract: {\n endpoint: contract.endpoint,\n response: contract.response,\n request: contract.request,\n },\n };\n } else {\n const { contractData } = await ContractApi_searchSingleContract({\n contractName: `${namespaceName}.${name}`,\n version,\n });\n\n // return undefined if don't found contract\n if (contractData) {\n return {\n name: contractData.name,\n namespace: contractData.namespace?.[0]?.name,\n serviceName: contractData.serviceName,\n version: contractData.version,\n contract: {\n endpoint: contractData.endpoint,\n response: contractData.response,\n request: contractData.request,\n },\n };\n }\n }\n}\n\nexport interface CustomApiDefinition {\n name: string;\n namespace: string;\n version?: string;\n serviceName?: string;\n contract?: {\n endpoint: {\n ext_fields?: ExtField[];\n uri: string;\n method:\n | \"POST\"\n | \"post\"\n | \"PUT\"\n | \"put\"\n | \"GET\"\n | \"get\"\n | \"DELETE\"\n | \"delete\"\n | \"LIST\"\n | \"list\"\n | \"PATCH\"\n | \"patch\"\n | \"HEAD\"\n | \"head\";\n };\n request?: ContractRequest;\n response?: ContractResponse;\n };\n}\n\nexport interface CustomApiProfile {\n uri: string;\n method: string;\n name: string;\n namespace: string;\n serviceName?: string;\n responseWrapper: boolean;\n version?: string;\n isFileType?: boolean;\n ext_fields?: ExtField[];\n request?: ContractRequest;\n}\n"],"mappings":";AAAA,OAAOA,IAAI,MAAM,SAAS;AAC1B,SAASC,gCAAgC,QAAQ,+BAA+B;AAEhF,SAASC,WAAW,QAAQ,uBAAuB;AAEnD,IAAMC,2BAA2B,GAAG,IAAIC,GAAG,CAGzC,CAAC;;AAEH;AACA;AACA,OAAO,SAASC,iBAAiBA,CAACC,QAAgB,EAAW;EAC3D,OAAOA,QAAQ,CAACC,QAAQ,CAAC,GAAG,CAAC;AAC/B;AAEA,gBAAsBC,gBAAgBA,CAAAC,EAAA,EAAAC,GAAA,EAAAC,GAAA;EAAA,OAAAC,iBAAA,CAAAC,KAAA,OAAAC,SAAA;AAAA;AAoBrC,SAAAF,kBAAA;EAAAA,iBAAA,GAAAG,iBAAA,CApBM,WACLT,QAAgB,EAChBU,YAAuB,EACvBC,MAAe,EACK;IACpB,IAAI,CAACX,QAAQ,CAACC,QAAQ,CAAC,GAAG,CAAC,EAAE;MAC3B,MAAM,IAAIW,KAAK,qCAAAC,MAAA,CACsBb,QAAQ,2DAC7C,CAAC;IACH;IAEA,IAAMc,aAAa,SAASC,sBAAsB,CAACf,QAAQ,CAAC;IAE5D,IAAI,CAACc,aAAa,EAAE;MAClB,MAAM,IAAIF,KAAK,0BAAAC,MAAA,CAAyBb,QAAQ,OAAG,CAAC;IACtD;IAEA,IAAMgB,UAAU,GAAGC,8BAA8B,CAACjB,QAAQ,EAAEc,aAAa,CAAC;IAE1E,OAAOI,wBAAwB,CAACF,UAAU,EAAEN,YAAY,EAAEC,MAAM,CAAC;EACnE,CAAC;EAAA,OAAAL,iBAAA,CAAAC,KAAA,OAAAC,SAAA;AAAA;AAED,SAASU,wBAAwBA,CAAAC,IAAA,EAa/BT,YAAuB,EACvBC,MAAe,EACJ;EAAA,IAdX;IACES,GAAG;IACHT,MAAM,EAAEU,SAAS;IACjBC,UAAU;IACVC,IAAI;IACJC,SAAS;IACTC,WAAW;IACXC,eAAe;IACfC,OAAO;IACPC,UAAU;IACVC;EACgB,CAAC,GAAAV,IAAA;EAInB,IAAMW,UAAU,GAAGF,UAAU,IAAIjB,MAAM,KAAK,QAAQ;EACpD,IAAIoB,QAA4B;EAChC,IAAID,UAAU,EAAE;IACdC,QAAQ,GAAGrB,YAAY,CAACsB,KAAK,CAAC,CAAW;EAC3C;EAEA,IAAM;IAAEC,GAAG;IAAEC;EAAK,CAAC,GAAGC,4BAA4B,CAChDf,GAAG,EACHV,YAAY,EACZa,IAAI,EACJC,SAAS,EACTC,WAAW,EACXE,OACF,CAAC;EAED,OAAO,CACL,IAAIG,UAAU,GAAG,CAACC,QAAQ,CAAC,GAAG,EAAE,CAAC,EACjC;IACEE,GAAG;IACHG,WAAW,EAAEhB,GAAG;IAChBT,MAAM,EAAEU,SAAS;IACjBC,UAAU;IACVI,eAAe;IACfG,OAAO;IACPD;EACF,CAAC,EACD,GAAGM,IAAI,CACR;AACH;AAEA,SAASC,4BAA4BA,CACnCf,GAAW,EACXV,YAAuB,EACvBa,IAAY,EACZC,SAAiB,EACjBC,WAA+B,EAC/BE,OAAgB,EACkB;EAClC,IAAMU,MAAM,GAAGV,OAAO,GAClBF,WAAW,kBAAAZ,MAAA,CACMY,WAAW,mBAAAZ,MAAA,CACXW,SAAS,OAAAX,MAAA,CAAIU,IAAI,OAAAV,MAAA,CAAIc,OAAO,CAAE,8BAAAd,MAAA,CACpBW,SAAS,OAAAX,MAAA,CAAIU,IAAI,CAAE;EAClD,IAAMe,QAAQ,GAAG5B,YAAY,CAAC6B,KAAK,CAAC,CAAC;EACrC,IAAMC,cAAc,GAAGpB,GAAG,CAACqB,OAAO,CAChC,WAAW,EACX,MAAMH,QAAQ,CAACN,KAAK,CAAC,CACvB,CAAC;EACD,OAAO;IACLC,GAAG,EAAEI,MAAM,GAAGG,cAAc;IAC5BN,IAAI,EAAEI;EACR,CAAC;AACH;AAEA,SAASrB,8BAA8BA,CACrCjB,QAAgB,EAChB0C,GAAwB,EACN;EAAA,IAAAC,kBAAA,EAAAC,kBAAA;EAClB,IAAMC,QAAyC,GAC7C,OAAOH,GAAG,CAACG,QAAQ,KAAK,QAAQ,GAC3BnD,IAAI,CAACoD,QAAQ,CAACJ,GAAG,CAACG,QAAQ,EAAE;IAC3BE,MAAM,EAAErD,IAAI,CAACsD,WAAW;IACxBC,IAAI,EAAE;EACR,CAAC,CAAC,GACFP,GAAG,CAACG,QAAQ;EAClB,IAAM;IAAEzB,GAAG;IAAET,MAAM,GAAG,KAAK;IAAEW;EAAW,CAAC,IAAAqB,kBAAA,GAAGE,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEK,QAAQ,cAAAP,kBAAA,cAAAA,kBAAA,GAAI,CAAC,CAAC;EACpE,IAAMjB,eAAe,GAAGmB,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAEM,QAAQ,GACtCN,QAAQ,CAACM,QAAQ,CAACC,OAAO,KAAK,KAAK,GACnC,KAAK;EACT,IAAI,CAAChC,GAAG,EAAE;IACR,MAAM,IAAIR,KAAK,mDAAAC,MAAA,CACoCb,QAAQ,OAC3D,CAAC;EACH;EACA,OAAO;IACLoB,GAAG;IACHT,MAAM,EAAEA,MAAM,CAAC0C,WAAW,CAAC,CAAC,KAAK,MAAM,GAAG,KAAK,GAAG1C,MAAM;IACxDW,UAAU;IACVC,IAAI,EAAEmB,GAAG,CAACnB,IAAI;IACdC,SAAS,EAAEkB,GAAG,CAAClB,SAAS;IACxBC,WAAW,EAAEiB,GAAG,CAACjB,WAAW;IAC5BE,OAAO,EAAEe,GAAG,CAACf,OAAO;IACpBC,UAAU,EAAE,CAAAiB,QAAQ,aAARA,QAAQ,wBAAAD,kBAAA,GAARC,QAAQ,CAAEM,QAAQ,cAAAP,kBAAA,uBAAlBA,kBAAA,CAAoBU,IAAI,MAAK,MAAM;IAC/C5B,eAAe;IACfG,OAAO,EAAEgB,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEhB;EACrB,CAAC;AACH;AAEA,SAASd,sBAAsBA,CAC7Bf,QAAgB,EAC0B;EAC1C,IAAIuD,OAAO,GAAG1D,2BAA2B,CAAC2D,GAAG,CAACxD,QAAQ,CAAC;EACvD,IAAI,CAACuD,OAAO,EAAE;IACZA,OAAO,GAAGE,uBAAuB,CAACzD,QAAQ,CAAC;IAC3CH,2BAA2B,CAAC6D,GAAG,CAAC1D,QAAQ,EAAEuD,OAAO,CAAC;EACpD;EACA,OAAOA,OAAO;AAChB;AAAC,SAEcE,uBAAuBA,CAAAE,GAAA;EAAA,OAAAC,wBAAA,CAAArD,KAAA,OAAAC,SAAA;AAAA;AAAA,SAAAoD,yBAAA;EAAAA,wBAAA,GAAAnD,iBAAA,CAAtC,WACET,QAAgB,EAC0B;IAC1C,IAAM,CAAC6D,aAAa,EAAEC,eAAe,CAAC,GAAG9D,QAAQ,CAAC+D,KAAK,CAAC,GAAG,CAAC;IAC5D,IAAM,CAACxC,IAAI,EAAEI,OAAO,CAAC,GAAGmC,eAAe,CAACC,KAAK,CAAC,GAAG,CAAC;IAElD,IAAMlB,QAAQ,GAAGjD,WAAW,IAAAiB,MAAA,CAAIgD,aAAa,OAAAhD,MAAA,CAAIU,IAAI,CAAE,CAAC;IACxD,IAAIsB,QAAQ,EAAE;MACZ,OAAO;QACLtB,IAAI,EAAEsB,QAAQ,CAACtB,IAAI;QACnBC,SAAS,EAAEqB,QAAQ,CAACmB,WAAW;QAC/BvC,WAAW,EAAEoB,QAAQ,CAACpB,WAAW;QACjCE,OAAO,EAAEkB,QAAQ,CAAClB,OAAO;QACzBkB,QAAQ,EAAE;UACRK,QAAQ,EAAEL,QAAQ,CAACK,QAAQ;UAC3BC,QAAQ,EAAEN,QAAQ,CAACM,QAAQ;UAC3BtB,OAAO,EAAEgB,QAAQ,CAAChB;QACpB;MACF,CAAC;IACH,CAAC,MAAM;MACL,IAAM;QAAEoC;MAAa,CAAC,SAAStE,gCAAgC,CAAC;QAC9DuE,YAAY,KAAArD,MAAA,CAAKgD,aAAa,OAAAhD,MAAA,CAAIU,IAAI,CAAE;QACxCI;MACF,CAAC,CAAC;;MAEF;MACA,IAAIsC,YAAY,EAAE;QAAA,IAAAE,qBAAA,EAAAC,sBAAA;QAChB,OAAO;UACL7C,IAAI,EAAE0C,YAAY,CAAC1C,IAAI;UACvBC,SAAS,GAAA2C,qBAAA,GAAEF,YAAY,CAACzC,SAAS,cAAA2C,qBAAA,wBAAAC,sBAAA,GAAtBD,qBAAA,CAAyB,CAAC,CAAC,cAAAC,sBAAA,uBAA3BA,sBAAA,CAA6B7C,IAAI;UAC5CE,WAAW,EAAEwC,YAAY,CAACxC,WAAW;UACrCE,OAAO,EAAEsC,YAAY,CAACtC,OAAO;UAC7BkB,QAAQ,EAAE;YACRK,QAAQ,EAAEe,YAAY,CAACf,QAAQ;YAC/BC,QAAQ,EAAEc,YAAY,CAACd,QAAQ;YAC/BtB,OAAO,EAAEoC,YAAY,CAACpC;UACxB;QACF,CAAC;MACH;IACF;EACF,CAAC;EAAA,OAAA+B,wBAAA,CAAArD,KAAA,OAAAC,SAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"FlowApiProvider.js","names":["createProviderClass","http","isEmpty","isObject","FLOW_API_PROVIDER","hasFields","ext_fields","type","some","item","source","processExtFields","hasQueryParams","hasBodyParams","_len","arguments","length","args","Array","_key","data","params","options","_objectSpread","hasFileType","request","processFields","fields","field","includes","transformFormData","FormData","formData","_loop","key","isArray","value","forEach","v","append","Blob","Date","Object","entries","_ref","k","concat","callFlowApi","_x","_callFlowApi","apply","_asyncToGenerator","_ref2","url","originalUri","method","responseWrapper","isFileType","isSimpleRequest","toLowerCase","defaultOptions","responseType","response","_len2","_key2","_originalUri$match$le","_originalUri$match","_request$fields$lengt","_request$fields","noParams","match","simpleRequest","isUploadType","result","requestWithBody","registerFlowApiProvider","customElements","define"],"sources":["../../../src/flowApi/FlowApiProvider.ts"],"sourcesContent":["import { createProviderClass } from \"@next-core/utils/general\";\nimport {\n ExtField,\n ContractRequest,\n ContractField,\n ContractFieldItem,\n} from \"@next-core/types\";\nimport { http, HttpOptions, HttpParams } from \"@next-core/http\";\nimport { isEmpty, isObject } from \"lodash\";\n\nexport const FLOW_API_PROVIDER = \"core.provider-flow-api\";\n\nexport interface CustomApiParams {\n url: string;\n originalUri?: string;\n method?: string;\n responseWrapper?: boolean;\n ext_fields?: ExtField[];\n request?: ContractRequest;\n isFileType?: boolean;\n}\nfunction hasFields(ext_fields: ExtField[], type: \"query\" | \"body\"): boolean {\n return ext_fields.some((item) => item.source === type);\n}\n\nexport function processExtFields(\n ext_fields: ExtField[],\n ...args: unknown[]\n): { data: unknown; options: HttpOptions } {\n const hasQueryParams = hasFields(ext_fields, \"query\");\n const hasBodyParams = hasFields(ext_fields, \"body\");\n\n if (hasQueryParams) {\n if (hasBodyParams) {\n const [data, params, options] = args;\n return {\n data: data,\n options: {\n params: params as HttpParams,\n ...(options as HttpOptions),\n },\n };\n }\n\n const [params, options] = args;\n return {\n data: {},\n options: {\n params: params as HttpParams,\n ...(options as HttpOptions),\n },\n };\n }\n\n // only hasBodyParams or default\n const [data, options] = args;\n return {\n data,\n options: options as HttpOptions,\n };\n}\n\nexport function hasFileType(request: ContractRequest | undefined): boolean {\n if (!request || request.type !== \"object\") {\n return false;\n }\n\n const processFields = (fields: ContractField[] | undefined): boolean => {\n return (\n !isEmpty(fields) &&\n fields!.some(\n (field) =>\n [\"file\", \"file[]\"].includes((field as ContractFieldItem).type) ||\n processFields((field as ContractFieldItem).fields)\n )\n );\n };\n\n return processFields(request.fields);\n}\n\nexport function transformFormData(\n data: Record<string, unknown> | FormData\n): FormData {\n if (data instanceof FormData) {\n return data;\n }\n\n const formData = new FormData();\n for (const [key, value] of Object.entries(data)) {\n if (Array.isArray(value)) {\n value.forEach((v) => {\n formData.append(key, v);\n });\n } else if (\n isObject(value) &&\n !(value instanceof Blob) &&\n !(value instanceof Date)\n ) {\n Object.entries(value).forEach(([k, v]) => {\n formData.append(`${key}[${k}]`, v);\n });\n } else {\n formData.append(key, value as string);\n }\n }\n\n return formData;\n}\n\nexport async function callFlowApi(\n {\n url,\n originalUri,\n method = \"GET\",\n responseWrapper = true,\n ext_fields = [],\n request,\n isFileType,\n }: CustomApiParams,\n ...args: unknown[]\n): Promise<unknown> {\n const isSimpleRequest = [\"get\", \"delete\", \"head\"].includes(\n method.toLowerCase()\n );\n const defaultOptions: HttpOptions = isFileType\n ? { responseType: \"blob\" }\n : {};\n let response: { data?: unknown };\n\n if (isSimpleRequest) {\n const noParams =\n originalUri && request?.type === \"object\"\n ? (originalUri.match(/:([^/]+)/g)?.length ?? 0) ===\n (request.fields?.length ?? 0)\n : false;\n let params: HttpParams | undefined;\n let options: HttpOptions | undefined;\n\n if (noParams) {\n [options] = args as [HttpOptions?];\n } else {\n [params, options] = args as [HttpParams?, HttpOptions?];\n }\n\n response = await http.simpleRequest(method, url, {\n params,\n ...defaultOptions,\n ...(options as HttpOptions),\n });\n } else {\n const isUploadType = hasFileType(request);\n const result = processExtFields(ext_fields, ...args);\n\n response = await http.requestWithBody(\n method,\n url,\n isUploadType ? transformFormData(result.data as any) : result.data,\n { ...defaultOptions, ...result.options }\n );\n }\n\n return (isFileType ? false : responseWrapper) ? response.data : response;\n}\n\nexport function registerFlowApiProvider(): void {\n customElements.define(FLOW_API_PROVIDER, createProviderClass(callFlowApi));\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"FlowApiProvider.js","names":["createProviderClass","http","isEmpty","isObject","FLOW_API_PROVIDER","hasFields","ext_fields","type","some","item","source","processExtFields","hasQueryParams","hasBodyParams","_len","arguments","length","args","Array","_key","data","params","options","_objectSpread","hasFileType","request","processFields","fields","field","includes","transformFormData","FormData","formData","_loop","key","isArray","value","forEach","v","append","Blob","Date","Object","entries","_ref","k","concat","callFlowApi","_x","_callFlowApi","apply","_asyncToGenerator","_ref2","url","originalUri","method","responseWrapper","isFileType","isSimpleRequest","toLowerCase","defaultOptions","responseType","response","_len2","_key2","_originalUri$match$le","_originalUri$match","_request$fields$lengt","_request$fields","noParams","match","simpleRequest","isUploadType","result","requestWithBody","registerFlowApiProvider","customElements","define"],"sources":["../../../src/flowApi/FlowApiProvider.ts"],"sourcesContent":["import { createProviderClass } from \"@next-core/utils/general\";\nimport {\n ExtField,\n ContractRequest,\n ContractField,\n ContractFieldItem,\n} from \"@next-core/types\";\nimport { http, HttpOptions, HttpParams } from \"@next-core/http\";\nimport { isEmpty, isObject } from \"lodash\";\n\nexport const FLOW_API_PROVIDER = \"core.provider-flow-api\";\n\nexport interface CustomApiParams {\n url: string;\n originalUri?: string;\n method?: string;\n responseWrapper?: boolean;\n ext_fields?: ExtField[];\n request?: ContractRequest;\n isFileType?: boolean;\n}\nfunction hasFields(ext_fields: ExtField[], type: \"query\" | \"body\"): boolean {\n return ext_fields.some((item) => item.source === type);\n}\n\nexport function processExtFields(\n ext_fields: ExtField[],\n ...args: unknown[]\n): { data: unknown; options: HttpOptions } {\n const hasQueryParams = hasFields(ext_fields, \"query\");\n const hasBodyParams = hasFields(ext_fields, \"body\");\n\n if (hasQueryParams) {\n if (hasBodyParams) {\n const [data, params, options] = args;\n return {\n data: data,\n options: {\n params: params as HttpParams,\n ...(options as HttpOptions),\n },\n };\n }\n\n const [params, options] = args;\n return {\n data: {},\n options: {\n params: params as HttpParams,\n ...(options as HttpOptions),\n },\n };\n }\n\n // only hasBodyParams or default\n const [data, options] = args;\n return {\n data,\n options: options as HttpOptions,\n };\n}\n\nexport function hasFileType(request: ContractRequest | undefined): boolean {\n if (!request || request.type !== \"object\") {\n return false;\n }\n\n const processFields = (fields: ContractField[] | undefined): boolean => {\n return (\n !isEmpty(fields) &&\n fields!.some(\n (field) =>\n [\"file\", \"file[]\"].includes((field as ContractFieldItem).type) ||\n processFields((field as ContractFieldItem).fields)\n )\n );\n };\n\n return processFields(request.fields);\n}\n\nexport function transformFormData(\n data: Record<string, unknown> | FormData\n): FormData {\n if (data instanceof FormData) {\n return data;\n }\n\n const formData = new FormData();\n for (const [key, value] of Object.entries(data)) {\n if (Array.isArray(value)) {\n value.forEach((v) => {\n formData.append(key, v);\n });\n } else if (\n isObject(value) &&\n !(value instanceof Blob) &&\n !(value instanceof Date)\n ) {\n Object.entries(value).forEach(([k, v]) => {\n formData.append(`${key}[${k}]`, v);\n });\n } else {\n formData.append(key, value as string);\n }\n }\n\n return formData;\n}\n\nexport async function callFlowApi(\n {\n url,\n originalUri,\n method = \"GET\",\n responseWrapper = true,\n ext_fields = [],\n request,\n isFileType,\n }: CustomApiParams,\n ...args: unknown[]\n): Promise<unknown> {\n const isSimpleRequest = [\"get\", \"delete\", \"head\"].includes(\n method.toLowerCase()\n );\n const defaultOptions: HttpOptions = isFileType\n ? { responseType: \"blob\" }\n : {};\n let response: { data?: unknown };\n\n if (isSimpleRequest) {\n const noParams =\n originalUri && request?.type === \"object\"\n ? (originalUri.match(/:([^/]+)/g)?.length ?? 0) ===\n (request.fields?.length ?? 0)\n : false;\n let params: HttpParams | undefined;\n let options: HttpOptions | undefined;\n\n if (noParams) {\n [options] = args as [HttpOptions?];\n } else {\n [params, options] = args as [HttpParams?, HttpOptions?];\n }\n\n response = await http.simpleRequest(method, url, {\n params,\n ...defaultOptions,\n ...(options as HttpOptions),\n });\n } else {\n const isUploadType = hasFileType(request);\n const result = processExtFields(ext_fields, ...args);\n\n response = await http.requestWithBody(\n method,\n url,\n isUploadType ? transformFormData(result.data as any) : result.data,\n { ...defaultOptions, ...result.options }\n );\n }\n\n return (isFileType ? false : responseWrapper) ? response.data : response;\n}\n\nexport function registerFlowApiProvider(): void {\n customElements.define(FLOW_API_PROVIDER, createProviderClass(callFlowApi));\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"computeMenuData.js","names":["symbolAppId","symbolMenuI18nNamespace","symbolOverrideApp","computeMenuData","data","overrideAppId","runtimeContext","helpers","newRuntimeContext","app","id","_helpers$getStoryboar","overrideApp","window","STANDALONE_MICRO_APPS","getStoryboardByAppId","_objectSpread","appendI18nNamespace","asyncComputeRealValue","ignoreSymbols","computeMenuItems","items","Promise","all","map","_ref2","_asyncToGenerator","_ref","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\";\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,SACEA,WAAW,EACXC,uBAAuB,EACvBC,iBAAiB,QACZ,gBAAgB;AAKvB,OAAO,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,IAAMC,WAAW,GAAGC,MAAM,CAACC,qBAAqB,GAC5CV,IAAI,CAACF,iBAAiB,CAAC,IAAAS,qBAAA,GACvBJ,OAAO,CAACQ,oBAAoB,CAACV,aAAa,CAAC,cAAAM,qBAAA,uBAA3CA,qBAAA,CAA6CF,GAAG;IACpDD,iBAAiB,GAAAQ,aAAA,CAAAA,aAAA,KACZV,cAAc;MACjBM,WAAW;MACXK,mBAAmB,EAAEb,IAAI,CAACH,uBAAuB;IAAC,EACnD;EACH;EACA,OAAOM,OAAO,CAACW,qBAAqB,CAACd,IAAI,EAAEI,iBAAiB,EAAE;IAC5DW,aAAa,EAAE;EACjB,CAAC,CAAC;AACJ;AAEA,OAAO,SAASC,gBAAgBA,CAC9BC,KAA+B,EAC/Bf,cAA8B,EAC9BC,OAAuB,EACY;EACnC,OAAOe,OAAO,CAACC,GAAG,CAChBF,KAAK,CAACG,GAAG;IAAA,IAAAC,KAAA,GAAAC,iBAAA,CAAC,WAAAC,IAAA,EAAiC;MAAA,IAA1B;UAAEC;QAAkB,CAAC,GAAAD,IAAA;QAANE,IAAI,GAAAC,wBAAA,CAAAH,IAAA,EAAAI,SAAA;MAClC,IAAM,CAACC,YAAY,EAAEC,gBAAgB,CAAC,SAASX,OAAO,CAACC,GAAG,CAAC,CACzDpB,eAAe,CAAC0B,IAAI,EAAEA,IAAI,CAAC7B,WAAW,CAAC,EAAEM,cAAc,EAAEC,OAAO,CAAC,EACjEqB,QAAQ,WAAWR,gBAAgB,CAACQ,QAAQ,EAAEtB,cAAc,EAAEC,OAAO,CAAC,CAAC,CACxE,CAAC;MACF,OAAAS,aAAA,CAAAA,aAAA,KACKgB,YAAY;QACfJ,QAAQ,EAAEK;MAAgB;IAE9B,CAAC;IAAA,iBAAAC,EAAA;MAAA,OAAAT,KAAA,CAAAU,KAAA,OAAAC,SAAA;IAAA;EAAA,IAAC,CACH;AACH"}
1
+ {"version":3,"file":"computeMenuData.js","names":["symbolAppId","symbolMenuI18nNamespace","symbolOverrideApp","computeMenuData","data","overrideAppId","runtimeContext","helpers","newRuntimeContext","app","id","_helpers$getStoryboar","overrideApp","window","STANDALONE_MICRO_APPS","getStoryboardByAppId","_objectSpread","appendI18nNamespace","asyncComputeRealValue","ignoreSymbols","computeMenuItems","items","Promise","all","map","_ref2","_asyncToGenerator","_ref","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\";\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,SACEA,WAAW,EACXC,uBAAuB,EACvBC,iBAAiB,QACZ,gBAAgB;AAKvB,OAAO,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,IAAMC,WAAW,GAAGC,MAAM,CAACC,qBAAqB,GAC5CV,IAAI,CAACF,iBAAiB,CAAC,IAAAS,qBAAA,GACvBJ,OAAO,CAACQ,oBAAoB,CAACV,aAAa,CAAC,cAAAM,qBAAA,uBAA3CA,qBAAA,CAA6CF,GAAG;IACpDD,iBAAiB,GAAAQ,aAAA,CAAAA,aAAA,KACZV,cAAc;MACjBM,WAAW;MACXK,mBAAmB,EAAEb,IAAI,CAACH,uBAAuB;IAAC,EACnD;EACH;EACA,OAAOM,OAAO,CAACW,qBAAqB,CAACd,IAAI,EAAEI,iBAAiB,EAAE;IAC5DW,aAAa,EAAE;EACjB,CAAC,CAAC;AACJ;AAEA,OAAO,SAASC,gBAAgBA,CAC9BC,KAA+B,EAC/Bf,cAA8B,EAC9BC,OAAuB,EACY;EACnC,OAAOe,OAAO,CAACC,GAAG,CAChBF,KAAK,CAACG,GAAG;IAAA,IAAAC,KAAA,GAAAC,iBAAA,CAAC,WAAAC,IAAA,EAAiC;MAAA,IAA1B;UAAEC;QAAkB,CAAC,GAAAD,IAAA;QAANE,IAAI,GAAAC,wBAAA,CAAAH,IAAA,EAAAI,SAAA;MAClC,IAAM,CAACC,YAAY,EAAEC,gBAAgB,CAAC,SAASX,OAAO,CAACC,GAAG,CAAC,CACzDpB,eAAe,CAAC0B,IAAI,EAAEA,IAAI,CAAC7B,WAAW,CAAC,EAAEM,cAAc,EAAEC,OAAO,CAAC,EACjEqB,QAAQ,WAAWR,gBAAgB,CAACQ,QAAQ,EAAEtB,cAAc,EAAEC,OAAO,CAAC,CAAC,CACxE,CAAC;MACF,OAAAS,aAAA,CAAAA,aAAA,KACKgB,YAAY;QACfJ,QAAQ,EAAEK;MAAgB;IAE9B,CAAC;IAAA,iBAAAC,EAAA;MAAA,OAAAT,KAAA,CAAAU,KAAA,OAAAC,SAAA;IAAA;EAAA,IACH,CAAC;AACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"fetchMenuById.js","names":["InstanceApi_postSearch","pick","checkIfOfComputed","mergeMenu","reorderMenuItems","computeMenuItems","computeMenuData","fetchMenuTitle","getMenusOfStandaloneApp","preCheckPermissionsForAny","menuPromises","Map","menuCache","getMenuById","menuId","get","fetchMenuById","runtimeContext","helpers","promise","_fetchMenuById","_x","_x2","_x3","_fetchMenuById2","apply","arguments","_asyncToGenerator","menuList","window","STANDALONE_MICRO_APPS","app","id","page","page_size","fields","title","icon","link","titleDataSource","defaultCollapsed","defaultCollapsedBreakpoint","type","injectMenuGroupId","dynamicItems","itemsResolve","items","i18n","query","$eq","$size","$gt","list","menuData","Error","concat","restMenuData","_objectWithoutProperties","_excluded","newRuntimeContext","_objectSpread","pendingPermissionsPreCheck","tplStateStoreId","forEachItem","rootAppId","appId","computedMenuData","computedMenuItems","Promise","all","finalMenuData","menuItems","filter","map","item","_item$children","children","text","length","defaultExpanded","set"],"sources":["../../../src/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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"}
1
+ {"version":3,"file":"fetchMenuById.js","names":["InstanceApi_postSearch","pick","checkIfOfComputed","mergeMenu","reorderMenuItems","computeMenuItems","computeMenuData","fetchMenuTitle","getMenusOfStandaloneApp","preCheckPermissionsForAny","menuPromises","Map","menuCache","getMenuById","menuId","get","fetchMenuById","runtimeContext","helpers","promise","_fetchMenuById","_x","_x2","_x3","_fetchMenuById2","apply","arguments","_asyncToGenerator","menuList","window","STANDALONE_MICRO_APPS","app","id","page","page_size","fields","title","icon","link","titleDataSource","defaultCollapsed","defaultCollapsedBreakpoint","type","injectMenuGroupId","dynamicItems","itemsResolve","items","i18n","query","$eq","$size","$gt","list","menuData","Error","concat","restMenuData","_objectWithoutProperties","_excluded","newRuntimeContext","_objectSpread","pendingPermissionsPreCheck","tplStateStoreId","forEachItem","rootAppId","appId","computedMenuData","computedMenuItems","Promise","all","finalMenuData","menuItems","filter","map","item","_item$children","children","text","length","defaultExpanded","set"],"sources":["../../../src/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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"}
@@ -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,EAAkB;AAEhD,gBAAsBC,cAAcA,CAAAC,EAAA;EAAA,OAAAC,eAAA,CAAAC,KAAA,OAAAC,SAAA;AAAA;AAwBnC,SAAAF,gBAAA;EAAAA,eAAA,GAAAG,iBAAA,CAxBM,WACLC,QAAwD,EACxD;IACA,IAAIA,QAAQ,CAACC,KAAK,IAAIX,OAAO,CAACU,QAAQ,CAACE,eAAe,CAAC,EAAE;MACvD,OAAOF,QAAQ,CAACC,KAAK;IACvB;IACA,IAAME,QAAQ,GAAGC,IAAI,CAACC,SAAS,CAACL,QAAQ,CAACE,eAAe,CAAC;IACzD,IAAIV,cAAc,CAACc,GAAG,CAACH,QAAQ,CAAC,EAAE;MAChC,OAAOX,cAAc,CAACe,GAAG,CAACJ,QAAQ,CAAC;IACrC;IACA,IAAM;MAAEK,QAAQ;MAAEC,UAAU;MAAEC;IAAY,CAAC,GAAGV,QAAQ,CAACE,eAAe;IACtE,IAAMS,IAAI,GAAGD,WAAW,aAAXA,WAAW,cAAXA,WAAW,GAAI,MAAM;IAClC,IAAME,YAAY,SAASrB,qBAAqB,CAACiB,QAAQ,EAAEC,UAAU,EAAE;MACrEI,MAAM,EAAEF;IACV,CAAC,CAAC;IACF,IAAIV,KAAa;IACjB,IAAIS,WAAW,KAAK,UAAU,IAAII,KAAK,CAACC,OAAO,CAACH,YAAY,CAACD,IAAI,CAAC,CAAC,EAAE;MACnE,IAAM,CAACK,OAAO,EAAE,GAAGC,IAAI,CAAC,GAAGL,YAAY,CAACD,IAAI,CAAC;MAC7CV,KAAK,GAAGgB,IAAI,CAACC,MAAM,GAAG,CAAC,MAAAC,MAAA,CAAMH,OAAO,OAAAG,MAAA,CAAIF,IAAI,CAACG,IAAI,CAAC,GAAG,CAAC,SAAMC,MAAM,CAACL,OAAO,CAAC;IAC7E,CAAC,MAAM;MACLf,KAAK,GAAGoB,MAAM,CAACT,YAAY,CAACD,IAAI,CAAC,CAAC;IACpC;IACAnB,cAAc,CAAC8B,GAAG,CAACnB,QAAQ,EAAEF,KAAK,CAAC;IACnC,OAAOA,KAAK;EACd,CAAC;EAAA,OAAAL,eAAA,CAAAC,KAAA,OAAAC,SAAA;AAAA"}
1
+ {"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 +1 @@
1
- {"version":3,"file":"loadDynamicMenuItems.js","names":["loadDynamicMenuItems","_x","_x2","_x3","_x4","_loadDynamicMenuItems","apply","arguments","_asyncToGenerator","menu","runtimeContext","menuWithI18n","helpers","dynamicItems","itemsResolve","overrideAppId","app","appId","newRuntimeContext","id","_helpers$getStoryboar","overrideApp","window","STANDALONE_MICRO_APPS","getStoryboardByAppId","_objectSpread","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":";;AAOA,gBAAsBA,oBAAoBA,CAAAC,EAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA;EAAA,OAAAC,qBAAA,CAAAC,KAAA,OAAAC,SAAA;AAAA;AA4BzC,SAAAF,sBAAA;EAAAA,qBAAA,GAAAG,iBAAA,CA5BM,WACLC,IAAiB,EACjBC,cAA8B,EAC9BC,YAA0C,EAC1CC,OAAuB,EACR;IACf,IAAIH,IAAI,CAACI,YAAY,IAAIJ,IAAI,CAACK,YAAY,EAAE;MAC1C,IAAMC,aAAa,GAAGN,IAAI,CAACO,GAAG,CAAC,CAAC,CAAC,CAACC,KAAK;MACvC,IAAIC,iBAAiB,GAAGR,cAAc;MACtC,IAAIK,aAAa,KAAKL,cAAc,CAACM,GAAG,CAACG,EAAE,EAAE;QAAA,IAAAC,qBAAA;QAC3C,IAAMC,WAAW,GAAGC,MAAM,CAACC,qBAAqB,GAC5Cd,IAAI,CAACY,WAAW,IAAAD,qBAAA,GAChBR,OAAO,CAACY,oBAAoB,CAACT,aAAa,CAAC,cAAAK,qBAAA,uBAA3CA,qBAAA,CAA6CJ,GAAG;QACpDE,iBAAiB,GAAAO,aAAA,CAAAA,aAAA,KACZf,cAAc;UACjBW,WAAW;UACXK,mBAAmB,EAAEf,YAAY,CAACgB,GAAG,CAAClB,IAAI;QAAC,EAC5C;MACH;MACA,IAAMmB,QAAQ,SAAUhB,OAAO,CAACiB,WAAW,CAAAJ,aAAA;QAEvCK,SAAS,EAAE;MAAO,GACfrB,IAAI,CAACK,YAAY,GAEtBI,iBAAiB,CACe;MAClCT,IAAI,CAACsB,KAAK,GAAGH,QAAQ,CAACG,KAAK;IAC7B;EACF,CAAC;EAAA,OAAA1B,qBAAA,CAAAC,KAAA,OAAAC,SAAA;AAAA"}
1
+ {"version":3,"file":"loadDynamicMenuItems.js","names":["loadDynamicMenuItems","_x","_x2","_x3","_x4","_loadDynamicMenuItems","apply","arguments","_asyncToGenerator","menu","runtimeContext","menuWithI18n","helpers","dynamicItems","itemsResolve","overrideAppId","app","appId","newRuntimeContext","id","_helpers$getStoryboar","overrideApp","window","STANDALONE_MICRO_APPS","getStoryboardByAppId","_objectSpread","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":";;AAOA,gBAAsBA,oBAAoBA,CAAAC,EAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA;EAAA,OAAAC,qBAAA,CAAAC,KAAA,OAAAC,SAAA;AAAA;AA4BzC,SAAAF,sBAAA;EAAAA,qBAAA,GAAAG,iBAAA,CA5BM,WACLC,IAAiB,EACjBC,cAA8B,EAC9BC,YAA0C,EAC1CC,OAAuB,EACR;IACf,IAAIH,IAAI,CAACI,YAAY,IAAIJ,IAAI,CAACK,YAAY,EAAE;MAC1C,IAAMC,aAAa,GAAGN,IAAI,CAACO,GAAG,CAAC,CAAC,CAAC,CAACC,KAAK;MACvC,IAAIC,iBAAiB,GAAGR,cAAc;MACtC,IAAIK,aAAa,KAAKL,cAAc,CAACM,GAAG,CAACG,EAAE,EAAE;QAAA,IAAAC,qBAAA;QAC3C,IAAMC,WAAW,GAAGC,MAAM,CAACC,qBAAqB,GAC5Cd,IAAI,CAACY,WAAW,IAAAD,qBAAA,GAChBR,OAAO,CAACY,oBAAoB,CAACT,aAAa,CAAC,cAAAK,qBAAA,uBAA3CA,qBAAA,CAA6CJ,GAAG;QACpDE,iBAAiB,GAAAO,aAAA,CAAAA,aAAA,KACZf,cAAc;UACjBW,WAAW;UACXK,mBAAmB,EAAEf,YAAY,CAACgB,GAAG,CAAClB,IAAI;QAAC,EAC5C;MACH;MACA,IAAMmB,QAAQ,SAAUhB,OAAO,CAACiB,WAAW,CAAAJ,aAAA;QAEvCK,SAAS,EAAE;MAAO,GACfrB,IAAI,CAACK,YAAY,GAEtBI,iBACF,CAAkC;MAClCT,IAAI,CAACsB,KAAK,GAAGH,QAAQ,CAACG,KAAK;IAC7B;EACF,CAAC;EAAA,OAAA1B,qBAAA,CAAAC,KAAA,OAAAC,SAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"mergeMenu.js","names":["i18n","symbolAppId","symbolMenuI18nNamespace","symbolOverrideApp","loadDynamicMenuItems","mergeMenu","_x","_x2","_x3","_mergeMenu","apply","arguments","_asyncToGenerator","menuList","runtimeContext","helpers","mainMenu","find","menu","type","undefined","validMenuList","injectWithMenus","Map","menuWithI18n","WeakMap","_loop","menuI18nNamespace","concat","menuId","app","appId","instanceId","Object","entries","forEach","_ref","lang","resources","addResourceBundle","set","Promise","all","map","_menu$items","items","length","injectMenuGroupId","injectingMenus","get","push","_objectSpread","flatMap","processGroupInject","overrideApp","item","_processGroupInject","foundInjectingMenus","groupId","delete","children","injectingMenu"],"sources":["../../../src/menu/mergeMenu.ts"],"sourcesContent":["import { i18n } from \"@next-core/i18n\";\nimport {\n symbolAppId,\n symbolMenuI18nNamespace,\n symbolOverrideApp,\n} from \"./constants.js\";\nimport type {\n RuntimeContext,\n MenuItemRawData,\n MenuRawData,\n RuntimeMenuItemRawData,\n RuntimeMenuRawData,\n RuntimeHelpers,\n} from \"./interfaces.js\";\nimport { loadDynamicMenuItems } from \"./loadDynamicMenuItems.js\";\n\nexport async function mergeMenu(\n menuList: MenuRawData[],\n runtimeContext: RuntimeContext,\n helpers: RuntimeHelpers\n): Promise<RuntimeMenuRawData | undefined> {\n const mainMenu = menuList.find((menu) => menu.type !== \"inject\");\n if (!mainMenu) {\n return undefined;\n }\n const validMenuList: MenuRawData[] = [];\n const injectWithMenus = new Map<string, MenuRawData[]>();\n const menuWithI18n = new WeakMap<MenuRawData, string>();\n\n for (const menu of menuList) {\n if (menu.i18n) {\n const menuI18nNamespace = `menu/${menu.menuId}~${menu.app[0].appId}+${\n (menu as { instanceId?: string }).instanceId\n }`;\n // Support any language in `menu.i18n`.\n Object.entries(menu.i18n).forEach(([lang, resources]) => {\n i18n.addResourceBundle(lang, menuI18nNamespace, resources);\n });\n menuWithI18n.set(menu, menuI18nNamespace);\n }\n }\n\n await Promise.all(\n menuList.map((menu) =>\n loadDynamicMenuItems(menu, runtimeContext, menuWithI18n, helpers)\n )\n );\n\n for (const menu of menuList) {\n if (menu.items?.length) {\n if (menu.type === \"inject\" && menu.injectMenuGroupId) {\n let injectingMenus = injectWithMenus.get(menu.injectMenuGroupId);\n if (!injectingMenus) {\n injectingMenus = [];\n injectWithMenus.set(menu.injectMenuGroupId, injectingMenus);\n }\n injectingMenus.push(menu);\n } else {\n validMenuList.push(menu);\n }\n }\n }\n\n return {\n ...mainMenu,\n items: validMenuList.flatMap(\n (menu) =>\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n processGroupInject(menu.items, menu, injectWithMenus, menuWithI18n)!\n ),\n [symbolMenuI18nNamespace]: menuWithI18n.get(mainMenu),\n [symbolOverrideApp]: mainMenu.overrideApp,\n };\n}\n\nfunction processGroupInject(\n items: MenuItemRawData[] | undefined,\n menu: MenuRawData,\n injectWithMenus: Map<string, MenuRawData[]>,\n menuWithI18n: WeakMap<MenuRawData, string>\n): RuntimeMenuItemRawData[] | undefined {\n return items?.map((item) => {\n const foundInjectingMenus =\n item.groupId && injectWithMenus.get(item.groupId);\n if (foundInjectingMenus) {\n // Each menu to be injected with should be injected only once.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n injectWithMenus.delete(item.groupId!);\n }\n return {\n ...item,\n children: (\n processGroupInject(\n item.children,\n menu,\n injectWithMenus,\n menuWithI18n\n ) ?? ([] as RuntimeMenuItemRawData[])\n ).concat(\n foundInjectingMenus\n ? foundInjectingMenus.flatMap(\n (injectingMenu) =>\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n processGroupInject(\n injectingMenu.items,\n injectingMenu,\n injectWithMenus,\n menuWithI18n\n )!\n )\n : ([] as RuntimeMenuItemRawData[])\n ),\n [symbolAppId]: menu.app[0].appId,\n [symbolMenuI18nNamespace]: menuWithI18n.get(menu),\n [symbolOverrideApp]: menu.overrideApp,\n };\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"mergeMenu.js","names":["i18n","symbolAppId","symbolMenuI18nNamespace","symbolOverrideApp","loadDynamicMenuItems","mergeMenu","_x","_x2","_x3","_mergeMenu","apply","arguments","_asyncToGenerator","menuList","runtimeContext","helpers","mainMenu","find","menu","type","undefined","validMenuList","injectWithMenus","Map","menuWithI18n","WeakMap","_loop","menuI18nNamespace","concat","menuId","app","appId","instanceId","Object","entries","forEach","_ref","lang","resources","addResourceBundle","set","Promise","all","map","_menu$items","items","length","injectMenuGroupId","injectingMenus","get","push","_objectSpread","flatMap","processGroupInject","overrideApp","item","_processGroupInject","foundInjectingMenus","groupId","delete","children","injectingMenu"],"sources":["../../../src/menu/mergeMenu.ts"],"sourcesContent":["import { i18n } from \"@next-core/i18n\";\nimport {\n symbolAppId,\n symbolMenuI18nNamespace,\n symbolOverrideApp,\n} from \"./constants.js\";\nimport type {\n RuntimeContext,\n MenuItemRawData,\n MenuRawData,\n RuntimeMenuItemRawData,\n RuntimeMenuRawData,\n RuntimeHelpers,\n} from \"./interfaces.js\";\nimport { loadDynamicMenuItems } from \"./loadDynamicMenuItems.js\";\n\nexport async function mergeMenu(\n menuList: MenuRawData[],\n runtimeContext: RuntimeContext,\n helpers: RuntimeHelpers\n): Promise<RuntimeMenuRawData | undefined> {\n const mainMenu = menuList.find((menu) => menu.type !== \"inject\");\n if (!mainMenu) {\n return undefined;\n }\n const validMenuList: MenuRawData[] = [];\n const injectWithMenus = new Map<string, MenuRawData[]>();\n const menuWithI18n = new WeakMap<MenuRawData, string>();\n\n for (const menu of menuList) {\n if (menu.i18n) {\n const menuI18nNamespace = `menu/${menu.menuId}~${menu.app[0].appId}+${\n (menu as { instanceId?: string }).instanceId\n }`;\n // Support any language in `menu.i18n`.\n Object.entries(menu.i18n).forEach(([lang, resources]) => {\n i18n.addResourceBundle(lang, menuI18nNamespace, resources);\n });\n menuWithI18n.set(menu, menuI18nNamespace);\n }\n }\n\n await Promise.all(\n menuList.map((menu) =>\n loadDynamicMenuItems(menu, runtimeContext, menuWithI18n, helpers)\n )\n );\n\n for (const menu of menuList) {\n if (menu.items?.length) {\n if (menu.type === \"inject\" && menu.injectMenuGroupId) {\n let injectingMenus = injectWithMenus.get(menu.injectMenuGroupId);\n if (!injectingMenus) {\n injectingMenus = [];\n injectWithMenus.set(menu.injectMenuGroupId, injectingMenus);\n }\n injectingMenus.push(menu);\n } else {\n validMenuList.push(menu);\n }\n }\n }\n\n return {\n ...mainMenu,\n items: validMenuList.flatMap(\n (menu) =>\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n processGroupInject(menu.items, menu, injectWithMenus, menuWithI18n)!\n ),\n [symbolMenuI18nNamespace]: menuWithI18n.get(mainMenu),\n [symbolOverrideApp]: mainMenu.overrideApp,\n };\n}\n\nfunction processGroupInject(\n items: MenuItemRawData[] | undefined,\n menu: MenuRawData,\n injectWithMenus: Map<string, MenuRawData[]>,\n menuWithI18n: WeakMap<MenuRawData, string>\n): RuntimeMenuItemRawData[] | undefined {\n return items?.map((item) => {\n const foundInjectingMenus =\n item.groupId && injectWithMenus.get(item.groupId);\n if (foundInjectingMenus) {\n // Each menu to be injected with should be injected only once.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n injectWithMenus.delete(item.groupId!);\n }\n return {\n ...item,\n children: (\n processGroupInject(\n item.children,\n menu,\n injectWithMenus,\n menuWithI18n\n ) ?? ([] as RuntimeMenuItemRawData[])\n ).concat(\n foundInjectingMenus\n ? foundInjectingMenus.flatMap(\n (injectingMenu) =>\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n processGroupInject(\n injectingMenu.items,\n injectingMenu,\n injectWithMenus,\n menuWithI18n\n )!\n )\n : ([] as RuntimeMenuItemRawData[])\n ),\n [symbolAppId]: menu.app[0].appId,\n [symbolMenuI18nNamespace]: menuWithI18n.get(menu),\n [symbolOverrideApp]: menu.overrideApp,\n };\n });\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@next-core/easyops-runtime",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "homepage": "https://github.com/easyops-cn/next-core/tree/v3/packages/easyops-runtime",
5
5
  "license": "GPL-3.0",
6
6
  "repository": {
@@ -44,16 +44,16 @@
44
44
  "@next-api-sdk/cmdb-sdk": "^1.1.0",
45
45
  "@next-api-sdk/micro-app-sdk": "^1.1.0",
46
46
  "@next-api-sdk/micro-app-standalone-sdk": "^1.1.0",
47
- "@next-core/http": "^1.0.5",
48
- "@next-core/runtime": "^1.12.0",
47
+ "@next-core/http": "^1.0.6",
48
+ "@next-core/runtime": "^1.13.0",
49
49
  "@next-core/types": "^1.3.0",
50
- "@next-core/utils": "^1.5.1",
50
+ "@next-core/utils": "^1.5.2",
51
51
  "js-yaml": "^3.14.1",
52
52
  "lodash": "^4.17.21"
53
53
  },
54
54
  "devDependencies": {
55
- "@next-core/build-next-libs": "^1.0.4",
56
- "@next-core/test-next": "^1.0.5"
55
+ "@next-core/build-next-libs": "^1.0.5",
56
+ "@next-core/test-next": "^1.0.6"
57
57
  },
58
- "gitHead": "356cc700fe17242f01c76cd77e3f8d3c4971c4d4"
58
+ "gitHead": "587d91150e8bf5fc8c0a696c43b216f405105b40"
59
59
  }