@next-core/easyops-runtime 0.7.24 → 0.7.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/analytics/analytics.js.map +1 -1
- package/dist/cjs/analytics/http.js.map +1 -1
- package/dist/cjs/analytics/index.js.map +1 -1
- package/dist/cjs/analytics/interfaces.js.map +1 -1
- package/dist/cjs/analytics/pageView.js.map +1 -1
- package/dist/cjs/analytics/transport.js.map +1 -1
- package/dist/cjs/auth-v2.js.map +1 -1
- package/dist/cjs/auth.js.map +1 -1
- package/dist/cjs/checkInstalledApps.js.map +1 -1
- package/dist/cjs/checkPermissions.js.map +1 -1
- package/dist/cjs/flowApi/CollectContracts.js.map +1 -1
- package/dist/cjs/flowApi/FlowApi.js.map +1 -1
- package/dist/cjs/flowApi/FlowApiProvider.js.map +1 -1
- package/dist/cjs/flowApi/index.js.map +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/menu/computeMenuData.js.map +1 -1
- package/dist/cjs/menu/constants.js.map +1 -1
- package/dist/cjs/menu/fetchMenuById.js.map +1 -1
- package/dist/cjs/menu/fetchMenuTitle.js.map +1 -1
- package/dist/cjs/menu/getMenusOfStandaloneApp.js.map +1 -1
- package/dist/cjs/menu/index.js.map +1 -1
- package/dist/cjs/menu/interfaces.js.map +1 -1
- package/dist/cjs/menu/loadDynamicMenuItems.js.map +1 -1
- package/dist/cjs/menu/mergeMenu.js.map +1 -1
- package/dist/cjs/menu/reorderMenuItems.js.map +1 -1
- package/dist/cjs/websocket/MessageDispatcher.js +26 -26
- package/dist/cjs/websocket/MessageDispatcher.js.map +1 -1
- package/dist/cjs/websocket/MessageService.js +29 -29
- package/dist/cjs/websocket/MessageService.js.map +1 -1
- package/dist/esm/analytics/analytics.js.map +1 -1
- package/dist/esm/analytics/http.js.map +1 -1
- package/dist/esm/analytics/index.js.map +1 -1
- package/dist/esm/analytics/interfaces.js.map +1 -1
- package/dist/esm/analytics/pageView.js.map +1 -1
- package/dist/esm/analytics/transport.js.map +1 -1
- package/dist/esm/auth-v2.js.map +1 -1
- package/dist/esm/auth.js.map +1 -1
- package/dist/esm/checkInstalledApps.js.map +1 -1
- package/dist/esm/checkPermissions.js.map +1 -1
- package/dist/esm/flowApi/CollectContracts.js.map +1 -1
- package/dist/esm/flowApi/FlowApi.js.map +1 -1
- package/dist/esm/flowApi/FlowApiProvider.js.map +1 -1
- package/dist/esm/flowApi/index.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/menu/computeMenuData.js.map +1 -1
- package/dist/esm/menu/constants.js.map +1 -1
- package/dist/esm/menu/fetchMenuById.js.map +1 -1
- package/dist/esm/menu/fetchMenuTitle.js.map +1 -1
- package/dist/esm/menu/getMenusOfStandaloneApp.js.map +1 -1
- package/dist/esm/menu/index.js.map +1 -1
- package/dist/esm/menu/interfaces.js.map +1 -1
- package/dist/esm/menu/loadDynamicMenuItems.js.map +1 -1
- package/dist/esm/menu/mergeMenu.js.map +1 -1
- package/dist/esm/menu/reorderMenuItems.js.map +1 -1
- package/dist/esm/websocket/MessageDispatcher.js +5 -5
- package/dist/esm/websocket/MessageDispatcher.js.map +1 -1
- package/dist/esm/websocket/MessageService.js +3 -3
- package/dist/esm/websocket/MessageService.js.map +1 -1
- package/package.json +9 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.js","names":["_transport","require","initialized","transport","pageState","isFirstPageView","stashedApiMetrics","initialize","api","options","createTransport","sendOnExit","createPageView","length","finishPageView","metric","pageId","generateUUID","lt","route","events","push","apiCount","maxApiTimeCost","Math","max","map","duration","size","filter","reduce","prev","current","item","emit","earlyFinishPageView","pushApiMetric","type","url","URL","createObjectURL","Blob","uuid","substring","lastIndexOf","revokeObjectURL"],"sources":["../../../src/analytics/analytics.ts"],"sourcesContent":["import type {\n ApiMetric,\n ApiPageState,\n PartialPageViewMetric,\n} from \"./interfaces.js\";\nimport { createTransport, events, TransportOptions } from \"./transport.js\";\n\nlet initialized = false;\nlet transport: ReturnType<typeof createTransport>;\nlet pageState: ApiPageState | null = null;\nlet isFirstPageView = true;\nconst stashedApiMetrics: ApiMetric[] = [];\n\ntype Options = Partial<TransportOptions>;\n\nexport function initialize(api: string, options: Options = {}) {\n if (initialized) {\n return;\n }\n initialized = true;\n if (!transport) {\n transport = createTransport(api, options);\n transport.sendOnExit();\n }\n}\n\nexport function createPageView() {\n stashedApiMetrics.length = 0;\n pageState = null;\n}\n\nexport function finishPageView(metric: PartialPageViewMetric) {\n const pageId = generateUUID();\n const { lt, route } = metric;\n pageState = { lt, route, pageId };\n\n events.push({\n ...metric,\n pageId,\n apiCount: stashedApiMetrics.length,\n maxApiTimeCost: Math.max(\n 0,\n ...stashedApiMetrics.map((api) => api.duration)\n ),\n size: stashedApiMetrics\n .map((api) => api.size)\n .filter((size) => size > 0)\n .reduce((prev, current) => prev + current, 0),\n });\n\n for (const item of stashedApiMetrics) {\n events.push({\n ...item,\n ...pageState,\n });\n }\n stashedApiMetrics.length = 0;\n\n transport.emit();\n}\n\nexport function earlyFinishPageView() {\n events.push(...stashedApiMetrics);\n stashedApiMetrics.length = 0;\n}\n\nexport function pushApiMetric(metric: ApiMetric) {\n if (pageState) {\n events.push({\n ...metric,\n type: \"apiRequest\",\n ...pageState,\n });\n } else {\n stashedApiMetrics.push(metric);\n }\n}\n\n// Ref https://medium.com/teads-engineering/generating-uuids-at-scale-on-the-web-2877f529d2a2\nfunction generateUUID() {\n const url = URL.createObjectURL(new Blob([]));\n let uuid = url.substring(url.lastIndexOf(\"/\") + 1);\n URL.revokeObjectURL(url);\n // 第一次渲染加上特殊标记\n if (isFirstPageView) {\n uuid = \"88-\" + uuid;\n isFirstPageView = false;\n }\n return uuid;\n}\n"],"mappings":";;;;;;;;;;AAKA,IAAAA,UAAA,GAAAC,OAAA;AAEA,IAAIC,WAAW,GAAG,KAAK;AACvB,IAAIC,SAA6C;AACjD,IAAIC,SAA8B,GAAG,IAAI;AACzC,IAAIC,eAAe,GAAG,IAAI;AAC1B,MAAMC,iBAA8B,GAAG,EAAE;AAIlC,SAASC,UAAUA,CAACC,GAAW,EAAEC,OAAgB,GAAG,CAAC,CAAC,EAAE;EAC7D,IAAIP,WAAW,EAAE;IACf;EACF;EACAA,WAAW,GAAG,IAAI;EAClB,IAAI,CAACC,SAAS,EAAE;IACdA,SAAS,GAAG,IAAAO,0BAAe,EAACF,GAAG,EAAEC,OAAO,CAAC;IACzCN,SAAS,CAACQ,UAAU,CAAC,CAAC;EACxB;AACF;AAEO,SAASC,cAAcA,CAAA,EAAG;EAC/BN,iBAAiB,CAACO,MAAM,GAAG,CAAC;EAC5BT,SAAS,GAAG,IAAI;AAClB;AAEO,SAASU,cAAcA,CAACC,MAA6B,EAAE;EAC5D,MAAMC,MAAM,GAAGC,YAAY,CAAC,CAAC;EAC7B,MAAM;IAAEC,EAAE;IAAEC;EAAM,CAAC,GAAGJ,MAAM;EAC5BX,SAAS,GAAG;IAAEc,EAAE;IAAEC,KAAK;IAAEH;EAAO,CAAC;EAEjCI,iBAAM,CAACC,IAAI,CAAC;IACV,GAAGN,MAAM;IACTC,MAAM;IACNM,QAAQ,EAAEhB,iBAAiB,CAACO,MAAM;IAClCU,cAAc,EAAEC,IAAI,CAACC,GAAG,CACtB,CAAC,EACD,GAAGnB,iBAAiB,CAACoB,GAAG,CAAElB,GAAG,IAAKA,GAAG,CAACmB,QAAQ,CAChD,CAAC;IACDC,IAAI,EAAEtB,iBAAiB,CACpBoB,GAAG,CAAElB,GAAG,IAAKA,GAAG,CAACoB,IAAI,CAAC,CACtBC,MAAM,CAAED,IAAI,IAAKA,IAAI,GAAG,CAAC,CAAC,CAC1BE,MAAM,CAAC,CAACC,IAAI,EAAEC,OAAO,KAAKD,IAAI,GAAGC,OAAO,EAAE,CAAC;EAChD,CAAC,CAAC;EAEF,KAAK,MAAMC,IAAI,IAAI3B,iBAAiB,EAAE;IACpCc,iBAAM,CAACC,IAAI,CAAC;MACV,GAAGY,IAAI;MACP,GAAG7B;IACL,CAAC,CAAC;EACJ;EACAE,iBAAiB,CAACO,MAAM,GAAG,CAAC;EAE5BV,SAAS,CAAC+B,IAAI,CAAC,CAAC;AAClB;AAEO,SAASC,mBAAmBA,CAAA,EAAG;EACpCf,iBAAM,CAACC,IAAI,CAAC,GAAGf,iBAAiB,CAAC;EACjCA,iBAAiB,CAACO,MAAM,GAAG,CAAC;AAC9B;AAEO,SAASuB,aAAaA,CAACrB,MAAiB,EAAE;EAC/C,IAAIX,SAAS,EAAE;IACbgB,iBAAM,CAACC,IAAI,CAAC;MACV,GAAGN,MAAM;MACTsB,IAAI,EAAE,YAAY;MAClB,GAAGjC;IACL,CAAC,CAAC;EACJ,CAAC,MAAM;IACLE,iBAAiB,CAACe,IAAI,CAACN,MAAM,CAAC;EAChC;AACF;;AAEA;AACA,SAASE,YAAYA,CAAA,EAAG;EACtB,MAAMqB,GAAG,GAAGC,GAAG,CAACC,eAAe,CAAC,IAAIC,IAAI,CAAC,EAAE,CAAC,CAAC;EAC7C,IAAIC,IAAI,GAAGJ,GAAG,CAACK,SAAS,CAACL,GAAG,CAACM,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;EAClDL,GAAG,CAACM,eAAe,CAACP,GAAG,CAAC;EACxB;EACA,IAAIjC,eAAe,EAAE;IACnBqC,IAAI,GAAG,KAAK,GAAGA,IAAI;IACnBrC,eAAe,GAAG,KAAK;EACzB;EACA,OAAOqC,IAAI;AACb"}
|
|
1
|
+
{"version":3,"file":"analytics.js","names":["_transport","require","initialized","transport","pageState","isFirstPageView","stashedApiMetrics","initialize","api","options","createTransport","sendOnExit","createPageView","length","finishPageView","metric","pageId","generateUUID","lt","route","events","push","apiCount","maxApiTimeCost","Math","max","map","duration","size","filter","reduce","prev","current","item","emit","earlyFinishPageView","pushApiMetric","type","url","URL","createObjectURL","Blob","uuid","substring","lastIndexOf","revokeObjectURL"],"sources":["../../../src/analytics/analytics.ts"],"sourcesContent":["import type {\n ApiMetric,\n ApiPageState,\n PartialPageViewMetric,\n} from \"./interfaces.js\";\nimport { createTransport, events, TransportOptions } from \"./transport.js\";\n\nlet initialized = false;\nlet transport: ReturnType<typeof createTransport>;\nlet pageState: ApiPageState | null = null;\nlet isFirstPageView = true;\nconst stashedApiMetrics: ApiMetric[] = [];\n\ntype Options = Partial<TransportOptions>;\n\nexport function initialize(api: string, options: Options = {}) {\n if (initialized) {\n return;\n }\n initialized = true;\n if (!transport) {\n transport = createTransport(api, options);\n transport.sendOnExit();\n }\n}\n\nexport function createPageView() {\n stashedApiMetrics.length = 0;\n pageState = null;\n}\n\nexport function finishPageView(metric: PartialPageViewMetric) {\n const pageId = generateUUID();\n const { lt, route } = metric;\n pageState = { lt, route, pageId };\n\n events.push({\n ...metric,\n pageId,\n apiCount: stashedApiMetrics.length,\n maxApiTimeCost: Math.max(\n 0,\n ...stashedApiMetrics.map((api) => api.duration)\n ),\n size: stashedApiMetrics\n .map((api) => api.size)\n .filter((size) => size > 0)\n .reduce((prev, current) => prev + current, 0),\n });\n\n for (const item of stashedApiMetrics) {\n events.push({\n ...item,\n ...pageState,\n });\n }\n stashedApiMetrics.length = 0;\n\n transport.emit();\n}\n\nexport function earlyFinishPageView() {\n events.push(...stashedApiMetrics);\n stashedApiMetrics.length = 0;\n}\n\nexport function pushApiMetric(metric: ApiMetric) {\n if (pageState) {\n events.push({\n ...metric,\n type: \"apiRequest\",\n ...pageState,\n });\n } else {\n stashedApiMetrics.push(metric);\n }\n}\n\n// Ref https://medium.com/teads-engineering/generating-uuids-at-scale-on-the-web-2877f529d2a2\nfunction generateUUID() {\n const url = URL.createObjectURL(new Blob([]));\n let uuid = url.substring(url.lastIndexOf(\"/\") + 1);\n URL.revokeObjectURL(url);\n // 第一次渲染加上特殊标记\n if (isFirstPageView) {\n uuid = \"88-\" + uuid;\n isFirstPageView = false;\n }\n return uuid;\n}\n"],"mappings":";;;;;;;;;;AAKA,IAAAA,UAAA,GAAAC,OAAA;AAEA,IAAIC,WAAW,GAAG,KAAK;AACvB,IAAIC,SAA6C;AACjD,IAAIC,SAA8B,GAAG,IAAI;AACzC,IAAIC,eAAe,GAAG,IAAI;AAC1B,MAAMC,iBAA8B,GAAG,EAAE;AAIlC,SAASC,UAAUA,CAACC,GAAW,EAAEC,OAAgB,GAAG,CAAC,CAAC,EAAE;EAC7D,IAAIP,WAAW,EAAE;IACf;EACF;EACAA,WAAW,GAAG,IAAI;EAClB,IAAI,CAACC,SAAS,EAAE;IACdA,SAAS,GAAG,IAAAO,0BAAe,EAACF,GAAG,EAAEC,OAAO,CAAC;IACzCN,SAAS,CAACQ,UAAU,CAAC,CAAC;EACxB;AACF;AAEO,SAASC,cAAcA,CAAA,EAAG;EAC/BN,iBAAiB,CAACO,MAAM,GAAG,CAAC;EAC5BT,SAAS,GAAG,IAAI;AAClB;AAEO,SAASU,cAAcA,CAACC,MAA6B,EAAE;EAC5D,MAAMC,MAAM,GAAGC,YAAY,CAAC,CAAC;EAC7B,MAAM;IAAEC,EAAE;IAAEC;EAAM,CAAC,GAAGJ,MAAM;EAC5BX,SAAS,GAAG;IAAEc,EAAE;IAAEC,KAAK;IAAEH;EAAO,CAAC;EAEjCI,iBAAM,CAACC,IAAI,CAAC;IACV,GAAGN,MAAM;IACTC,MAAM;IACNM,QAAQ,EAAEhB,iBAAiB,CAACO,MAAM;IAClCU,cAAc,EAAEC,IAAI,CAACC,GAAG,CACtB,CAAC,EACD,GAAGnB,iBAAiB,CAACoB,GAAG,CAAElB,GAAG,IAAKA,GAAG,CAACmB,QAAQ,CAChD,CAAC;IACDC,IAAI,EAAEtB,iBAAiB,CACpBoB,GAAG,CAAElB,GAAG,IAAKA,GAAG,CAACoB,IAAI,CAAC,CACtBC,MAAM,CAAED,IAAI,IAAKA,IAAI,GAAG,CAAC,CAAC,CAC1BE,MAAM,CAAC,CAACC,IAAI,EAAEC,OAAO,KAAKD,IAAI,GAAGC,OAAO,EAAE,CAAC;EAChD,CAAC,CAAC;EAEF,KAAK,MAAMC,IAAI,IAAI3B,iBAAiB,EAAE;IACpCc,iBAAM,CAACC,IAAI,CAAC;MACV,GAAGY,IAAI;MACP,GAAG7B;IACL,CAAC,CAAC;EACJ;EACAE,iBAAiB,CAACO,MAAM,GAAG,CAAC;EAE5BV,SAAS,CAAC+B,IAAI,CAAC,CAAC;AAClB;AAEO,SAASC,mBAAmBA,CAAA,EAAG;EACpCf,iBAAM,CAACC,IAAI,CAAC,GAAGf,iBAAiB,CAAC;EACjCA,iBAAiB,CAACO,MAAM,GAAG,CAAC;AAC9B;AAEO,SAASuB,aAAaA,CAACrB,MAAiB,EAAE;EAC/C,IAAIX,SAAS,EAAE;IACbgB,iBAAM,CAACC,IAAI,CAAC;MACV,GAAGN,MAAM;MACTsB,IAAI,EAAE,YAAY;MAClB,GAAGjC;IACL,CAAC,CAAC;EACJ,CAAC,MAAM;IACLE,iBAAiB,CAACe,IAAI,CAACN,MAAM,CAAC;EAChC;AACF;;AAEA;AACA,SAASE,YAAYA,CAAA,EAAG;EACtB,MAAMqB,GAAG,GAAGC,GAAG,CAACC,eAAe,CAAC,IAAIC,IAAI,CAAC,EAAE,CAAC,CAAC;EAC7C,IAAIC,IAAI,GAAGJ,GAAG,CAACK,SAAS,CAACL,GAAG,CAACM,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;EAClDL,GAAG,CAACM,eAAe,CAACP,GAAG,CAAC;EACxB;EACA,IAAIjC,eAAe,EAAE;IACnBqC,IAAI,GAAG,KAAK,GAAGA,IAAI;IACnBrC,eAAe,GAAG,KAAK;EACzB;EACA,OAAOqC,IAAI;AACb","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","names":["_http","require","_general","_auth","_analytics","symbolHttpAnalytics","Symbol","onRequest","config","perfStartTime","Math","round","performance","now","st","Date","time","onResponse","response","onResponseOrError","onResponseError","error","hasError","responseOrError","perfEndTime","et","meta","url","HttpAbortError","_code","_message","_traceId","userInstanceId","uid","username","getAuth","code","message","traceId","size","status","headers","data","isHttpResponseError","HttpResponseError","HttpParseError","responseJson","isObject","Headers","get","pushApiMetric","_ver","page","location","href","duration","api","type","msg","Number","Promise","reject"],"sources":["../../../src/analytics/http.ts"],"sourcesContent":["import {\n HttpResponseError,\n HttpParseError,\n HttpAbortError,\n type HttpError,\n type HttpRequestConfig,\n type HttpResponse,\n} from \"@next-core/http\";\nimport { isObject } from \"@next-core/utils/general\";\nimport { getAuth } from \"../auth.js\";\nimport type { HttpAnalyticsMeta } from \"./interfaces.js\";\nimport { pushApiMetric } from \"./analytics.js\";\n\nconst symbolHttpAnalytics = Symbol(\"HttpAnalytics\");\n\ninterface HttpRequestConfigWithAnalyticsMeta extends HttpRequestConfig {\n [symbolHttpAnalytics]?: HttpAnalyticsMeta;\n}\n\nexport function onRequest(\n config: HttpRequestConfigWithAnalyticsMeta\n): HttpRequestConfig {\n const perfStartTime = Math.round(performance.now());\n const st = Date.now();\n config[symbolHttpAnalytics] = {\n st,\n time: Math.round(st / 1000),\n perfStartTime,\n };\n return config;\n}\n\nexport function onResponse(\n response: HttpResponse,\n config: HttpRequestConfigWithAnalyticsMeta\n): HttpResponse {\n return onResponseOrError(false, response, config);\n}\n\nexport function onResponseError(\n error: HttpError,\n config: HttpRequestConfigWithAnalyticsMeta\n): Promise<HttpError> {\n return onResponseOrError(true, error, config);\n}\n\nfunction onResponseOrError(\n hasError: false,\n response: HttpResponse,\n config: HttpRequestConfigWithAnalyticsMeta\n): HttpResponse;\nfunction onResponseOrError(\n hasError: true,\n error: HttpError,\n config: HttpRequestConfigWithAnalyticsMeta\n): Promise<HttpError>;\nfunction onResponseOrError(\n hasError: boolean,\n responseOrError: HttpResponse | HttpError,\n config: HttpRequestConfigWithAnalyticsMeta\n): HttpResponse | Promise<HttpError> {\n const perfEndTime = Math.round(performance.now());\n const et = Date.now();\n const { [symbolHttpAnalytics]: meta, url } = config;\n if (meta && !(hasError && responseOrError instanceof HttpAbortError)) {\n delete config[symbolHttpAnalytics];\n const { st, time, perfStartTime } = meta;\n const { userInstanceId: uid, username } = getAuth();\n\n let code: number | undefined;\n let message: string | undefined;\n let traceId: string | null | undefined;\n let size: string | null | undefined;\n let status: number | undefined;\n\n let headers: Headers | undefined;\n let data: unknown;\n\n if (hasError) {\n const isHttpResponseError = responseOrError instanceof HttpResponseError;\n if (isHttpResponseError || responseOrError instanceof HttpParseError) {\n ({ status, headers } = responseOrError.response);\n if (isHttpResponseError) {\n data = responseOrError.responseJson;\n }\n }\n } else {\n ({ status, data, headers } = responseOrError as HttpResponse);\n }\n\n if (isObject(data)) {\n ({ code, message } = data as { code?: number; message?: string });\n }\n\n if (headers instanceof Headers) {\n traceId = headers.get(\"x-b3-traceid\");\n size = headers.get(\"content-length\");\n }\n\n pushApiMetric({\n st,\n _ver: st,\n uid,\n username,\n time,\n et,\n page: location.href,\n duration: perfEndTime - perfStartTime,\n api: url,\n type: \"api\",\n code: code ?? -1,\n msg: message ?? \"\",\n status,\n traceId: traceId ?? \"\",\n size: size ? Number(size) : -1,\n });\n }\n\n return hasError\n ? Promise.reject(responseOrError)\n : (responseOrError as HttpResponse);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"http.js","names":["_http","require","_general","_auth","_analytics","symbolHttpAnalytics","Symbol","onRequest","config","perfStartTime","Math","round","performance","now","st","Date","time","onResponse","response","onResponseOrError","onResponseError","error","hasError","responseOrError","perfEndTime","et","meta","url","HttpAbortError","_code","_message","_traceId","userInstanceId","uid","username","getAuth","code","message","traceId","size","status","headers","data","isHttpResponseError","HttpResponseError","HttpParseError","responseJson","isObject","Headers","get","pushApiMetric","_ver","page","location","href","duration","api","type","msg","Number","Promise","reject"],"sources":["../../../src/analytics/http.ts"],"sourcesContent":["import {\n HttpResponseError,\n HttpParseError,\n HttpAbortError,\n type HttpError,\n type HttpRequestConfig,\n type HttpResponse,\n} from \"@next-core/http\";\nimport { isObject } from \"@next-core/utils/general\";\nimport { getAuth } from \"../auth.js\";\nimport type { HttpAnalyticsMeta } from \"./interfaces.js\";\nimport { pushApiMetric } from \"./analytics.js\";\n\nconst symbolHttpAnalytics = Symbol(\"HttpAnalytics\");\n\ninterface HttpRequestConfigWithAnalyticsMeta extends HttpRequestConfig {\n [symbolHttpAnalytics]?: HttpAnalyticsMeta;\n}\n\nexport function onRequest(\n config: HttpRequestConfigWithAnalyticsMeta\n): HttpRequestConfig {\n const perfStartTime = Math.round(performance.now());\n const st = Date.now();\n config[symbolHttpAnalytics] = {\n st,\n time: Math.round(st / 1000),\n perfStartTime,\n };\n return config;\n}\n\nexport function onResponse(\n response: HttpResponse,\n config: HttpRequestConfigWithAnalyticsMeta\n): HttpResponse {\n return onResponseOrError(false, response, config);\n}\n\nexport function onResponseError(\n error: HttpError,\n config: HttpRequestConfigWithAnalyticsMeta\n): Promise<HttpError> {\n return onResponseOrError(true, error, config);\n}\n\nfunction onResponseOrError(\n hasError: false,\n response: HttpResponse,\n config: HttpRequestConfigWithAnalyticsMeta\n): HttpResponse;\nfunction onResponseOrError(\n hasError: true,\n error: HttpError,\n config: HttpRequestConfigWithAnalyticsMeta\n): Promise<HttpError>;\nfunction onResponseOrError(\n hasError: boolean,\n responseOrError: HttpResponse | HttpError,\n config: HttpRequestConfigWithAnalyticsMeta\n): HttpResponse | Promise<HttpError> {\n const perfEndTime = Math.round(performance.now());\n const et = Date.now();\n const { [symbolHttpAnalytics]: meta, url } = config;\n if (meta && !(hasError && responseOrError instanceof HttpAbortError)) {\n delete config[symbolHttpAnalytics];\n const { st, time, perfStartTime } = meta;\n const { userInstanceId: uid, username } = getAuth();\n\n let code: number | undefined;\n let message: string | undefined;\n let traceId: string | null | undefined;\n let size: string | null | undefined;\n let status: number | undefined;\n\n let headers: Headers | undefined;\n let data: unknown;\n\n if (hasError) {\n const isHttpResponseError = responseOrError instanceof HttpResponseError;\n if (isHttpResponseError || responseOrError instanceof HttpParseError) {\n ({ status, headers } = responseOrError.response);\n if (isHttpResponseError) {\n data = responseOrError.responseJson;\n }\n }\n } else {\n ({ status, data, headers } = responseOrError as HttpResponse);\n }\n\n if (isObject(data)) {\n ({ code, message } = data as { code?: number; message?: string });\n }\n\n if (headers instanceof Headers) {\n traceId = headers.get(\"x-b3-traceid\");\n size = headers.get(\"content-length\");\n }\n\n pushApiMetric({\n st,\n _ver: st,\n uid,\n username,\n time,\n et,\n page: location.href,\n duration: perfEndTime - perfStartTime,\n api: url,\n type: \"api\",\n code: code ?? -1,\n msg: message ?? \"\",\n status,\n traceId: traceId ?? \"\",\n size: size ? Number(size) : -1,\n });\n }\n\n return hasError\n ? Promise.reject(responseOrError)\n : (responseOrError as HttpResponse);\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["http","_interopRequireWildcard","require","exports","pageView","_analytics"],"sources":["../../../src/analytics/index.ts"],"sourcesContent":["import * as http from \"./http.js\";\nimport * as pageView from \"./pageView.js\";\nimport { initialize } from \"./analytics.js\";\n\nexport { initialize, http, pageView };\n"],"mappings":";;;;;;;;;;;;;;AAAA,IAAAA,IAAA,GAAAC,uBAAA,CAAAC,OAAA;AAAkCC,OAAA,CAAAH,IAAA,GAAAA,IAAA;AAClC,IAAAI,QAAA,GAAAH,uBAAA,CAAAC,OAAA;AAA0CC,OAAA,CAAAC,QAAA,GAAAA,QAAA;AAC1C,IAAAC,UAAA,GAAAH,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["http","_interopRequireWildcard","require","exports","pageView","_analytics"],"sources":["../../../src/analytics/index.ts"],"sourcesContent":["import * as http from \"./http.js\";\nimport * as pageView from \"./pageView.js\";\nimport { initialize } from \"./analytics.js\";\n\nexport { initialize, http, pageView };\n"],"mappings":";;;;;;;;;;;;;;AAAA,IAAAA,IAAA,GAAAC,uBAAA,CAAAC,OAAA;AAAkCC,OAAA,CAAAH,IAAA,GAAAA,IAAA;AAClC,IAAAI,QAAA,GAAAH,uBAAA,CAAAC,OAAA;AAA0CC,OAAA,CAAAC,QAAA,GAAAA,QAAA;AAC1C,IAAAC,UAAA,GAAAH,OAAA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.js","names":[],"sources":["../../../src/analytics/interfaces.ts"],"sourcesContent":["export interface HttpAnalyticsMeta {\n st: number;\n time: number;\n perfStartTime: number;\n}\n\nexport interface ApiMetric extends BaseMetric {\n type: \"api\" | \"apiRequest\";\n uid: string | undefined;\n duration: number;\n api: string;\n code: number;\n status: number | undefined;\n msg: string;\n traceId: string;\n}\n\nexport interface PageViewMetric extends BaseMetric {\n type: \"page\";\n apiCount: number;\n maxApiTimeCost: number;\n pageTitle: string | undefined;\n lt: number;\n route: string | undefined;\n pageId: string;\n}\n\nexport type PartialPageViewMetric = Omit<\n PageViewMetric,\n \"apiCount\" | \"maxApiTimeCost\" | \"size\" | \"pageId\"\n>;\n\nexport type ApiPageState = Pick<PageViewMetric, \"lt\" | \"route\" | \"pageId\">;\n\nexport interface BaseMetric {\n type: string;\n time: number;\n st: number;\n et: number;\n _ver: number;\n username: string | undefined;\n page: string;\n size: number;\n}\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"interfaces.js","names":[],"sources":["../../../src/analytics/interfaces.ts"],"sourcesContent":["export interface HttpAnalyticsMeta {\n st: number;\n time: number;\n perfStartTime: number;\n}\n\nexport interface ApiMetric extends BaseMetric {\n type: \"api\" | \"apiRequest\";\n uid: string | undefined;\n duration: number;\n api: string;\n code: number;\n status: number | undefined;\n msg: string;\n traceId: string;\n}\n\nexport interface PageViewMetric extends BaseMetric {\n type: \"page\";\n apiCount: number;\n maxApiTimeCost: number;\n pageTitle: string | undefined;\n lt: number;\n route: string | undefined;\n pageId: string;\n}\n\nexport type PartialPageViewMetric = Omit<\n PageViewMetric,\n \"apiCount\" | \"maxApiTimeCost\" | \"size\" | \"pageId\"\n>;\n\nexport type ApiPageState = Pick<PageViewMetric, \"lt\" | \"route\" | \"pageId\">;\n\nexport interface BaseMetric {\n type: string;\n time: number;\n st: number;\n et: number;\n _ver: number;\n username: string | undefined;\n page: string;\n size: number;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pageView.js","names":["_analytics","require","_auth","create","perfStartTime","Math","round","performance","now","startTime","Date","createPageView","finish","status","path","pageTitle","earlyFinishPageView","renderTime","endTime","username","getAuth","finishPageView","type","page","location","href","_ver","time","st","et","lt","route","window","dispatchEvent","CustomEvent","detail"],"sources":["../../../src/analytics/pageView.ts"],"sourcesContent":["import type { PageViewInfo } from \"@next-core/runtime\";\nimport {\n createPageView,\n earlyFinishPageView,\n finishPageView,\n} from \"./analytics.js\";\nimport { getAuth } from \"../auth.js\";\n\nexport function create() {\n const perfStartTime = Math.round(performance.now());\n const startTime = Date.now();\n createPageView();\n\n return function finish({ status, path, pageTitle }: PageViewInfo) {\n if (status !== \"ok\") {\n earlyFinishPageView();\n return;\n }\n\n const renderTime = Math.round(performance.now()) - perfStartTime;\n const endTime = Date.now();\n const { username } = getAuth();\n\n finishPageView({\n type: \"page\",\n page: location.href,\n _ver: startTime,\n time: Math.round(startTime / 1000),\n st: startTime,\n et: endTime,\n lt: renderTime,\n pageTitle,\n username,\n route: path,\n });\n\n // For bricks which would take actions with render time.\n window.dispatchEvent(\n new CustomEvent(\"route.render\", {\n detail: {\n renderTime,\n },\n })\n );\n };\n}\n"],"mappings":";;;;;;AACA,IAAAA,UAAA,GAAAC,OAAA;AAKA,IAAAC,KAAA,GAAAD,OAAA;AAEO,SAASE,MAAMA,CAAA,EAAG;EACvB,MAAMC,aAAa,GAAGC,IAAI,CAACC,KAAK,CAACC,WAAW,CAACC,GAAG,CAAC,CAAC,CAAC;EACnD,MAAMC,SAAS,GAAGC,IAAI,CAACF,GAAG,CAAC,CAAC;EAC5B,IAAAG,yBAAc,EAAC,CAAC;EAEhB,OAAO,SAASC,MAAMA,CAAC;IAAEC,MAAM;IAAEC,IAAI;IAAEC;EAAwB,CAAC,EAAE;IAChE,IAAIF,MAAM,KAAK,IAAI,EAAE;MACnB,IAAAG,8BAAmB,EAAC,CAAC;MACrB;IACF;IAEA,MAAMC,UAAU,GAAGZ,IAAI,CAACC,KAAK,CAACC,WAAW,CAACC,GAAG,CAAC,CAAC,CAAC,GAAGJ,aAAa;IAChE,MAAMc,OAAO,GAAGR,IAAI,CAACF,GAAG,CAAC,CAAC;IAC1B,MAAM;MAAEW;IAAS,CAAC,GAAG,IAAAC,aAAO,EAAC,CAAC;IAE9B,IAAAC,yBAAc,EAAC;MACbC,IAAI,EAAE,MAAM;MACZC,IAAI,EAAEC,QAAQ,CAACC,IAAI;MACnBC,IAAI,EAAEjB,SAAS;MACfkB,IAAI,EAAEtB,IAAI,CAACC,KAAK,CAACG,SAAS,GAAG,IAAI,CAAC;MAClCmB,EAAE,EAAEnB,SAAS;MACboB,EAAE,EAAEX,OAAO;MACXY,EAAE,EAAEb,UAAU;MACdF,SAAS;MACTI,QAAQ;MACRY,KAAK,EAAEjB;IACT,CAAC,CAAC;;IAEF;IACAkB,MAAM,CAACC,aAAa,CAClB,IAAIC,WAAW,CAAC,cAAc,EAAE;MAC9BC,MAAM,EAAE;QACNlB;MACF;IACF,CAAC,CACH,CAAC;EACH,CAAC;AACH"}
|
|
1
|
+
{"version":3,"file":"pageView.js","names":["_analytics","require","_auth","create","perfStartTime","Math","round","performance","now","startTime","Date","createPageView","finish","status","path","pageTitle","earlyFinishPageView","renderTime","endTime","username","getAuth","finishPageView","type","page","location","href","_ver","time","st","et","lt","route","window","dispatchEvent","CustomEvent","detail"],"sources":["../../../src/analytics/pageView.ts"],"sourcesContent":["import type { PageViewInfo } from \"@next-core/runtime\";\nimport {\n createPageView,\n earlyFinishPageView,\n finishPageView,\n} from \"./analytics.js\";\nimport { getAuth } from \"../auth.js\";\n\nexport function create() {\n const perfStartTime = Math.round(performance.now());\n const startTime = Date.now();\n createPageView();\n\n return function finish({ status, path, pageTitle }: PageViewInfo) {\n if (status !== \"ok\") {\n earlyFinishPageView();\n return;\n }\n\n const renderTime = Math.round(performance.now()) - perfStartTime;\n const endTime = Date.now();\n const { username } = getAuth();\n\n finishPageView({\n type: \"page\",\n page: location.href,\n _ver: startTime,\n time: Math.round(startTime / 1000),\n st: startTime,\n et: endTime,\n lt: renderTime,\n pageTitle,\n username,\n route: path,\n });\n\n // For bricks which would take actions with render time.\n window.dispatchEvent(\n new CustomEvent(\"route.render\", {\n detail: {\n renderTime,\n },\n })\n );\n };\n}\n"],"mappings":";;;;;;AACA,IAAAA,UAAA,GAAAC,OAAA;AAKA,IAAAC,KAAA,GAAAD,OAAA;AAEO,SAASE,MAAMA,CAAA,EAAG;EACvB,MAAMC,aAAa,GAAGC,IAAI,CAACC,KAAK,CAACC,WAAW,CAACC,GAAG,CAAC,CAAC,CAAC;EACnD,MAAMC,SAAS,GAAGC,IAAI,CAACF,GAAG,CAAC,CAAC;EAC5B,IAAAG,yBAAc,EAAC,CAAC;EAEhB,OAAO,SAASC,MAAMA,CAAC;IAAEC,MAAM;IAAEC,IAAI;IAAEC;EAAwB,CAAC,EAAE;IAChE,IAAIF,MAAM,KAAK,IAAI,EAAE;MACnB,IAAAG,8BAAmB,EAAC,CAAC;MACrB;IACF;IAEA,MAAMC,UAAU,GAAGZ,IAAI,CAACC,KAAK,CAACC,WAAW,CAACC,GAAG,CAAC,CAAC,CAAC,GAAGJ,aAAa;IAChE,MAAMc,OAAO,GAAGR,IAAI,CAACF,GAAG,CAAC,CAAC;IAC1B,MAAM;MAAEW;IAAS,CAAC,GAAG,IAAAC,aAAO,EAAC,CAAC;IAE9B,IAAAC,yBAAc,EAAC;MACbC,IAAI,EAAE,MAAM;MACZC,IAAI,EAAEC,QAAQ,CAACC,IAAI;MACnBC,IAAI,EAAEjB,SAAS;MACfkB,IAAI,EAAEtB,IAAI,CAACC,KAAK,CAACG,SAAS,GAAG,IAAI,CAAC;MAClCmB,EAAE,EAAEnB,SAAS;MACboB,EAAE,EAAEX,OAAO;MACXY,EAAE,EAAEb,UAAU;MACdF,SAAS;MACTI,QAAQ;MACRY,KAAK,EAAEjB;IACT,CAAC,CAAC;;IAEF;IACAkB,MAAM,CAACC,aAAa,CAClB,IAAIC,WAAW,CAAC,cAAc,EAAE;MAC9BC,MAAM,EAAE;QACNlB;MACF;IACF,CAAC,CACH,CAAC;EACH,CAAC;AACH","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","names":["events","exports","MAXIMUM_WAITING_TIME","MAXIMUM_LOGGED_EVENTS","timer","transportOptions","maxWaitingTime","maxLoggedEvents","createTransport","api","options","Object","assign","sendOnExit","emit","nextTime","callback","window","requestIdleCallback","requestAnimationFrame","cb","setTimeout","clearTimeout","length","send","transportEvents","splice","transportData","buildTransportData","sendBeacon","requestUrl","data","headers","type","blob","Blob","JSON","stringify","navigator","addEventListener","model","columns"],"sources":["../../../src/analytics/transport.ts"],"sourcesContent":["import { ApiMetric, PageViewMetric } from \"./interfaces.js\";\n\nexport const events: (ApiMetric | PageViewMetric)[] = [];\n\nconst MAXIMUM_WAITING_TIME = 5 * 1000;\nconst MAXIMUM_LOGGED_EVENTS = 10;\nlet timer: any = null;\n\nexport const transportOptions = {\n maxWaitingTime: MAXIMUM_WAITING_TIME,\n maxLoggedEvents: MAXIMUM_LOGGED_EVENTS,\n} as TransportOptions;\n\ntype TransportData = {\n model: string;\n columns: string[];\n data: (ApiMetric | PageViewMetric)[];\n};\n\nexport interface TransportOptions {\n api: string;\n maxWaitingTime: number;\n maxLoggedEvents: number;\n}\n\nexport function createTransport(\n api: string,\n options: Partial<TransportOptions>\n) {\n Object.assign(transportOptions, { ...options, api });\n return {\n sendOnExit,\n emit,\n };\n}\n\nfunction nextTime(callback: (data: unknown) => void): unknown {\n return (\n window.requestIdleCallback ||\n window.requestAnimationFrame ||\n ((cb: (data: Record<string, any>) => void) => setTimeout(cb, 17))\n )(callback);\n}\n\nfunction emit() {\n clearTimeout(timer);\n events.length > transportOptions.maxLoggedEvents\n ? send()\n : (timer = setTimeout(send, transportOptions.maxWaitingTime));\n}\n\nfunction send() {\n if (events.length === 0) {\n return;\n }\n const transportEvents = events.splice(0, transportOptions.maxLoggedEvents);\n const transportData = buildTransportData(transportEvents);\n\n sendBeacon(transportOptions.api, transportData);\n\n events.length && nextTime(send);\n}\n\nfunction sendBeacon(requestUrl: string, data: TransportData) {\n const headers = {\n type: \"application/json\",\n };\n\n const blob = new Blob([JSON.stringify(data)], headers);\n window.navigator.sendBeacon(requestUrl, blob);\n}\n\nfunction sendOnExit() {\n window.addEventListener(\"beforeunload\", send, false);\n}\n\nfunction buildTransportData(data: (ApiMetric | PageViewMetric)[]) {\n return {\n model: \"easyops.FRONTEND_STAT\",\n columns: [\n \"_ver\",\n \"st\",\n \"et\",\n \"lt\",\n \"size\",\n \"time\",\n \"traceId\",\n \"code\",\n \"duration\",\n \"page\",\n \"uid\",\n \"username\",\n \"api\",\n \"type\",\n \"msg\",\n \"status\",\n \"pageId\",\n \"route\",\n \"apiCount\",\n \"maxApiTimeCost\",\n \"apiSizeCost\",\n \"pageTitle\",\n ],\n data,\n };\n}\n"],"mappings":";;;;;;;AAEO,MAAMA,MAAsC,GAAAC,OAAA,CAAAD,MAAA,GAAG,EAAE;AAExD,MAAME,oBAAoB,GAAG,CAAC,GAAG,IAAI;AACrC,MAAMC,qBAAqB,GAAG,EAAE;AAChC,IAAIC,KAAU,GAAG,IAAI;AAEd,MAAMC,gBAAgB,GAAAJ,OAAA,CAAAI,gBAAA,GAAG;EAC9BC,cAAc,EAAEJ,oBAAoB;EACpCK,eAAe,EAAEJ;AACnB,CAAqB;AAcd,SAASK,eAAeA,CAC7BC,GAAW,EACXC,OAAkC,EAClC;EACAC,MAAM,CAACC,MAAM,CAACP,gBAAgB,EAAE;IAAE,GAAGK,OAAO;IAAED;EAAI,CAAC,CAAC;EACpD,OAAO;IACLI,UAAU;IACVC;EACF,CAAC;AACH;AAEA,SAASC,QAAQA,CAACC,QAAiC,EAAW;EAC5D,OAAO,CACLC,MAAM,CAACC,mBAAmB,IAC1BD,MAAM,CAACE,qBAAqB,KAC1BC,EAAuC,IAAKC,UAAU,CAACD,EAAE,EAAE,EAAE,CAAC,CAAC,EACjEJ,QAAQ,CAAC;AACb;AAEA,SAASF,IAAIA,CAAA,EAAG;EACdQ,YAAY,CAAClB,KAAK,CAAC;EACnBJ,MAAM,CAACuB,MAAM,GAAGlB,gBAAgB,CAACE,eAAe,GAC5CiB,IAAI,CAAC,CAAC,GACLpB,KAAK,GAAGiB,UAAU,CAACG,IAAI,EAAEnB,gBAAgB,CAACC,cAAc,CAAE;AACjE;AAEA,SAASkB,IAAIA,CAAA,EAAG;EACd,IAAIxB,MAAM,CAACuB,MAAM,KAAK,CAAC,EAAE;IACvB;EACF;EACA,MAAME,eAAe,GAAGzB,MAAM,CAAC0B,MAAM,CAAC,CAAC,EAAErB,gBAAgB,CAACE,eAAe,CAAC;EAC1E,MAAMoB,aAAa,GAAGC,kBAAkB,CAACH,eAAe,CAAC;EAEzDI,UAAU,CAACxB,gBAAgB,CAACI,GAAG,EAAEkB,aAAa,CAAC;EAE/C3B,MAAM,CAACuB,MAAM,IAAIR,QAAQ,CAACS,IAAI,CAAC;AACjC;AAEA,SAASK,UAAUA,CAACC,UAAkB,EAAEC,IAAmB,EAAE;EAC3D,MAAMC,OAAO,GAAG;IACdC,IAAI,EAAE;EACR,CAAC;EAED,MAAMC,IAAI,GAAG,IAAIC,IAAI,CAAC,CAACC,IAAI,CAACC,SAAS,CAACN,IAAI,CAAC,CAAC,EAAEC,OAAO,CAAC;EACtDf,MAAM,CAACqB,SAAS,CAACT,UAAU,CAACC,UAAU,EAAEI,IAAI,CAAC;AAC/C;AAEA,SAASrB,UAAUA,CAAA,EAAG;EACpBI,MAAM,CAACsB,gBAAgB,CAAC,cAAc,EAAEf,IAAI,EAAE,KAAK,CAAC;AACtD;AAEA,SAASI,kBAAkBA,CAACG,IAAoC,EAAE;EAChE,OAAO;IACLS,KAAK,EAAE,uBAAuB;IAC9BC,OAAO,EAAE,CACP,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,MAAM,EACN,SAAS,EACT,MAAM,EACN,UAAU,EACV,MAAM,EACN,KAAK,EACL,UAAU,EACV,KAAK,EACL,MAAM,EACN,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,UAAU,EACV,gBAAgB,EAChB,aAAa,EACb,WAAW,CACZ;IACDV;EACF,CAAC;AACH"}
|
|
1
|
+
{"version":3,"file":"transport.js","names":["events","exports","MAXIMUM_WAITING_TIME","MAXIMUM_LOGGED_EVENTS","timer","transportOptions","maxWaitingTime","maxLoggedEvents","createTransport","api","options","Object","assign","sendOnExit","emit","nextTime","callback","window","requestIdleCallback","requestAnimationFrame","cb","setTimeout","clearTimeout","length","send","transportEvents","splice","transportData","buildTransportData","sendBeacon","requestUrl","data","headers","type","blob","Blob","JSON","stringify","navigator","addEventListener","model","columns"],"sources":["../../../src/analytics/transport.ts"],"sourcesContent":["import { ApiMetric, PageViewMetric } from \"./interfaces.js\";\n\nexport const events: (ApiMetric | PageViewMetric)[] = [];\n\nconst MAXIMUM_WAITING_TIME = 5 * 1000;\nconst MAXIMUM_LOGGED_EVENTS = 10;\nlet timer: any = null;\n\nexport const transportOptions = {\n maxWaitingTime: MAXIMUM_WAITING_TIME,\n maxLoggedEvents: MAXIMUM_LOGGED_EVENTS,\n} as TransportOptions;\n\ntype TransportData = {\n model: string;\n columns: string[];\n data: (ApiMetric | PageViewMetric)[];\n};\n\nexport interface TransportOptions {\n api: string;\n maxWaitingTime: number;\n maxLoggedEvents: number;\n}\n\nexport function createTransport(\n api: string,\n options: Partial<TransportOptions>\n) {\n Object.assign(transportOptions, { ...options, api });\n return {\n sendOnExit,\n emit,\n };\n}\n\nfunction nextTime(callback: (data: unknown) => void): unknown {\n return (\n window.requestIdleCallback ||\n window.requestAnimationFrame ||\n ((cb: (data: Record<string, any>) => void) => setTimeout(cb, 17))\n )(callback);\n}\n\nfunction emit() {\n clearTimeout(timer);\n events.length > transportOptions.maxLoggedEvents\n ? send()\n : (timer = setTimeout(send, transportOptions.maxWaitingTime));\n}\n\nfunction send() {\n if (events.length === 0) {\n return;\n }\n const transportEvents = events.splice(0, transportOptions.maxLoggedEvents);\n const transportData = buildTransportData(transportEvents);\n\n sendBeacon(transportOptions.api, transportData);\n\n events.length && nextTime(send);\n}\n\nfunction sendBeacon(requestUrl: string, data: TransportData) {\n const headers = {\n type: \"application/json\",\n };\n\n const blob = new Blob([JSON.stringify(data)], headers);\n window.navigator.sendBeacon(requestUrl, blob);\n}\n\nfunction sendOnExit() {\n window.addEventListener(\"beforeunload\", send, false);\n}\n\nfunction buildTransportData(data: (ApiMetric | PageViewMetric)[]) {\n return {\n model: \"easyops.FRONTEND_STAT\",\n columns: [\n \"_ver\",\n \"st\",\n \"et\",\n \"lt\",\n \"size\",\n \"time\",\n \"traceId\",\n \"code\",\n \"duration\",\n \"page\",\n \"uid\",\n \"username\",\n \"api\",\n \"type\",\n \"msg\",\n \"status\",\n \"pageId\",\n \"route\",\n \"apiCount\",\n \"maxApiTimeCost\",\n \"apiSizeCost\",\n \"pageTitle\",\n ],\n data,\n };\n}\n"],"mappings":";;;;;;;AAEO,MAAMA,MAAsC,GAAAC,OAAA,CAAAD,MAAA,GAAG,EAAE;AAExD,MAAME,oBAAoB,GAAG,CAAC,GAAG,IAAI;AACrC,MAAMC,qBAAqB,GAAG,EAAE;AAChC,IAAIC,KAAU,GAAG,IAAI;AAEd,MAAMC,gBAAgB,GAAAJ,OAAA,CAAAI,gBAAA,GAAG;EAC9BC,cAAc,EAAEJ,oBAAoB;EACpCK,eAAe,EAAEJ;AACnB,CAAqB;AAcd,SAASK,eAAeA,CAC7BC,GAAW,EACXC,OAAkC,EAClC;EACAC,MAAM,CAACC,MAAM,CAACP,gBAAgB,EAAE;IAAE,GAAGK,OAAO;IAAED;EAAI,CAAC,CAAC;EACpD,OAAO;IACLI,UAAU;IACVC;EACF,CAAC;AACH;AAEA,SAASC,QAAQA,CAACC,QAAiC,EAAW;EAC5D,OAAO,CACLC,MAAM,CAACC,mBAAmB,IAC1BD,MAAM,CAACE,qBAAqB,KAC1BC,EAAuC,IAAKC,UAAU,CAACD,EAAE,EAAE,EAAE,CAAC,CAAC,EACjEJ,QAAQ,CAAC;AACb;AAEA,SAASF,IAAIA,CAAA,EAAG;EACdQ,YAAY,CAAClB,KAAK,CAAC;EACnBJ,MAAM,CAACuB,MAAM,GAAGlB,gBAAgB,CAACE,eAAe,GAC5CiB,IAAI,CAAC,CAAC,GACLpB,KAAK,GAAGiB,UAAU,CAACG,IAAI,EAAEnB,gBAAgB,CAACC,cAAc,CAAE;AACjE;AAEA,SAASkB,IAAIA,CAAA,EAAG;EACd,IAAIxB,MAAM,CAACuB,MAAM,KAAK,CAAC,EAAE;IACvB;EACF;EACA,MAAME,eAAe,GAAGzB,MAAM,CAAC0B,MAAM,CAAC,CAAC,EAAErB,gBAAgB,CAACE,eAAe,CAAC;EAC1E,MAAMoB,aAAa,GAAGC,kBAAkB,CAACH,eAAe,CAAC;EAEzDI,UAAU,CAACxB,gBAAgB,CAACI,GAAG,EAAEkB,aAAa,CAAC;EAE/C3B,MAAM,CAACuB,MAAM,IAAIR,QAAQ,CAACS,IAAI,CAAC;AACjC;AAEA,SAASK,UAAUA,CAACC,UAAkB,EAAEC,IAAmB,EAAE;EAC3D,MAAMC,OAAO,GAAG;IACdC,IAAI,EAAE;EACR,CAAC;EAED,MAAMC,IAAI,GAAG,IAAIC,IAAI,CAAC,CAACC,IAAI,CAACC,SAAS,CAACN,IAAI,CAAC,CAAC,EAAEC,OAAO,CAAC;EACtDf,MAAM,CAACqB,SAAS,CAACT,UAAU,CAACC,UAAU,EAAEI,IAAI,CAAC;AAC/C;AAEA,SAASrB,UAAUA,CAAA,EAAG;EACpBI,MAAM,CAACsB,gBAAgB,CAAC,cAAc,EAAEf,IAAI,EAAE,KAAK,CAAC;AACtD;AAEA,SAASI,kBAAkBA,CAACG,IAAoC,EAAE;EAChE,OAAO;IACLS,KAAK,EAAE,uBAAuB;IAC9BC,OAAO,EAAE,CACP,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,MAAM,EACN,SAAS,EACT,MAAM,EACN,UAAU,EACV,MAAM,EACN,KAAK,EACL,UAAU,EACV,KAAK,EACL,MAAM,EACN,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,UAAU,EACV,gBAAgB,EAChB,aAAa,EACb,WAAW,CACZ;IACDV;EACF,CAAC;AACH","ignoreList":[]}
|
package/dist/cjs/auth-v2.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-v2.js","names":["_runtime","require","_lodash","authV2Factory","v2Kit","getV2RuntimeFromDll","Object","freeze","pick"],"sources":["../../src/auth-v2.ts"],"sourcesContent":["// istanbul ignore file\nimport { getV2RuntimeFromDll } from \"@next-core/runtime\";\nimport { pick } from \"lodash\";\nimport type * as auth from \"./auth.js\";\n\nexport function authV2Factory() {\n const v2Kit = getV2RuntimeFromDll();\n if (v2Kit) {\n return Object.freeze(\n pick(v2Kit, [\"authenticate\", \"getAuth\", \"isLoggedIn\", \"logout\"])\n ) as typeof auth;\n }\n}\n"],"mappings":";;;;;;AACA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAFA;;AAKO,SAASE,aAAaA,CAAA,EAAG;EAC9B,MAAMC,KAAK,GAAG,IAAAC,4BAAmB,EAAC,CAAC;EACnC,IAAID,KAAK,EAAE;IACT,OAAOE,MAAM,CAACC,MAAM,CAClB,IAAAC,YAAI,EAACJ,KAAK,EAAE,CAAC,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC,CACjE,CAAC;EACH;AACF"}
|
|
1
|
+
{"version":3,"file":"auth-v2.js","names":["_runtime","require","_lodash","authV2Factory","v2Kit","getV2RuntimeFromDll","Object","freeze","pick"],"sources":["../../src/auth-v2.ts"],"sourcesContent":["// istanbul ignore file\nimport { getV2RuntimeFromDll } from \"@next-core/runtime\";\nimport { pick } from \"lodash\";\nimport type * as auth from \"./auth.js\";\n\nexport function authV2Factory() {\n const v2Kit = getV2RuntimeFromDll();\n if (v2Kit) {\n return Object.freeze(\n pick(v2Kit, [\"authenticate\", \"getAuth\", \"isLoggedIn\", \"logout\"])\n ) as typeof auth;\n }\n}\n"],"mappings":";;;;;;AACA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAFA;;AAKO,SAASE,aAAaA,CAAA,EAAG;EAC9B,MAAMC,KAAK,GAAG,IAAAC,4BAAmB,EAAC,CAAC;EACnC,IAAID,KAAK,EAAE;IACT,OAAOE,MAAM,CAACC,MAAM,CAClB,IAAAC,YAAI,EAACJ,KAAK,EAAE,CAAC,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC,CACjE,CAAC;EACH;AACF","ignoreList":[]}
|
package/dist/cjs/auth.js.map
CHANGED
|
@@ -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,EAAC,CAAC;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","ignoreList":[]}
|
|
@@ -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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","ignoreList":[]}
|
|
@@ -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":";;;;;;;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AAKA,IAAAE,YAAA,GAAAF,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA;AAIA,MAAMI,kBAA4B,GAAG,EAAE;AACvC,MAAMC,aAAa,GAAG,IAAIC,GAAG,CAA2B,CAAC;AAElD,SAASC,mBAAmBA,CACjCC,UAAsB,EACK;EAC3B,IAAI,IAAAC,gBAAU,EAAC,CAAC,IAAI,CAAC,IAAAC,aAAO,EAAC,CAAC,CAACC,OAAO,EAAE;IACtC,MAAMC,WAAW,GAAG,IAAAC,6CAAiC,EAACL,UAAU,CAAC;IACjE,OAAOM,mBAAmB,CAACF,WAAW,CAAC;EACzC;AACF;AAEO,eAAeG,kCAAkCA,CACtDC,SAAgC,EAChCC,qBAA2D,EAC3D;EACA,IACE,IAAAR,gBAAU,EAAC,CAAC,IACZ,CAAC,IAAAC,aAAO,EAAC,CAAC,CAACC,OAAO,IAClBO,KAAK,CAACC,OAAO,CAACH,SAAS,CAACI,mBAAmB,CAAC,EAC5C;IACA,MAAMC,OAAO,GAAI,MAAMJ,qBAAqB,CAC1CD,SAAS,CAACI,mBACZ,CAAc;IACd,OAAON,mBAAmB,CAACO,OAAO,CAAC;EACrC;AACF;AAEO,SAASC,yBAAyBA,CACvCC,IAAa,EACc;EAC3B,IAAI,IAAAd,gBAAU,EAAC,CAAC,IAAI,CAAC,IAAAC,aAAO,EAAC,CAAC,CAACC,OAAO,EAAE;IACtC,MAAMC,WAAW,GAAG,IAAAY,sCAA0B,EAACD,IAAI,CAAC;IACpD,OAAOT,mBAAmB,CAACF,WAAW,CAAC;EACzC;AACF;AAEO,eAAeE,mBAAmBA,CACvCF,WAAqB,EACN;EACf;EACA,MAAMS,OAAO,GAAG,IAAAI,kBAAU,EAACb,WAAW,EAAE,CAAC,GAAGR,kBAAkB,CAAC,CAAC;EAChE,IAAIiB,OAAO,CAACK,MAAM,KAAK,CAAC,EAAE;IACxB;EACF;EACAtB,kBAAkB,CAACuB,IAAI,CAAC,GAAGN,OAAO,CAAC;EACnC,IAAI;IACF,MAAMO,MAAM,GAAG,MAAM,IAAAC,8CAAiC,EAAC;MAAER;IAAQ,CAAC,CAAC;IACnE,KAAK,MAAMS,IAAI,IAAIF,MAAM,CAACP,OAAO,EAAG;MAClChB,aAAa,CAAC0B,GAAG,CAACD,IAAI,CAACE,MAAM,EAAGF,IAAI,CAACG,mBAAoB,CAAC;MAC1D,IAAIH,IAAI,CAACG,mBAAmB,KAAK,WAAW,EAAE;QAC5C;QACAC,OAAO,CAACC,KAAK,CAAE,iCAAgCL,IAAI,CAACE,MAAO,GAAE,CAAC;MAChE;IACF;EACF,CAAC,CAAC,OAAOG,KAAK,EAAE;IACd;IACA;IACA;IACAD,OAAO,CAACC,KAAK,CAAC,8BAA8B,EAAEA,KAAK,CAAC;EACtD;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,gBAAgBA,CAAC,GAAGf,OAAiB,EAAW;EAC9D,IAAI,CAAC,IAAAZ,gBAAU,EAAC,CAAC,EAAE;IACjB,OAAO,KAAK;EACd;EAEA,IAAI,IAAAC,aAAO,EAAC,CAAC,CAACC,OAAO,EAAE;IACrB,OAAO,IAAI;EACb;EAEA,KAAK,MAAMqB,MAAM,IAAIX,OAAO,EAAE;IAC5B;IACA;IACA;IACA;IACA;IACA,QAAQhB,aAAa,CAACgC,GAAG,CAACL,MAAM,CAAC;MAC/B,KAAK,cAAc;MACnB,KAAK,WAAW;QACd,OAAO,KAAK;MACd,KAAKM,SAAS;QACZ;QACAJ,OAAO,CAACC,KAAK,CACV,kCAAiCH,MAAO,gFAC3C,CAAC;QACD,OAAO,KAAK;IAChB;EACF;EACA,OAAO,IAAI;AACb;;AAEA;AACA;AACA;AACO,SAASO,wBAAwBA,CAAA,EAAS;EAC/CnC,kBAAkB,CAACsB,MAAM,GAAG,CAAC;EAC7BrB,aAAa,CAACmC,KAAK,CAAC,CAAC;AACvB"}
|
|
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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","ignoreList":[]}
|
|
@@ -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,CAAC,CAAC;AACrD,MAAMC,iBAAwC,GAAG,IAAID,GAAG,CAAC,CAAC;AAE1D,MAAME,WAAW,GAAGA,CAClBC,SAAiC,EACjCC,GAA0B,KACjB;EACTD,SAAS,aAATA,SAAS,eAATA,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
|
+
{"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,eAATA,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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlowApi.js","names":["_jsYaml","_interopRequireDefault","require","_apiGatewaySdk","_CollectContracts","remoteContractCache","Map","isFlowApiProvider","provider","includes","getArgsOfFlowApi","originalArgs","method","Error","apiDefinition","fetchFlowApiDefinition","FlowApiNotFoundError","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","namespaceName","nameWithVersion","split","getContract","namespaceId","promise","get","fetchFlowApiDefinitionFromRemote","set","_contractData$namespa","contractData","ContractApi_searchSingleContract","contractName","constructor","message","captureStackTrace"],"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 remoteContractCache = new Map<\n string,\n Promise<CustomApiDefinition | null>\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 FlowApiNotFoundError(`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 // `saveAs` requires the first argument to be the filename.\n const isDownload = 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\nasync function fetchFlowApiDefinition(\n provider: string\n): Promise<CustomApiDefinition | null> {\n const [namespaceName, nameWithVersion] = provider.split(\"@\");\n const [name, version] = nameWithVersion.split(\":\");\n\n // Do not cache the result of `geContract`, which will lead to no contract\n // will be found when render twice immediately.\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 }\n let promise = remoteContractCache.get(provider);\n if (!promise) {\n promise = fetchFlowApiDefinitionFromRemote(namespaceName, name, version);\n remoteContractCache.set(provider, promise);\n }\n return promise;\n}\n\nasync function fetchFlowApiDefinitionFromRemote(\n namespace: string,\n name: string,\n version: string\n): Promise<CustomApiDefinition | null> {\n const { contractData } = await ContractApi_searchSingleContract({\n contractName: `${namespace}.${name}`,\n version,\n });\n\n // return undefined if don't found contract\n return contractData\n ? {\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 : null;\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\nclass FlowApiNotFoundError extends Error {\n constructor(message: string) {\n // Pass remaining arguments (including vendor specific ones) to parent constructor\n super(message);\n\n this.name = \"FlowApiNotFoundError\";\n\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n // istanbul ignore else\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, FlowApiNotFoundError);\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FlowApi.js","names":["_jsYaml","_interopRequireDefault","require","_apiGatewaySdk","_CollectContracts","remoteContractCache","Map","isFlowApiProvider","provider","includes","getArgsOfFlowApi","originalArgs","method","Error","apiDefinition","fetchFlowApiDefinition","FlowApiNotFoundError","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","namespaceName","nameWithVersion","split","getContract","namespaceId","promise","get","fetchFlowApiDefinitionFromRemote","set","_contractData$namespa","contractData","ContractApi_searchSingleContract","contractName","constructor","message","captureStackTrace"],"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 remoteContractCache = new Map<\n string,\n Promise<CustomApiDefinition | null>\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 FlowApiNotFoundError(`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 // `saveAs` requires the first argument to be the filename.\n const isDownload = 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\nasync function fetchFlowApiDefinition(\n provider: string\n): Promise<CustomApiDefinition | null> {\n const [namespaceName, nameWithVersion] = provider.split(\"@\");\n const [name, version] = nameWithVersion.split(\":\");\n\n // Do not cache the result of `geContract`, which will lead to no contract\n // will be found when render twice immediately.\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 }\n let promise = remoteContractCache.get(provider);\n if (!promise) {\n promise = fetchFlowApiDefinitionFromRemote(namespaceName, name, version);\n remoteContractCache.set(provider, promise);\n }\n return promise;\n}\n\nasync function fetchFlowApiDefinitionFromRemote(\n namespace: string,\n name: string,\n version: string\n): Promise<CustomApiDefinition | null> {\n const { contractData } = await ContractApi_searchSingleContract({\n contractName: `${namespace}.${name}`,\n version,\n });\n\n // return undefined if don't found contract\n return contractData\n ? {\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 : null;\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\nclass FlowApiNotFoundError extends Error {\n constructor(message: string) {\n // Pass remaining arguments (including vendor specific ones) to parent constructor\n super(message);\n\n this.name = \"FlowApiNotFoundError\";\n\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n // istanbul ignore else\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, FlowApiNotFoundError);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -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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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_FlowApiProvider","require","_FlowApi","_CollectContracts"],"sources":["../../../src/flowApi/index.ts"],"sourcesContent":["export {\n FLOW_API_PROVIDER,\n registerFlowApiProvider,\n} from \"./FlowApiProvider.js\";\n\nexport { isFlowApiProvider, getArgsOfFlowApi } from \"./FlowApi.js\";\n\nexport {\n collectContract,\n collectWidgetContract,\n clearCollectWidgetContract,\n} from \"./CollectContracts.js\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,gBAAA,GAAAC,OAAA;AAKA,IAAAC,QAAA,GAAAD,OAAA;AAEA,IAAAE,iBAAA,GAAAF,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["_FlowApiProvider","require","_FlowApi","_CollectContracts"],"sources":["../../../src/flowApi/index.ts"],"sourcesContent":["export {\n FLOW_API_PROVIDER,\n registerFlowApiProvider,\n} from \"./FlowApiProvider.js\";\n\nexport { isFlowApiProvider, getArgsOfFlowApi } from \"./FlowApi.js\";\n\nexport {\n collectContract,\n collectWidgetContract,\n clearCollectWidgetContract,\n} from \"./CollectContracts.js\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,gBAAA,GAAAC,OAAA;AAKA,IAAAC,QAAA,GAAAD,OAAA;AAEA,IAAAE,iBAAA,GAAAF,OAAA","ignoreList":[]}
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_checkPermissions2","require","_MessageDispatcher","authV3","_interopRequireWildcard","_authV","_checkInstalledApps","exports","checkInstalledApps","_flowApi","flowApi","_menu","menu","_analytics","analytics","checkPermissions","Object","freeze","_checkPermissions","preCheckPermissions","preCheckPermissionsForBrickOrRoute","messageDispatcher","MessageDispatcher","auth","authV2Factory"],"sources":["../../src/index.ts"],"sourcesContent":["// istanbul ignore file\nimport {\n checkPermissions as _checkPermissions,\n preCheckPermissions,\n preCheckPermissionsForBrickOrRoute,\n} from \"./checkPermissions.js\";\nimport { MessageDispatcher } from \"./websocket/MessageDispatcher.js\";\nimport * as authV3 from \"./auth.js\";\nimport { authV2Factory } from \"./auth-v2.js\";\n\nexport * as checkInstalledApps from \"./checkInstalledApps.js\";\nexport * as flowApi from \"./flowApi/index.js\";\nexport * as menu from \"./menu/index.js\";\nexport * as analytics from \"./analytics/index.js\";\n\nexport const checkPermissions = Object.freeze({\n checkPermissions: _checkPermissions,\n preCheckPermissions,\n preCheckPermissionsForBrickOrRoute,\n});\n\nexport const messageDispatcher = new MessageDispatcher();\n\nexport const auth = authV2Factory() || authV3;\n"],"mappings":";;;;;;;AACA,IAAAA,kBAAA,GAAAC,OAAA;AAKA,IAAAC,kBAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAC,uBAAA,CAAAH,OAAA;AACA,IAAAI,MAAA,GAAAJ,OAAA;AAA6C,IAAAK,mBAAA,GAAAF,uBAAA,CAAAH,OAAA;AAAAM,OAAA,CAAAC,kBAAA,GAAAF,mBAAA;AAAA,IAAAG,QAAA,GAAAL,uBAAA,CAAAH,OAAA;AAAAM,OAAA,CAAAG,OAAA,GAAAD,QAAA;AAAA,IAAAE,KAAA,GAAAP,uBAAA,CAAAH,OAAA;AAAAM,OAAA,CAAAK,IAAA,GAAAD,KAAA;AAAA,IAAAE,UAAA,GAAAT,uBAAA,CAAAH,OAAA;AAAAM,OAAA,CAAAO,SAAA,GAAAD,UAAA;AAR7C;;AAeO,MAAME,gBAAgB,GAAAR,OAAA,CAAAQ,gBAAA,GAAGC,MAAM,CAACC,MAAM,CAAC;EAC5CF,gBAAgB,EAAEG,mCAAiB;EACnCC,mBAAmB,EAAnBA,sCAAmB;EACnBC,kCAAkC,EAAlCA;AACF,CAAC,CAAC;AAEK,MAAMC,iBAAiB,GAAAd,OAAA,CAAAc,iBAAA,GAAG,IAAIC,oCAAiB,CAAC,CAAC;AAEjD,MAAMC,IAAI,GAAAhB,OAAA,CAAAgB,IAAA,GAAG,IAAAC,oBAAa,EAAC,CAAC,IAAIrB,MAAM"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["_checkPermissions2","require","_MessageDispatcher","authV3","_interopRequireWildcard","_authV","_checkInstalledApps","exports","checkInstalledApps","_flowApi","flowApi","_menu","menu","_analytics","analytics","checkPermissions","Object","freeze","_checkPermissions","preCheckPermissions","preCheckPermissionsForBrickOrRoute","messageDispatcher","MessageDispatcher","auth","authV2Factory"],"sources":["../../src/index.ts"],"sourcesContent":["// istanbul ignore file\nimport {\n checkPermissions as _checkPermissions,\n preCheckPermissions,\n preCheckPermissionsForBrickOrRoute,\n} from \"./checkPermissions.js\";\nimport { MessageDispatcher } from \"./websocket/MessageDispatcher.js\";\nimport * as authV3 from \"./auth.js\";\nimport { authV2Factory } from \"./auth-v2.js\";\n\nexport * as checkInstalledApps from \"./checkInstalledApps.js\";\nexport * as flowApi from \"./flowApi/index.js\";\nexport * as menu from \"./menu/index.js\";\nexport * as analytics from \"./analytics/index.js\";\n\nexport const checkPermissions = Object.freeze({\n checkPermissions: _checkPermissions,\n preCheckPermissions,\n preCheckPermissionsForBrickOrRoute,\n});\n\nexport const messageDispatcher = new MessageDispatcher();\n\nexport const auth = authV2Factory() || authV3;\n"],"mappings":";;;;;;;AACA,IAAAA,kBAAA,GAAAC,OAAA;AAKA,IAAAC,kBAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAC,uBAAA,CAAAH,OAAA;AACA,IAAAI,MAAA,GAAAJ,OAAA;AAA6C,IAAAK,mBAAA,GAAAF,uBAAA,CAAAH,OAAA;AAAAM,OAAA,CAAAC,kBAAA,GAAAF,mBAAA;AAAA,IAAAG,QAAA,GAAAL,uBAAA,CAAAH,OAAA;AAAAM,OAAA,CAAAG,OAAA,GAAAD,QAAA;AAAA,IAAAE,KAAA,GAAAP,uBAAA,CAAAH,OAAA;AAAAM,OAAA,CAAAK,IAAA,GAAAD,KAAA;AAAA,IAAAE,UAAA,GAAAT,uBAAA,CAAAH,OAAA;AAAAM,OAAA,CAAAO,SAAA,GAAAD,UAAA;AAR7C;;AAeO,MAAME,gBAAgB,GAAAR,OAAA,CAAAQ,gBAAA,GAAGC,MAAM,CAACC,MAAM,CAAC;EAC5CF,gBAAgB,EAAEG,mCAAiB;EACnCC,mBAAmB,EAAnBA,sCAAmB;EACnBC,kCAAkC,EAAlCA;AACF,CAAC,CAAC;AAEK,MAAMC,iBAAiB,GAAAd,OAAA,CAAAc,iBAAA,GAAG,IAAIC,oCAAiB,CAAC,CAAC;AAEjD,MAAMC,IAAI,GAAAhB,OAAA,CAAAgB,IAAA,GAAG,IAAAC,oBAAa,EAAC,CAAC,IAAIrB,MAAM","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computeMenuData.js","names":["_constants","require","_general","_pipes","_cook","computeMenuData","data","overrideAppId","runtimeContext","helpers","isObject","titleDataSource","Object","entries","every","value","if","to","isEvaluable","yaml","pipes","some","key","hasOwnProperty","newRuntimeContext","app","id","_helpers$getStoryboar","overrideApp","window","STANDALONE_MICRO_APPS","symbolOverrideApp","getStoryboardByAppId","appendI18nNamespace","symbolMenuI18nNamespace","asyncComputeRealValue","ignoreSymbols","computeMenuItems","items","Promise","all","map","children","rest","computedRest","computedChildren","symbolAppId"],"sources":["../../../src/menu/computeMenuData.ts"],"sourcesContent":["import type {\n RuntimeContext,\n RuntimeHelpers,\n RuntimeMenuItemRawData,\n RuntimeMenuRawData,\n} from \"./interfaces.js\";\nimport {\n symbolAppId,\n symbolMenuI18nNamespace,\n symbolOverrideApp,\n} from \"./constants.js\";\nimport { hasOwnProperty, isObject } from \"@next-core/utils/general\";\nimport { pipes } from \"@next-core/pipes\";\nimport { isEvaluable } from \"@next-core/cook\";\n\ntype RuntimeMenuRestRawData = Omit<RuntimeMenuRawData, \"app\" | \"items\">;\ntype RuntimeMenuItemRestRawData = Omit<RuntimeMenuItemRawData, \"children\">;\n\nexport function computeMenuData<\n T extends RuntimeMenuRestRawData | RuntimeMenuItemRestRawData,\n>(\n data: T,\n overrideAppId: string,\n runtimeContext: RuntimeContext,\n helpers: RuntimeHelpers\n): Promise<T> {\n if (\n \"titleDataSource\" in data &&\n isObject(data.titleDataSource) &&\n Object.entries(data.titleDataSource).every(\n ([, value]) => value === null || value === \"\"\n )\n ) {\n delete data.titleDataSource;\n }\n if (\"if\" in data && data.if === null) {\n delete data.if;\n }\n if (\"to\" in data && data.to && !isEvaluable(data.to as string)) {\n const yaml = pipes.yaml(data.to as string);\n\n if (\n isObject(yaml) &&\n [\"pathname\", \"search\", \"hash\"].some((key) => hasOwnProperty(yaml, key))\n ) {\n data.to = yaml;\n }\n }\n\n let newRuntimeContext = runtimeContext;\n if (overrideAppId !== runtimeContext.app.id) {\n const overrideApp = window.STANDALONE_MICRO_APPS\n ? data[symbolOverrideApp]\n : helpers.getStoryboardByAppId(overrideAppId)?.app;\n newRuntimeContext = {\n ...runtimeContext,\n overrideApp,\n appendI18nNamespace: data[symbolMenuI18nNamespace],\n };\n }\n return helpers.asyncComputeRealValue(data, newRuntimeContext, {\n ignoreSymbols: true,\n }) as Promise<T>;\n}\n\nexport function computeMenuItems(\n items: RuntimeMenuItemRawData[],\n runtimeContext: RuntimeContext,\n helpers: RuntimeHelpers\n): Promise<RuntimeMenuItemRawData[]> {\n return Promise.all(\n items.map(async ({ children, ...rest }) => {\n const [computedRest, computedChildren] = await Promise.all([\n computeMenuData(rest, rest[symbolAppId], runtimeContext, helpers),\n children && (await computeMenuItems(children, runtimeContext, helpers)),\n ]);\n return {\n ...computedRest,\n children: computedChildren,\n };\n })\n );\n}\n"],"mappings":";;;;;;;AAMA,IAAAA,UAAA,GAAAC,OAAA;AAKA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA;AAKO,SAASI,eAAeA,CAG7BC,IAAO,EACPC,aAAqB,EACrBC,cAA8B,EAC9BC,OAAuB,EACX;EACZ,IACE,iBAAiB,IAAIH,IAAI,IACzB,IAAAI,iBAAQ,EAACJ,IAAI,CAACK,eAAe,CAAC,IAC9BC,MAAM,CAACC,OAAO,CAACP,IAAI,CAACK,eAAe,CAAC,CAACG,KAAK,CACxC,CAAC,GAAGC,KAAK,CAAC,KAAKA,KAAK,KAAK,IAAI,IAAIA,KAAK,KAAK,EAC7C,CAAC,EACD;IACA,OAAOT,IAAI,CAACK,eAAe;EAC7B;EACA,IAAI,IAAI,IAAIL,IAAI,IAAIA,IAAI,CAACU,EAAE,KAAK,IAAI,EAAE;IACpC,OAAOV,IAAI,CAACU,EAAE;EAChB;EACA,IAAI,IAAI,IAAIV,IAAI,IAAIA,IAAI,CAACW,EAAE,IAAI,CAAC,IAAAC,iBAAW,EAACZ,IAAI,CAACW,EAAY,CAAC,EAAE;IAC9D,MAAME,IAAI,GAAGC,YAAK,CAACD,IAAI,CAACb,IAAI,CAACW,EAAY,CAAC;IAE1C,IACE,IAAAP,iBAAQ,EAACS,IAAI,CAAC,IACd,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAACE,IAAI,CAAEC,GAAG,IAAK,IAAAC,uBAAc,EAACJ,IAAI,EAAEG,GAAG,CAAC,CAAC,EACvE;MACAhB,IAAI,CAACW,EAAE,GAAGE,IAAI;IAChB;EACF;EAEA,IAAIK,iBAAiB,GAAGhB,cAAc;EACtC,IAAID,aAAa,KAAKC,cAAc,CAACiB,GAAG,CAACC,EAAE,EAAE;IAAA,IAAAC,qBAAA;IAC3C,MAAMC,WAAW,GAAGC,MAAM,CAACC,qBAAqB,GAC5CxB,IAAI,CAACyB,4BAAiB,CAAC,IAAAJ,qBAAA,GACvBlB,OAAO,CAACuB,oBAAoB,CAACzB,aAAa,CAAC,cAAAoB,qBAAA,uBAA3CA,qBAAA,CAA6CF,GAAG;IACpDD,iBAAiB,GAAG;MAClB,GAAGhB,cAAc;MACjBoB,WAAW;MACXK,mBAAmB,EAAE3B,IAAI,CAAC4B,kCAAuB;IACnD,CAAC;EACH;EACA,OAAOzB,OAAO,CAAC0B,qBAAqB,CAAC7B,IAAI,EAAEkB,iBAAiB,EAAE;IAC5DY,aAAa,EAAE;EACjB,CAAC,CAAC;AACJ;AAEO,SAASC,gBAAgBA,CAC9BC,KAA+B,EAC/B9B,cAA8B,EAC9BC,OAAuB,EACY;EACnC,OAAO8B,OAAO,CAACC,GAAG,CAChBF,KAAK,CAACG,GAAG,CAAC,OAAO;IAAEC,QAAQ;IAAE,GAAGC;EAAK,CAAC,KAAK;IACzC,MAAM,CAACC,YAAY,EAAEC,gBAAgB,CAAC,GAAG,MAAMN,OAAO,CAACC,GAAG,CAAC,CACzDnC,eAAe,CAACsC,IAAI,EAAEA,IAAI,CAACG,sBAAW,CAAC,EAAEtC,cAAc,EAAEC,OAAO,CAAC,EACjEiC,QAAQ,KAAK,MAAML,gBAAgB,CAACK,QAAQ,EAAElC,cAAc,EAAEC,OAAO,CAAC,CAAC,CACxE,CAAC;IACF,OAAO;MACL,GAAGmC,YAAY;MACfF,QAAQ,EAAEG;IACZ,CAAC;EACH,CAAC,CACH,CAAC;AACH"}
|
|
1
|
+
{"version":3,"file":"computeMenuData.js","names":["_constants","require","_general","_pipes","_cook","computeMenuData","data","overrideAppId","runtimeContext","helpers","isObject","titleDataSource","Object","entries","every","value","if","to","isEvaluable","yaml","pipes","some","key","hasOwnProperty","newRuntimeContext","app","id","_helpers$getStoryboar","overrideApp","window","STANDALONE_MICRO_APPS","symbolOverrideApp","getStoryboardByAppId","appendI18nNamespace","symbolMenuI18nNamespace","asyncComputeRealValue","ignoreSymbols","computeMenuItems","items","Promise","all","map","children","rest","computedRest","computedChildren","symbolAppId"],"sources":["../../../src/menu/computeMenuData.ts"],"sourcesContent":["import type {\n RuntimeContext,\n RuntimeHelpers,\n RuntimeMenuItemRawData,\n RuntimeMenuRawData,\n} from \"./interfaces.js\";\nimport {\n symbolAppId,\n symbolMenuI18nNamespace,\n symbolOverrideApp,\n} from \"./constants.js\";\nimport { hasOwnProperty, isObject } from \"@next-core/utils/general\";\nimport { pipes } from \"@next-core/pipes\";\nimport { isEvaluable } from \"@next-core/cook\";\n\ntype RuntimeMenuRestRawData = Omit<RuntimeMenuRawData, \"app\" | \"items\">;\ntype RuntimeMenuItemRestRawData = Omit<RuntimeMenuItemRawData, \"children\">;\n\nexport function computeMenuData<\n T extends RuntimeMenuRestRawData | RuntimeMenuItemRestRawData,\n>(\n data: T,\n overrideAppId: string,\n runtimeContext: RuntimeContext,\n helpers: RuntimeHelpers\n): Promise<T> {\n if (\n \"titleDataSource\" in data &&\n isObject(data.titleDataSource) &&\n Object.entries(data.titleDataSource).every(\n ([, value]) => value === null || value === \"\"\n )\n ) {\n delete data.titleDataSource;\n }\n if (\"if\" in data && data.if === null) {\n delete data.if;\n }\n if (\"to\" in data && data.to && !isEvaluable(data.to as string)) {\n const yaml = pipes.yaml(data.to as string);\n\n if (\n isObject(yaml) &&\n [\"pathname\", \"search\", \"hash\"].some((key) => hasOwnProperty(yaml, key))\n ) {\n data.to = yaml;\n }\n }\n\n let newRuntimeContext = runtimeContext;\n if (overrideAppId !== runtimeContext.app.id) {\n const overrideApp = window.STANDALONE_MICRO_APPS\n ? data[symbolOverrideApp]\n : helpers.getStoryboardByAppId(overrideAppId)?.app;\n newRuntimeContext = {\n ...runtimeContext,\n overrideApp,\n appendI18nNamespace: data[symbolMenuI18nNamespace],\n };\n }\n return helpers.asyncComputeRealValue(data, newRuntimeContext, {\n ignoreSymbols: true,\n }) as Promise<T>;\n}\n\nexport function computeMenuItems(\n items: RuntimeMenuItemRawData[],\n runtimeContext: RuntimeContext,\n helpers: RuntimeHelpers\n): Promise<RuntimeMenuItemRawData[]> {\n return Promise.all(\n items.map(async ({ children, ...rest }) => {\n const [computedRest, computedChildren] = await Promise.all([\n computeMenuData(rest, rest[symbolAppId], runtimeContext, helpers),\n children && (await computeMenuItems(children, runtimeContext, helpers)),\n ]);\n return {\n ...computedRest,\n children: computedChildren,\n };\n })\n );\n}\n"],"mappings":";;;;;;;AAMA,IAAAA,UAAA,GAAAC,OAAA;AAKA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA;AAKO,SAASI,eAAeA,CAG7BC,IAAO,EACPC,aAAqB,EACrBC,cAA8B,EAC9BC,OAAuB,EACX;EACZ,IACE,iBAAiB,IAAIH,IAAI,IACzB,IAAAI,iBAAQ,EAACJ,IAAI,CAACK,eAAe,CAAC,IAC9BC,MAAM,CAACC,OAAO,CAACP,IAAI,CAACK,eAAe,CAAC,CAACG,KAAK,CACxC,CAAC,GAAGC,KAAK,CAAC,KAAKA,KAAK,KAAK,IAAI,IAAIA,KAAK,KAAK,EAC7C,CAAC,EACD;IACA,OAAOT,IAAI,CAACK,eAAe;EAC7B;EACA,IAAI,IAAI,IAAIL,IAAI,IAAIA,IAAI,CAACU,EAAE,KAAK,IAAI,EAAE;IACpC,OAAOV,IAAI,CAACU,EAAE;EAChB;EACA,IAAI,IAAI,IAAIV,IAAI,IAAIA,IAAI,CAACW,EAAE,IAAI,CAAC,IAAAC,iBAAW,EAACZ,IAAI,CAACW,EAAY,CAAC,EAAE;IAC9D,MAAME,IAAI,GAAGC,YAAK,CAACD,IAAI,CAACb,IAAI,CAACW,EAAY,CAAC;IAE1C,IACE,IAAAP,iBAAQ,EAACS,IAAI,CAAC,IACd,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAACE,IAAI,CAAEC,GAAG,IAAK,IAAAC,uBAAc,EAACJ,IAAI,EAAEG,GAAG,CAAC,CAAC,EACvE;MACAhB,IAAI,CAACW,EAAE,GAAGE,IAAI;IAChB;EACF;EAEA,IAAIK,iBAAiB,GAAGhB,cAAc;EACtC,IAAID,aAAa,KAAKC,cAAc,CAACiB,GAAG,CAACC,EAAE,EAAE;IAAA,IAAAC,qBAAA;IAC3C,MAAMC,WAAW,GAAGC,MAAM,CAACC,qBAAqB,GAC5CxB,IAAI,CAACyB,4BAAiB,CAAC,IAAAJ,qBAAA,GACvBlB,OAAO,CAACuB,oBAAoB,CAACzB,aAAa,CAAC,cAAAoB,qBAAA,uBAA3CA,qBAAA,CAA6CF,GAAG;IACpDD,iBAAiB,GAAG;MAClB,GAAGhB,cAAc;MACjBoB,WAAW;MACXK,mBAAmB,EAAE3B,IAAI,CAAC4B,kCAAuB;IACnD,CAAC;EACH;EACA,OAAOzB,OAAO,CAAC0B,qBAAqB,CAAC7B,IAAI,EAAEkB,iBAAiB,EAAE;IAC5DY,aAAa,EAAE;EACjB,CAAC,CAAC;AACJ;AAEO,SAASC,gBAAgBA,CAC9BC,KAA+B,EAC/B9B,cAA8B,EAC9BC,OAAuB,EACY;EACnC,OAAO8B,OAAO,CAACC,GAAG,CAChBF,KAAK,CAACG,GAAG,CAAC,OAAO;IAAEC,QAAQ;IAAE,GAAGC;EAAK,CAAC,KAAK;IACzC,MAAM,CAACC,YAAY,EAAEC,gBAAgB,CAAC,GAAG,MAAMN,OAAO,CAACC,GAAG,CAAC,CACzDnC,eAAe,CAACsC,IAAI,EAAEA,IAAI,CAACG,sBAAW,CAAC,EAAEtC,cAAc,EAAEC,OAAO,CAAC,EACjEiC,QAAQ,KAAK,MAAML,gBAAgB,CAACK,QAAQ,EAAElC,cAAc,EAAEC,OAAO,CAAC,CAAC,CACxE,CAAC;IACF,OAAO;MACL,GAAGmC,YAAY;MACfF,QAAQ,EAAEG;IACZ,CAAC;EACH,CAAC,CACH,CAAC;AACH","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","names":["symbolAppId","exports","Symbol","symbolMenuI18nNamespace","symbolOverrideApp"],"sources":["../../../src/menu/constants.ts"],"sourcesContent":["export const symbolAppId = Symbol(\"appId\");\nexport const symbolMenuI18nNamespace = Symbol(\"menuI18nNamespace\");\nexport const symbolOverrideApp = Symbol(\"overrideApp\");\n"],"mappings":";;;;;;AAAO,MAAMA,WAAW,GAAAC,OAAA,CAAAD,WAAA,GAAGE,MAAM,CAAC,OAAO,CAAC;AACnC,MAAMC,uBAAuB,GAAAF,OAAA,CAAAE,uBAAA,GAAGD,MAAM,CAAC,mBAAmB,CAAC;AAC3D,MAAME,iBAAiB,GAAAH,OAAA,CAAAG,iBAAA,GAAGF,MAAM,CAAC,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.js","names":["symbolAppId","exports","Symbol","symbolMenuI18nNamespace","symbolOverrideApp"],"sources":["../../../src/menu/constants.ts"],"sourcesContent":["export const symbolAppId = Symbol(\"appId\");\nexport const symbolMenuI18nNamespace = Symbol(\"menuI18nNamespace\");\nexport const symbolOverrideApp = Symbol(\"overrideApp\");\n"],"mappings":";;;;;;AAAO,MAAMA,WAAW,GAAAC,OAAA,CAAAD,WAAA,GAAGE,MAAM,CAAC,OAAO,CAAC;AACnC,MAAMC,uBAAuB,GAAAF,OAAA,CAAAE,uBAAA,GAAGD,MAAM,CAAC,mBAAmB,CAAC;AAC3D,MAAME,iBAAiB,GAAAH,OAAA,CAAAG,iBAAA,GAAGF,MAAM,CAAC,aAAa,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchMenuById.js","names":["_cmdbSdk","require","_microAppSdk","_lodash","_runtime","_mergeMenu","_reorderMenuItems","_computeMenuData","_fetchMenuTitle","_getMenusOfStandaloneApp","_checkPermissions","menuPromises","Map","menuCache","transformMenuItems","menuItems","filter","checkIfOfComputed","map","item","children","transformedMenuItem","type","title","text","childLayout","items","groupId","groupFrom","length","icon","defaultExpanded","omit","getMenuById","menuId","get","fetchMenuById","runtimeContext","helpers","promise","_fetchMenuById","menuList","window","STANDALONE_MICRO_APPS","getMenusOfStandaloneApp","app","id","flags","InstalledMicroAppApi_getMenusInfo","menuObjectId","menus","InstanceApi_postSearch","page","page_size","fields","link","titleDataSource","defaultCollapsed","defaultCollapsedBreakpoint","injectMenuGroupId","dynamicItems","itemsResolve","i18n","query","$eq","$size","$gt","list","menuData","mergeMenu","Error","reorderMenu","restMenuData","newRuntimeContext","pendingPermissionsPreCheck","preCheckPermissionsForAny","tplStateStoreId","forEachItem","forEachIndex","rootAppId","appId","computedMenuData","computedMenuItems","Promise","all","computeMenuData","computeMenuItems","finalMenuData","fetchMenuTitle","pick","set"],"sources":["../../../src/menu/fetchMenuById.ts"],"sourcesContent":["import { InstanceApi_postSearch } from \"@next-api-sdk/cmdb-sdk\";\nimport { InstalledMicroAppApi_getMenusInfo } from \"@next-api-sdk/micro-app-sdk\";\nimport { omit, pick } from \"lodash\";\nimport { checkIfOfComputed } from \"@next-core/runtime\";\nimport { mergeMenu } from \"./mergeMenu.js\";\nimport { reorderMenu } from \"./reorderMenuItems.js\";\nimport type {\n MenuRawData,\n RuntimeContext,\n RuntimeHelpers,\n RuntimeMenuItemRawData,\n SidebarMenu,\n SidebarMenuItem,\n} from \"./interfaces.js\";\nimport { computeMenuItems, computeMenuData } from \"./computeMenuData.js\";\nimport { fetchMenuTitle } from \"./fetchMenuTitle.js\";\nimport { getMenusOfStandaloneApp } from \"./getMenusOfStandaloneApp.js\";\nimport { preCheckPermissionsForAny } from \"../checkPermissions.js\";\n\nconst menuPromises = new Map<string, Promise<void>>();\n\nconst menuCache = new Map<string, SidebarMenu>();\n\nfunction transformMenuItems(\n menuItems: RuntimeMenuItemRawData[] | undefined\n): SidebarMenuItem[] | undefined {\n return menuItems?.filter(checkIfOfComputed).map((item) => {\n const children = transformMenuItems(item.children);\n const transformedMenuItem: SidebarMenuItem =\n item.type === \"group\"\n ? {\n type: \"group\",\n title: item.text,\n childLayout: item.childLayout,\n items: children,\n groupId: item.groupId,\n groupFrom: item.groupFrom,\n }\n : children?.length\n ? {\n type: \"subMenu\",\n childLayout: item.childLayout,\n title: item.text,\n icon: item.icon,\n items: children,\n defaultExpanded: item.defaultExpanded,\n }\n : (omit(item, [\"type\", \"items\", \"children\"]) as SidebarMenuItem);\n return transformedMenuItem;\n });\n}\n\nexport function getMenuById(menuId: string) {\n return menuCache.get(menuId);\n}\n\nexport function fetchMenuById(\n menuId: string,\n runtimeContext: RuntimeContext,\n helpers: RuntimeHelpers\n) {\n let promise = menuPromises.get(menuId);\n if (!promise) {\n promise = _fetchMenuById(menuId, runtimeContext, helpers);\n }\n return promise;\n}\n\nasync function _fetchMenuById(\n menuId: string,\n runtimeContext: RuntimeContext,\n helpers: RuntimeHelpers\n) {\n const menuList = window.STANDALONE_MICRO_APPS\n ? getMenusOfStandaloneApp(menuId, runtimeContext.app.id, helpers)\n : runtimeContext.flags[\"three-level-menu-layout\"]\n ? ((\n await InstalledMicroAppApi_getMenusInfo(menuId, {\n menuObjectId: \"EASYOPS_STORYBOARD_MENU\",\n })\n ).menus as MenuRawData[])\n : ((\n await InstanceApi_postSearch(\"EASYOPS_STORYBOARD_MENU\", {\n page: 1,\n page_size: 200,\n fields: {\n menuId: true,\n title: true,\n icon: true,\n link: true,\n titleDataSource: true,\n defaultCollapsed: true,\n defaultCollapsedBreakpoint: true,\n type: true,\n injectMenuGroupId: true,\n dynamicItems: true,\n itemsResolve: true,\n items: true,\n i18n: true,\n \"items.children\": true,\n \"app.appId\": true,\n },\n query: {\n menuId: {\n $eq: menuId,\n },\n app: {\n $size: {\n $gt: 0,\n },\n },\n },\n })\n ).list as MenuRawData[]);\n\n const menuData = await mergeMenu(menuList, runtimeContext, helpers);\n if (!menuData) {\n throw new Error(`Menu not found: ${menuId}`);\n }\n\n reorderMenu(menuData);\n\n const { items, app, ...restMenuData } = menuData;\n const newRuntimeContext: RuntimeContext = {\n ...runtimeContext,\n pendingPermissionsPreCheck: [\n ...runtimeContext.pendingPermissionsPreCheck,\n preCheckPermissionsForAny([items, restMenuData]),\n ],\n };\n delete newRuntimeContext.tplStateStoreId;\n delete newRuntimeContext.forEachItem;\n delete newRuntimeContext.forEachIndex;\n const rootAppId = app[0].appId;\n\n const [computedMenuData, computedMenuItems] = await Promise.all([\n computeMenuData(restMenuData, rootAppId, newRuntimeContext, helpers),\n computeMenuItems(items, newRuntimeContext, helpers),\n ]);\n\n const finalMenuData: SidebarMenu = {\n title: await fetchMenuTitle(computedMenuData),\n ...pick(computedMenuData, [\n \"icon\",\n \"link\",\n \"defaultCollapsed\",\n \"defaultCollapsedBreakpoint\",\n ]),\n menuItems: transformMenuItems(computedMenuItems)!,\n };\n\n // Todo(steve): reconsider the menu cache strategy\n menuCache.set(menuId, finalMenuData);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fetchMenuById.js","names":["_cmdbSdk","require","_microAppSdk","_lodash","_runtime","_mergeMenu","_reorderMenuItems","_computeMenuData","_fetchMenuTitle","_getMenusOfStandaloneApp","_checkPermissions","menuPromises","Map","menuCache","transformMenuItems","menuItems","filter","checkIfOfComputed","map","item","children","transformedMenuItem","type","title","text","childLayout","items","groupId","groupFrom","length","icon","defaultExpanded","omit","getMenuById","menuId","get","fetchMenuById","runtimeContext","helpers","promise","_fetchMenuById","menuList","window","STANDALONE_MICRO_APPS","getMenusOfStandaloneApp","app","id","flags","InstalledMicroAppApi_getMenusInfo","menuObjectId","menus","InstanceApi_postSearch","page","page_size","fields","link","titleDataSource","defaultCollapsed","defaultCollapsedBreakpoint","injectMenuGroupId","dynamicItems","itemsResolve","i18n","query","$eq","$size","$gt","list","menuData","mergeMenu","Error","reorderMenu","restMenuData","newRuntimeContext","pendingPermissionsPreCheck","preCheckPermissionsForAny","tplStateStoreId","forEachItem","forEachIndex","rootAppId","appId","computedMenuData","computedMenuItems","Promise","all","computeMenuData","computeMenuItems","finalMenuData","fetchMenuTitle","pick","set"],"sources":["../../../src/menu/fetchMenuById.ts"],"sourcesContent":["import { InstanceApi_postSearch } from \"@next-api-sdk/cmdb-sdk\";\nimport { InstalledMicroAppApi_getMenusInfo } from \"@next-api-sdk/micro-app-sdk\";\nimport { omit, pick } from \"lodash\";\nimport { checkIfOfComputed } from \"@next-core/runtime\";\nimport { mergeMenu } from \"./mergeMenu.js\";\nimport { reorderMenu } from \"./reorderMenuItems.js\";\nimport type {\n MenuRawData,\n RuntimeContext,\n RuntimeHelpers,\n RuntimeMenuItemRawData,\n SidebarMenu,\n SidebarMenuItem,\n} from \"./interfaces.js\";\nimport { computeMenuItems, computeMenuData } from \"./computeMenuData.js\";\nimport { fetchMenuTitle } from \"./fetchMenuTitle.js\";\nimport { getMenusOfStandaloneApp } from \"./getMenusOfStandaloneApp.js\";\nimport { preCheckPermissionsForAny } from \"../checkPermissions.js\";\n\nconst menuPromises = new Map<string, Promise<void>>();\n\nconst menuCache = new Map<string, SidebarMenu>();\n\nfunction transformMenuItems(\n menuItems: RuntimeMenuItemRawData[] | undefined\n): SidebarMenuItem[] | undefined {\n return menuItems?.filter(checkIfOfComputed).map((item) => {\n const children = transformMenuItems(item.children);\n const transformedMenuItem: SidebarMenuItem =\n item.type === \"group\"\n ? {\n type: \"group\",\n title: item.text,\n childLayout: item.childLayout,\n items: children,\n groupId: item.groupId,\n groupFrom: item.groupFrom,\n }\n : children?.length\n ? {\n type: \"subMenu\",\n childLayout: item.childLayout,\n title: item.text,\n icon: item.icon,\n items: children,\n defaultExpanded: item.defaultExpanded,\n }\n : (omit(item, [\"type\", \"items\", \"children\"]) as SidebarMenuItem);\n return transformedMenuItem;\n });\n}\n\nexport function getMenuById(menuId: string) {\n return menuCache.get(menuId);\n}\n\nexport function fetchMenuById(\n menuId: string,\n runtimeContext: RuntimeContext,\n helpers: RuntimeHelpers\n) {\n let promise = menuPromises.get(menuId);\n if (!promise) {\n promise = _fetchMenuById(menuId, runtimeContext, helpers);\n }\n return promise;\n}\n\nasync function _fetchMenuById(\n menuId: string,\n runtimeContext: RuntimeContext,\n helpers: RuntimeHelpers\n) {\n const menuList = window.STANDALONE_MICRO_APPS\n ? getMenusOfStandaloneApp(menuId, runtimeContext.app.id, helpers)\n : runtimeContext.flags[\"three-level-menu-layout\"]\n ? ((\n await InstalledMicroAppApi_getMenusInfo(menuId, {\n menuObjectId: \"EASYOPS_STORYBOARD_MENU\",\n })\n ).menus as MenuRawData[])\n : ((\n await InstanceApi_postSearch(\"EASYOPS_STORYBOARD_MENU\", {\n page: 1,\n page_size: 200,\n fields: {\n menuId: true,\n title: true,\n icon: true,\n link: true,\n titleDataSource: true,\n defaultCollapsed: true,\n defaultCollapsedBreakpoint: true,\n type: true,\n injectMenuGroupId: true,\n dynamicItems: true,\n itemsResolve: true,\n items: true,\n i18n: true,\n \"items.children\": true,\n \"app.appId\": true,\n },\n query: {\n menuId: {\n $eq: menuId,\n },\n app: {\n $size: {\n $gt: 0,\n },\n },\n },\n })\n ).list as MenuRawData[]);\n\n const menuData = await mergeMenu(menuList, runtimeContext, helpers);\n if (!menuData) {\n throw new Error(`Menu not found: ${menuId}`);\n }\n\n reorderMenu(menuData);\n\n const { items, app, ...restMenuData } = menuData;\n const newRuntimeContext: RuntimeContext = {\n ...runtimeContext,\n pendingPermissionsPreCheck: [\n ...runtimeContext.pendingPermissionsPreCheck,\n preCheckPermissionsForAny([items, restMenuData]),\n ],\n };\n delete newRuntimeContext.tplStateStoreId;\n delete newRuntimeContext.forEachItem;\n delete newRuntimeContext.forEachIndex;\n const rootAppId = app[0].appId;\n\n const [computedMenuData, computedMenuItems] = await Promise.all([\n computeMenuData(restMenuData, rootAppId, newRuntimeContext, helpers),\n computeMenuItems(items, newRuntimeContext, helpers),\n ]);\n\n const finalMenuData: SidebarMenu = {\n title: await fetchMenuTitle(computedMenuData),\n ...pick(computedMenuData, [\n \"icon\",\n \"link\",\n \"defaultCollapsed\",\n \"defaultCollapsedBreakpoint\",\n ]),\n menuItems: transformMenuItems(computedMenuItems)!,\n };\n\n // Todo(steve): reconsider the menu cache strategy\n menuCache.set(menuId, finalMenuData);\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AACA,IAAAI,UAAA,GAAAJ,OAAA;AACA,IAAAK,iBAAA,GAAAL,OAAA;AASA,IAAAM,gBAAA,GAAAN,OAAA;AACA,IAAAO,eAAA,GAAAP,OAAA;AACA,IAAAQ,wBAAA,GAAAR,OAAA;AACA,IAAAS,iBAAA,GAAAT,OAAA;AAEA,MAAMU,YAAY,GAAG,IAAIC,GAAG,CAAwB,CAAC;AAErD,MAAMC,SAAS,GAAG,IAAID,GAAG,CAAsB,CAAC;AAEhD,SAASE,kBAAkBA,CACzBC,SAA+C,EAChB;EAC/B,OAAOA,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAEC,MAAM,CAACC,0BAAiB,CAAC,CAACC,GAAG,CAAEC,IAAI,IAAK;IACxD,MAAMC,QAAQ,GAAGN,kBAAkB,CAACK,IAAI,CAACC,QAAQ,CAAC;IAClD,MAAMC,mBAAoC,GACxCF,IAAI,CAACG,IAAI,KAAK,OAAO,GACjB;MACEA,IAAI,EAAE,OAAO;MACbC,KAAK,EAAEJ,IAAI,CAACK,IAAI;MAChBC,WAAW,EAAEN,IAAI,CAACM,WAAW;MAC7BC,KAAK,EAAEN,QAAQ;MACfO,OAAO,EAAER,IAAI,CAACQ,OAAO;MACrBC,SAAS,EAAET,IAAI,CAACS;IAClB,CAAC,GACDR,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAES,MAAM,GAChB;MACEP,IAAI,EAAE,SAAS;MACfG,WAAW,EAAEN,IAAI,CAACM,WAAW;MAC7BF,KAAK,EAAEJ,IAAI,CAACK,IAAI;MAChBM,IAAI,EAAEX,IAAI,CAACW,IAAI;MACfJ,KAAK,EAAEN,QAAQ;MACfW,eAAe,EAAEZ,IAAI,CAACY;IACxB,CAAC,GACA,IAAAC,YAAI,EAACb,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAqB;IACpE,OAAOE,mBAAmB;EAC5B,CAAC,CAAC;AACJ;AAEO,SAASY,WAAWA,CAACC,MAAc,EAAE;EAC1C,OAAOrB,SAAS,CAACsB,GAAG,CAACD,MAAM,CAAC;AAC9B;AAEO,SAASE,aAAaA,CAC3BF,MAAc,EACdG,cAA8B,EAC9BC,OAAuB,EACvB;EACA,IAAIC,OAAO,GAAG5B,YAAY,CAACwB,GAAG,CAACD,MAAM,CAAC;EACtC,IAAI,CAACK,OAAO,EAAE;IACZA,OAAO,GAAGC,cAAc,CAACN,MAAM,EAAEG,cAAc,EAAEC,OAAO,CAAC;EAC3D;EACA,OAAOC,OAAO;AAChB;AAEA,eAAeC,cAAcA,CAC3BN,MAAc,EACdG,cAA8B,EAC9BC,OAAuB,EACvB;EACA,MAAMG,QAAQ,GAAGC,MAAM,CAACC,qBAAqB,GACzC,IAAAC,gDAAuB,EAACV,MAAM,EAAEG,cAAc,CAACQ,GAAG,CAACC,EAAE,EAAER,OAAO,CAAC,GAC/DD,cAAc,CAACU,KAAK,CAAC,yBAAyB,CAAC,GAC9C,CACC,MAAM,IAAAC,8CAAiC,EAACd,MAAM,EAAE;IAC9Ce,YAAY,EAAE;EAChB,CAAC,CAAC,EACFC,KAAK,GACN,CACC,MAAM,IAAAC,+BAAsB,EAAC,yBAAyB,EAAE;IACtDC,IAAI,EAAE,CAAC;IACPC,SAAS,EAAE,GAAG;IACdC,MAAM,EAAE;MACNpB,MAAM,EAAE,IAAI;MACZX,KAAK,EAAE,IAAI;MACXO,IAAI,EAAE,IAAI;MACVyB,IAAI,EAAE,IAAI;MACVC,eAAe,EAAE,IAAI;MACrBC,gBAAgB,EAAE,IAAI;MACtBC,0BAA0B,EAAE,IAAI;MAChCpC,IAAI,EAAE,IAAI;MACVqC,iBAAiB,EAAE,IAAI;MACvBC,YAAY,EAAE,IAAI;MAClBC,YAAY,EAAE,IAAI;MAClBnC,KAAK,EAAE,IAAI;MACXoC,IAAI,EAAE,IAAI;MACV,gBAAgB,EAAE,IAAI;MACtB,WAAW,EAAE;IACf,CAAC;IACDC,KAAK,EAAE;MACL7B,MAAM,EAAE;QACN8B,GAAG,EAAE9B;MACP,CAAC;MACDW,GAAG,EAAE;QACHoB,KAAK,EAAE;UACLC,GAAG,EAAE;QACP;MACF;IACF;EACF,CAAC,CAAC,EACFC,IAAsB;EAE5B,MAAMC,QAAQ,GAAG,MAAM,IAAAC,oBAAS,EAAC5B,QAAQ,EAAEJ,cAAc,EAAEC,OAAO,CAAC;EACnE,IAAI,CAAC8B,QAAQ,EAAE;IACb,MAAM,IAAIE,KAAK,CAAE,mBAAkBpC,MAAO,EAAC,CAAC;EAC9C;EAEA,IAAAqC,6BAAW,EAACH,QAAQ,CAAC;EAErB,MAAM;IAAE1C,KAAK;IAAEmB,GAAG;IAAE,GAAG2B;EAAa,CAAC,GAAGJ,QAAQ;EAChD,MAAMK,iBAAiC,GAAG;IACxC,GAAGpC,cAAc;IACjBqC,0BAA0B,EAAE,CAC1B,GAAGrC,cAAc,CAACqC,0BAA0B,EAC5C,IAAAC,2CAAyB,EAAC,CAACjD,KAAK,EAAE8C,YAAY,CAAC,CAAC;EAEpD,CAAC;EACD,OAAOC,iBAAiB,CAACG,eAAe;EACxC,OAAOH,iBAAiB,CAACI,WAAW;EACpC,OAAOJ,iBAAiB,CAACK,YAAY;EACrC,MAAMC,SAAS,GAAGlC,GAAG,CAAC,CAAC,CAAC,CAACmC,KAAK;EAE9B,MAAM,CAACC,gBAAgB,EAAEC,iBAAiB,CAAC,GAAG,MAAMC,OAAO,CAACC,GAAG,CAAC,CAC9D,IAAAC,gCAAe,EAACb,YAAY,EAAEO,SAAS,EAAEN,iBAAiB,EAAEnC,OAAO,CAAC,EACpE,IAAAgD,iCAAgB,EAAC5D,KAAK,EAAE+C,iBAAiB,EAAEnC,OAAO,CAAC,CACpD,CAAC;EAEF,MAAMiD,aAA0B,GAAG;IACjChE,KAAK,EAAE,MAAM,IAAAiE,8BAAc,EAACP,gBAAgB,CAAC;IAC7C,GAAG,IAAAQ,YAAI,EAACR,gBAAgB,EAAE,CACxB,MAAM,EACN,MAAM,EACN,kBAAkB,EAClB,4BAA4B,CAC7B,CAAC;IACFlE,SAAS,EAAED,kBAAkB,CAACoE,iBAAiB;EACjD,CAAC;;EAED;EACArE,SAAS,CAAC6E,GAAG,CAACxD,MAAM,EAAEqD,aAAa,CAAC;AACtC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchMenuTitle.js","names":["_lodash","require","_cmdbSdk","menuTitleCache","Map","fetchMenuTitle","menuData","title","isEmpty","titleDataSource","cacheKey","JSON","stringify","cachedTitle","get","undefined","objectId","instanceId","attributeId","attr","instanceData","InstanceApi_getDetail","fields","Array","isArray","primary","rest","length","join","String","set"],"sources":["../../../src/menu/fetchMenuTitle.ts"],"sourcesContent":["import { isEmpty } from \"lodash\";\nimport { InstanceApi_getDetail } from \"@next-api-sdk/cmdb-sdk\";\nimport type { MenuRawData } from \"./interfaces.js\";\n\nconst menuTitleCache = new Map<string, string>();\n\nexport async function fetchMenuTitle(\n menuData: Pick<MenuRawData, \"title\" | \"titleDataSource\">\n): Promise<string> {\n if (menuData.title || isEmpty(menuData.titleDataSource)) {\n return menuData.title;\n }\n const cacheKey = JSON.stringify(menuData.titleDataSource);\n const cachedTitle = menuTitleCache.get(cacheKey);\n if (cachedTitle !== undefined) {\n return cachedTitle;\n }\n const { objectId, instanceId, attributeId } = menuData.titleDataSource;\n const attr = attributeId ?? \"name\";\n const instanceData = await InstanceApi_getDetail(objectId, instanceId, {\n fields: attr,\n });\n let title: string;\n if (attributeId === \"#showKey\" && Array.isArray(instanceData[attr])) {\n const [primary, ...rest] = instanceData[attr];\n title = rest.length > 0 ? `${primary}(${rest.join(\",\")})` : String(primary);\n } else {\n title = String(instanceData[attr]);\n }\n menuTitleCache.set(cacheKey, title);\n return title;\n}\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAGA,MAAME,cAAc,GAAG,IAAIC,GAAG,CAAiB,CAAC;AAEzC,eAAeC,cAAcA,CAClCC,QAAwD,EACvC;EACjB,IAAIA,QAAQ,CAACC,KAAK,IAAI,IAAAC,eAAO,EAACF,QAAQ,CAACG,eAAe,CAAC,EAAE;IACvD,OAAOH,QAAQ,CAACC,KAAK;EACvB;EACA,MAAMG,QAAQ,GAAGC,IAAI,CAACC,SAAS,CAACN,QAAQ,CAACG,eAAe,CAAC;EACzD,MAAMI,WAAW,GAAGV,cAAc,CAACW,GAAG,CAACJ,QAAQ,CAAC;EAChD,IAAIG,WAAW,KAAKE,SAAS,EAAE;IAC7B,OAAOF,WAAW;EACpB;EACA,MAAM;IAAEG,QAAQ;IAAEC,UAAU;IAAEC;EAAY,CAAC,GAAGZ,QAAQ,CAACG,eAAe;EACtE,MAAMU,IAAI,GAAGD,WAAW,aAAXA,WAAW,cAAXA,WAAW,GAAI,MAAM;EAClC,MAAME,YAAY,GAAG,MAAM,IAAAC,8BAAqB,EAACL,QAAQ,EAAEC,UAAU,EAAE;IACrEK,MAAM,EAAEH;EACV,CAAC,CAAC;EACF,IAAIZ,KAAa;EACjB,IAAIW,WAAW,KAAK,UAAU,IAAIK,KAAK,CAACC,OAAO,CAACJ,YAAY,CAACD,IAAI,CAAC,CAAC,EAAE;IACnE,MAAM,CAACM,OAAO,EAAE,GAAGC,IAAI,CAAC,GAAGN,YAAY,CAACD,IAAI,CAAC;IAC7CZ,KAAK,GAAGmB,IAAI,CAACC,MAAM,GAAG,CAAC,GAAI,GAAEF,OAAQ,IAAGC,IAAI,CAACE,IAAI,CAAC,GAAG,CAAE,GAAE,GAAGC,MAAM,CAACJ,OAAO,CAAC;EAC7E,CAAC,MAAM;IACLlB,KAAK,GAAGsB,MAAM,CAACT,YAAY,CAACD,IAAI,CAAC,CAAC;EACpC;EACAhB,cAAc,CAAC2B,GAAG,CAACpB,QAAQ,EAAEH,KAAK,CAAC;EACnC,OAAOA,KAAK;AACd"}
|
|
1
|
+
{"version":3,"file":"fetchMenuTitle.js","names":["_lodash","require","_cmdbSdk","menuTitleCache","Map","fetchMenuTitle","menuData","title","isEmpty","titleDataSource","cacheKey","JSON","stringify","cachedTitle","get","undefined","objectId","instanceId","attributeId","attr","instanceData","InstanceApi_getDetail","fields","Array","isArray","primary","rest","length","join","String","set"],"sources":["../../../src/menu/fetchMenuTitle.ts"],"sourcesContent":["import { isEmpty } from \"lodash\";\nimport { InstanceApi_getDetail } from \"@next-api-sdk/cmdb-sdk\";\nimport type { MenuRawData } from \"./interfaces.js\";\n\nconst menuTitleCache = new Map<string, string>();\n\nexport async function fetchMenuTitle(\n menuData: Pick<MenuRawData, \"title\" | \"titleDataSource\">\n): Promise<string> {\n if (menuData.title || isEmpty(menuData.titleDataSource)) {\n return menuData.title;\n }\n const cacheKey = JSON.stringify(menuData.titleDataSource);\n const cachedTitle = menuTitleCache.get(cacheKey);\n if (cachedTitle !== undefined) {\n return cachedTitle;\n }\n const { objectId, instanceId, attributeId } = menuData.titleDataSource;\n const attr = attributeId ?? \"name\";\n const instanceData = await InstanceApi_getDetail(objectId, instanceId, {\n fields: attr,\n });\n let title: string;\n if (attributeId === \"#showKey\" && Array.isArray(instanceData[attr])) {\n const [primary, ...rest] = instanceData[attr];\n title = rest.length > 0 ? `${primary}(${rest.join(\",\")})` : String(primary);\n } else {\n title = String(instanceData[attr]);\n }\n menuTitleCache.set(cacheKey, title);\n return title;\n}\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAGA,MAAME,cAAc,GAAG,IAAIC,GAAG,CAAiB,CAAC;AAEzC,eAAeC,cAAcA,CAClCC,QAAwD,EACvC;EACjB,IAAIA,QAAQ,CAACC,KAAK,IAAI,IAAAC,eAAO,EAACF,QAAQ,CAACG,eAAe,CAAC,EAAE;IACvD,OAAOH,QAAQ,CAACC,KAAK;EACvB;EACA,MAAMG,QAAQ,GAAGC,IAAI,CAACC,SAAS,CAACN,QAAQ,CAACG,eAAe,CAAC;EACzD,MAAMI,WAAW,GAAGV,cAAc,CAACW,GAAG,CAACJ,QAAQ,CAAC;EAChD,IAAIG,WAAW,KAAKE,SAAS,EAAE;IAC7B,OAAOF,WAAW;EACpB;EACA,MAAM;IAAEG,QAAQ;IAAEC,UAAU;IAAEC;EAAY,CAAC,GAAGZ,QAAQ,CAACG,eAAe;EACtE,MAAMU,IAAI,GAAGD,WAAW,aAAXA,WAAW,cAAXA,WAAW,GAAI,MAAM;EAClC,MAAME,YAAY,GAAG,MAAM,IAAAC,8BAAqB,EAACL,QAAQ,EAAEC,UAAU,EAAE;IACrEK,MAAM,EAAEH;EACV,CAAC,CAAC;EACF,IAAIZ,KAAa;EACjB,IAAIW,WAAW,KAAK,UAAU,IAAIK,KAAK,CAACC,OAAO,CAACJ,YAAY,CAACD,IAAI,CAAC,CAAC,EAAE;IACnE,MAAM,CAACM,OAAO,EAAE,GAAGC,IAAI,CAAC,GAAGN,YAAY,CAACD,IAAI,CAAC;IAC7CZ,KAAK,GAAGmB,IAAI,CAACC,MAAM,GAAG,CAAC,GAAI,GAAEF,OAAQ,IAAGC,IAAI,CAACE,IAAI,CAAC,GAAG,CAAE,GAAE,GAAGC,MAAM,CAACJ,OAAO,CAAC;EAC7E,CAAC,MAAM;IACLlB,KAAK,GAAGsB,MAAM,CAACT,YAAY,CAACD,IAAI,CAAC,CAAC;EACpC;EACAhB,cAAc,CAAC2B,GAAG,CAACpB,QAAQ,EAAEH,KAAK,CAAC;EACnC,OAAOA,KAAK;AACd","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getMenusOfStandaloneApp.js","names":["getMenusOfStandaloneApp","menuId","appId","helpers","_ref","_storyboard$meta$inje","_storyboard$meta","_storyboard$meta2","storyboard","getStoryboardByAppId","menus","meta","injectMenus","filter","menu","map","_menu$app","app"],"sources":["../../../src/menu/getMenusOfStandaloneApp.ts"],"sourcesContent":["import { MenuRawData, RuntimeHelpers } from \"./interfaces.js\";\n\nexport function getMenusOfStandaloneApp(\n menuId: string,\n appId: string,\n helpers: RuntimeHelpers\n): MenuRawData[] {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const storyboard = helpers.getStoryboardByAppId(appId)!;\n const menus = (storyboard.meta?.injectMenus ??\n storyboard.meta?.menus ??\n []) as MenuRawData[];\n\n return menus\n .filter((menu) => menu.menuId === menuId)\n .map((menu) => ({\n ...menu,\n ...(menu.app?.[0]?.appId ? {} : { app: [{ appId }] }),\n }));\n\n // Todo: maybe: fetch menus from STANDALONE_MENU@EASYOPS\n}\n"],"mappings":";;;;;;AAEO,SAASA,uBAAuBA,CACrCC,MAAc,EACdC,KAAa,EACbC,OAAuB,EACR;EAAA,IAAAC,IAAA,EAAAC,qBAAA,EAAAC,gBAAA,EAAAC,iBAAA;EACf;EACA,MAAMC,UAAU,GAAGL,OAAO,CAACM,oBAAoB,CAACP,KAAK,CAAE;EACvD,MAAMQ,KAAK,IAAAN,IAAA,IAAAC,qBAAA,IAAAC,gBAAA,GAAIE,UAAU,CAACG,IAAI,cAAAL,gBAAA,uBAAfA,gBAAA,CAAiBM,WAAW,cAAAP,qBAAA,cAAAA,qBAAA,IAAAE,iBAAA,GACzCC,UAAU,CAACG,IAAI,cAAAJ,iBAAA,uBAAfA,iBAAA,CAAiBG,KAAK,cAAAN,IAAA,cAAAA,IAAA,GACtB,EAAoB;EAEtB,OAAOM,KAAK,CACTG,MAAM,CAAEC,IAAI,IAAKA,IAAI,CAACb,MAAM,KAAKA,MAAM,CAAC,CACxCc,GAAG,CAAED,IAAI;IAAA,IAAAE,SAAA;IAAA,OAAM;MACd,GAAGF,IAAI;MACP,IAAI,CAAAE,SAAA,GAAAF,IAAI,CAACG,GAAG,cAAAD,SAAA,gBAAAA,SAAA,GAARA,SAAA,CAAW,CAAC,CAAC,cAAAA,SAAA,eAAbA,SAAA,CAAed,KAAK,GAAG,CAAC,CAAC,GAAG;QAAEe,GAAG,EAAE,CAAC;UAAEf;QAAM,CAAC;MAAE,CAAC;IACtD,CAAC;EAAA,CAAC,CAAC;;EAEL;AACF"}
|
|
1
|
+
{"version":3,"file":"getMenusOfStandaloneApp.js","names":["getMenusOfStandaloneApp","menuId","appId","helpers","_ref","_storyboard$meta$inje","_storyboard$meta","_storyboard$meta2","storyboard","getStoryboardByAppId","menus","meta","injectMenus","filter","menu","map","_menu$app","app"],"sources":["../../../src/menu/getMenusOfStandaloneApp.ts"],"sourcesContent":["import { MenuRawData, RuntimeHelpers } from \"./interfaces.js\";\n\nexport function getMenusOfStandaloneApp(\n menuId: string,\n appId: string,\n helpers: RuntimeHelpers\n): MenuRawData[] {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const storyboard = helpers.getStoryboardByAppId(appId)!;\n const menus = (storyboard.meta?.injectMenus ??\n storyboard.meta?.menus ??\n []) as MenuRawData[];\n\n return menus\n .filter((menu) => menu.menuId === menuId)\n .map((menu) => ({\n ...menu,\n ...(menu.app?.[0]?.appId ? {} : { app: [{ appId }] }),\n }));\n\n // Todo: maybe: fetch menus from STANDALONE_MENU@EASYOPS\n}\n"],"mappings":";;;;;;AAEO,SAASA,uBAAuBA,CACrCC,MAAc,EACdC,KAAa,EACbC,OAAuB,EACR;EAAA,IAAAC,IAAA,EAAAC,qBAAA,EAAAC,gBAAA,EAAAC,iBAAA;EACf;EACA,MAAMC,UAAU,GAAGL,OAAO,CAACM,oBAAoB,CAACP,KAAK,CAAE;EACvD,MAAMQ,KAAK,IAAAN,IAAA,IAAAC,qBAAA,IAAAC,gBAAA,GAAIE,UAAU,CAACG,IAAI,cAAAL,gBAAA,uBAAfA,gBAAA,CAAiBM,WAAW,cAAAP,qBAAA,cAAAA,qBAAA,IAAAE,iBAAA,GACzCC,UAAU,CAACG,IAAI,cAAAJ,iBAAA,uBAAfA,iBAAA,CAAiBG,KAAK,cAAAN,IAAA,cAAAA,IAAA,GACtB,EAAoB;EAEtB,OAAOM,KAAK,CACTG,MAAM,CAAEC,IAAI,IAAKA,IAAI,CAACb,MAAM,KAAKA,MAAM,CAAC,CACxCc,GAAG,CAAED,IAAI;IAAA,IAAAE,SAAA;IAAA,OAAM;MACd,GAAGF,IAAI;MACP,IAAI,CAAAE,SAAA,GAAAF,IAAI,CAACG,GAAG,cAAAD,SAAA,gBAAAA,SAAA,GAARA,SAAA,CAAW,CAAC,CAAC,cAAAA,SAAA,eAAbA,SAAA,CAAed,KAAK,GAAG,CAAC,CAAC,GAAG;QAAEe,GAAG,EAAE,CAAC;UAAEf;QAAM,CAAC;MAAE,CAAC;IACtD,CAAC;EAAA,CAAC,CAAC;;EAEL;AACF","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_fetchMenuById","require"],"sources":["../../../src/menu/index.ts"],"sourcesContent":["export { getMenuById, fetchMenuById } from \"./fetchMenuById.js\";\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["_fetchMenuById","require"],"sources":["../../../src/menu/index.ts"],"sourcesContent":["export { getMenuById, fetchMenuById } from \"./fetchMenuById.js\";\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.js","names":["_constants","require"],"sources":["../../../src/menu/interfaces.ts"],"sourcesContent":["import type { MetaI18n, MicroApp, ResolveConf } from \"@next-core/types\";\nimport type {\n RuntimeHooksMenuHelpers,\n __secret_internals,\n} from \"@next-core/runtime\";\nimport {\n symbolAppId,\n symbolMenuI18nNamespace,\n symbolOverrideApp,\n} from \"./constants.js\";\n\nexport type RuntimeContext = __secret_internals.RuntimeContext;\n\nexport type RuntimeHelpers = RuntimeHooksMenuHelpers;\n\n/** 原始菜单数据。 */\nexport interface MenuRawData {\n menuId: string;\n title: string;\n app: [\n {\n appId: string;\n },\n ];\n icon?: unknown;\n link?: string;\n titleDataSource?: TitleDataSource;\n items?: MenuItemRawData[];\n type?: \"main\" | \"inject\";\n injectMenuGroupId?: string;\n defaultCollapsed?: boolean;\n defaultCollapsedBreakpoint?: number;\n dynamicItems?: boolean;\n itemsResolve?: ResolveConf;\n i18n?: MetaI18n;\n overrideApp?: MicroApp;\n}\n\n/** 原始菜单项数据。 */\nexport type MenuItemRawData = Omit<SidebarMenuSimpleItem, \"type\"> & {\n children?: MenuItemRawData[];\n type?: \"default\" | \"group\";\n childLayout?: \"default\" | \"category\";\n sort?: number;\n if?: string | boolean;\n defaultExpanded?: boolean;\n groupId?: string;\n groupFrom?: string;\n};\n\ninterface TitleDataSource {\n objectId: string;\n instanceId: string;\n attributeId?: string;\n}\n\n/** 侧边栏基本菜单项的配置。 */\nexport interface SidebarMenuSimpleItem {\n /** 菜单项文本。 */\n text: string;\n\n /** 菜单项对应的系统内地址。 */\n // to?: LocationDescriptor;\n to?: unknown;\n\n /** 菜单项对应的外部链接地址。 */\n href?: string;\n\n /** 菜单项的图标。 */\n // icon?: MenuIcon;\n icon?: unknown;\n\n /** 菜单项链接打开的目标。 */\n target?: string;\n\n type?: \"default\";\n\n /** 高亮菜单项时是否使用精确匹配来对比当前地址和菜单项地址。 */\n exact?: boolean;\n\n /** 设置额外包含的匹配高亮菜单项的地址列表。 */\n activeIncludes?: string[];\n\n /** 设置需要被排除的匹配高亮菜单项的地址列表。 */\n activeExcludes?: string[];\n\n /** 设置匹配高亮菜单项时是否还对 search 参数进行比较。 */\n activeMatchSearch?: boolean;\n\n /** @internal */\n key?: string;\n}\n\nexport interface RuntimeMenuItemRawData extends MenuItemRawData {\n children?: RuntimeMenuItemRawData[];\n [symbolAppId]: string;\n [symbolMenuI18nNamespace]?: string;\n [symbolOverrideApp]?: MicroApp;\n}\n\nexport interface RuntimeMenuRawData extends MenuRawData {\n items: RuntimeMenuItemRawData[];\n // [symbolShouldCache]?: boolean;\n [symbolMenuI18nNamespace]?: string;\n [symbolOverrideApp]?: MicroApp;\n}\n\nexport interface SidebarMenu {\n /** 菜单标题。 */\n title: string;\n /** 菜单标题对应的图标。 */\n icon?: unknown;\n /** 菜单标题对应的链接地址。 */\n link?: unknown;\n /** 是否默认折叠。 */\n defaultCollapsed?: boolean;\n /** 针对小于特定尺寸的屏幕(例如 1600px),是否默认折叠。 */\n defaultCollapsedBreakpoint?: number;\n /** 菜单项列表。 */\n menuItems: SidebarMenuItem[];\n}\n\n/** 侧边栏菜单项配置。 */\nexport type SidebarMenuItem = SidebarMenuSimpleItem | SidebarMenuGroup;\n\n/** 侧边栏分组菜单项的配置。 */\nexport interface SidebarMenuGroup {\n /** 分组 Id。 */\n groupId?: string;\n\n /** 分组来源。 */\n groupFrom?: string;\n\n /** 分组类型。 */\n type: \"group\" | \"subMenu\";\n\n /** 分组标题。 */\n title: string;\n\n /** {@inheritDoc SidebarMenuSimpleItem.icon } */\n icon?: unknown;\n\n /** 该分组下的子菜单项列表。 */\n items?: SidebarMenuItem[];\n\n /** @internal */\n key?: string;\n\n /** 该分组下的子菜单是否默认展开。 */\n defaultExpanded?: boolean;\n\n /** 子菜单项的布局方式。 */\n childLayout?: \"default\" | \"category\" | \"siteMap\";\n}\n"],"mappings":";;AAKA,IAAAA,UAAA,GAAAC,OAAA"}
|
|
1
|
+
{"version":3,"file":"interfaces.js","names":["_constants","require"],"sources":["../../../src/menu/interfaces.ts"],"sourcesContent":["import type { MetaI18n, MicroApp, ResolveConf } from \"@next-core/types\";\nimport type {\n RuntimeHooksMenuHelpers,\n __secret_internals,\n} from \"@next-core/runtime\";\nimport {\n symbolAppId,\n symbolMenuI18nNamespace,\n symbolOverrideApp,\n} from \"./constants.js\";\n\nexport type RuntimeContext = __secret_internals.RuntimeContext;\n\nexport type RuntimeHelpers = RuntimeHooksMenuHelpers;\n\n/** 原始菜单数据。 */\nexport interface MenuRawData {\n menuId: string;\n title: string;\n app: [\n {\n appId: string;\n },\n ];\n icon?: unknown;\n link?: string;\n titleDataSource?: TitleDataSource;\n items?: MenuItemRawData[];\n type?: \"main\" | \"inject\";\n injectMenuGroupId?: string;\n defaultCollapsed?: boolean;\n defaultCollapsedBreakpoint?: number;\n dynamicItems?: boolean;\n itemsResolve?: ResolveConf;\n i18n?: MetaI18n;\n overrideApp?: MicroApp;\n}\n\n/** 原始菜单项数据。 */\nexport type MenuItemRawData = Omit<SidebarMenuSimpleItem, \"type\"> & {\n children?: MenuItemRawData[];\n type?: \"default\" | \"group\";\n childLayout?: \"default\" | \"category\";\n sort?: number;\n if?: string | boolean;\n defaultExpanded?: boolean;\n groupId?: string;\n groupFrom?: string;\n};\n\ninterface TitleDataSource {\n objectId: string;\n instanceId: string;\n attributeId?: string;\n}\n\n/** 侧边栏基本菜单项的配置。 */\nexport interface SidebarMenuSimpleItem {\n /** 菜单项文本。 */\n text: string;\n\n /** 菜单项对应的系统内地址。 */\n // to?: LocationDescriptor;\n to?: unknown;\n\n /** 菜单项对应的外部链接地址。 */\n href?: string;\n\n /** 菜单项的图标。 */\n // icon?: MenuIcon;\n icon?: unknown;\n\n /** 菜单项链接打开的目标。 */\n target?: string;\n\n type?: \"default\";\n\n /** 高亮菜单项时是否使用精确匹配来对比当前地址和菜单项地址。 */\n exact?: boolean;\n\n /** 设置额外包含的匹配高亮菜单项的地址列表。 */\n activeIncludes?: string[];\n\n /** 设置需要被排除的匹配高亮菜单项的地址列表。 */\n activeExcludes?: string[];\n\n /** 设置匹配高亮菜单项时是否还对 search 参数进行比较。 */\n activeMatchSearch?: boolean;\n\n /** @internal */\n key?: string;\n}\n\nexport interface RuntimeMenuItemRawData extends MenuItemRawData {\n children?: RuntimeMenuItemRawData[];\n [symbolAppId]: string;\n [symbolMenuI18nNamespace]?: string;\n [symbolOverrideApp]?: MicroApp;\n}\n\nexport interface RuntimeMenuRawData extends MenuRawData {\n items: RuntimeMenuItemRawData[];\n // [symbolShouldCache]?: boolean;\n [symbolMenuI18nNamespace]?: string;\n [symbolOverrideApp]?: MicroApp;\n}\n\nexport interface SidebarMenu {\n /** 菜单标题。 */\n title: string;\n /** 菜单标题对应的图标。 */\n icon?: unknown;\n /** 菜单标题对应的链接地址。 */\n link?: unknown;\n /** 是否默认折叠。 */\n defaultCollapsed?: boolean;\n /** 针对小于特定尺寸的屏幕(例如 1600px),是否默认折叠。 */\n defaultCollapsedBreakpoint?: number;\n /** 菜单项列表。 */\n menuItems: SidebarMenuItem[];\n}\n\n/** 侧边栏菜单项配置。 */\nexport type SidebarMenuItem = SidebarMenuSimpleItem | SidebarMenuGroup;\n\n/** 侧边栏分组菜单项的配置。 */\nexport interface SidebarMenuGroup {\n /** 分组 Id。 */\n groupId?: string;\n\n /** 分组来源。 */\n groupFrom?: string;\n\n /** 分组类型。 */\n type: \"group\" | \"subMenu\";\n\n /** 分组标题。 */\n title: string;\n\n /** {@inheritDoc SidebarMenuSimpleItem.icon } */\n icon?: unknown;\n\n /** 该分组下的子菜单项列表。 */\n items?: SidebarMenuItem[];\n\n /** @internal */\n key?: string;\n\n /** 该分组下的子菜单是否默认展开。 */\n defaultExpanded?: boolean;\n\n /** 子菜单项的布局方式。 */\n childLayout?: \"default\" | \"category\" | \"siteMap\";\n}\n"],"mappings":";;AAKA,IAAAA,UAAA,GAAAC,OAAA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadDynamicMenuItems.js","names":["_checkPermissions","require","loadDynamicMenuItems","menu","runtimeContext","menuWithI18n","helpers","dynamicItems","itemsResolve","overrideAppId","app","appId","newRuntimeContext","pendingPermissionsPreCheck","preCheckPermissionsForAny","id","_helpers$getStoryboar","overrideApp","window","STANDALONE_MICRO_APPS","getStoryboardByAppId","appendI18nNamespace","get","resolved","resolveData","transform","items"],"sources":["../../../src/menu/loadDynamicMenuItems.ts"],"sourcesContent":["import { preCheckPermissionsForAny } from \"../checkPermissions.js\";\nimport 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 const newRuntimeContext = {\n ...runtimeContext,\n pendingPermissionsPreCheck: [\n ...runtimeContext.pendingPermissionsPreCheck,\n preCheckPermissionsForAny(menu.itemsResolve),\n ],\n };\n if (overrideAppId !== runtimeContext.app.id) {\n newRuntimeContext.overrideApp = window.STANDALONE_MICRO_APPS\n ? menu.overrideApp\n : helpers.getStoryboardByAppId(overrideAppId)?.app;\n newRuntimeContext.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":";;;;;;AAAA,IAAAA,iBAAA,GAAAC,OAAA;AAQO,eAAeC,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,MAAMC,iBAAiB,GAAG;MACxB,GAAGR,cAAc;MACjBS,0BAA0B,EAAE,CAC1B,GAAGT,cAAc,CAACS,0BAA0B,EAC5C,IAAAC,2CAAyB,EAACX,IAAI,CAACK,YAAY,CAAC;IAEhD,CAAC;IACD,IAAIC,aAAa,KAAKL,cAAc,CAACM,GAAG,CAACK,EAAE,EAAE;MAAA,IAAAC,qBAAA;MAC3CJ,iBAAiB,CAACK,WAAW,GAAGC,MAAM,CAACC,qBAAqB,GACxDhB,IAAI,CAACc,WAAW,IAAAD,qBAAA,GAChBV,OAAO,CAACc,oBAAoB,CAACX,aAAa,CAAC,cAAAO,qBAAA,uBAA3CA,qBAAA,CAA6CN,GAAG;MACpDE,iBAAiB,CAACS,mBAAmB,GAAGhB,YAAY,CAACiB,GAAG,CAACnB,IAAI,CAAC;IAChE;IAEA,MAAMoB,QAAQ,GAAI,MAAMjB,OAAO,CAACkB,WAAW,CACzC;MACEC,SAAS,EAAE,OAAO;MAClB,GAAGtB,IAAI,CAACK;IACV,CAAC,EACDI,iBACF,CAAkC;IAClCT,IAAI,CAACuB,KAAK,GAAGH,QAAQ,CAACG,KAAK;EAC7B;AACF"}
|
|
1
|
+
{"version":3,"file":"loadDynamicMenuItems.js","names":["_checkPermissions","require","loadDynamicMenuItems","menu","runtimeContext","menuWithI18n","helpers","dynamicItems","itemsResolve","overrideAppId","app","appId","newRuntimeContext","pendingPermissionsPreCheck","preCheckPermissionsForAny","id","_helpers$getStoryboar","overrideApp","window","STANDALONE_MICRO_APPS","getStoryboardByAppId","appendI18nNamespace","get","resolved","resolveData","transform","items"],"sources":["../../../src/menu/loadDynamicMenuItems.ts"],"sourcesContent":["import { preCheckPermissionsForAny } from \"../checkPermissions.js\";\nimport 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 const newRuntimeContext = {\n ...runtimeContext,\n pendingPermissionsPreCheck: [\n ...runtimeContext.pendingPermissionsPreCheck,\n preCheckPermissionsForAny(menu.itemsResolve),\n ],\n };\n if (overrideAppId !== runtimeContext.app.id) {\n newRuntimeContext.overrideApp = window.STANDALONE_MICRO_APPS\n ? menu.overrideApp\n : helpers.getStoryboardByAppId(overrideAppId)?.app;\n newRuntimeContext.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":";;;;;;AAAA,IAAAA,iBAAA,GAAAC,OAAA;AAQO,eAAeC,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,MAAMC,iBAAiB,GAAG;MACxB,GAAGR,cAAc;MACjBS,0BAA0B,EAAE,CAC1B,GAAGT,cAAc,CAACS,0BAA0B,EAC5C,IAAAC,2CAAyB,EAACX,IAAI,CAACK,YAAY,CAAC;IAEhD,CAAC;IACD,IAAIC,aAAa,KAAKL,cAAc,CAACM,GAAG,CAACK,EAAE,EAAE;MAAA,IAAAC,qBAAA;MAC3CJ,iBAAiB,CAACK,WAAW,GAAGC,MAAM,CAACC,qBAAqB,GACxDhB,IAAI,CAACc,WAAW,IAAAD,qBAAA,GAChBV,OAAO,CAACc,oBAAoB,CAACX,aAAa,CAAC,cAAAO,qBAAA,uBAA3CA,qBAAA,CAA6CN,GAAG;MACpDE,iBAAiB,CAACS,mBAAmB,GAAGhB,YAAY,CAACiB,GAAG,CAACnB,IAAI,CAAC;IAChE;IAEA,MAAMoB,QAAQ,GAAI,MAAMjB,OAAO,CAACkB,WAAW,CACzC;MACEC,SAAS,EAAE,OAAO;MAClB,GAAGtB,IAAI,CAACK;IACV,CAAC,EACDI,iBACF,CAAkC;IAClCT,IAAI,CAACuB,KAAK,GAAGH,QAAQ,CAACG,KAAK;EAC7B;AACF","ignoreList":[]}
|