@next-core/brick-playground 1.16.35 → 1.16.37
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/preview/core.9bc3feb4.js +1 -0
- package/dist/preview/core.9bc3feb4.js.map +1 -0
- package/dist/preview/index.html +1 -1
- package/dist/preview/{main.58425015.js → main.e1647775.js} +1 -1
- package/dist/preview/{main.58425015.js.map → main.e1647775.js.map} +1 -1
- package/package.json +4 -4
- package/dist/preview/core.486e137b.js +0 -1
- package/dist/preview/core.486e137b.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.9bc3feb4.js","mappings":"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","sources":["webpack:///./src/bootstrap.ts","webpack:///../../src/fetch.ts","webpack:///../../src/errors.ts","webpack:///../../src/InterceptorManager.ts","webpack:///../../src/http.ts","webpack:///../../src/index.ts","webpack:///../../../../src/storyboard/expressions/beforeVisitGlobalMember.ts","webpack:///../../../../src/storyboard/expressions/collectMemberCallUsage.ts","webpack:///../../../../src/storyboard/expressions/traverse.ts","webpack:///../../../../src/storyboard/expressions/collectMemberUsage.ts","webpack:///../../../../src/storyboard/expressions/track.ts","webpack:///../../../../src/storyboard/functions/traverse.ts","webpack:///../../../../src/storyboard/functions/collectMemberUsageInFunction.ts","webpack:///../../../src/storyboard/permissions.ts","webpack:///../../../src/storyboard/replaceUseChildren.ts","webpack:///../../../src/general/createProviderClass.ts","webpack:///../../../src/general/createSSEStream.ts","webpack:///../../../src/general/deepFreeze.ts","webpack:///../../../src/general/hasOwnProperty.ts","webpack:///../../../src/general/isObject.ts","webpack:///../../../src/general/JsonStorage.ts","webpack:///../../../src/general/unwrapProvider.ts","webpack:///../../src/interfaces.ts","webpack:///../../src/lexical.ts","webpack:///../../src/compile.ts","webpack:///../../src/syntax.ts","webpack:///../../src/init.ts","webpack:///../../src/text.ts","webpack:///../brick-container/src/replaceChildren.ts","webpack:///../../src/ExecutionContext.ts","webpack:///../../src/traverse.ts","webpack:///../../src/context-free.ts","webpack:///../../src/sanitize.ts","webpack:///../../src/cook.ts","webpack:///../../src/AnalysisContext.ts","webpack:///../../src/precook.ts","webpack:///../../src/hasOwnProperty.ts","webpack:///../../src/precookFunction.ts","webpack:///../../src/parse.ts","webpack:///../../src/preevaluate.ts","webpack:///../../src/getBasePath.ts","webpack:///../../../src/internal/matchStoryboard.ts","webpack:///../../../src/internal/historyExtended.ts","webpack:///../../src/history.ts","webpack:///../../../src/internal/Runtime.ts","webpack:///../../src/getV2RuntimeFromDll.ts","webpack:///../../src/CustomProcessors.ts","webpack:///../../../src/internal/registerAppI18n.ts","webpack:///../../../../src/internal/compute/WidgetI18n.ts","webpack:///../../../src/internal/devtools.ts","webpack:///../../../src/internal/proxyFactories.ts","webpack:///../../src/themeAndMode.ts","webpack:///../../../../src/internal/compute/IsolatedFunctions.ts","webpack:///../../../../src/internal/compute/getGeneralGlobals.ts","webpack:///../../src/StoryboardFunctionRegistry.ts","webpack:///../../../../src/internal/compute/StoryboardFunctions.ts","webpack:///../../../src/internal/mediaQuery.ts","webpack:///../../../../src/internal/compute/getStorageItem.ts","webpack:///../../src/isStrictMode.ts","webpack:///../../src/CustomTemplates.ts","webpack:///../../../src/internal/IsolatedTemplates.ts","webpack:///../../../../src/internal/CustomTemplates/utils.ts","webpack:///../../../../src/internal/compute/WidgetFunctions.ts","webpack:///../../../src/internal/hasInstalledApp.ts","webpack:///../../../../src/internal/FormRenderer/utils.ts","webpack:///../../../../src/internal/data/getProviderBrick.ts","webpack:///../../../../src/internal/compute/markAsComputed.ts","webpack:///../../../../src/internal/data/resolveData.ts","webpack:///../../../../src/internal/compute/evaluate.ts","webpack:///../../../../src/internal/compute/getNextStateOfUseBrick.ts","webpack:///../../../../src/internal/compute/computeRealValue.ts","webpack:///../../../../src/internal/compute/checkIf.ts","webpack:///../../../../src/internal/compute/getTracks.ts","webpack:///../../../../src/internal/compute/computeRealProperties.ts","webpack:///../../../../src/internal/compute/setRealProperties.ts","webpack:///../../../../src/internal/compute/setProperties.ts","webpack:///../../../../src/internal/compute/listenOnTrackingContext.ts","webpack:///../../../src/internal/matchPath.ts","webpack:///../../../src/internal/matchRoutes.ts","webpack:///../../../../src/internal/CustomTemplates/constants.ts","webpack:///../../../src/internal/poll.ts","webpack:///../../../src/internal/i18n.ts","webpack:///../../src/Dialog.ts","webpack:///../../src/setLoginStateCookie.ts","webpack:///../../src/handleHttpError.ts","webpack:///../../src/Notification.ts","webpack:///../../../src/internal/debugManager.ts","webpack:///../../../src/internal/bindListeners.ts","webpack:///../../../src/internal/sse.ts","webpack:///../../../../src/internal/CustomTemplates/bindTemplateProxy.ts","webpack:///../../../src/internal/enums.ts","webpack:///../../../src/internal/mount.ts","webpack:///../../../src/internal/RendererContext.ts","webpack:///../../../src/internal/routeMatchedMap.ts","webpack:///../../../src/internal/legacy_transform.ts","webpack:///../../../src/internal/secret_internals.ts","webpack:///../../../../src/internal/data/realTimeDataInspect.ts","webpack:///../../../../src/internal/data/DataStore.ts","webpack:///../../../../src/internal/data/resolveDataStore.ts","webpack:///../../../../src/internal/CustomTemplates/setupTemplateProxy.ts","webpack:///../../../../src/internal/CustomTemplates/replaceSlotWithSlottedBricks.ts","webpack:///../../../../src/internal/CustomTemplates/setupUseBrickInTemplate.ts","webpack:///../../../../src/internal/CustomTemplates/expandCustomTemplate.ts","webpack:///../../../../src/internal/FormRenderer/constants.ts","webpack:///../../../../src/internal/FormRenderer/expandFormRenderer.ts","webpack:///../../../../src/internal/FormRenderer/getDefaultProperties.ts","webpack:///../../../../src/internal/FormRenderer/registerFormRenderer.ts","webpack:///../../../src/internal/ErrorNode.ts","webpack:///../../../src/internal/Renderer.ts","webpack:///../../../src/internal/setupRootRuntimeContext.ts","webpack:///../../src/getPageInfo.ts","webpack:///../../../src/internal/abortController.ts","webpack:///../../src/setWatermark.ts","webpack:///../../../src/internal/registerCustomTemplates.ts","webpack:///../../src/setUIVersion.ts","webpack:///../../src/isNetworkError.ts","webpack:///../../src/shouldReloadForError.ts","webpack:///../../../src/internal/Router.ts","webpack:///../../src/setAppVariable.ts","webpack:///../../../src/internal/fulfilStoryboard.ts","webpack:///../../../src/internal/insertPreviewRoutes.ts","webpack:///../../../src/internal/injected.ts","webpack:///../../../src/internal/customizeColorTheme.ts","webpack:///../../src/auth.ts","webpack:///../../src/CustomEditors.ts","webpack:///../../src/fetchByProvider.ts","webpack:///../../src/createRoot.ts","webpack:///../../src/getRealValue.ts","webpack:///../../src/ModalStack.ts","webpack:///../../src/loadScriptOrStyle.ts","webpack:///../../src/loadScript.ts","webpack:///../../src/loadStyle.ts","webpack:///../../src/loadSharedModule.ts","webpack:///../../src/stableLoadBricks.ts"],"sourcesContent":["// istanbul ignore file\nimport {\n createRuntime,\n applyTheme,\n setUIVersion,\n unstable_createRoot,\n} from \"@next-core/runtime\";\nimport { http, HttpRequestConfig } from \"@next-core/http\";\nimport { loadBricksImperatively } from \"@next-core/loader\";\nimport type {\n BootstrapData,\n BrickConf,\n BrickPackage,\n ContextConf,\n CustomTemplate,\n MetaI18n,\n StoryboardFunction,\n} from \"@next-core/types\";\nimport { i18n } from \"@next-core/i18n\";\nimport { safeLoad, JSON_SCHEMA } from \"js-yaml\";\nimport \"@next-core/theme\";\nimport type {\n RenderType,\n Sources,\n RenderOptions,\n PreviewWindow,\n} from \"../types.d.ts\";\nimport { get } from \"lodash\";\n// Chrome supports `Element.prototype.replaceChildren` since version 86\nimport \"../../brick-container/src/replaceChildren.js\";\n\ninterface RenderRequest {\n type: RenderType;\n sources: Sources;\n options?: RenderOptions;\n}\n\nhttp.interceptors.request.use((config) => {\n dispatchRequestEventByConfig(\"request.start\", config);\n return config;\n});\n\nhttp.interceptors.response.use(\n function (response, config) {\n dispatchRequestEventByConfig(\"request.end\", config);\n return response;\n },\n function (error, config) {\n dispatchRequestEventByConfig(\"request.end\", config);\n return Promise.reject(error);\n }\n);\n\nfunction dispatchRequestEventByConfig(type: string, config: HttpRequestConfig) {\n if (!config.options?.interceptorParams?.ignoreLoadingBar) {\n window.dispatchEvent(new Event(type));\n }\n}\n\nconst loadingBar = document.querySelector(\"#global-loading-bar\");\nloadingBar.classList.add(\"rendered\");\n\nlet loading = false;\nlet count = 0;\nfunction updateLoadingStatus() {\n const hasRemainingRequests = count > 0;\n if (hasRemainingRequests !== loading) {\n loading = hasRemainingRequests;\n loadingBar.classList[hasRemainingRequests ? \"add\" : \"remove\"](\"loading\");\n }\n}\nconst requestStart = (): void => {\n count++;\n updateLoadingStatus();\n};\nconst requestEnd = (): void => {\n // 兼容 loading bar 在某些请求开始和结束之间初始化时,`count` 可能小于 0 的情况\n if (count > 0) {\n count--;\n updateLoadingStatus();\n }\n};\nwindow.addEventListener(\"request.start\", requestStart);\nwindow.addEventListener(\"request.end\", requestEnd);\n\nconst runtime = createRuntime();\n\nconst container = document.querySelector(\"#preview-root\") as HTMLElement;\nconst portal = document.querySelector(\"#portal-mount-point\") as HTMLElement;\nconst root = unstable_createRoot(container, {\n portal,\n scope: \"page\",\n unknownBricks: \"silent\",\n supportsUseChildren: true,\n});\n\nconst bootstrap = http\n .get<BootstrapData>(window.BOOTSTRAP_FILE, {\n responseType: \"json\",\n })\n .then((data) => {\n runtime.initialize(\n (window.BOOTSTRAP_FILE_FIELD\n ? get(data, window.BOOTSTRAP_FILE_FIELD)\n : data) as BootstrapData\n );\n });\n\nlet rendering = false;\nlet nextRequest: RenderRequest;\n\n(window as PreviewWindow)._preview_only_render = (type, sources, options) => {\n if (rendering) {\n nextRequest = { type, sources, options };\n } else {\n queuedRender({ type, sources, options });\n }\n};\n\n(window as PreviewWindow)._preview_only_inject = async (\n brick,\n pkg,\n options,\n noResolve\n) => {\n await loadBricksImperatively([brick], ([] as BrickPackage[]).concat(pkg));\n if (noResolve) {\n return;\n }\n const element = document.createElement(brick) as HTMLElement & {\n resolve: (options: unknown) => Promise<void>;\n };\n await element.resolve(options);\n};\n\nasync function queuedRender(request: RenderRequest) {\n rendering = true;\n try {\n const { type, sources, options } = request;\n // Assert: `render()` will not throw\n await render(type, sources, options);\n } finally {\n rendering = false;\n if (nextRequest) {\n const req = nextRequest;\n nextRequest = undefined;\n queuedRender(req);\n }\n }\n}\n\nlet initialized = false;\n\nasync function render(\n type: \"html\" | \"yaml\",\n { yaml, html }: Sources,\n {\n theme,\n uiVersion,\n language,\n context,\n functions,\n templates,\n i18n: i18nData,\n url,\n app,\n styleText,\n templatesAreArrayOfYaml,\n }: RenderOptions = {}\n): Promise<void> {\n try {\n if (!initialized) {\n initialized = true;\n document.body.classList.add(\"bootstrap-ready\");\n applyTheme(theme === \"light\" ? theme : \"dark-v2\");\n }\n document.body.classList.remove(\"bootstrap-error\");\n if (type === \"html\") {\n applyTheme(theme === \"light\" ? theme : \"dark-v2\");\n setUIVersion(uiVersion);\n if (language) {\n await i18n.changeLanguage(language);\n }\n // Note: if use DOMParser, script tags will not be executed, while using\n const parser = new DOMParser();\n const dom = parser.parseFromString(html, \"text/html\");\n const bricks = new Set<string>();\n for (const node of dom.body.querySelectorAll(\"*\")) {\n if (node.tagName.includes(\"-\")) {\n const lowerTagName = node.tagName.toLowerCase();\n bricks.add(lowerTagName);\n } else if (node.tagName === \"SCRIPT\") {\n const bricksInScript = (node as HTMLScriptElement).text.matchAll(\n /\\bdocument\\.createElement\\(\\s*\"([a-zA-Z0-9.]+-[-a-zA-Z0-9.]+)\"\\s*\\)/g\n );\n for (const match of bricksInScript) {\n bricks.add(match[1]);\n }\n }\n }\n\n await bootstrap;\n\n await runtime.loadBricks(bricks);\n container.replaceChildren();\n portal.replaceChildren();\n const scripts: HTMLScriptElement[] = [];\n const scriptTags = dom.querySelectorAll(\"script\");\n for (const scriptTag of scriptTags) {\n const newScriptTag = document.createElement(\"script\");\n newScriptTag.text = scriptTag.text;\n newScriptTag.type = \"module\";\n scripts.push(newScriptTag);\n scriptTag.remove();\n }\n container.append(\n ...dom.head.querySelectorAll(\"style\"),\n ...dom.body.childNodes,\n ...scripts\n );\n } else {\n const parsed = yaml\n ? (safeLoad(yaml, { schema: JSON_SCHEMA, json: true }) as\n | BrickConf\n | BrickConf[])\n : null;\n const bricks = [].concat(parsed ?? []);\n if (styleText) {\n bricks.push({\n brick: \"style\",\n portal: true,\n properties: {\n textContent: styleText,\n },\n });\n }\n\n const parsedContext = loadYaml(context) as ContextConf[];\n const parsedFunctions = loadYaml(functions) as StoryboardFunction[];\n const parsedTemplates = loadYaml(\n templates,\n templatesAreArrayOfYaml\n ) as CustomTemplate[];\n const parsedI18n = loadYaml(i18nData) as MetaI18n;\n\n await bootstrap;\n await root.render(bricks, {\n theme: theme === \"light\" ? theme : \"dark-v2\",\n uiVersion,\n language,\n context: parsedContext,\n functions: parsedFunctions,\n templates: parsedTemplates,\n i18n: parsedI18n,\n url,\n app,\n });\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"Render failed:\", e);\n\n // `.bootstrap-error` makes loading-bar invisible.\n document.body.classList.add(\"bootstrap-error\");\n\n portal.textContent = \"\";\n container.textContent = `Render failed: ${String(e)}`;\n }\n}\n\ninterface YamlTemplate {\n name: string;\n yaml: string;\n}\n\nfunction loadYaml(content: unknown, templatesAreArrayOfYaml?: boolean) {\n return typeof content === \"string\"\n ? safeLoad(content, { schema: JSON_SCHEMA, json: true })\n : templatesAreArrayOfYaml\n ? (content as YamlTemplate[]).map((item) =>\n typeof item.yaml === \"string\"\n ? {\n ...(safeLoad(item.yaml, {\n schema: JSON_SCHEMA,\n json: true,\n }) as CustomTemplate),\n name: item.name,\n }\n : item\n )\n : content;\n}\n","export const fetch = (\n input: RequestInfo,\n init?: RequestInit\n): Promise<Response> => {\n // Support older browsers which default credentials is \"omit\".\n // Ref https://github.com/whatwg/fetch/pull/585\n const req = new Request(\n input,\n Object.assign<RequestInit, RequestInit | undefined>(\n {\n credentials: \"same-origin\",\n },\n init\n )\n );\n\n return self.fetch(req);\n};\n","export class HttpFetchError extends Error {\n constructor(message: string) {\n // Pass remaining arguments (including vendor specific ones) to parent constructor\n super(message);\n\n this.name = \"HttpFetchError\";\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, HttpFetchError);\n }\n }\n}\n\nexport class HttpResponseError extends Error {\n response: Response;\n responseJson: any;\n\n constructor(response: Response, responseJson?: any) {\n // Pass remaining arguments (including vendor specific ones) to parent constructor\n super(response.statusText);\n\n this.name = \"HttpResponseError\";\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, HttpResponseError);\n }\n\n this.response = response;\n this.responseJson = responseJson;\n }\n}\n\nexport class HttpParseError extends Error {\n response: Response;\n\n constructor(response: Response) {\n // Pass remaining arguments (including vendor specific ones) to parent constructor\n super(response.statusText);\n\n this.name = \"HttpParseError\";\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, HttpParseError);\n }\n\n this.response = response;\n }\n}\n\nexport class HttpAbortError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"HttpAbortError\";\n }\n}\n","import type { HttpError } from \"./http.js\";\n\nexport interface InterceptorHandlers<T, C = never> {\n fulfilled?: (value: T, config: C) => T | Promise<T>;\n rejected?: (error: HttpError, config: C) => HttpError | Promise<HttpError>;\n}\n\nexport default class InterceptorManager<T, C = never> {\n handlers: (InterceptorHandlers<T, C> | null)[] = [];\n\n use(\n onFulfilled?: (value: T, config: C) => T | Promise<T>,\n onRejected?: (error: HttpError, config: C) => HttpError | Promise<HttpError>\n ): number {\n this.handlers.push({\n fulfilled: onFulfilled,\n rejected: onRejected,\n });\n\n return this.handlers.length - 1;\n }\n\n eject(id: number): void {\n // istanbul ignore else\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n forEach(fn: (h: InterceptorHandlers<T, C>) => void): void {\n this.handlers.forEach((handler) => {\n // istanbul ignore else\n if (handler !== null) {\n fn(handler);\n }\n });\n }\n}\n","import { fetch } from \"./fetch.js\";\nimport {\n HttpAbortError,\n HttpFetchError,\n HttpParseError,\n HttpResponseError,\n} from \"./errors.js\";\nimport InterceptorManager from \"./InterceptorManager.js\";\n\nexport interface HttpRequestConfig {\n url: string;\n method: string;\n data?: unknown;\n options?: HttpOptions;\n [key: symbol]: unknown;\n}\n\nexport interface HttpResponse<T = unknown> {\n data: T;\n status: number;\n statusText: string;\n headers: Headers;\n}\n\nexport type HttpError =\n | HttpFetchError\n | HttpResponseError\n | HttpParseError\n | HttpAbortError;\n\nexport interface HttpAdapter {\n (config: HttpRequestConfig): Promise<HttpResponse<unknown>>;\n}\n\nexport interface HttpConstructorOptions {\n adapter?: HttpAdapter;\n}\n\nfunction isNil(value: unknown): value is null | undefined {\n return value === undefined || value === null;\n}\n\nconst base = document.querySelector(\"base\");\nconst fullBaseHref = base ? base.href : location.origin + \"/\";\n\nexport type HttpParams = URLSearchParams | object;\n\nexport interface RequestCustomOptions {\n observe?: \"data\" | \"response\";\n responseType?: \"json\" | \"blob\" | \"arrayBuffer\" | \"text\";\n interceptorParams?: {\n ignoreLoadingBar?: boolean;\n };\n noAbortOnRouteChange?: boolean;\n useCache?: boolean;\n}\n\nexport type HttpCustomOptions = RequestCustomOptions & {\n params?: HttpParams;\n};\n\nexport type HttpOptions = HttpCustomOptions & RequestInit;\n\n/**\n * Detect whether the input is a native browser abort error.\n *\n * @ref https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n */\nexport const isHttpAbortError = (error: any) =>\n error instanceof DOMException && error.code === 20;\n\nconst request = async <T>(\n url: string,\n init: RequestInit,\n config: HttpRequestConfig\n): Promise<HttpResponse<T>> => {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n let response: Response;\n config.url = url;\n\n let { responseType } = config.options || {};\n\n if (!responseType) {\n // Defaults to `json`\n responseType = \"json\";\n }\n\n try {\n response = await fetch(url, init);\n } catch (e: any) {\n reject(\n isHttpAbortError(e)\n ? new HttpAbortError(e.toString())\n : new HttpFetchError(e.toString())\n );\n return;\n }\n\n if (!response.ok) {\n let responseJson;\n try {\n responseJson = await response.json();\n } catch {\n // Do nothing.\n }\n reject(new HttpResponseError(response, responseJson));\n return;\n }\n\n let data: T;\n try {\n data = await response[responseType]();\n } catch (e: any) {\n reject(\n isHttpAbortError(e)\n ? new HttpAbortError(e.toString())\n : new HttpParseError(response)\n );\n return;\n }\n\n const res: HttpResponse<T> = {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n data,\n };\n\n resolve(res);\n });\n};\n\nexport const getUrlWithParams = (url: string, params?: HttpParams): string => {\n if (params) {\n const parsedUrl = new URL(url, fullBaseHref);\n if (params instanceof URLSearchParams) {\n params.forEach(function (value, key) {\n parsedUrl.searchParams.append(key, value);\n });\n } else {\n Object.entries(params).forEach(([key, value]) => {\n if (Array.isArray(value)) {\n value.forEach((v) => {\n parsedUrl.searchParams.append(key, isNil(v) ? \"\" : v);\n });\n } else {\n parsedUrl.searchParams.append(key, isNil(value) ? \"\" : value);\n }\n });\n }\n const { href } = parsedUrl;\n if (href.startsWith(fullBaseHref)) {\n return href.substr(fullBaseHref.length);\n }\n return href;\n }\n return url;\n};\n\nconst getBodyAndHeaders = (\n data: unknown,\n headers?: HeadersInit\n): { body?: BodyInit; headers?: HeadersInit } => {\n if (data !== undefined) {\n // `new Headers(undefined)` will throw a TypeError in older browsers (chrome 58).\n // https://bugs.chromium.org/p/chromium/issues/detail?id=335871\n const parsedHeaders = new Headers(headers || {});\n const contentTypeHeader = \"Content-Type\";\n let body = data as BodyInit | undefined;\n // If `Content-Type` already provided, ignore detecting content type.\n if (!parsedHeaders.has(contentTypeHeader)) {\n if (typeof data === \"string\") {\n parsedHeaders.set(\n contentTypeHeader,\n \"application/x-www-form-urlencoded\"\n );\n } else if (data instanceof FormData) {\n // Do nothing\n } else {\n parsedHeaders.set(contentTypeHeader, \"application/json\");\n body = JSON.stringify(data);\n }\n }\n return {\n body,\n headers: parsedHeaders,\n };\n }\n return { headers };\n};\n\nconst simpleRequest = <T = unknown>(\n method: string,\n url: string,\n config: HttpRequestConfig\n): Promise<HttpResponse<T>> => {\n const {\n params,\n responseType,\n interceptorParams,\n observe,\n noAbortOnRouteChange,\n useCache,\n ...requestInit\n } = config.options || {};\n return request<T>(\n getUrlWithParams(url, params),\n {\n ...requestInit,\n method,\n },\n config\n );\n};\n\nconst requestWithBody = <T = unknown>(\n method: string,\n url: string,\n data: unknown,\n config: HttpRequestConfig\n): Promise<HttpResponse<T>> => {\n const {\n params,\n headers,\n responseType,\n interceptorParams,\n observe,\n noAbortOnRouteChange,\n useCache,\n ...requestInit\n } = config.options || {};\n return request<T>(\n getUrlWithParams(url, params),\n {\n ...requestInit,\n method,\n ...getBodyAndHeaders(data, headers),\n },\n config\n );\n};\n\nconst defaultAdapter: HttpAdapter = <T>(config: HttpRequestConfig) => {\n const { url, method, data } = config;\n\n // \"DELETE\", \"GET\", \"HEAD\" methods.\n if ([\"DELETE\", \"GET\", \"HEAD\"].includes(config.method)) {\n return simpleRequest<T>(method, url, config);\n }\n\n // \"POST\", \"PUT\" , \"PATCH\" methods.\n return requestWithBody<T>(method, url, data, config);\n};\n\nclass Http {\n public readonly interceptors: {\n request: InterceptorManager<HttpRequestConfig>;\n response: InterceptorManager<HttpResponse, HttpRequestConfig>;\n };\n\n #adapter: HttpAdapter = defaultAdapter;\n\n constructor(config?: HttpConstructorOptions) {\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager(),\n };\n\n if (config?.adapter) {\n this.#adapter = config.adapter;\n }\n }\n\n request = async <T = unknown>(\n url: string,\n init?: RequestInit,\n options?: RequestCustomOptions\n ): Promise<T> => {\n const { body, method, ...requestInit } = init || {};\n return this.#fetch<T>({\n url,\n data: body,\n method: method || \"GET\",\n options: { ...(options || {}), ...requestInit },\n });\n };\n\n simpleRequest = <T = unknown>(\n method: string,\n url: string,\n options: HttpOptions = {}\n ): Promise<T> => {\n return this.#fetch<T>({ url, method, options });\n };\n\n requestWithBody = <T = unknown>(\n method: string,\n url: string,\n data?: unknown,\n options: HttpOptions = {}\n ): Promise<T> => {\n return this.#fetch<T>({ url, method, data, options });\n };\n\n #fetch<T>(config: HttpRequestConfig): Promise<T> {\n const chain: any[] = [];\n let promise: Promise<any> = Promise.resolve(config);\n\n this.interceptors.request.forEach((interceptor) => {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n chain.push((config: HttpRequestConfig) => this.#adapter(config), undefined);\n\n this.interceptors.response.forEach((interceptor) => {\n chain.push(\n (res: HttpResponse) => interceptor.fulfilled?.(res, config),\n (error: HttpError) => interceptor.rejected?.(error, config)\n );\n });\n\n chain.push((response: HttpResponse) => {\n return config.options?.observe === \"response\" ? response : response.data;\n }, undefined);\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n }\n\n getUrlWithParams(url: string, params?: HttpParams): string {\n return getUrlWithParams(url, params);\n }\n\n getBodyAndHeaders(\n data: unknown,\n headers?: HeadersInit\n ): { body?: BodyInit; headers?: HeadersInit } {\n return getBodyAndHeaders(data, headers);\n }\n\n get<T>(url: string, options?: HttpOptions): Promise<T> {\n return this.#fetch({ url, method: \"GET\", options });\n }\n\n delete<T>(url: string, options?: HttpOptions): Promise<T> {\n return this.#fetch({ url, method: \"DELETE\", options });\n }\n\n head<T>(url: string, options?: HttpOptions): Promise<T> {\n return this.#fetch({ url, method: \"HEAD\", options });\n }\n\n post<T>(url: string, data?: unknown, options?: HttpOptions): Promise<T> {\n return this.#fetch({ url, method: \"POST\", data, options });\n }\n\n put<T>(url: string, data?: unknown, options?: HttpOptions): Promise<T> {\n return this.#fetch({ url, method: \"PUT\", data, options });\n }\n\n patch<T>(url: string, data?: unknown, options?: HttpOptions): Promise<T> {\n return this.#fetch({\n url,\n method: \"PATCH\",\n data,\n options,\n });\n }\n}\n\nlet http = new Http();\nfunction createHttpInstance(config?: HttpConstructorOptions): void {\n http = new Http(config);\n}\nexport { http, createHttpInstance, defaultAdapter };\n","// istanbul ignore file\n// Make v3 bricks compatible with Brick Next v2.\nimport * as HttpModuleV3 from \"./exports.js\";\n\nexport type * from \"./exports.js\";\n\ninterface DLL {\n (moduleId: \"JxWY\"): typeof HttpModuleV3;\n}\n\nlet HttpModule: typeof HttpModuleV3;\nlet HttpModuleV2: typeof HttpModuleV3;\n\nconst { dll } = window as { dll?: DLL };\nif (\n dll &&\n window.BRICK_NEXT_VERSIONS?.[\"brick-container\"]?.startsWith(\"2.\") &&\n (HttpModuleV2 = dll(\"JxWY\"))\n) {\n HttpModule = HttpModuleV2;\n} else {\n HttpModule = HttpModuleV3;\n}\n\nconst {\n fetch,\n HttpFetchError,\n HttpResponseError,\n HttpParseError,\n HttpAbortError,\n http,\n isHttpAbortError,\n createHttpInstance,\n defaultAdapter,\n} = HttpModule;\n\nexport {\n fetch,\n HttpFetchError,\n HttpResponseError,\n HttpParseError,\n HttpAbortError,\n http,\n isHttpAbortError,\n createHttpInstance,\n defaultAdapter,\n};\n","import type { Identifier } from \"@babel/types\";\nimport type { EstreeParent } from \"@next-core/cook\";\n\nexport interface MemberUsage {\n usedProperties: Set<string>;\n hasNonStaticUsage: boolean;\n}\n\nexport type BeforeVisitGlobal = (\n node: Identifier,\n parent: EstreeParent\n) => void;\n\nexport function beforeVisitGlobalMember(\n usage: MemberUsage,\n objectName: string | string[],\n level: 1 | 2 = 1,\n rememberObjectName = false\n): BeforeVisitGlobal {\n return function beforeVisitGlobal(node, parent): void {\n if (\n typeof objectName === \"string\"\n ? node.name === objectName\n : objectName.includes(node.name)\n ) {\n const segments: string[] = [];\n for (let i = 1; i <= level; i++) {\n const memberParent = parent[parent.length - i];\n if (\n memberParent?.node.type === \"MemberExpression\" &&\n memberParent.key === \"object\"\n ) {\n const memberNode = memberParent.node;\n if (\n !memberNode.computed &&\n memberNode.property.type === \"Identifier\"\n ) {\n segments.push(\n rememberObjectName\n ? `${node.name}.${memberNode.property.name}`\n : memberNode.property.name\n );\n } else if (\n memberNode.computed &&\n (memberNode.property as any).type === \"Literal\" &&\n typeof (memberNode.property as any).value === \"string\"\n ) {\n segments.push(\n rememberObjectName\n ? `${node.name}.${(memberNode.property as any).value}`\n : (memberNode.property as any).value\n );\n } else {\n usage.hasNonStaticUsage = true;\n }\n } else {\n usage.hasNonStaticUsage = true;\n }\n }\n if (segments.length === level) {\n usage.usedProperties.add(segments.join(\".\"));\n }\n }\n };\n}\n","import type { Identifier } from \"@babel/types\";\nimport type { EstreeLiteral, EstreeParent } from \"@next-core/cook\";\n\nexport interface MemberCallUsage {\n usedArgs: Set<string>;\n hasNonStaticUsage?: boolean;\n}\n\nfunction collectMemberCallUsageFactory(object: string, property: string) {\n return function collectMemberCallUsage(\n usage: MemberCallUsage,\n node: Identifier,\n parent: EstreeParent\n ) {\n if (node.name === object) {\n const memberParent = parent[parent.length - 1];\n const callParent = parent[parent.length - 2];\n if (\n callParent?.node.type === \"CallExpression\" &&\n callParent?.key === \"callee\" &&\n memberParent?.node.type === \"MemberExpression\" &&\n memberParent.key === \"object\" &&\n (memberParent.node.computed\n ? (memberParent.node.property as any).type === \"Literal\" &&\n (memberParent.node.property as any).value === property\n : memberParent.node.property.type === \"Identifier\" &&\n memberParent.node.property.name === property)\n ) {\n const args = callParent.node.arguments as unknown as EstreeLiteral[];\n if (args.length > 0) {\n const firstArg = args[0];\n if (\n firstArg.type === \"Literal\" &&\n typeof firstArg.value === \"string\"\n ) {\n usage.usedArgs.add(firstArg.value);\n } else {\n usage.hasNonStaticUsage = true;\n }\n }\n }\n }\n };\n}\n\nexport const collectAppGetMenuUsage = collectMemberCallUsageFactory(\n \"APP\",\n \"getMenu\"\n);\n\nexport const collectInstalledAppsHasUsage = collectMemberCallUsageFactory(\n \"INSTALLED_APPS\",\n \"has\"\n);\n","import { Identifier } from \"@babel/types\";\nimport { isEvaluable, preevaluate, type EstreeParent } from \"@next-core/cook\";\nimport { isObject } from \"@next-core/utils/general\";\n\nexport interface TraverseStoryboardExpressionsOptions {\n matchExpressionString: (v: string) => boolean;\n visitNotMatchedExpressionString?: (v: string) => unknown;\n visitNonExpressionString?: (v: string) => unknown;\n visitObject?: (v: unknown[] | Record<string, unknown>) => unknown;\n}\n\nexport type BeforeVisitGlobalWithExpr = (\n node: Identifier,\n parent: EstreeParent,\n expr: string\n) => void;\n\nexport function traverseStoryboardExpressions(\n data: unknown,\n beforeVisitGlobal: BeforeVisitGlobalWithExpr,\n // If `options` is a string, it means the *keyword*.\n options: string | TraverseStoryboardExpressionsOptions\n): void {\n const memo = new WeakSet();\n const {\n matchExpressionString,\n visitNotMatchedExpressionString,\n visitNonExpressionString,\n visitObject,\n } =\n typeof options === \"string\"\n ? ({\n matchExpressionString: (v: string) => v.includes(options),\n } as TraverseStoryboardExpressionsOptions)\n : options;\n function traverse(value: unknown): void {\n if (typeof value === \"string\") {\n if (isEvaluable(value)) {\n if (matchExpressionString(value)) {\n try {\n preevaluate(value, {\n cache: true,\n withParent: true,\n hooks: {\n beforeVisitGlobal(node, parent) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n beforeVisitGlobal(node, parent!, value);\n },\n },\n });\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Parse storyboard expression failed:\", error);\n }\n } else {\n visitNotMatchedExpressionString?.(value);\n }\n } else {\n visitNonExpressionString?.(value);\n }\n } else if (isObject(value)) {\n // Avoid call stack overflow.\n if (memo.has(value)) {\n return;\n }\n memo.add(value);\n visitObject?.(value);\n for (const item of Array.isArray(value) ? value : Object.values(value)) {\n traverse(item);\n }\n }\n }\n traverse(data);\n}\n","import {\n MemberUsage,\n beforeVisitGlobalMember,\n} from \"./beforeVisitGlobalMember.js\";\nimport { traverseStoryboardExpressions } from \"./traverse.js\";\n\nexport interface MemberUsageInExpressions extends MemberUsage {\n nonStaticUsage?: string;\n}\n\nexport function strictCollectMemberUsage(\n data: unknown,\n objectName: string,\n level: 1 | 2 = 1\n): Set<string> {\n const { hasNonStaticUsage, nonStaticUsage, usedProperties } =\n collectMemberUsage(data, objectName, level);\n if (hasNonStaticUsage) {\n throw new Error(\n `Non-static usage of ${objectName} is prohibited, check your expression: \"${nonStaticUsage}\"`\n );\n }\n return usedProperties;\n}\n\nexport function collectMemberUsage(\n data: unknown,\n objectName: string,\n level: 1 | 2 = 1\n): MemberUsageInExpressions {\n const usage: MemberUsageInExpressions = {\n usedProperties: new Set(),\n hasNonStaticUsage: false,\n };\n const beforeVisitGlobal = beforeVisitGlobalMember(usage, objectName, level);\n traverseStoryboardExpressions(\n data,\n (node, parent, expr) => {\n beforeVisitGlobal(node, parent);\n if (usage.hasNonStaticUsage) {\n usage.nonStaticUsage = expr;\n }\n },\n objectName\n );\n return usage;\n}\n","import { preevaluate } from \"@next-core/cook\";\nimport {\n MemberUsage,\n beforeVisitGlobalMember,\n} from \"./beforeVisitGlobalMember.js\";\n\ninterface trackAllResult {\n context: string[] | false;\n state: string[] | false;\n formState: string[] | false;\n}\n\nconst TRACK_NAMES = [\"CTX\", \"STATE\", \"FORM_STATE\"];\n\nexport function track(\n raw: string,\n trackText: string,\n variableName: string\n): Set<string> | false {\n if (raw.includes(trackText)) {\n const usage: MemberUsage = {\n usedProperties: new Set(),\n hasNonStaticUsage: false,\n };\n const { expression } = preevaluate(raw, {\n cache: true,\n withParent: true,\n hooks: {\n beforeVisitGlobal: beforeVisitGlobalMember(usage, variableName),\n },\n });\n let trackCtxExp: any;\n if (\n expression.type === \"SequenceExpression\" &&\n (trackCtxExp = expression.expressions[0] as unknown) &&\n trackCtxExp.type === \"Literal\" &&\n trackCtxExp.value === trackText\n ) {\n if (usage.usedProperties.size > 0) {\n return usage.usedProperties;\n } else {\n // eslint-disable-next-line no-console\n console.warn(\n `You are using \"${trackText}\" but no \\`${variableName}\\` usage found in your expression: ${JSON.stringify(\n raw\n )}`\n );\n }\n }\n }\n return false;\n}\n\nexport function trackAll(raw: string): trackAllResult | false {\n // Do not pre-evaluate a string if it doesn't include track names.\n if (TRACK_NAMES.some((name) => raw.includes(name))) {\n const usage: MemberUsage = {\n usedProperties: new Set(),\n hasNonStaticUsage: false,\n };\n preevaluate(raw, {\n cache: true,\n withParent: true,\n hooks: {\n beforeVisitGlobal: beforeVisitGlobalMember(usage, TRACK_NAMES, 1, true),\n },\n });\n if (usage.usedProperties.size > 0) {\n const usedProperties = [...usage.usedProperties];\n const result: trackAllResult = {\n context: false,\n state: false,\n formState: false,\n };\n const keyMap: Record<string, keyof trackAllResult> = {\n CTX: \"context\",\n STATE: \"state\",\n FORM_STATE: \"formState\",\n };\n usedProperties.forEach((item) => {\n const [key, name] = item.split(\".\");\n if (!result[keyMap[key]]) {\n result[keyMap[key]] = [];\n }\n (result[keyMap[key]] as string[]).push(name);\n });\n return result;\n } else {\n // eslint-disable-next-line no-console\n console.warn(\n `You are using track all but no \"CTX\" or \"STATE\" or \"FORM_STATE\" usage found in your expression: ${JSON.stringify(\n raw\n )}`\n );\n }\n }\n return false;\n}\n","import type { StoryboardFunction } from \"@next-core/types\";\nimport { precookFunction } from \"@next-core/cook\";\nimport { BeforeVisitGlobal } from \"../index.js\";\n\nexport interface TraverseStoryboardFunctionsOptions {\n matchSource?: (source: string) => boolean;\n}\n\nexport function traverseStoryboardFunctions(\n functions: StoryboardFunction[] | null | undefined,\n beforeVisitGlobal: BeforeVisitGlobal,\n options?: TraverseStoryboardFunctionsOptions\n): void {\n if (Array.isArray(functions)) {\n for (const fn of functions) {\n if (!options?.matchSource || options.matchSource(fn.source)) {\n traverseStoryboardFunction(fn, beforeVisitGlobal);\n }\n }\n }\n}\n\nexport function traverseStoryboardFunction(\n fn: StoryboardFunction,\n beforeVisitGlobal: BeforeVisitGlobal,\n silentErrors?: boolean\n): void {\n try {\n precookFunction(fn.source, {\n typescript: fn.typescript,\n withParent: true,\n hooks: { beforeVisitGlobal },\n cacheKey: fn,\n });\n } catch (error) {\n if (!silentErrors) {\n // eslint-disable-next-line no-console\n console.error(`Parse storyboard function \"${fn.name}\" failed:`, error);\n }\n }\n}\n","import type { StoryboardFunction } from \"@next-core/types\";\nimport {\n MemberUsage,\n beforeVisitGlobalMember,\n} from \"../expressions/beforeVisitGlobalMember.js\";\nimport { traverseStoryboardFunction } from \"./traverse.js\";\n\nexport function collectMemberUsageInFunction(\n fn: StoryboardFunction,\n objectName: string,\n silentErrors?: boolean,\n level: 1 | 2 = 1\n): Set<string> {\n const usage: MemberUsage = {\n usedProperties: new Set(),\n hasNonStaticUsage: false,\n };\n\n if (fn.source.includes(objectName)) {\n traverseStoryboardFunction(\n fn,\n beforeVisitGlobalMember(usage, objectName, level),\n silentErrors\n );\n }\n\n if (usage.hasNonStaticUsage && !silentErrors) {\n throw new Error(\n `Non-static usage of ${objectName} is prohibited, check your function: \"${fn.name}\"`\n );\n }\n\n usage.usedProperties.delete(fn.name);\n\n return usage.usedProperties;\n}\n","import type { Storyboard } from \"@next-core/types\";\nimport type { EstreeLiteral } from \"@next-core/cook\";\nimport {\n traverseStoryboardExpressions,\n BeforeVisitGlobal,\n} from \"./expressions/index.js\";\nimport { traverseStoryboardFunctions } from \"./functions/index.js\";\n\nconst PERMISSIONS = \"PERMISSIONS\";\nconst check = \"check\";\n\nexport function scanPermissionActionsInStoryboard(\n storyboard: Storyboard\n): string[] {\n const collection = new Set<string>();\n const beforeVisitPermissions = beforeVisitPermissionsFactory(collection);\n const { customTemplates, functions } = storyboard.meta ?? {};\n traverseStoryboardExpressions(\n [storyboard.routes, customTemplates],\n beforeVisitPermissions,\n PERMISSIONS\n );\n traverseStoryboardFunctions(functions, beforeVisitPermissions, {\n matchSource(source) {\n return source.includes(PERMISSIONS);\n },\n });\n return Array.from(collection);\n}\n\nexport function scanPermissionActionsInAny(data: unknown): string[] {\n const collection = new Set<string>();\n traverseStoryboardExpressions(\n data,\n beforeVisitPermissionsFactory(collection),\n PERMISSIONS\n );\n return Array.from(collection);\n}\n\nfunction beforeVisitPermissionsFactory(\n collection: Set<string>\n): BeforeVisitGlobal {\n return function beforeVisitPermissions(node, parent): void {\n if (node.name === PERMISSIONS) {\n const memberParent = parent[parent.length - 1];\n const callParent = parent[parent.length - 2];\n if (\n callParent?.node.type === \"CallExpression\" &&\n callParent?.key === \"callee\" &&\n memberParent?.node.type === \"MemberExpression\" &&\n memberParent.key === \"object\" &&\n (memberParent.node.computed\n ? (memberParent.node.property as any).type === \"Literal\" &&\n (memberParent.node.property as any).value === check\n : memberParent.node.property.type === \"Identifier\" &&\n memberParent.node.property.name === check)\n ) {\n for (const arg of callParent.node\n .arguments as unknown as EstreeLiteral[]) {\n if (arg.type === \"Literal\" && typeof arg.value === \"string\") {\n collection.add(arg.value);\n }\n }\n }\n }\n };\n}\n","import type { BrickConf, SlotConfOfBricks } from \"@next-core/types\";\nimport { isObject } from \"@next-core/utils/general\";\nimport lodash from \"lodash\";\n\nconst { pull } = lodash;\n\nconst USE_CHILDREN_SLOT_REGEXP = /^\\[\\w+\\]$/;\n\n/**\n * Replace `useChildren: \"[xxx]\"` with `useBrick`.\n *\n * This will mutate the input.\n */\nexport function replaceUseChildren(input: BrickConf | BrickConf[]) {\n if (Array.isArray(input)) {\n for (const brick of input) {\n replaceInBrick(brick);\n }\n } else {\n replaceInBrick(input);\n }\n}\n\nfunction replaceInBrick(brick: BrickConf) {\n let slots = brick.slots;\n const useChildrenMap = new Map<string, BrickConf[]>();\n if (Array.isArray(brick.children) && !slots) {\n const removeBricks: BrickConf[] = [];\n for (const child of brick.children as BrickConf[]) {\n const slot = child.slot ?? \"\";\n if (USE_CHILDREN_SLOT_REGEXP.test(slot)) {\n delete child.slot;\n const children = useChildrenMap.get(slot);\n if (children) {\n children.push(child);\n } else {\n useChildrenMap.set(slot, [child]);\n }\n removeBricks.push(child);\n }\n replaceInBrick(child);\n }\n pull(brick.children, ...removeBricks);\n } else {\n slots ??= {};\n for (const [slot, slotConf] of Object.entries(slots)) {\n if (USE_CHILDREN_SLOT_REGEXP.test(slot)) {\n const { bricks: children } = slotConf as SlotConfOfBricks;\n if (Array.isArray(children) && children.length > 0) {\n useChildrenMap.set(slot, children);\n replaceUseChildren(children);\n }\n delete slots[slot];\n }\n\n if (Array.isArray((slotConf as SlotConfOfBricks).bricks)) {\n replaceUseChildren((slotConf as SlotConfOfBricks).bricks);\n }\n }\n }\n\n if (useChildrenMap.size > 0) {\n replaceInProperties(brick.properties, useChildrenMap);\n }\n}\n\nfunction replaceInProperties(\n value: unknown,\n useChildrenMap: Map<string, BrickConf[]>\n) {\n if (Array.isArray(value)) {\n for (const item of value) {\n replaceInProperties(item, useChildrenMap);\n }\n } else if (isObject(value)) {\n for (const [k, v] of Object.entries(value)) {\n if (k === \"useChildren\") {\n const children = useChildrenMap.get(v as string);\n if (children) {\n delete value[k];\n value.useBrick = children.length === 1 ? children[0] : children;\n }\n } else {\n replaceInProperties(v, useChildrenMap);\n }\n }\n }\n}\n","import fileSaver from \"file-saver\";\n\ninterface ProviderElement<T extends unknown[], U> extends HTMLElement {\n resolve(...args: T): U;\n saveAs(filename: string, ...args: T): Promise<void>;\n}\n\ninterface ProviderConstructor<T extends unknown[], U> {\n new (): ProviderElement<T, U>;\n}\n\nexport function createProviderClass<T extends unknown[], U>(\n api: (...args: T) => U\n): ProviderConstructor<T, U> {\n return class extends HTMLElement {\n get $$typeof(): string {\n return \"provider\";\n }\n\n resolve(...args: T): U {\n return api(...args);\n }\n\n async saveAs(filename: string, ...args: T): Promise<void> {\n const blob = await api(...args);\n fileSaver.saveAs(blob as unknown as Blob, filename);\n }\n };\n}\n","import { fetchEventSource } from \"@microsoft/fetch-event-source\";\n\ntype MessageIteratorResult<T> = IteratorResult<T, undefined>;\ntype ResolveIteratorResult<T> = (result: MessageIteratorResult<T>) => void;\ntype RejectIteratorResult = (reason: unknown) => void;\ntype PullQueueItem<T> = [\n resolve: ResolveIteratorResult<T>,\n reject: RejectIteratorResult,\n];\ntype PushQueueItem<T> =\n | {\n ok: true;\n data: MessageIteratorResult<T>;\n }\n | {\n ok: false;\n reason: unknown;\n };\n\nexport interface Options<T> extends RequestInit {\n /**\n * 请求头。\n *\n * 注意不同于原生 `fetch` 的 `headers` 参数,这里仅支持字符串键值对。\n */\n headers?: Record<string, string>;\n\n /**\n * 将消息数据转换为迭代器结果。\n *\n * 默认实现将消息数据解析为 JSON 对象,特例:消息为 \"[DONE]\" 时表示结束。\n *\n * @param data 消息数据\n * @param event 事件\n * @returns 迭代器结果\n */\n converter?: (data: string, event: string) => MessageIteratorResult<T>;\n}\n\n/**\n * 将 SSE 事件流转换为异步迭代器。\n */\nexport async function createSSEStream<T = unknown>(\n url: string,\n options?: Options<T>\n): Promise<AsyncIterableIterator<T>> {\n // Reference https://github.com/withspectrum/callback-to-async-iterator/blob/master/src/index.js\n const pushQueue: PushQueueItem<T>[] = [];\n const pullQueue: PullQueueItem<T>[] = [];\n let disposed = false;\n let closed = false;\n\n const { converter, ...fetchOptions } = options ?? {};\n\n await new Promise<null>((resolve, reject) => {\n fetchEventSource(url, {\n ...fetchOptions,\n openWhenHidden: true,\n async onopen(response) {\n if (response.ok) {\n resolve(null);\n } else {\n // eslint-disable-next-line no-console\n console.error(\"open error\", response.statusText);\n let text: string;\n try {\n text = await response.text();\n } catch {\n throw new Error(response.statusText);\n }\n\n let json: any;\n try {\n json = JSON.parse(text);\n } catch {\n // Do nothing\n }\n\n if (typeof json?.error === \"string\") {\n throw new Error(json.error);\n }\n throw new Error(text);\n }\n },\n onmessage(msg) {\n // istanbul ignore next\n if (process.env.NODE_ENV === \"development\") {\n // eslint-disable-next-line no-console\n console.debug(\"[EventSource]\", msg);\n }\n let data: MessageIteratorResult<T> | undefined;\n let reason: unknown;\n let ok = true;\n try {\n data = (converter ?? defaultConverter<T>)(msg.data, msg.event);\n } catch (e) {\n ok = false;\n reason = e;\n }\n if (pullQueue.length > 0) {\n const [resolve, reject] = pullQueue.shift()!;\n ok ? resolve(data!) : reject(reason);\n } else {\n pushQueue.push(\n ok ? { ok: true, data: data! } : { ok: false, reason }\n );\n }\n },\n onclose() {\n closed = true;\n earlyDone();\n },\n onerror(err) {\n throw err;\n },\n }).catch((reason) => {\n reject(reason);\n bailout(reason);\n });\n });\n\n function bailout(reason: unknown) {\n pullQueue.forEach(([_resolve, reject]) => reject(reason));\n dispose();\n }\n\n function earlyDone() {\n pullQueue.forEach(([resolve]) => resolve({ value: undefined, done: true }));\n }\n\n function dispose() {\n disposed = true;\n pullQueue.length = 0;\n pushQueue.length = 0;\n }\n\n return {\n next() {\n return disposed\n ? this.return!()\n : new Promise<MessageIteratorResult<T>>((resolve, reject) => {\n if (pushQueue.length > 0) {\n const result = pushQueue.shift()!;\n if (result.ok) {\n resolve(result.data);\n } else {\n reject(result.reason);\n }\n } else if (closed) {\n dispose();\n resolve({ value: undefined, done: true });\n } else {\n pullQueue.push([resolve, reject]);\n }\n });\n },\n return() {\n earlyDone();\n dispose();\n return Promise.resolve({ value: undefined, done: true });\n },\n throw(error) {\n earlyDone();\n dispose();\n return Promise.reject(error);\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n } as AsyncIterableIterator<T>;\n}\n\nfunction defaultConverter<T>(\n data: string,\n event: string\n): MessageIteratorResult<T> {\n if (event === \"error\") {\n // eslint-disable-next-line no-console\n console.error(\"Received error event:\", data);\n let value: undefined | { error?: string };\n try {\n value = JSON.parse(data);\n } catch {\n // Ignore\n }\n throw new Error(typeof value?.error === \"string\" ? value.error : data);\n }\n\n // By default, `data: [DONE]` indicates the end of the stream\n if (data === \"[DONE]\") {\n return {\n value: undefined,\n done: true,\n };\n }\n\n if (data.startsWith(\"[ERROR]\")) {\n // eslint-disable-next-line no-console\n console.error(\"Received error message:\", data);\n throw new Error(data);\n }\n\n try {\n const value = JSON.parse(data);\n return {\n value,\n done: false,\n };\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"Failed to parse message:\", data);\n throw e;\n }\n}\n","// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze\n\n/** @internal */\nexport function deepFreeze<T>(object: T): T {\n // Retrieve the property names defined on object\n const propNames = Object.getOwnPropertyNames(object);\n\n // Freeze properties before freezing self\n\n for (const name of propNames) {\n const value = (object as Record<string, unknown>)[name];\n\n if (value && typeof value === \"object\") {\n deepFreeze(value);\n }\n }\n\n return Object.freeze(object);\n}\n","export function hasOwnProperty(\n object: object,\n property: string | number | symbol\n): boolean {\n return Object.prototype.hasOwnProperty.call(object, property);\n}\n","// Ref https://github.com/lodash/lodash/blob/4.17.11/lodash.js#L11744\nexport function isObject(value: unknown): value is Record<string, unknown> {\n const type = typeof value;\n return value != null && (type == \"object\" || type == \"function\");\n}\n","// This is copied from\n// [@next-libs/storage](https://github.com/easyops-cn/next-libs/tree/master/libs/storage),\n// and the types is refined.\n// The usage of JsonStorage from @next-libs/storage should be deprecated,\n// and migrated to from @next-core/brick-utils.\nexport class JsonStorage<U = Record<string, unknown>> {\n constructor(\n private storage: Storage,\n private prefix: string = \"brick-next-\"\n ) {}\n\n setItem<T extends string & keyof U>(name: T, value: U[T]): void {\n this.storage.setItem(this.prefix + name, JSON.stringify(value));\n }\n\n getItem<T extends string & keyof U>(name: T): U[T] {\n return JSON.parse(\n this.storage.getItem(this.prefix + name) ?? \"null\"\n ) as U[T];\n }\n\n removeItem<T extends string & keyof U>(name: T): void {\n return this.storage.removeItem(this.prefix + name);\n }\n\n clear(): void {\n return this.storage.clear();\n }\n}\n","const pool = new Map<string, HTMLElement>();\n\nfunction getProviderBrick(provider: string) {\n let brick = pool.get(provider);\n if (brick) {\n return brick;\n }\n brick = document.createElement(provider);\n pool.set(provider, brick);\n return brick;\n}\n\nexport function unwrapProvider<T extends (...args: any[]) => any>(\n provider: string\n): (...args: Parameters<T>) => ReturnType<T> {\n return function (...args: Parameters<T>): ReturnType<T> {\n const brick = getProviderBrick(provider) as unknown as {\n resolve(...args: Parameters<T>): ReturnType<T>;\n };\n return brick.resolve(...args);\n };\n}\n","import { Node, SourceLocation, PipeCall } from \"@next-core/pipes\";\n\nexport enum LexicalStatus {\n Initial,\n ExpectField,\n ExpectOptionalBeginDefault,\n ExpectDefaultValue,\n ExpectOptionalBeginPipe,\n ExpectPipeIdentifier,\n ExpectOptionalBeginPipeParameter,\n ExpectPipeParameter,\n ExpectPlaceholderEnd,\n}\n\nexport enum TokenType {\n Raw = \"Raw\",\n BeginPlaceHolder = \"BeginPlaceHolder\",\n Field = \"Field\",\n BeginDefault = \"BeginDefault\",\n LiteralString = \"LiteralString\",\n BeginPipe = \"BeginPipe\",\n PipeIdentifier = \"PipeIdentifier\",\n BeginPipeParameter = \"BeginPipeParameter\",\n EndPlaceHolder = \"EndPlaceHolder\",\n JsonValue = \"JsonValue\",\n}\n\nexport enum JsonValueType {\n Array,\n Object,\n String,\n Others,\n}\n\nexport interface LexicalContext {\n beginPlaceholder: RegExp;\n raw: string;\n cursor: number;\n status: LexicalStatus;\n tokens: Token[];\n}\n\nexport interface Token {\n type: TokenType;\n value?: any;\n loc?: SourceLocation;\n}\n\nexport interface InjectableString extends Node {\n type: \"InjectableString\";\n elements: (RawString | Placeholder)[];\n}\n\nexport interface RawString extends Node {\n type: \"RawString\";\n value: string;\n}\n\nexport interface Placeholder extends Node {\n type: \"Placeholder\";\n symbol: string;\n field: string;\n defaultValue: any;\n pipes: PipeCall[];\n}\n","import { escapeRegExp } from \"lodash\";\nimport {\n LexicalContext,\n LexicalStatus,\n Token,\n TokenType,\n JsonValueType,\n} from \"./interfaces.js\";\n\nexport function getRegExpOfPlaceholder(symbols: string | string[]): RegExp {\n return new RegExp(\n `(${([] as string[])\n .concat(symbols)\n .map((symbol) => escapeRegExp(symbol))\n .join(\"|\")})\\\\{`\n );\n}\n\nexport function tokenize(raw: string, symbols: string | string[]): Token[] {\n const context: LexicalContext = {\n beginPlaceholder: getRegExpOfPlaceholder(symbols),\n raw,\n cursor: 0,\n status: LexicalStatus.Initial,\n tokens: [],\n };\n while (context.cursor < raw.length) {\n switch (context.status) {\n case LexicalStatus.Initial:\n eatOptionalRawAndOptionalPlaceholderBegin(context);\n break;\n case LexicalStatus.ExpectField:\n eatWhitespace(context);\n eatField(context);\n break;\n case LexicalStatus.ExpectOptionalBeginDefault:\n eatWhitespace(context);\n eatOptionalDefault(context);\n break;\n case LexicalStatus.ExpectDefaultValue:\n eatWhitespace(context);\n eatDefaultValue(context);\n break;\n case LexicalStatus.ExpectOptionalBeginPipe:\n eatWhitespace(context);\n eatOptionalBeginPipe(context);\n break;\n case LexicalStatus.ExpectPipeIdentifier:\n eatWhitespace(context);\n eatPipeIdentifier(context);\n break;\n case LexicalStatus.ExpectOptionalBeginPipeParameter:\n eatWhitespace(context);\n eatOptionalBeginPipeParameter(context);\n break;\n case LexicalStatus.ExpectPipeParameter:\n eatWhitespace(context);\n eatPipeParameter(context);\n break;\n case LexicalStatus.ExpectPlaceholderEnd:\n eatWhitespace(context);\n eatPlaceholderEnd(context);\n break;\n }\n }\n if (context.status !== LexicalStatus.Initial) {\n throw new Error(\"Expected a placeholder end '}' at the end\");\n }\n return context.tokens;\n}\n\nfunction eatOptionalRawAndOptionalPlaceholderBegin(\n context: LexicalContext\n): void {\n const subRaw = getSubRaw(context);\n const matchedPlaceholder = subRaw.match(context.beginPlaceholder)?.[0];\n const subCursor = matchedPlaceholder\n ? subRaw.indexOf(matchedPlaceholder)\n : -1;\n if (\n subCursor >= 0 &&\n matchedPlaceholder &&\n subRaw.charAt(subCursor + matchedPlaceholder.length) !== \"{\"\n ) {\n const nextCursor = context.cursor + subCursor;\n if (subCursor > 0) {\n context.tokens.push({\n type: TokenType.Raw,\n value: subRaw.substring(0, subCursor),\n });\n }\n context.tokens.push({\n type: TokenType.BeginPlaceHolder,\n loc: {\n start: nextCursor,\n end: nextCursor + matchedPlaceholder.length,\n },\n value: matchedPlaceholder.substring(0, matchedPlaceholder.length - 1),\n });\n context.cursor += subCursor + matchedPlaceholder.length;\n context.status = LexicalStatus.ExpectField;\n } else {\n context.tokens.push({\n type: TokenType.Raw,\n value: subRaw,\n });\n context.cursor = context.raw.length;\n }\n}\n\nfunction eatWhitespace(context: LexicalContext): void {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n context.cursor += getSubRaw(context).match(/^[ \\r\\n\\t]*/)![0].length;\n}\n\nfunction eatField(context: LexicalContext): void {\n // Only allow alphanumeric, `_`, `.`, `*`, `[`, `]`, `-` and other non-ascii.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const [value] = getSubRaw(context).match(/^[\\w.*[\\]\\-\\u{80}-\\u{10FFFF}]*/u)!;\n context.tokens.push({\n type: TokenType.Field,\n value,\n });\n context.cursor += value.length;\n context.status = LexicalStatus.ExpectOptionalBeginDefault;\n}\n\nfunction eatOptionalDefault(context: LexicalContext): void {\n if (getSubRaw(context).charAt(0) === \"=\") {\n context.tokens.push({\n type: TokenType.BeginDefault,\n });\n context.cursor += 1;\n context.status = LexicalStatus.ExpectDefaultValue;\n } else {\n context.status = LexicalStatus.ExpectOptionalBeginPipe;\n }\n}\n\nfunction eatDefaultValue(context: LexicalContext): void {\n eatJsonValueOrLiteralString(context, LexicalStatus.ExpectOptionalBeginPipe);\n}\n\nfunction eatOptionalBeginPipe(context: LexicalContext): void {\n if (getSubRaw(context).charAt(0) === \"|\") {\n context.tokens.push({\n type: TokenType.BeginPipe,\n });\n context.cursor += 1;\n context.status = LexicalStatus.ExpectPipeIdentifier;\n } else {\n context.status = LexicalStatus.ExpectPlaceholderEnd;\n }\n}\n\nfunction eatPipeIdentifier(context: LexicalContext): void {\n const matches = getSubRaw(context).match(/^[a-zA-Z]\\w*/);\n if (!matches) {\n throw new Error(\n `Expected a pipe identifier at index ${\n context.cursor\n } near: ${JSON.stringify(context.raw.substring(context.cursor))}`\n );\n }\n const value = matches[0];\n context.tokens.push({\n type: TokenType.PipeIdentifier,\n value,\n });\n context.cursor += value.length;\n context.status = LexicalStatus.ExpectOptionalBeginPipeParameter;\n}\n\nfunction eatOptionalBeginPipeParameter(context: LexicalContext): void {\n if (getSubRaw(context).charAt(0) === \":\") {\n context.tokens.push({\n type: TokenType.BeginPipeParameter,\n });\n context.cursor += 1;\n context.status = LexicalStatus.ExpectPipeParameter;\n } else {\n context.status = LexicalStatus.ExpectOptionalBeginPipe;\n }\n}\n\nfunction eatPipeParameter(context: LexicalContext): void {\n eatJsonValueOrLiteralString(\n context,\n LexicalStatus.ExpectOptionalBeginPipeParameter\n );\n}\n\nfunction eatPlaceholderEnd(context: LexicalContext): void {\n if (getSubRaw(context).charAt(0) === \"}\") {\n context.tokens.push({\n type: TokenType.EndPlaceHolder,\n loc: {\n start: context.cursor,\n end: context.cursor + 1,\n },\n });\n context.cursor += 1;\n context.status = LexicalStatus.Initial;\n } else {\n throw new Error(\n `Expected a placeholder end '}' at index ${\n context.cursor\n } near: ${JSON.stringify(context.raw.substring(context.cursor))}`\n );\n }\n}\n\nconst jsonLiteralMap = new Map([\n [\"false\", false],\n [\"null\", null],\n [\"true\", true],\n]);\n\nfunction eatJsonValueOrLiteralString(\n context: LexicalContext,\n nextStatus: LexicalStatus\n): void {\n const subRaw = getSubRaw(context);\n if (\n /[0-9[{\"]/.test(subRaw.charAt(0)) ||\n /-[0-9]/.test(subRaw.substring(0, 2))\n ) {\n eatJsonValue(context, nextStatus);\n } else {\n // Accept any characters except controls and whitespace.\n // Only allow alphanumeric, `_`, `-` and other non-ascii.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const [value] = getSubRaw(context).match(/^[\\w\\-\\u{80}-\\u{10FFFF}]*/u)!;\n\n if (jsonLiteralMap.has(value)) {\n context.tokens.push({\n type: TokenType.JsonValue,\n value: jsonLiteralMap.get(value),\n });\n } else {\n context.tokens.push({\n type: TokenType.LiteralString,\n value,\n });\n }\n\n context.cursor += value.length;\n context.status = nextStatus;\n }\n}\n\n// 我们不需要非常精确地在一段字符串中匹配出一段*完整合法的* JSON value,\n// 而只需要找到一段*可能是完整合法的* JSON value 即可,解析的工作交给 `JSON.parse()`。\n// 由于 JSON 中 object/array/string 的镜像起止符特性,我们尝试去完成这些符号匹配即可。\nfunction eatJsonValue(\n context: LexicalContext,\n nextStatus: LexicalStatus\n): void {\n const subRaw = getSubRaw(context);\n const firstChar = subRaw.charAt(0);\n const valueType: JsonValueType =\n firstChar === \"[\"\n ? JsonValueType.Array\n : firstChar === \"{\"\n ? JsonValueType.Object\n : firstChar === '\"'\n ? JsonValueType.String\n : JsonValueType.Others;\n\n let subCursor = 0;\n let objectBracesToMatch = 0;\n let arrayBracketsToMatch = 0;\n let stringQuotesToClose = false;\n let stringBackslashToEscape = false;\n let matched = false;\n\n while (subCursor < subRaw.length) {\n const char = subRaw.charAt(subCursor);\n if (stringBackslashToEscape) {\n stringBackslashToEscape = false;\n } else if (stringQuotesToClose) {\n if (char === '\"') {\n stringQuotesToClose = false;\n } else if (char === \"\\\\\") {\n stringBackslashToEscape = true;\n }\n } else {\n switch (char) {\n case \"[\":\n arrayBracketsToMatch += 1;\n break;\n case \"{\":\n objectBracesToMatch += 1;\n break;\n case \"]\":\n arrayBracketsToMatch -= 1;\n break;\n case \"}\":\n objectBracesToMatch -= 1;\n break;\n case '\"':\n stringQuotesToClose = true;\n break;\n }\n }\n\n subCursor += 1;\n\n switch (valueType) {\n case JsonValueType.Array:\n matched = !arrayBracketsToMatch;\n break;\n case JsonValueType.Object:\n matched = !objectBracesToMatch;\n break;\n case JsonValueType.String:\n matched = !stringQuotesToClose;\n break;\n default:\n // 对于其它类型,如果下一个字符不再是这些值类型可能的字符时,我们认为 JSON value 完成匹配。\n // 其它可能的值类型:number/boolean/null/undefined。\n matched =\n subCursor < subRaw.length &&\n /[^a-z0-9E.+-]/.test(subRaw.charAt(subCursor));\n }\n\n if (matched) {\n break;\n }\n }\n\n if (!matched) {\n throw new Error(\n `Failed to match a JSON value at index ${\n context.cursor\n } near: ${JSON.stringify(context.raw.substring(context.cursor))}`\n );\n }\n\n context.tokens.push({\n type: TokenType.JsonValue,\n value: JSON.parse(subRaw.substring(0, subCursor)),\n });\n context.cursor += subCursor;\n context.status = nextStatus;\n}\n\nfunction getSubRaw(context: LexicalContext): string {\n return context.raw.substring(context.cursor);\n}\n","import { get } from \"lodash\";\nimport type { Location } from \"history\";\nimport type { FeatureFlags, MicroApp } from \"@next-core/types\";\nimport { processPipes } from \"@next-core/pipes\";\nimport { parseInjectableString } from \"./syntax.js\";\nimport type { Placeholder } from \"./interfaces.js\";\nimport { getRegExpOfPlaceholder } from \"./lexical.js\";\n\nexport interface LegacyCompatibleRuntimeContext {\n app: MicroApp;\n overrideApp?: MicroApp;\n location: Location;\n query: URLSearchParams;\n /** {@inheritDoc FeatureFlags} */\n flags: FeatureFlags;\n /** 系统运行时信息,包括登录信息和页面信息。 */\n sys: Record<string, unknown>;\n match?: {\n path: string;\n url: string;\n isExact: boolean;\n params: Record<string, string>;\n };\n event?: Event;\n data?: unknown;\n}\n\nexport function transform(\n raw: string,\n context: LegacyCompatibleRuntimeContext\n): unknown {\n return compile(raw, \"@\", context);\n}\n\nexport function inject(\n raw: string,\n context: LegacyCompatibleRuntimeContext\n): unknown {\n return compile(raw, \"$\", context);\n}\n\nexport function transformAndInject(\n raw: string,\n context: LegacyCompatibleRuntimeContext\n): unknown {\n return compile(raw, [\"@\", \"$\"], context);\n}\n\ntype CompileNode = (node: Placeholder) => unknown;\n\nfunction compile(\n raw: string,\n symbols: string | string[],\n context: LegacyCompatibleRuntimeContext\n): unknown {\n // const symbols = [\"@\", \"$\"];\n if (!isInjectable(raw, symbols)) {\n return raw;\n }\n\n const transformNode = transformNodeFactory(context.data);\n const injectNode = injectNodeFactory(context, raw);\n\n const tree = parseInjectableString(raw, symbols);\n const values = tree.elements.map((node) =>\n node.type === \"RawString\"\n ? node.value\n : node.symbol === \"$\"\n ? injectNode(node)\n : transformNode(node)\n );\n\n return reduceCompiledValues(values);\n}\n\nfunction reduceCompiledValues(values: unknown[]): unknown {\n // If the whole string is a placeholder, we should keep the original value.\n if (values.length === 1) {\n return values[0];\n }\n\n // If an element is `undefined`, `null` or an empty array `[]`, it is converted to an empty string.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/join#Description\n return values.join(\"\");\n}\n\nfunction isInjectable(raw: string, symbols?: string | string[]): boolean {\n return getRegExpOfPlaceholder(symbols).test(raw);\n}\n\nfunction transformNodeFactory(data: unknown): CompileNode {\n return function transformNode(node: Placeholder): unknown {\n // If meet `@{}`, return `data`.\n let result = node.field ? get(data, node.field) : data;\n\n if (result === undefined) {\n result = node.defaultValue;\n }\n\n return processPipes(result, node.pipes);\n };\n}\n\nfunction injectNodeFactory(\n context: LegacyCompatibleRuntimeContext,\n raw: string\n): CompileNode {\n return function injectNode(node: Placeholder): unknown {\n const matches = node.field.match(\n /^(?:(QUERY(?:_ARRAY)?|EVENT|query|event|APP|HASH|ANCHOR|SYS|FLAGS|CTX)\\.)?(.+)$/\n );\n if (!matches) {\n // Keep the original raw partial when meet a unknown namespace.\n return raw.substring(node.loc.start, node.loc.end);\n }\n let [, namespace, subField] = matches;\n\n // Support namespace with no subfield such as `${ANCHOR}`.\n // But distinguish with match params. E.g. `${query}` is a match param.\n if (!namespace && /^[A-Z_]+$/.test(subField)) {\n namespace = subField;\n subField = \"*\";\n }\n\n let result: unknown;\n const SimpleContextMap: Record<string, \"sys\" | \"flags\"> = {\n SYS: \"sys\",\n FLAGS: \"flags\",\n };\n\n switch (namespace) {\n case \"QUERY\":\n case \"query\":\n if (subField === \"*\") {\n result = context.query;\n } else {\n result = context.query.has(subField)\n ? context.query.get(subField)\n : undefined;\n }\n break;\n case \"QUERY_ARRAY\":\n result = context.query.has(subField)\n ? context.query.getAll(subField)\n : undefined;\n break;\n case \"EVENT\":\n case \"event\":\n if (context.event === undefined) {\n // Keep the original raw partial when meet a `${EVENT}` in non-event context.\n return raw.substring(node.loc.start, node.loc.end);\n }\n result =\n subField === \"*\" ? context.event : get(context.event, subField);\n break;\n case \"APP\":\n result =\n subField === \"*\"\n ? context.overrideApp ?? context.app\n : get(context.overrideApp ?? context.app, subField);\n break;\n case \"HASH\":\n result = context.location.hash;\n break;\n case \"SYS\":\n case \"FLAGS\":\n result =\n subField === \"*\"\n ? context[SimpleContextMap[namespace]]\n : get(context[SimpleContextMap[namespace]], subField);\n break;\n case \"ANCHOR\": {\n const anchor = context.location.hash\n ? context.location.hash.substr(1)\n : null;\n result = subField === \"*\" ? anchor : get(anchor, subField);\n break;\n }\n case \"CTX\": {\n const original = raw.substring(node.loc.start, node.loc.end);\n // eslint-disable-next-line no-console\n console.error(\n `CTX is not supported in placeholder any more: \"${original}\"`\n );\n return original;\n }\n default:\n if (context.match) {\n result = context.match.params[subField];\n } else {\n // If the context is empty, return the original raw partial.\n return raw.substring(node.loc.start, node.loc.end);\n }\n }\n\n if (result === undefined) {\n result = node.defaultValue;\n }\n\n return processPipes(result, node.pipes);\n };\n}\n","import { PipeCall } from \"@next-core/pipes\";\nimport { tokenize } from \"./lexical.js\";\nimport {\n Token,\n TokenType,\n InjectableString,\n Placeholder,\n} from \"./interfaces.js\";\n\nexport function parseInjectableString(\n raw: string,\n symbols: string | string[]\n): InjectableString {\n return parseTokens(tokenize(raw, symbols));\n}\n\nfunction parseTokens(tokens: Token[]): InjectableString {\n const tree: InjectableString = {\n type: \"InjectableString\",\n elements: [],\n };\n\n let token: Token | undefined;\n\n function optionalToken(type: TokenType): boolean {\n if (type === tokens[0].type) {\n token = tokens.shift();\n return true;\n }\n return false;\n }\n\n function acceptToken(type: TokenType | TokenType[]): void {\n token = tokens.shift() as Token;\n if (\n Array.isArray(type) ? !type.includes(token.type) : type !== token.type\n ) {\n throw new Error(`Expected token: ${type}, received token: ${token.type}`);\n }\n }\n\n while (tokens.length > 0) {\n if (optionalToken(TokenType.Raw)) {\n tree.elements.push({\n type: \"RawString\",\n value: token.value,\n });\n } else {\n acceptToken(TokenType.BeginPlaceHolder);\n const start = token.loc.start;\n const symbol = token.value;\n acceptToken(TokenType.Field);\n\n const placeholder: Placeholder = {\n type: \"Placeholder\",\n symbol,\n field: token.value,\n defaultValue: undefined,\n pipes: [],\n loc: {\n start,\n end: start,\n },\n };\n tree.elements.push(placeholder);\n\n if (optionalToken(TokenType.BeginDefault)) {\n acceptToken([TokenType.JsonValue, TokenType.LiteralString]);\n placeholder.defaultValue = token.value;\n }\n\n while (optionalToken(TokenType.BeginPipe)) {\n acceptToken(TokenType.PipeIdentifier);\n const pipe: PipeCall = {\n type: \"PipeCall\",\n identifier: token.value,\n parameters: [],\n };\n placeholder.pipes.push(pipe);\n\n while (optionalToken(TokenType.BeginPipeParameter)) {\n acceptToken([TokenType.JsonValue, TokenType.LiteralString]);\n pipe.parameters.push(token.value);\n }\n }\n\n acceptToken(TokenType.EndPlaceHolder);\n placeholder.loc.end = token.loc.end;\n }\n }\n\n return tree;\n}\n","import { i18n } from \"@next-core/i18n\";\nimport LanguageDetector from \"i18next-browser-languagedetector\";\n\nlet initialized = false;\nconst initializedNamespaces = new Set<string>();\n\nexport type Locales = Record<string, Record<string, string | undefined>>;\n\nexport function initializeI18n(): void;\nexport function initializeI18n(NS: string, locales: Locales): void;\nexport function initializeI18n(NS?: string, locales?: Locales) {\n if (!initialized) {\n initialized = true;\n i18n\n // learn more: https://github.com/i18next/i18next-xhr-backend\n // .use(Backend)\n // learn more: https://github.com/i18next/i18next-browser-languageDetector\n .use(\n process.env.NODE_ENV === \"test\"\n ? LanguageDetector\n : /* istanbul ignore next */ (\n LanguageDetector as unknown as { default: LanguageDetector }\n ).default\n )\n // for all options read: https://www.i18next.com/overview/configuration-options\n .init({\n fallbackLng: \"zh\",\n debug: process.env.NODE_ENV === \"development\",\n supportedLngs: [\"zh\", \"en\"],\n nonExplicitSupportedLngs: true,\n interpolation: {\n escapeValue: false, // not needed for react as it escapes by default\n },\n react: {\n useSuspense: false,\n },\n compatibilityJSON: \"v3\",\n resources: {},\n });\n }\n\n if (!NS || !locales || initializedNamespaces.has(NS)) {\n return;\n }\n initializedNamespaces.add(NS);\n for (const [lang, resources] of Object.entries(locales)) {\n i18n.addResourceBundle(lang, NS, resources);\n }\n}\n","import { i18n } from \"@next-core/i18n\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { I18nData } from \"@next-core/types\";\n\nexport function i18nText(\n data: I18nData | null | undefined\n): string | undefined {\n if (!data) {\n return;\n }\n const language = i18n.language ?? \"zh-CN\";\n // First, make a perfect match.\n if (hasOwnProperty(data, language)) {\n return data[language];\n }\n // https://en.wikipedia.org/wiki/IETF_language_tag\n const primaryLanguage = language.split(\"-\")[0];\n if (primaryLanguage !== language) {\n // Then, match the primary language (which omits other subtags).\n // E.g., match `zh` if the current language is `zh-CN`.\n return hasOwnProperty(data, primaryLanguage)\n ? data[primaryLanguage]\n : undefined;\n }\n // At last, match the first key which starts with the primary language,\n // if the current language contains primary subtag only.\n // E.g., match `zh-CN` if the current language is `zh`.\n const prefix = `${primaryLanguage}-`;\n for (const key of Object.keys(data)) {\n if (key.startsWith(prefix)) {\n return data[key];\n }\n }\n}\n","// polyfill for replaceChildren\nif (Element.prototype.replaceChildren === undefined) {\n Element.prototype.replaceChildren = function (...nodes: (string | Node)[]) {\n while (this.lastChild) {\n this.removeChild(this.lastChild);\n }\n if (nodes.length > 0) {\n this.append(...nodes);\n }\n };\n}\nif (DocumentFragment.prototype.replaceChildren === undefined) {\n DocumentFragment.prototype.replaceChildren = function (\n ...nodes: (string | Node)[]\n ) {\n while (this.lastChild) {\n this.removeChild(this.lastChild);\n }\n if (nodes.length > 0) {\n this.append(...nodes);\n }\n };\n}\n","import type {\n ArrowFunctionExpression,\n Expression,\n FunctionDeclaration,\n FunctionExpression,\n Statement,\n} from \"@babel/types\";\nimport type { EstreeNode } from \"./interfaces.js\";\n\nexport enum Mode {\n LEXICAL,\n STRICT,\n}\n\nexport const SourceNode = Symbol.for(\"SourceNode\");\nexport const FormalParameters = Symbol.for(\"FormalParameters\");\nexport const ECMAScriptCode = Symbol.for(\"ECMAScriptCode\");\nexport const Environment = Symbol.for(\"Environment\");\nexport const IsConstructor = Symbol.for(\"IsConstructor\");\nexport const ThisMode = Symbol.for(\"ThisMode\");\nexport const DebuggerCall = Symbol.for(\"$DebuggerCall$\");\nexport const DebuggerScope = Symbol.for(\"$DebuggerScope$\");\nexport const DebuggerNode = Symbol.for(\"$DebuggerNode$\");\nexport const DebuggerReturn = Symbol.for(\"$DebuggerReturn$\");\n\n// https://tc39.es/ecma262/#sec-execution-contexts\nexport class ExecutionContext {\n VariableEnvironment?: EnvironmentRecord;\n LexicalEnvironment?: EnvironmentRecord;\n Function?: FunctionObject;\n}\n\nexport type EnvironmentRecordType = \"function\" | \"declarative\";\n\nexport enum BindingStatus {\n UNINITIALIZED,\n LEXICAL,\n INITIALIZED,\n}\n\n// https://tc39.es/ecma262/#sec-environment-records\nexport class EnvironmentRecord {\n readonly OuterEnv: EnvironmentRecord | null | undefined;\n private readonly bindingMap = new Map<string, BindingState>();\n protected ThisValue: unknown = undefined;\n protected ThisBindingStatus: BindingStatus | undefined;\n\n constructor(outer: EnvironmentRecord | null | undefined) {\n this.OuterEnv = outer;\n }\n\n HasBinding(name: string): boolean {\n return this.bindingMap.has(name);\n }\n\n CreateMutableBinding(name: string, deletable: boolean): CompletionRecord {\n // Assert: binding does not exist.\n this.bindingMap.set(name, {\n mutable: true,\n deletable,\n });\n return NormalCompletion(undefined);\n }\n\n /**\n * Create an immutable binding.\n *\n * @param name - The binding name.\n * @param strict - For named function expressions, strict is false, otherwise it's true.\n * @returns CompletionRecord.\n */\n CreateImmutableBinding(name: string, strict: boolean): CompletionRecord {\n // Assert: binding does not exist.\n this.bindingMap.set(name, {\n strict,\n });\n return NormalCompletion(undefined);\n }\n\n InitializeBinding(name: string, value: unknown): CompletionRecord {\n const binding = this.bindingMap.get(name) as BindingState;\n // Assert: binding exists and uninitialized.\n Object.assign<BindingState, Partial<BindingState>>(binding, {\n initialized: true,\n value,\n });\n return NormalCompletion(undefined);\n }\n\n /**\n * Update a mutable binding value, including function declarations.\n *\n * @param name - The binding name.\n * @param value - The binding value.\n * @param strict - For functions, strict is always false, otherwise it depends on strict-mode.\n * @returns\n */\n SetMutableBinding(\n name: string,\n value: unknown,\n _strict?: boolean\n ): CompletionRecord {\n const binding = this.bindingMap.get(name) as BindingState;\n // Assert: binding exists.\n if (!binding.initialized) {\n throw new ReferenceError(`${name} is not initialized`);\n } else if (binding.mutable) {\n binding.value = value;\n } else {\n throw new TypeError(`Assignment to constant variable`);\n }\n return NormalCompletion(undefined);\n }\n\n GetBindingValue(name: string, _strict?: boolean): unknown {\n const binding = this.bindingMap.get(name) as BindingState;\n // Assert: binding exists.\n if (!binding.initialized) {\n throw new ReferenceError(`${name} is not initialized`);\n }\n return binding.value;\n }\n\n HasThisBinding() {\n return false;\n }\n}\n\nexport class DeclarativeEnvironment extends EnvironmentRecord {}\n\nexport class FunctionEnvironment extends EnvironmentRecord {\n constructor(F: FunctionObject) {\n super(F[Environment]);\n if (F[ThisMode] === Mode.LEXICAL) {\n this.ThisBindingStatus = BindingStatus.LEXICAL;\n } else {\n this.ThisBindingStatus = BindingStatus.UNINITIALIZED;\n }\n }\n\n HasThisBinding() {\n return this.ThisBindingStatus !== BindingStatus.LEXICAL;\n }\n\n BindThisValue(value: unknown) {\n // Assert: envRec.[[ThisBindingStatus]] is not LEXICAL.\n if (this.ThisBindingStatus === BindingStatus.INITIALIZED) {\n throw new Error(\"This binding has been initialized\");\n }\n this.ThisValue = value;\n this.ThisBindingStatus = BindingStatus.INITIALIZED;\n }\n\n GetThisBinding() {\n // Assert: envRec.[[ThisBindingStatus]] is not LEXICAL.\n if (this.ThisBindingStatus === BindingStatus.UNINITIALIZED) {\n throw new Error(\"This binding is not initialized\");\n }\n return this.ThisValue;\n }\n}\n\nexport interface BindingState {\n initialized?: boolean;\n value?: unknown;\n mutable?: boolean;\n\n /** This is used for mutable bindings only. */\n deletable?: boolean;\n\n /**\n * This is used for immutable bindings only.\n * For named function expressions, `strict` is false,\n * otherwise it's true.\n */\n strict?: boolean;\n}\n\nexport interface FunctionObject {\n (...args: unknown[]): unknown;\n [SourceNode]:\n | FunctionDeclaration\n | FunctionExpression\n | ArrowFunctionExpression;\n [FormalParameters]: FunctionDeclaration[\"params\"];\n [ECMAScriptCode]: Statement[] | Expression;\n [Environment]: EnvironmentRecord;\n [IsConstructor]: boolean;\n [ThisMode]?: Mode;\n [DebuggerCall]?: (...args: unknown[]) => IterableIterator<unknown>;\n [DebuggerScope]?: () => EnvironmentRecord | null | undefined;\n [DebuggerNode]?: () => EstreeNode | undefined;\n}\n\n// https://tc39.es/ecma262/#sec-reference-record-specification-type\nexport class ReferenceRecord {\n readonly Base:\n | Record<PropertyKey, unknown>\n | EnvironmentRecord\n | \"unresolvable\";\n readonly ReferenceName: PropertyKey;\n /** Whether the reference is in strict mode. */\n readonly Strict?: boolean;\n\n constructor(\n base: Record<PropertyKey, unknown> | EnvironmentRecord | \"unresolvable\",\n referenceName: PropertyKey,\n strict: boolean\n ) {\n this.Base = base;\n this.ReferenceName = referenceName;\n this.Strict = strict;\n }\n}\n\n// https://tc39.es/ecma262/#sec-completion-record-specification-type\nexport class CompletionRecord {\n readonly Type: CompletionRecordType;\n readonly Value: unknown;\n\n constructor(type: CompletionRecordType, value: unknown) {\n this.Type = type;\n this.Value = value;\n }\n}\n\nexport type CompletionRecordType =\n | \"normal\"\n | \"break\"\n | \"continue\"\n | \"return\"\n | \"throw\";\n\n// https://tc39.es/ecma262/#sec-normalcompletion\nexport function NormalCompletion(value: unknown): CompletionRecord {\n return new CompletionRecord(\"normal\", value);\n}\n\nexport const Empty = Symbol(\"empty completion\");\n\nexport interface OptionalChainRef {\n skipped?: boolean;\n}\n","import { FunctionDeclaration, VariableDeclaration } from \"@babel/types\";\nimport { EstreeNode, NodeWithBoundNames } from \"./interfaces.js\";\n\ntype InternalCollect<T = void, O = unknown> = (\n node: EstreeNode | null | undefined | (EstreeNode | null)[],\n options?: O\n) => T;\ntype InternalCollectWithOptions<T = void, O = unknown> = (\n node: EstreeNode | null | undefined | (EstreeNode | null)[],\n options: O\n) => T;\n\nexport function collectBoundNames(\n root: NodeWithBoundNames | NodeWithBoundNames[] | null | undefined\n): string[] {\n const names = new Set<string>();\n const collect: InternalCollect = (node) => {\n if (Array.isArray(node)) {\n for (const n of node) {\n collect(n);\n }\n } else if (node) {\n // `node` maybe `null` in some cases.\n switch (node.type) {\n case \"Identifier\":\n names.add(node.name);\n return;\n case \"VariableDeclaration\":\n return collect(node.declarations);\n case \"VariableDeclarator\":\n return collect(node.id);\n case \"ArrayPattern\":\n return collect(node.elements);\n case \"AssignmentPattern\":\n return collect(node.left);\n case \"ObjectPattern\":\n return collect(node.properties);\n case \"Property\":\n return collect(node.value);\n case \"RestElement\":\n return collect(node.argument);\n case \"FunctionDeclaration\":\n return collect(node.id);\n }\n }\n };\n collect(root);\n return Array.from(names);\n}\n\nexport function containsExpression(\n root: EstreeNode | EstreeNode[]\n): boolean | undefined {\n const collect: InternalCollect<boolean | undefined> = (node) => {\n if (Array.isArray(node)) {\n return node.some(collect);\n } else if (node) {\n // `node` maybe `null` in some cases.\n switch (node.type) {\n case \"ArrayPattern\":\n return collect(node.elements);\n case \"AssignmentPattern\":\n return true;\n case \"ObjectPattern\":\n return collect(node.properties);\n case \"Property\":\n return node.computed || collect(node.value);\n case \"RestElement\":\n return collect(node.argument);\n }\n }\n };\n return collect(root);\n}\n\ninterface ScopedDeclarationOptions {\n var?: boolean;\n topLevel?: boolean;\n}\n\ntype ScopedDeclaration = VariableDeclaration | FunctionDeclaration;\n\nexport function collectScopedDeclarations(\n root: EstreeNode | EstreeNode[],\n options: ScopedDeclarationOptions\n): ScopedDeclaration[] {\n const declarations: ScopedDeclaration[] = [];\n const nextOptions = { var: options.var };\n const collect: InternalCollectWithOptions<void, ScopedDeclarationOptions> = (\n node,\n options\n ): void => {\n if (Array.isArray(node)) {\n for (const n of node) {\n collect(n, options);\n }\n } else if (node) {\n // `node` maybe `null` in some cases.\n switch (node.type) {\n case \"FunctionDeclaration\":\n // At the top level of a function, or script, function declarations are\n // treated like var declarations rather than like lexical declarations.\n // See https://tc39.es/ecma262/#sec-static-semantics-toplevellexicallydeclarednames\n if (Number(!options.var) ^ Number(options.topLevel)) {\n declarations.push(node);\n }\n return;\n case \"VariableDeclaration\":\n if (Number(!options.var) ^ Number(node.kind === \"var\")) {\n declarations.push(node);\n }\n return;\n case \"SwitchCase\":\n collect(node.consequent, nextOptions);\n return;\n case \"CatchClause\":\n collect(node.body, nextOptions);\n return;\n }\n if (options.var) {\n switch (node.type) {\n case \"BlockStatement\":\n collect(node.body, nextOptions);\n return;\n case \"IfStatement\":\n collect(node.consequent, nextOptions);\n collect(node.alternate, nextOptions);\n return;\n case \"DoWhileStatement\":\n case \"WhileStatement\":\n collect(node.body, nextOptions);\n return;\n case \"ForStatement\":\n collect(node.init, nextOptions);\n collect(node.body, nextOptions);\n return;\n case \"ForInStatement\":\n case \"ForOfStatement\":\n collect(node.left, nextOptions);\n collect(node.body, nextOptions);\n return;\n case \"SwitchStatement\":\n collect(node.cases, nextOptions);\n return;\n case \"TryStatement\":\n collect(node.block, nextOptions);\n collect(node.handler, nextOptions);\n collect(node.finalizer, nextOptions);\n return;\n }\n }\n }\n };\n collect(root, options);\n return declarations;\n}\n","import {\n BinaryExpression,\n UnaryExpression,\n VariableDeclaration,\n} from \"@babel/types\";\nimport {\n CompletionRecord,\n Empty,\n EnvironmentRecord,\n NormalCompletion,\n ReferenceRecord,\n} from \"./ExecutionContext.js\";\nimport { collectBoundNames } from \"./traverse.js\";\n\n// https://tc39.es/ecma262/#sec-ispropertyreference\nexport function IsPropertyReference(V: ReferenceRecord): boolean {\n return V.Base !== \"unresolvable\" && !(V.Base instanceof EnvironmentRecord);\n}\n\n// https://tc39.es/ecma262/#sec-initializereferencedbinding\nexport function InitializeReferencedBinding(\n V: ReferenceRecord,\n W: unknown\n): CompletionRecord {\n const base = V.Base as EnvironmentRecord;\n return base.InitializeBinding(V.ReferenceName as string, W);\n}\n\n// https://tc39.es/ecma262/#sec-copydataproperties\nexport function CopyDataProperties(\n target: Record<PropertyKey, unknown>,\n source: unknown,\n excludedItems: Set<PropertyKey>\n): Record<PropertyKey, unknown> {\n if (source === undefined || source === null) {\n return target;\n }\n const keys = (Object.getOwnPropertyNames(source) as PropertyKey[]).concat(\n Object.getOwnPropertySymbols(source)\n );\n for (const nextKey of keys) {\n if (!excludedItems.has(nextKey)) {\n const desc = Object.getOwnPropertyDescriptor(source, nextKey);\n if (desc?.enumerable) {\n target[nextKey] = (source as Record<PropertyKey, unknown>)[nextKey];\n }\n }\n }\n return target;\n}\n\n// https://tc39.es/ecma262/#sec-runtime-semantics-fordeclarationbindinginstantiation\nexport function ForDeclarationBindingInstantiation(\n forDeclaration: VariableDeclaration,\n env: EnvironmentRecord\n): void {\n const isConst = forDeclaration.kind === \"const\";\n for (const name of collectBoundNames(forDeclaration)) {\n if (isConst) {\n env.CreateImmutableBinding(name, true);\n } else {\n env.CreateMutableBinding(name, false);\n }\n }\n}\n\n// https://tc39.es/ecma262/#sec-loopcontinues\nexport function LoopContinues(completion: CompletionRecord): boolean {\n return completion.Type === \"normal\" || completion.Type == \"continue\";\n}\n\n// https://tc39.es/ecma262/#sec-updateempty\nexport function UpdateEmpty(\n completion: CompletionRecord,\n value: unknown\n): CompletionRecord {\n if (completion.Value !== Empty) {\n return completion;\n }\n return new CompletionRecord(completion.Type, value);\n}\n\n// https://tc39.es/ecma262/#sec-getvalue\nexport function GetValue(\n V: CompletionRecord | ReferenceRecord | unknown\n): unknown {\n if (V instanceof CompletionRecord) {\n // Assert: V.Type is normal.\n V = V.Value;\n }\n if (!(V instanceof ReferenceRecord)) {\n return V;\n }\n if (V.Base === \"unresolvable\") {\n throw new ReferenceError(`${V.ReferenceName as string} is not defined`);\n }\n if (V.Base instanceof EnvironmentRecord) {\n const base = V.Base as EnvironmentRecord;\n return base.GetBindingValue(V.ReferenceName as string, V.Strict);\n }\n return V.Base[V.ReferenceName];\n}\n\n// https://tc39.es/ecma262/#sec-topropertykey\nexport function ToPropertyKey(arg: unknown): string | symbol {\n if (typeof arg === \"symbol\") {\n return arg;\n }\n return String(arg);\n}\n\n// https://tc39.es/ecma262/#sec-getv\nexport function GetV(V: unknown, P: PropertyKey): unknown {\n return (V as Record<PropertyKey, unknown>)[P];\n}\n\n// https://tc39.es/ecma262/#sec-putvalue\nexport function PutValue(V: ReferenceRecord, W: unknown): CompletionRecord {\n // Assert: V is a ReferenceRecord.\n if (V.Base === \"unresolvable\") {\n throw new ReferenceError(`${V.ReferenceName as string} is not defined`);\n }\n if (V.Base instanceof EnvironmentRecord) {\n return V.Base.SetMutableBinding(V.ReferenceName as string, W, V.Strict);\n }\n V.Base[V.ReferenceName] = W;\n return NormalCompletion(undefined);\n}\n\n// https://tc39.es/ecma262/#sec-createlistiteratorRecord\nexport function CreateListIteratorRecord(\n args: Iterable<unknown>\n): Iterator<unknown> {\n if (!isIterable(args)) {\n throw new TypeError(`${typeof args} is not iterable`);\n }\n return args[Symbol.iterator]();\n}\n\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nexport function RequireObjectCoercible(arg: unknown): void {\n if (arg === null || arg === undefined) {\n throw new TypeError(\"Cannot destructure properties of undefined or null\");\n }\n}\n\n// https://tc39.es/ecma262/#sec-getidentifierreference\nexport function GetIdentifierReference(\n env: EnvironmentRecord | null | undefined,\n name: string,\n strict: boolean\n): ReferenceRecord {\n if (!env) {\n return new ReferenceRecord(\"unresolvable\", name, strict);\n }\n if (env.HasBinding(name)) {\n return new ReferenceRecord(env, name, strict);\n }\n return GetIdentifierReference(env.OuterEnv, name, strict);\n}\n\n// https://tc39.es/ecma262/#sec-applystringornumericbinaryoperator\nexport function ApplyStringOrNumericBinaryOperator(\n leftValue: number,\n operator: BinaryExpression[\"operator\"] | \"|>\",\n rightValue: number\n): unknown {\n switch (operator) {\n case \"+\":\n return leftValue + rightValue;\n case \"-\":\n return leftValue - rightValue;\n case \"/\":\n return leftValue / rightValue;\n case \"%\":\n return leftValue % rightValue;\n case \"*\":\n return leftValue * rightValue;\n case \"**\":\n return leftValue ** rightValue;\n case \"==\":\n return leftValue == rightValue;\n case \"===\":\n return leftValue === rightValue;\n case \"!=\":\n return leftValue != rightValue;\n case \"!==\":\n return leftValue !== rightValue;\n case \">\":\n return leftValue > rightValue;\n case \"<\":\n return leftValue < rightValue;\n case \">=\":\n return leftValue >= rightValue;\n case \"<=\":\n return leftValue <= rightValue;\n case \"in\":\n return leftValue in (rightValue as unknown as Record<number, unknown>);\n }\n throw new SyntaxError(`Unsupported binary operator \\`${operator}\\``);\n}\n\n// https://tc39.es/ecma262/#sec-assignment-operators\nexport function ApplyStringOrNumericAssignment(\n leftValue: string | number,\n operator: string,\n rightValue: string | number\n): unknown {\n switch (operator) {\n case \"+=\":\n case \"-=\":\n case \"*=\":\n case \"/=\":\n case \"%=\":\n case \"**=\":\n return ApplyStringOrNumericBinaryOperator(\n leftValue as number,\n operator.substr(0, operator.length - 1) as BinaryExpression[\"operator\"],\n rightValue as number\n );\n }\n\n throw new SyntaxError(`Unsupported assignment operator \\`${operator}\\``);\n}\n\n// https://tc39.es/ecma262/#sec-unary-operators\nexport function ApplyUnaryOperator(\n target: unknown,\n operator: UnaryExpression[\"operator\"]\n): unknown {\n switch (operator) {\n case \"!\":\n return !target;\n case \"+\":\n return +(target as string | number);\n case \"-\":\n return -(target as string | number);\n case \"void\":\n return undefined;\n }\n throw new SyntaxError(`Unsupported unary operator \\`${operator}\\``);\n}\n\nexport function isIterable(cooked: unknown): boolean {\n if (Array.isArray(cooked)) {\n return true;\n }\n if (cooked === null || cooked === undefined) {\n return false;\n }\n return typeof (cooked as Iterable<unknown>)[Symbol.iterator] === \"function\";\n}\n","// Ref https://github.com/tc39/proposal-global\n// In addition, the es6-shim had to switch from Function('return this')()\n// due to CSP concerns, such that the current check to handle browsers,\n// node, web workers, and frames is:\n// istanbul ignore next\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction getGlobal(): object {\n // the only reliable means to get the global object is\n // `Function('return this')()`\n // However, this causes CSP violations in Chrome apps.\n if (typeof self !== \"undefined\") {\n return self;\n }\n if (typeof window !== \"undefined\") {\n return window;\n }\n if (typeof global !== \"undefined\") {\n return global;\n }\n throw new Error(\"unable to locate global object\");\n}\n\n/**\n * There are chances to construct a `Function` from a string, etc.\n * ```\n * ((a,b)=>a[b])(()=>1, 'constructor')('console.log(`yo`)')()\n * ```\n */\nconst reservedObjects = new WeakSet([\n // `Function(\"...\")` is considered *extremely vulnerable*.\n Function,\n // `Object.assign()` is considered vulnerable.\n Object,\n // `prototype` is considered vulnerable.\n Function.prototype,\n Object.prototype,\n // Global `window` is considered vulnerable, too.\n getGlobal(),\n]);\n\nexport function sanitize(cooked: unknown): void {\n // eslint-disable-next-line @typescript-eslint/ban-types\n if (reservedObjects.has(cooked as object)) {\n throw new TypeError(\"Cannot access reserved objects such as `Function`.\");\n }\n}\n\nconst allowedConstructors = new WeakSet([\n Array,\n Map,\n Set,\n URL,\n URLSearchParams,\n WeakMap,\n WeakSet,\n RegExp,\n]);\n\nexport function isAllowedConstructor(constructor: unknown): boolean {\n // `Date` maybe mocked when running tests for storyboard functions.\n return (\n allowedConstructors.has(constructor as ArrayConstructor) ||\n constructor === Date\n );\n}\n","import type {\n ArrayPattern,\n ArrowFunctionExpression,\n CallExpression,\n CatchClause,\n DoWhileStatement,\n Expression,\n ForInStatement,\n ForOfStatement,\n ForStatement,\n FunctionDeclaration,\n FunctionExpression,\n Identifier,\n LVal,\n NewExpression,\n ObjectPattern,\n Pattern,\n PatternLike,\n RestElement,\n Statement,\n SwitchCase,\n TemplateLiteral,\n VariableDeclaration,\n WhileStatement,\n} from \"@babel/types\";\nimport {\n ApplyStringOrNumericAssignment,\n CreateListIteratorRecord,\n ApplyStringOrNumericBinaryOperator,\n GetV,\n GetValue,\n InitializeReferencedBinding,\n IsPropertyReference,\n LoopContinues,\n PutValue,\n RequireObjectCoercible,\n ToPropertyKey,\n UpdateEmpty,\n ApplyUnaryOperator,\n GetIdentifierReference,\n ForDeclarationBindingInstantiation,\n CopyDataProperties,\n} from \"./context-free.js\";\nimport {\n CompletionRecord,\n DebuggerCall,\n DebuggerNode,\n DebuggerReturn,\n DebuggerScope,\n DeclarativeEnvironment,\n ECMAScriptCode,\n Empty,\n Environment,\n EnvironmentRecord,\n ExecutionContext,\n FormalParameters,\n FunctionEnvironment,\n FunctionObject,\n IsConstructor,\n NormalCompletion,\n OptionalChainRef,\n ReferenceRecord,\n SourceNode,\n Mode,\n ThisMode,\n} from \"./ExecutionContext.js\";\nimport type {\n EstreeLVal,\n EstreeNode,\n EstreeObjectExpression,\n EstreeObjectPattern,\n EstreeProperty,\n CookRules,\n FunctionDefinition,\n} from \"./interfaces.js\";\nimport { sanitize, isAllowedConstructor } from \"./sanitize.js\";\nimport {\n collectBoundNames,\n collectScopedDeclarations,\n containsExpression,\n} from \"./traverse.js\";\n\nexport interface CookOptions {\n rules?: CookRules;\n globalVariables?: Record<string, unknown>;\n hooks?: CookHooks;\n debug?: boolean;\n externalSourceForDebug?: boolean;\n ArrayConstructor?: typeof Array;\n}\n\nexport interface CookHooks {\n beforeEvaluate?(node: EstreeNode): void;\n beforeCall?(node: EstreeNode): void;\n beforeBranch?(node: EstreeNode, branch: \"if\" | \"else\"): void;\n}\n\ninterface EvaluateResult<T, TReturn> extends Iterator<T, TReturn> {\n [Symbol.iterator](): EvaluateResult<T, TReturn>;\n}\n\ntype CompletionRecordResult<T = unknown> = EvaluateResult<T, CompletionRecord>;\n\nconst globalExecutionContextStack: ExecutionContext[] = [];\n\nexport function __dev_only_clearGlobalExecutionContextStack() {\n globalExecutionContextStack.length = 0;\n}\n\nexport function __dev_only_getGlobalExecutionContextStack() {\n return globalExecutionContextStack;\n}\n\n/** For next-core internal usage only. */\nexport function cook(\n rootAst: FunctionDeclaration | Expression,\n codeSource: string,\n {\n rules,\n debug,\n externalSourceForDebug,\n globalVariables = {},\n // Allow debugger to override Array constructor.\n ArrayConstructor = Array,\n hooks = {},\n }: CookOptions = {}\n): unknown {\n const expressionOnly = rootAst.type !== \"FunctionDeclaration\";\n\n function doSanitize(cooked: unknown) {\n if (!externalSourceForDebug) {\n sanitize(cooked);\n }\n }\n\n const rootEnv = new DeclarativeEnvironment(null);\n const rootContext = new ExecutionContext();\n rootContext.VariableEnvironment = rootEnv;\n rootContext.LexicalEnvironment = rootEnv;\n const executionContextStack = [rootContext];\n\n for (const [key, value] of Object.entries(globalVariables)) {\n rootEnv.CreateImmutableBinding(key, true);\n rootEnv.InitializeBinding(key, value);\n }\n\n const TemplateMap = new WeakMap<TemplateLiteral, string[]>();\n\n // https://tc39.es/ecma262/#sec-gettemplateobject\n function GetTemplateObject(templateLiteral: TemplateLiteral): string[] {\n const memo = TemplateMap.get(templateLiteral);\n if (memo) {\n return memo;\n }\n const rawObj = templateLiteral.quasis.map((quasi) => quasi.value.raw);\n const template = templateLiteral.quasis.map((quasi) => quasi.value.cooked!);\n Object.freeze(rawObj);\n Object.defineProperty(template, \"raw\", {\n value: rawObj,\n writable: false,\n enumerable: false,\n configurable: false,\n });\n Object.freeze(template);\n TemplateMap.set(templateLiteral, template);\n return template;\n }\n\n let currentNode: EstreeNode | undefined;\n\n function* Evaluate(\n node: EstreeNode,\n optionalChainRef?: OptionalChainRef,\n forceYield?: boolean\n ): CompletionRecordResult {\n hooks.beforeEvaluate?.(node);\n currentNode = node;\n if (\n debug &&\n (forceYield ||\n (node.type.endsWith(\"Statement\") &&\n !(\n node.type === \"ExpressionStatement\" &&\n (node.expression.type === \"CallExpression\" ||\n node.expression.type === \"TaggedTemplateExpression\")\n ) &&\n node.type !== \"TryStatement\" &&\n node.type !== \"BlockStatement\" &&\n node.type !== \"DoWhileStatement\" &&\n node.type !== \"WhileStatement\" &&\n node.type !== \"ForStatement\" &&\n node.type !== \"ForInStatement\" &&\n node.type !== \"ForOfStatement\"))\n ) {\n yield;\n }\n // Expressions:\n switch (node.type) {\n case \"ArrayExpression\": {\n // https://tc39.es/ecma262/#sec-array-initializer\n const array = new ArrayConstructor();\n for (const element of node.elements) {\n if (!element) {\n array.length += 1;\n } else if (element.type === \"SpreadElement\") {\n const spreadValues = GetValue(\n yield* Evaluate(element.argument)\n ) as unknown[];\n array.push(...spreadValues);\n } else {\n array.push(GetValue(yield* Evaluate(element)));\n }\n }\n return NormalCompletion(array);\n }\n case \"ArrowFunctionExpression\": {\n // https://tc39.es/ecma262/#sec-arrow-function-definitions\n ThrowIfFunctionIsInvalid(node);\n const closure = InstantiateArrowFunctionExpression(node);\n return NormalCompletion(closure);\n }\n case \"BinaryExpression\": {\n const leftRef = yield* Evaluate(node.left);\n const leftValue = GetValue(leftRef);\n const rightRef = yield* Evaluate(node.right);\n const rightValue = GetValue(rightRef);\n if (expressionOnly && (node.operator as unknown) === \"|>\") {\n // Minimal pipeline operator is supported only in expression-only mode.\n // See https://tc39.es/proposal-pipeline-operator\n // and https://github.com/tc39/proposal-pipeline-operator\n if (typeof rightValue !== \"function\") {\n const funcName = codeSource.substring(\n node.right.start!,\n node.right.end!\n );\n throw new TypeError(`${funcName} is not a function`);\n }\n let thisValue;\n if (rightRef instanceof ReferenceRecord) {\n if (IsPropertyReference(rightRef)) {\n thisValue = rightRef.Base;\n }\n }\n return NormalCompletion(\n (rightValue as unknown as Function).call(thisValue, leftValue)\n );\n }\n // https://tc39.es/ecma262/#sec-additive-operators\n const result = ApplyStringOrNumericBinaryOperator(\n leftValue as number,\n node.operator,\n rightValue as number\n );\n return NormalCompletion(result);\n }\n case \"CallExpression\": {\n // https://tc39.es/ecma262/#sec-function-calls\n const ref = (yield* Evaluate(node.callee, optionalChainRef))\n .Value as ReferenceRecord;\n const func = GetValue(ref) as Function;\n if (\n (func === undefined || func === null) &&\n (node.optional || optionalChainRef?.skipped)\n ) {\n optionalChainRef!.skipped = true;\n return NormalCompletion(undefined);\n }\n doSanitize(func);\n\n if (debug) yield;\n\n return yield* EvaluateCall(func, ref, node.arguments, node.callee);\n }\n case \"ChainExpression\":\n // https://tc39.es/ecma262/#sec-optional-chains\n return yield* Evaluate(node.expression, {});\n case \"ConditionalExpression\":\n // https://tc39.es/ecma262/#sec-conditional-operator\n return NormalCompletion(\n GetValue(\n yield* Evaluate(\n GetValue(yield* Evaluate(node.test))\n ? node.consequent\n : node.alternate\n )\n )\n );\n case \"Identifier\":\n // https://tc39.es/ecma262/#sec-identifiers\n return NormalCompletion(ResolveBinding(node.name));\n case \"Literal\": {\n // https://tc39.es/ecma262/#sec-primary-expression-literals\n if (node.regex) {\n if (node.value === null) {\n // Invalid regular expression fails silently in @babel/parser.\n throw new SyntaxError(`Invalid regular expression: ${node.raw}`);\n }\n if (node.regex.flags.includes(\"u\")) {\n // Currently unicode flag is not fully supported across major browsers.\n throw new SyntaxError(\n `Unsupported unicode flag in regular expression: ${node.raw}`\n );\n }\n // Always create a new RegExp, because the AST will be reused.\n return NormalCompletion(\n new RegExp(node.regex.pattern, node.regex.flags)\n );\n }\n return NormalCompletion(node.value);\n }\n case \"LogicalExpression\": {\n // https://tc39.es/ecma262/#sec-binary-logical-operators\n const leftValue = GetValue(yield* Evaluate(node.left));\n switch (node.operator) {\n case \"&&\":\n return NormalCompletion(\n leftValue && GetValue(yield* Evaluate(node.right))\n );\n case \"||\":\n return NormalCompletion(\n leftValue || GetValue(yield* Evaluate(node.right))\n );\n case \"??\":\n return NormalCompletion(\n leftValue ?? GetValue(yield* Evaluate(node.right))\n );\n // istanbul ignore next\n default:\n throw new SyntaxError(\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore never reach here.\n `Unsupported logical operator '${node.operator}'`\n );\n }\n }\n case \"MemberExpression\": {\n // https://tc39.es/ecma262/#sec-property-accessors\n const baseReference = (yield* Evaluate(node.object, optionalChainRef))\n .Value as ReferenceRecord;\n const baseValue = GetValue(baseReference) as Record<\n PropertyKey,\n unknown\n >;\n if (\n (baseValue === undefined || baseValue === null) &&\n (node.optional || optionalChainRef?.skipped)\n ) {\n optionalChainRef!.skipped = true;\n return NormalCompletion(undefined);\n }\n doSanitize(baseValue);\n const result = node.computed\n ? yield* EvaluatePropertyAccessWithExpressionKey(\n baseValue,\n node.property as Expression,\n true\n )\n : EvaluatePropertyAccessWithIdentifierKey(\n baseValue,\n node.property as Identifier,\n true\n );\n doSanitize(result);\n return NormalCompletion(result);\n }\n case \"NewExpression\":\n // https://tc39.es/ecma262/#sec-new-operator\n return yield* EvaluateNew(node.callee, node.arguments);\n case \"ObjectExpression\": {\n // https://tc39.es/ecma262/#sec-object-initializer\n const object: Record<PropertyKey, unknown> = {};\n for (const prop of (node as EstreeObjectExpression).properties) {\n if (prop.type === \"SpreadElement\") {\n const fromValue = GetValue(yield* Evaluate(prop.argument));\n CopyDataProperties(object, fromValue, new Set());\n } else {\n if (prop.kind !== \"init\") {\n throw new SyntaxError(\"Unsupported object getter/setter\");\n }\n const propName =\n !prop.computed && prop.key.type === \"Identifier\"\n ? prop.key.name\n : yield* EvaluateComputedPropertyName(prop.key as Expression);\n if (propName === \"__proto__\") {\n throw new TypeError(\n \"Setting '__proto__' property is not allowed\"\n );\n }\n const propValue = GetValue(yield* Evaluate(prop.value));\n if (prop.method && typeof propValue === \"function\") {\n SetFunctionName(propValue as FunctionObject, propName as string);\n }\n object[propName] = propValue;\n }\n }\n return NormalCompletion(object);\n }\n case \"SequenceExpression\": {\n // https://tc39.es/ecma262/#sec-comma-operator\n let result: CompletionRecord | undefined;\n for (const expr of node.expressions) {\n result = NormalCompletion(GetValue(yield* Evaluate(expr)));\n }\n return result!;\n }\n case \"TemplateLiteral\": {\n // https://tc39.es/ecma262/#sec-template-literals\n const chunks: string[] = [node.quasis[0].value.cooked!];\n let index = 0;\n for (const expr of node.expressions) {\n const val = GetValue(yield* Evaluate(expr));\n chunks.push(String(val));\n chunks.push(node.quasis[(index += 1)].value.cooked!);\n }\n return NormalCompletion(chunks.join(\"\"));\n }\n case \"TaggedTemplateExpression\": {\n // https://tc39.es/ecma262/#sec-tagged-templates\n const tagRef = (yield* Evaluate(node.tag)).Value as ReferenceRecord;\n const tagFunc = GetValue(tagRef) as Function;\n doSanitize(tagFunc);\n if (debug) yield;\n return yield* EvaluateCall(tagFunc, tagRef, node.quasi, node.tag);\n }\n case \"UnaryExpression\": {\n // https://tc39.es/ecma262/#sec-unary-operators\n const ref = (yield* Evaluate(node.argument)).Value as ReferenceRecord;\n if (!expressionOnly && node.operator === \"delete\") {\n // Delete operator is supported only in function mode.\n if (!(ref instanceof ReferenceRecord)) {\n return NormalCompletion(true);\n }\n // istanbul ignore else\n if (IsPropertyReference(ref)) {\n const deleteStatus = delete (\n ref.Base as Record<PropertyKey, unknown>\n )[ref.ReferenceName];\n return NormalCompletion(deleteStatus);\n }\n // Should never reach here in strict mode.\n }\n if (node.operator === \"typeof\") {\n if (ref instanceof ReferenceRecord && ref.Base === \"unresolvable\") {\n return NormalCompletion(\"undefined\");\n }\n return NormalCompletion(typeof GetValue(ref));\n }\n return NormalCompletion(\n ApplyUnaryOperator(GetValue(ref), node.operator)\n );\n }\n }\n if (!expressionOnly) {\n // Statements and assignments:\n switch (node.type) {\n case \"AssignmentExpression\": {\n // https://tc39.es/ecma262/#sec-assignment-operators\n if (node.operator === \"=\") {\n if (\n !(\n node.left.type === \"ArrayPattern\" ||\n node.left.type === \"ObjectPattern\"\n )\n ) {\n const lref = (yield* Evaluate(node.left))\n .Value as ReferenceRecord;\n let rval: unknown;\n if (\n IsAnonymousFunctionDefinition(node.right) &&\n node.left.type === \"Identifier\"\n ) {\n rval = NamedEvaluation(node.right, node.left.name);\n } else {\n const rref = yield* Evaluate(node.right);\n rval = GetValue(rref);\n }\n PutValue(lref, rval);\n return NormalCompletion(rval);\n }\n const rref = yield* Evaluate(node.right);\n const rval = GetValue(rref) as string | number;\n yield* DestructuringAssignmentEvaluation(node.left, rval);\n return NormalCompletion(rval);\n }\n // Operators other than `=`.\n const lref = (yield* Evaluate(node.left)).Value as ReferenceRecord;\n const lval = GetValue(lref) as string | number;\n const rref = yield* Evaluate(node.right);\n const rval = GetValue(rref) as string | number;\n const r = ApplyStringOrNumericAssignment(lval, node.operator, rval);\n PutValue(lref, r);\n return NormalCompletion(r);\n }\n case \"BlockStatement\": {\n // https://tc39.es/ecma262/#sec-block\n if (!node.body.length) {\n return NormalCompletion(Empty);\n }\n const oldEnv = getRunningContext().LexicalEnvironment;\n const blockEnv = new DeclarativeEnvironment(oldEnv);\n BlockDeclarationInstantiation(node.body, blockEnv);\n getRunningContext().LexicalEnvironment = blockEnv;\n const blockValue = yield* EvaluateStatementList(node.body);\n getRunningContext().LexicalEnvironment = oldEnv;\n return blockValue;\n }\n case \"BreakStatement\":\n // https://tc39.es/ecma262/#sec-break-statement\n return new CompletionRecord(\"break\", Empty);\n case \"ContinueStatement\":\n // https://tc39.es/ecma262/#sec-continue-statement\n return new CompletionRecord(\"continue\", Empty);\n case \"EmptyStatement\":\n // https://tc39.es/ecma262/#sec-empty-statement\n return NormalCompletion(Empty);\n case \"DoWhileStatement\":\n // https://tc39.es/ecma262/#sec-do-while-statement\n return EvaluateBreakableStatement(yield* DoWhileLoopEvaluation(node));\n case \"ExpressionStatement\":\n case \"TSAsExpression\":\n // https://tc39.es/ecma262/#sec-expression-statement\n return yield* Evaluate(node.expression);\n case \"ForInStatement\":\n case \"ForOfStatement\":\n // https://tc39.es/ecma262/#sec-for-in-and-for-of-statements\n return EvaluateBreakableStatement(yield* ForInOfLoopEvaluation(node));\n case \"ForStatement\":\n // https://tc39.es/ecma262/#sec-for-statement\n return EvaluateBreakableStatement(yield* ForLoopEvaluation(node));\n case \"FunctionDeclaration\":\n // https://tc39.es/ecma262/#sec-function-definitions\n return NormalCompletion(Empty);\n case \"FunctionExpression\":\n // https://tc39.es/ecma262/#sec-function-defining-expressions\n ThrowIfFunctionIsInvalid(node);\n return NormalCompletion(InstantiateOrdinaryFunctionExpression(node));\n case \"IfStatement\":\n // https://tc39.es/ecma262/#sec-if-statement\n if (GetValue(yield* Evaluate(node.test))) {\n hooks.beforeBranch?.(node, \"if\");\n return UpdateEmpty(yield* Evaluate(node.consequent), undefined);\n }\n hooks.beforeBranch?.(node, \"else\");\n if (node.alternate) {\n return UpdateEmpty(yield* Evaluate(node.alternate), undefined);\n }\n return NormalCompletion(undefined);\n case \"ReturnStatement\": {\n // https://tc39.es/ecma262/#sec-return-statement\n let v: unknown;\n if (node.argument) {\n const exprRef = yield* Evaluate(node.argument);\n v = GetValue(exprRef);\n }\n return new CompletionRecord(\"return\", v);\n }\n case \"ThisExpression\": {\n if (!externalSourceForDebug) {\n break;\n }\n const envRec = GetThisEnvironment();\n return NormalCompletion(envRec.GetThisBinding());\n }\n case \"ThrowStatement\":\n // https://tc39.es/ecma262/#sec-throw-statement\n throw GetValue(yield* Evaluate(node.argument));\n case \"UpdateExpression\": {\n // https://tc39.es/ecma262/#sec-update-expressions\n const lhs = (yield* Evaluate(node.argument)).Value as ReferenceRecord;\n const oldValue = Number(GetValue(lhs));\n const newValue = node.operator === \"++\" ? oldValue + 1 : oldValue - 1;\n PutValue(lhs, newValue);\n return NormalCompletion(node.prefix ? newValue : oldValue);\n }\n case \"SwitchCase\":\n return yield* EvaluateStatementList(node.consequent);\n case \"SwitchStatement\": {\n // https://tc39.es/ecma262/#sec-switch-statement\n const exprRef = yield* Evaluate(node.discriminant);\n const switchValue = GetValue(exprRef);\n const oldEnv = getRunningContext().LexicalEnvironment;\n const blockEnv = new DeclarativeEnvironment(oldEnv);\n BlockDeclarationInstantiation(node.cases, blockEnv);\n getRunningContext().LexicalEnvironment = blockEnv;\n const R = yield* CaseBlockEvaluation(node.cases, switchValue);\n getRunningContext().LexicalEnvironment = oldEnv;\n return EvaluateBreakableStatement(R);\n }\n case \"TryStatement\": {\n // https://tc39.es/ecma262/#sec-try-statement\n let R: CompletionRecord;\n try {\n R = yield* Evaluate(node.block);\n } catch (error) {\n if (node.handler) {\n currentNode = node.handler;\n hooks.beforeEvaluate?.(node.handler);\n R = yield* CatchClauseEvaluation(node.handler, error);\n } else {\n throw error;\n }\n } finally {\n if (node.finalizer) {\n const F = yield* Evaluate(node.finalizer);\n if (F.Type !== \"normal\") {\n R = F;\n }\n }\n }\n return R;\n }\n case \"VariableDeclaration\": {\n // https://tc39.es/ecma262/#sec-declarations-and-the-variable-statement\n let result: CompletionRecord | undefined;\n for (const declarator of node.declarations) {\n currentNode = declarator;\n if (!declarator.init) {\n // Assert: a declarator without init is always an identifier.\n if (node.kind === \"var\") {\n result = NormalCompletion(Empty);\n } else {\n const lhs = ResolveBinding((declarator.id as Identifier).name);\n result = InitializeReferencedBinding(lhs, undefined);\n }\n } else if (declarator.id.type === \"Identifier\") {\n currentNode = declarator.init;\n if (\n debug &&\n currentNode.type !== \"CallExpression\" &&\n currentNode.type !== \"TaggedTemplateExpression\"\n )\n yield;\n const bindingId = declarator.id.name;\n const lhs = ResolveBinding(bindingId);\n let value: unknown;\n if (IsAnonymousFunctionDefinition(declarator.init)) {\n value = NamedEvaluation(declarator.init, bindingId);\n } else {\n const rhs = yield* Evaluate(declarator.init);\n value = GetValue(rhs);\n }\n result =\n node.kind === \"var\"\n ? PutValue(lhs, value)\n : InitializeReferencedBinding(lhs, value);\n } else {\n currentNode = declarator.init;\n if (\n debug &&\n currentNode.type !== \"CallExpression\" &&\n currentNode.type !== \"TaggedTemplateExpression\"\n )\n yield;\n const rhs = yield* Evaluate(declarator.init);\n const rval = GetValue(rhs);\n result = yield* BindingInitialization(\n declarator.id,\n rval,\n node.kind === \"var\"\n ? undefined\n : getRunningContext().LexicalEnvironment\n );\n }\n }\n return result!;\n }\n case \"WhileStatement\":\n // https://tc39.es/ecma262/#sec-while-statement\n return EvaluateBreakableStatement(yield* WhileLoopEvaluation(node));\n }\n }\n // eslint-disable-next-line no-console\n throw new SyntaxError(`Unsupported node type \\`${node.type}\\``);\n }\n\n // https://tc39.es/ecma262/#sec-execution-contexts\n function getRunningContext(): ExecutionContext {\n return executionContextStack[executionContextStack.length - 1];\n }\n\n // https://tc39.es/ecma262/#sec-resolvebinding\n function ResolveBinding(\n name: string,\n env?: EnvironmentRecord\n ): ReferenceRecord {\n if (!env) {\n env = getRunningContext().LexicalEnvironment;\n }\n return GetIdentifierReference(env, name, true);\n }\n\n // Try statements.\n // https://tc39.es/ecma262/#sec-runtime-semantics-catchclauseevaluation\n function* CatchClauseEvaluation(\n node: CatchClause,\n thrownValue: unknown\n ): CompletionRecordResult {\n if (!node.param) {\n return yield* Evaluate(node.body);\n }\n const oldEnv = getRunningContext().LexicalEnvironment;\n const catchEnv = new DeclarativeEnvironment(oldEnv);\n for (const argName of collectBoundNames(node.param)) {\n catchEnv.CreateMutableBinding(argName, false);\n }\n getRunningContext().LexicalEnvironment = catchEnv;\n yield* BindingInitialization(node.param, thrownValue, catchEnv);\n const B = yield* Evaluate(node.body);\n getRunningContext().LexicalEnvironment = oldEnv;\n return B;\n }\n\n // Iteration statements and switch statements.\n // https://tc39.es/ecma262/#prod-BreakableStatement\n function EvaluateBreakableStatement(\n stmtResult: CompletionRecord\n ): CompletionRecord {\n return stmtResult.Type === \"break\"\n ? stmtResult.Value === Empty\n ? NormalCompletion(undefined)\n : NormalCompletion(stmtResult.Value)\n : stmtResult;\n }\n\n // Switch statements.\n // https://tc39.es/ecma262/#sec-runtime-semantics-caseblockevaluation\n function* CaseBlockEvaluation(\n cases: SwitchCase[],\n input: unknown\n ): CompletionRecordResult {\n let V: unknown;\n\n const defaultCaseIndex = cases.findIndex((switchCase) => !switchCase.test);\n const hasDefaultCase = defaultCaseIndex >= 0;\n const A = hasDefaultCase ? cases.slice(0, defaultCaseIndex) : cases;\n let found = false;\n for (const C of A) {\n if (!found) {\n found = yield* CaseClauseIsSelected(C, input);\n }\n if (found) {\n const R = yield* Evaluate(C);\n if (R.Value !== Empty) {\n V = R.Value;\n }\n if (R.Type !== \"normal\") {\n return UpdateEmpty(R, V);\n }\n }\n }\n\n if (!hasDefaultCase) {\n return NormalCompletion(V);\n }\n\n let foundInB = false;\n const B = cases.slice(defaultCaseIndex + 1);\n if (!found) {\n for (const C of B) {\n if (!foundInB) {\n foundInB = yield* CaseClauseIsSelected(C, input);\n }\n if (foundInB) {\n const R = yield* Evaluate(C);\n if (R.Value !== Empty) {\n V = R.Value;\n }\n if (R.Type !== \"normal\") {\n return UpdateEmpty(R, V);\n }\n }\n }\n }\n\n if (foundInB) {\n return NormalCompletion(V);\n }\n const R = yield* Evaluate(cases[defaultCaseIndex]);\n if (R.Value !== Empty) {\n V = R.Value;\n }\n if (R.Type !== \"normal\") {\n return UpdateEmpty(R, V);\n }\n\n // NOTE: The following is another complete iteration of the second CaseClauses.\n for (const C of B) {\n const R = yield* Evaluate(C);\n if (R.Value !== Empty) {\n V = R.Value;\n }\n if (R.Type !== \"normal\") {\n return UpdateEmpty(R, V);\n }\n }\n return NormalCompletion(V);\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-caseclauseisselected\n function* CaseClauseIsSelected(\n C: SwitchCase,\n input: unknown\n ): EvaluateResult<unknown, boolean> {\n const clauseSelector = GetValue(yield* Evaluate(C.test!));\n return input === clauseSelector;\n }\n\n // While statements.\n // https://tc39.es/ecma262/#sec-runtime-semantics-whileloopevaluation\n function* WhileLoopEvaluation(node: WhileStatement): CompletionRecordResult {\n let V: unknown;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const exprValue = GetValue(yield* Evaluate(node.test, undefined, true));\n if (!exprValue) {\n return NormalCompletion(V);\n }\n const stmtResult = yield* Evaluate(node.body);\n if (!LoopContinues(stmtResult)) {\n return UpdateEmpty(stmtResult, V);\n }\n if (stmtResult.Value !== Empty) {\n V = stmtResult.Value;\n }\n }\n }\n\n // Do-while Statements.\n // https://tc39.es/ecma262/#sec-runtime-semantics-dowhileloopevaluation\n function* DoWhileLoopEvaluation(\n node: DoWhileStatement\n ): CompletionRecordResult {\n let V: unknown;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const stmtResult = yield* Evaluate(node.body);\n if (!LoopContinues(stmtResult)) {\n return UpdateEmpty(stmtResult, V);\n }\n if (stmtResult.Value !== Empty) {\n V = stmtResult.Value;\n }\n const exprValue = GetValue(yield* Evaluate(node.test, undefined, true));\n if (!exprValue) {\n return NormalCompletion(V);\n }\n }\n }\n\n // For in/of statements.\n // https://tc39.es/ecma262/#sec-runtime-semantics-forinofloopevaluation\n function* ForInOfLoopEvaluation(\n node: ForInStatement | ForOfStatement\n ): CompletionRecordResult {\n const lhs = node.left;\n const isVariableDeclaration = lhs.type === \"VariableDeclaration\";\n const lhsKind = isVariableDeclaration\n ? lhs.kind === \"var\"\n ? \"varBinding\"\n : \"lexicalBinding\"\n : \"assignment\";\n const uninitializedBoundNames =\n lhsKind === \"lexicalBinding\" ? collectBoundNames(lhs) : [];\n const iterationKind =\n node.type === \"ForInStatement\" ? \"enumerate\" : \"iterate\";\n const keyResult = yield* ForInOfHeadEvaluation(\n uninitializedBoundNames,\n node.right,\n iterationKind\n );\n if (keyResult.Type !== \"normal\") {\n // When enumerate, if the target is nil, a break completion will be returned.\n return keyResult;\n }\n return yield* ForInOfBodyEvaluation(\n lhs,\n node.body,\n keyResult.Value as Iterator<unknown>,\n iterationKind,\n lhsKind\n );\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-forinofheadevaluation\n function* ForInOfHeadEvaluation(\n uninitializedBoundNames: string[],\n expr: Expression,\n iterationKind: \"enumerate\" | \"iterate\"\n ): CompletionRecordResult {\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n if (uninitializedBoundNames.length > 0) {\n const newEnv = new DeclarativeEnvironment(oldEnv);\n for (const name of uninitializedBoundNames) {\n newEnv.CreateMutableBinding(name, false);\n }\n runningContext.LexicalEnvironment = newEnv;\n }\n const exprRef = yield* Evaluate(expr, undefined, true);\n runningContext.LexicalEnvironment = oldEnv;\n const exprValue = GetValue(exprRef);\n if (iterationKind === \"enumerate\") {\n if (exprValue === null || exprValue === undefined) {\n return new CompletionRecord(\"break\", Empty);\n }\n const iterator = EnumerateObjectProperties(exprValue);\n return NormalCompletion(iterator);\n }\n const iterator = CreateListIteratorRecord(exprValue as Iterable<unknown>);\n return NormalCompletion(iterator);\n }\n\n function* ForInOfBodyEvaluation(\n node: VariableDeclaration | EstreeLVal,\n stmt: Statement,\n iteratorRecord: Iterator<unknown>,\n iterationKind: \"enumerate\" | \"iterate\",\n lhsKind: \"varBinding\" | \"lexicalBinding\" | \"assignment\"\n ): CompletionRecordResult {\n const lhs =\n lhsKind === \"assignment\"\n ? (node as EstreeLVal)\n : (node as VariableDeclaration).declarations[0].id;\n const oldEnv = getRunningContext().LexicalEnvironment;\n let V: unknown;\n // When `destructuring` is false,\n // For `node` whose `kind` is assignment:\n // `lhs` is an `Identifier` or a `MemberExpression`,\n // Otherwise:\n // `lhs` is an `Identifier`.\n const destructuring =\n lhs.type === \"ObjectPattern\" || lhs.type === \"ArrayPattern\";\n // eslint-disable-next-line no-constant-condition\n while (true) {\n currentNode = lhs;\n const { done, value: nextValue } = iteratorRecord.next();\n if (done) {\n if (debug) yield;\n return NormalCompletion(V);\n }\n let lhsRef: ReferenceRecord | undefined;\n let iterationEnv: DeclarativeEnvironment | undefined;\n if (lhsKind === \"lexicalBinding\") {\n iterationEnv = new DeclarativeEnvironment(oldEnv);\n ForDeclarationBindingInstantiation(\n node as VariableDeclaration,\n iterationEnv\n );\n getRunningContext().LexicalEnvironment = iterationEnv;\n if (debug) yield;\n if (!destructuring) {\n const [lhsName] = collectBoundNames(lhs);\n lhsRef = ResolveBinding(lhsName);\n }\n } else {\n if (debug) yield;\n if (!destructuring) {\n lhsRef = (yield* Evaluate(lhs)).Value as ReferenceRecord;\n }\n }\n\n destructuring\n ? lhsKind === \"assignment\"\n ? yield* DestructuringAssignmentEvaluation(lhs, nextValue)\n : lhsKind === \"varBinding\"\n ? yield* BindingInitialization(lhs, nextValue, undefined)\n : yield* BindingInitialization(lhs, nextValue, iterationEnv)\n : lhsKind === \"lexicalBinding\"\n ? InitializeReferencedBinding(lhsRef!, nextValue)\n : PutValue(lhsRef!, nextValue);\n\n const result = yield* Evaluate(stmt);\n getRunningContext().LexicalEnvironment = oldEnv;\n if (!LoopContinues(result)) {\n const status = UpdateEmpty(result, V);\n if (\n !(\n iterationKind === \"enumerate\" || iteratorRecord.return === undefined\n )\n ) {\n // Perform *IteratorClose*\n // https://tc39.es/ecma262/#sec-iteratorclose\n const innerResult = iteratorRecord.return();\n if (\n !innerResult ||\n ![\"object\", \"function\"].includes(typeof innerResult)\n ) {\n throw new TypeError(`Iterator result is not an object`);\n }\n }\n return status;\n }\n if (result.Value !== Empty) {\n V = result.Value;\n }\n }\n }\n\n // https://tc39.es/ecma262/#sec-enumerate-object-properties\n function* EnumerateObjectProperties(value: any): Iterator<PropertyKey> {\n for (const key in value) {\n yield key;\n }\n }\n\n // For statements.\n // https://tc39.es/ecma262/#sec-runtime-semantics-forloopevaluation\n function* ForLoopEvaluation(node: ForStatement): CompletionRecordResult {\n if (node.init?.type === \"VariableDeclaration\") {\n // `for (var … ; … ; … ) …`\n if (node.init.kind === \"var\") {\n yield* Evaluate(node.init);\n return yield* ForBodyEvaluation(node.test, node.update, node.body, []);\n }\n // `for (let/const … ; … ; … ) …`\n const oldEnv = getRunningContext().LexicalEnvironment;\n const loopEnv = new DeclarativeEnvironment(oldEnv);\n const isConst = node.init.kind === \"const\";\n const boundNames = collectBoundNames(node.init);\n for (const dn of boundNames) {\n if (isConst) {\n loopEnv.CreateImmutableBinding(dn, true);\n } else {\n loopEnv.CreateMutableBinding(dn, false);\n }\n }\n getRunningContext().LexicalEnvironment = loopEnv;\n yield* Evaluate(node.init);\n const perIterationLets = isConst ? [] : Array.from(boundNames);\n const bodyResult = yield* ForBodyEvaluation(\n node.test,\n node.update,\n node.body,\n perIterationLets\n );\n getRunningContext().LexicalEnvironment = oldEnv;\n return bodyResult;\n }\n // `for ( … ; … ; … ) …`\n if (node.init) {\n const exprRef = yield* Evaluate(node.init);\n GetValue(exprRef);\n }\n return yield* ForBodyEvaluation(node.test, node.update, node.body, []);\n }\n\n // https://tc39.es/ecma262/#sec-forbodyevaluation\n function* ForBodyEvaluation(\n test: Expression | null | undefined,\n increment: Expression | null | undefined,\n stmt: Statement,\n perIterationBindings: string[]\n ): CompletionRecordResult {\n CreatePerIterationEnvironment(perIterationBindings);\n let V: unknown;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (test) {\n const testRef = yield* Evaluate(test, undefined, true);\n const testValue = GetValue(testRef);\n if (!testValue) {\n return NormalCompletion(V);\n }\n }\n const result = yield* Evaluate(stmt);\n if (!LoopContinues(result)) {\n return UpdateEmpty(result, V);\n }\n if (result.Value) {\n V = result.Value;\n }\n CreatePerIterationEnvironment(perIterationBindings);\n if (increment) {\n const incRef = yield* Evaluate(increment, undefined, true);\n GetValue(incRef);\n }\n }\n }\n\n // https://tc39.es/ecma262/#sec-createperiterationenvironment\n function CreatePerIterationEnvironment(\n perIterationBindings: string[]\n ): unknown {\n if (perIterationBindings.length === 0) {\n return;\n }\n const lastIterationEnv = getRunningContext().LexicalEnvironment!;\n const outer = lastIterationEnv.OuterEnv;\n const thisIterationEnv = new DeclarativeEnvironment(outer);\n for (const bn of perIterationBindings) {\n thisIterationEnv.CreateMutableBinding(bn, false);\n const lastValue = lastIterationEnv.GetBindingValue(bn, false);\n thisIterationEnv.InitializeBinding(bn, lastValue);\n }\n getRunningContext().LexicalEnvironment = thisIterationEnv;\n }\n\n // Destructuring assignments.\n // https://tc39.es/ecma262/#sec-runtime-semantics-destructuringassignmentevaluation\n function* DestructuringAssignmentEvaluation(\n pattern: ObjectPattern | EstreeObjectPattern | ArrayPattern,\n value: unknown\n ): CompletionRecordResult {\n if (pattern.type === \"ObjectPattern\") {\n RequireObjectCoercible(value);\n if (pattern.properties.length > 0) {\n yield* PropertyDestructuringAssignmentEvaluation(\n (pattern as EstreeObjectPattern).properties,\n value\n );\n }\n return NormalCompletion(Empty);\n }\n const iteratorRecord = CreateListIteratorRecord(value as Iterable<unknown>);\n return yield* IteratorDestructuringAssignmentEvaluation(\n pattern.elements,\n iteratorRecord\n );\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-propertydestructuringassignmentevaluation\n function* PropertyDestructuringAssignmentEvaluation(\n properties: (EstreeProperty | RestElement)[],\n value: unknown\n ): EvaluateResult<unknown, void> {\n const excludedNames = new Set<PropertyKey>();\n for (const prop of properties) {\n if (prop.type === \"Property\") {\n const propName =\n !prop.computed && prop.key.type === \"Identifier\"\n ? prop.key.name\n : ((yield* EvaluateComputedPropertyName(\n prop.key as Expression\n )) as string);\n const valueTarget =\n prop.value.type === \"AssignmentPattern\"\n ? prop.value.left\n : prop.value;\n if (valueTarget.type === \"Identifier\") {\n const lref = ResolveBinding(valueTarget.name);\n let v = GetV(value, propName);\n if (prop.value.type === \"AssignmentPattern\" && v === undefined) {\n if (IsAnonymousFunctionDefinition(prop.value.right)) {\n v = NamedEvaluation(prop.value.right, valueTarget.name);\n } else {\n const defaultValue = yield* Evaluate(prop.value.right);\n v = GetValue(defaultValue);\n }\n }\n PutValue(lref, v);\n excludedNames.add(propName);\n } else {\n yield* KeyedDestructuringAssignmentEvaluation(\n prop.value,\n value,\n propName\n );\n excludedNames.add(propName);\n }\n } else {\n yield* RestDestructuringAssignmentEvaluation(\n prop,\n value,\n excludedNames\n );\n }\n }\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-keyeddestructuringassignmentevaluation\n function* KeyedDestructuringAssignmentEvaluation(\n node: EstreeNode,\n value: unknown,\n propertyName: PropertyKey\n ): CompletionRecordResult {\n const assignmentTarget =\n node.type === \"AssignmentPattern\" ? node.left : node;\n const isObjectOrArray =\n assignmentTarget.type === \"ArrayPattern\" ||\n assignmentTarget.type === \"ObjectPattern\";\n let lref: ReferenceRecord | undefined;\n if (!isObjectOrArray) {\n lref = (yield* Evaluate(assignmentTarget)).Value as ReferenceRecord;\n }\n const v = GetV(value, propertyName);\n let rhsValue;\n if (node.type === \"AssignmentPattern\" && v === undefined) {\n // `assignmentTarget.type` is never \"Identifier\" here.\n const defaultValue = yield* Evaluate(node.right);\n rhsValue = GetValue(defaultValue);\n } else {\n rhsValue = v;\n }\n if (isObjectOrArray) {\n return yield* DestructuringAssignmentEvaluation(\n assignmentTarget,\n rhsValue\n );\n }\n return PutValue(lref!, rhsValue);\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-restdestructuringassignmentevaluation\n function* RestDestructuringAssignmentEvaluation(\n restProperty: RestElement,\n value: unknown,\n excludedNames: Set<PropertyKey>\n ): CompletionRecordResult {\n const lref = (yield* Evaluate(restProperty.argument))\n .Value as ReferenceRecord;\n const restObj = CopyDataProperties({}, value, excludedNames);\n return PutValue(lref, restObj);\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-iteratordestructuringassignmentevaluation\n function* IteratorDestructuringAssignmentEvaluation(\n elements: (PatternLike | LVal | null)[],\n iteratorRecord: Iterator<unknown>\n ): CompletionRecordResult {\n let status = NormalCompletion(Empty);\n for (const element of elements) {\n if (!element) {\n iteratorRecord.next();\n status = NormalCompletion(Empty);\n continue;\n }\n const assignmentTarget =\n element.type === \"RestElement\"\n ? element.argument\n : element.type === \"AssignmentPattern\"\n ? element.left\n : element;\n const isObjectOrArray =\n assignmentTarget.type === \"ArrayPattern\" ||\n assignmentTarget.type === \"ObjectPattern\";\n let lref: ReferenceRecord | undefined;\n if (!isObjectOrArray) {\n lref = (yield* Evaluate(assignmentTarget)).Value as ReferenceRecord;\n }\n let v: unknown;\n if (element.type !== \"RestElement\") {\n const { done, value: nextValue } = iteratorRecord.next();\n const value = done ? undefined : nextValue;\n if (element.type === \"AssignmentPattern\" && value === undefined) {\n if (\n IsAnonymousFunctionDefinition(element.right) &&\n assignmentTarget.type === \"Identifier\"\n ) {\n v = NamedEvaluation(element.right, assignmentTarget.name);\n } else {\n const defaultValue = yield* Evaluate(element.right);\n v = GetValue(defaultValue);\n }\n } else {\n v = value;\n }\n } else {\n // RestElement\n v = new ArrayConstructor();\n let n = 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const { done, value: nextValue } = iteratorRecord.next();\n if (done) {\n break;\n }\n (v as unknown[])[n] = nextValue;\n n++;\n }\n }\n if (isObjectOrArray) {\n status = yield* DestructuringAssignmentEvaluation(assignmentTarget, v);\n } else {\n status = PutValue(lref!, v);\n }\n }\n return status;\n }\n\n // Object expressions.\n // https://tc39.es/ecma262/#sec-evaluate-property-access-with-expression-key\n function* EvaluatePropertyAccessWithExpressionKey(\n baseValue: Record<PropertyKey, unknown>,\n expression: Expression,\n strict: boolean\n ): EvaluateResult<unknown, ReferenceRecord> {\n const propertyNameReference = yield* Evaluate(expression);\n const propertyNameValue = GetValue(propertyNameReference);\n const propertyKey = ToPropertyKey(propertyNameValue);\n return new ReferenceRecord(baseValue, propertyKey, strict);\n }\n\n // https://tc39.es/ecma262/#sec-evaluate-property-access-with-identifier-key\n function EvaluatePropertyAccessWithIdentifierKey(\n baseValue: Record<PropertyKey, unknown>,\n identifier: Identifier,\n strict: boolean\n ): ReferenceRecord {\n currentNode = identifier;\n const propertyNameString = identifier.name;\n return new ReferenceRecord(baseValue, propertyNameString, strict);\n }\n\n // Block statements.\n // https://tc39.es/ecma262/#sec-blockdeclarationinstantiation\n function BlockDeclarationInstantiation(\n code: Statement[] | SwitchCase[],\n env: EnvironmentRecord\n ): void {\n const declarations = collectScopedDeclarations(code, {\n var: false,\n topLevel: false,\n });\n for (const d of declarations) {\n const IsConstantDeclaration =\n d.type === \"VariableDeclaration\" && d.kind === \"const\";\n for (const dn of collectBoundNames(d)) {\n if (IsConstantDeclaration) {\n env.CreateImmutableBinding(dn, true);\n } else {\n env.CreateMutableBinding(dn, false);\n }\n }\n if (d.type === \"FunctionDeclaration\") {\n const [fn] = collectBoundNames(d);\n const fo = InstantiateFunctionObject(d, env);\n env.InitializeBinding(fn, fo);\n }\n }\n }\n\n // Function declarations and expressions.\n // https://tc39.es/ecma262/#sec-evaluatecall\n function* EvaluateCall(\n func: Function,\n ref: ReferenceRecord,\n args: CallExpression[\"arguments\"] | TemplateLiteral,\n callee: CallExpression[\"callee\"]\n ): CompletionRecordResult {\n let thisValue;\n if (ref instanceof ReferenceRecord) {\n if (IsPropertyReference(ref)) {\n thisValue = ref.Base;\n }\n }\n const argList = yield* ArgumentListEvaluation(args);\n if (typeof func !== \"function\") {\n const funcName = codeSource.substring(callee.start!, callee.end!);\n throw new TypeError(`${funcName} is not a function`);\n }\n\n if (debug || externalSourceForDebug) {\n const debuggerCall = (func as FunctionObject)[DebuggerCall];\n if (debuggerCall) {\n const result = yield* (debuggerCall as Function).apply(\n thisValue,\n argList\n );\n doSanitize(result);\n return NormalCompletion(result);\n }\n }\n\n const result = func.apply(thisValue, argList);\n doSanitize(result);\n return NormalCompletion(result);\n }\n\n // https://tc39.es/ecma262/#sec-evaluatenew\n function* EvaluateNew(\n constructExpr: CallExpression[\"callee\"],\n args: NewExpression[\"arguments\"]\n ): CompletionRecordResult {\n const ref = yield* Evaluate(constructExpr);\n const constructor = GetValue(ref) as new (...args: unknown[]) => unknown;\n const argList = yield* ArgumentListEvaluation(args);\n if (\n typeof constructor !== \"function\" ||\n (constructor as unknown as FunctionObject)[IsConstructor] === false\n ) {\n const constructorName = codeSource.substring(\n constructExpr.start!,\n constructExpr.end!\n );\n throw new TypeError(`${constructorName} is not a constructor`);\n }\n if (\n !externalSourceForDebug &&\n !isAllowedConstructor(constructor) &&\n constructor !== ArrayConstructor\n ) {\n const constructorName = codeSource.substring(\n constructExpr.start!,\n constructExpr.end!\n );\n throw new TypeError(`${constructorName} is not an allowed constructor`);\n }\n\n return NormalCompletion(new constructor(...argList));\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-argumentlistevaluation\n function* ArgumentListEvaluation(\n args: CallExpression[\"arguments\"] | TemplateLiteral\n ): EvaluateResult<unknown, unknown[]> {\n const array: unknown[] = [];\n if (Array.isArray(args)) {\n for (const arg of args) {\n if (arg.type === \"SpreadElement\") {\n const spreadValues = GetValue(\n yield* Evaluate(arg.argument)\n ) as unknown[];\n array.push(...spreadValues);\n } else {\n array.push(GetValue(yield* Evaluate(arg)));\n }\n }\n } else {\n array.push(GetTemplateObject(args));\n for (const expr of args.expressions) {\n array.push(GetValue(yield* Evaluate(expr)));\n }\n }\n return array;\n }\n\n // https://tc39.es/ecma262/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n function* CallFunction(\n closure: FunctionObject,\n thisArgument: unknown,\n args: Iterable<unknown>\n ): EvaluateResult<unknown, unknown> {\n hooks.beforeCall?.(closure[SourceNode]);\n const calleeContext = PrepareForOrdinaryCall(closure);\n OrdinaryCallBindThis(closure, calleeContext, thisArgument);\n const result = yield* OrdinaryCallEvaluateBody(closure, args);\n if (debug) {\n currentNode = {\n ...closure[SourceNode],\n [DebuggerReturn]: true,\n } as EstreeNode & {\n [DebuggerReturn]?: boolean;\n };\n yield {\n type: \"return\",\n value: result.Type === \"return\" ? result.Value : undefined,\n };\n }\n executionContextStack.pop();\n globalExecutionContextStack.pop();\n if (result.Type === \"return\") {\n return result.Value;\n }\n return undefined;\n }\n\n // https://tc39.es/ecma262/#sec-prepareforordinarycall\n function PrepareForOrdinaryCall(F: FunctionObject): ExecutionContext {\n const calleeContext = new ExecutionContext();\n calleeContext.Function = F;\n const localEnv = new FunctionEnvironment(F);\n calleeContext.VariableEnvironment = localEnv;\n calleeContext.LexicalEnvironment = localEnv;\n executionContextStack.push(calleeContext);\n globalExecutionContextStack.push(calleeContext);\n return calleeContext;\n }\n\n function OrdinaryCallBindThis(\n F: FunctionObject,\n calleeContext: ExecutionContext,\n thisArgument: unknown\n ) {\n if (F[ThisMode] === Mode.LEXICAL) {\n return;\n }\n const localEnv = calleeContext.LexicalEnvironment;\n (localEnv as FunctionEnvironment)?.BindThisValue(thisArgument);\n }\n\n // https://tc39.es/ecma262/#sec-ordinarycallevaluatebody\n function* OrdinaryCallEvaluateBody(\n F: FunctionObject,\n args: Iterable<unknown>\n ): CompletionRecordResult {\n return yield* EvaluateFunctionBody(F[ECMAScriptCode], F, args);\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-evaluatefunctionbody\n function* EvaluateFunctionBody(\n body: Statement[] | Expression,\n F: FunctionObject,\n args: Iterable<unknown>\n ): CompletionRecordResult {\n yield* FunctionDeclarationInstantiation(F, args);\n if (Array.isArray(body)) {\n return yield* EvaluateStatementList(body);\n }\n return new CompletionRecord(\"return\", GetValue(yield* Evaluate(body)));\n }\n\n // https://tc39.es/ecma262/#sec-block-runtime-semantics-evaluation\n function* EvaluateStatementList(\n statements: Statement[]\n ): CompletionRecordResult {\n let result = NormalCompletion(Empty);\n for (const stmt of statements) {\n const s = yield* Evaluate(stmt);\n if (s.Type !== \"normal\") {\n return s;\n }\n result = UpdateEmpty(result, s.Value);\n }\n return result;\n }\n\n function GetThisEnvironment(): FunctionEnvironment {\n let env: EnvironmentRecord | null | undefined =\n getRunningContext().LexicalEnvironment;\n while (env) {\n if (env.HasThisBinding()) {\n return env as FunctionEnvironment;\n }\n env = env.OuterEnv;\n }\n throw new Error(\"Accessing global this is forbidden\");\n }\n\n // https://tc39.es/ecma262/#sec-isanonymousfunctiondefinition\n function IsAnonymousFunctionDefinition(\n node: EstreeNode\n ): node is FunctionDefinition {\n // No ParenthesizedExpression in ESTree.\n return (\n (node.type === \"FunctionExpression\" && !node.id) ||\n node.type === \"ArrowFunctionExpression\"\n );\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-namedevaluation\n function NamedEvaluation(node: FunctionDefinition, name: string) {\n hooks.beforeEvaluate?.(node);\n // No ParenthesizedExpression in ESTree.\n switch (node.type) {\n case \"FunctionExpression\":\n return InstantiateOrdinaryFunctionExpression(node, name);\n case \"ArrowFunctionExpression\":\n return InstantiateArrowFunctionExpression(node, name);\n // istanbul ignore next: should never happen\n default:\n throw new Error(\n `Unexpected node type for NamedEvaluation: ${(node as FunctionDefinition).type}`\n );\n }\n }\n\n // https://tc39.es/ecma262/#sec-functiondeclarationinstantiation\n function* FunctionDeclarationInstantiation(\n func: FunctionObject,\n args: Iterable<unknown>\n ): EvaluateResult<unknown, void> {\n const calleeContext = getRunningContext();\n const code = func[ECMAScriptCode];\n const formals = func[FormalParameters] as FunctionDeclaration[\"params\"];\n const parameterNames = collectBoundNames(formals);\n const hasParameterExpressions = containsExpression(formals);\n const varDeclarations = collectScopedDeclarations(code, {\n var: true,\n topLevel: true,\n });\n const varNames = collectBoundNames(varDeclarations);\n\n // `functionNames` ∈ `varNames`\n // `functionsToInitialize` ≈ `functionNames`\n const functionNames: string[] = [];\n const functionsToInitialize: FunctionDeclaration[] = [];\n for (let i = varDeclarations.length - 1; i >= 0; i--) {\n const d = varDeclarations[i];\n if (d.type === \"FunctionDeclaration\") {\n ThrowIfFunctionIsInvalid(d);\n const [fn] = collectBoundNames(d);\n if (!functionNames.includes(fn)) {\n functionNames.unshift(fn);\n functionsToInitialize.unshift(d);\n }\n } else if (rules?.noVar) {\n throw new SyntaxError(\n \"Var declaration is not recommended, use `let` or `const` instead\"\n );\n }\n }\n\n // let argumentsObjectNeeded = true;\n // if (func[ThisMode] === Mode.LEXICAL) {\n // // NOTE: Arrow functions never have an arguments object.\n // argumentsObjectNeeded = false;\n // } else if (parameterNames.includes(\"arguments\")) {\n // argumentsObjectNeeded = false;\n // } else if (!hasParameterExpressions && (\n // varNames.includes(\"arguments\") ||\n // collectBoundNames(collectScopedDeclarations(code, { var: false })).includes(\"arguments\")\n // )) {\n // argumentsObjectNeeded = false;\n // }\n // NOTE: In strict mode, no parameter/function/var/lexical names can be \"arguments\".\n const argumentsObjectNeeded =\n !!externalSourceForDebug && func[ThisMode] !== Mode.LEXICAL;\n\n const env = calleeContext.LexicalEnvironment!;\n for (const paramName of parameterNames) {\n // In strict mode, it's guaranteed no duplicate params exist.\n env.CreateMutableBinding(paramName, false);\n }\n\n let parameterBindings = parameterNames;\n if (argumentsObjectNeeded) {\n const ao = CreateUnmappedArgumentsObject(args);\n env.CreateImmutableBinding(\"arguments\", false);\n env.InitializeBinding(\"arguments\", ao);\n parameterBindings = parameterNames.concat(\"arguments\");\n }\n\n const iteratorRecord = CreateListIteratorRecord(args);\n yield* IteratorBindingInitialization(formals, iteratorRecord, env);\n\n let varEnv: EnvironmentRecord;\n if (!hasParameterExpressions) {\n // NOTE: Only a single Environment Record is needed for the parameters\n // and top-level vars.\n // `varNames` are unique.\n const instantiatedVarNames = [...parameterBindings];\n for (const n of varNames) {\n if (!instantiatedVarNames.includes(n)) {\n instantiatedVarNames.push(n);\n env.CreateMutableBinding(n, false);\n env.InitializeBinding(n, undefined);\n }\n }\n varEnv = env;\n } else {\n // NOTE: A separate Environment Record is needed to ensure that closures\n // created by expressions in the formal parameter list do not have\n // visibility of declarations in the function body.\n varEnv = new DeclarativeEnvironment(env);\n calleeContext.VariableEnvironment = varEnv;\n // `varNames` are unique.\n const instantiatedVarNames: string[] = [];\n for (const n of varNames) {\n if (!instantiatedVarNames.includes(n)) {\n instantiatedVarNames.push(n);\n varEnv.CreateMutableBinding(n, false);\n let initialValue: unknown;\n if (parameterBindings.includes(n) && !functionNames.includes(n)) {\n initialValue = env.GetBindingValue(n, false);\n }\n varEnv.InitializeBinding(n, initialValue);\n // NOTE: A var with the same name as a formal parameter initially has\n // the same value as the corresponding initialized parameter.\n }\n }\n }\n const lexEnv = varEnv;\n calleeContext.LexicalEnvironment = lexEnv;\n\n const lexDeclarations = collectScopedDeclarations(code, {\n var: false,\n topLevel: true,\n });\n for (const d of lexDeclarations) {\n for (const dn of collectBoundNames(d)) {\n // Only lexical VariableDeclaration here in top-level.\n if ((d as VariableDeclaration).kind === \"const\") {\n lexEnv.CreateImmutableBinding(dn, true);\n } else {\n lexEnv.CreateMutableBinding(dn, false);\n }\n }\n }\n\n for (const f of functionsToInitialize) {\n const [fn] = collectBoundNames(f);\n const fo = InstantiateFunctionObject(f, lexEnv);\n varEnv.SetMutableBinding(fn, fo, false);\n }\n }\n\n function CreateUnmappedArgumentsObject(args: Iterable<unknown>) {\n const argList = [...args];\n const argumentObject: Record<string, unknown> = {};\n Object.defineProperty(argumentObject, \"length\", {\n value: argList.length,\n writable: true,\n configurable: true,\n });\n for (let index = 0; index < argList.length; index++) {\n argumentObject[String(index)] = argList[index];\n }\n Object.defineProperty(argumentObject, Symbol.iterator, {\n value: Array.prototype.values,\n writable: true,\n configurable: true,\n });\n const ThrowTypeError = () => {\n throw new TypeError(\n \"'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them\"\n );\n };\n Object.defineProperty(argumentObject, \"callee\", {\n get: ThrowTypeError,\n set: ThrowTypeError,\n });\n return argumentObject;\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-instantiatefunctionobject\n function InstantiateFunctionObject(\n func: FunctionDeclaration,\n scope: EnvironmentRecord\n ): FunctionObject {\n const F = OrdinaryFunctionCreate(func, scope, true, false);\n\n if (func.id) {\n SetFunctionName(F, func.id.name);\n }\n\n return F;\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-instantiateordinaryfunctionexpression\n function InstantiateOrdinaryFunctionExpression(\n functionExpression: FunctionExpression,\n name?: string\n ): FunctionObject {\n const scope = getRunningContext().LexicalEnvironment!;\n if (functionExpression.id) {\n const name = functionExpression.id.name;\n const funcEnv = new DeclarativeEnvironment(scope);\n funcEnv.CreateImmutableBinding(name, false);\n const closure = OrdinaryFunctionCreate(\n functionExpression,\n funcEnv,\n true,\n false\n );\n SetFunctionName(closure, name);\n funcEnv.InitializeBinding(name, closure);\n return closure;\n } else {\n const closure = OrdinaryFunctionCreate(\n functionExpression,\n scope,\n true,\n false\n );\n SetFunctionName(closure, name ?? \"\");\n return closure;\n }\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-instantiatearrowfunctionexpression\n function InstantiateArrowFunctionExpression(\n arrowFunction: ArrowFunctionExpression,\n name?: string\n ): FunctionObject {\n const scope = getRunningContext().LexicalEnvironment!;\n const closure = OrdinaryFunctionCreate(arrowFunction, scope, false, true);\n SetFunctionName(closure, name ?? \"\");\n return closure;\n }\n\n function SetFunctionName(F: FunctionObject, name: string) {\n Object.defineProperty(F, \"name\", {\n value: name,\n configurable: true,\n });\n }\n\n // https://tc39.es/ecma262/#sec-ordinaryfunctioncreate\n function OrdinaryFunctionCreate(\n sourceNode:\n | FunctionDeclaration\n | FunctionExpression\n | ArrowFunctionExpression,\n scope: EnvironmentRecord,\n isConstructor: boolean,\n lexicalThis: boolean\n ): FunctionObject {\n const F = function (this: unknown) {\n // eslint-disable-next-line prefer-rest-params\n return unwind(CallFunction(F, this, arguments));\n } as FunctionObject;\n Object.defineProperties(F, {\n [SourceNode]: {\n value: sourceNode,\n },\n [FormalParameters]: {\n value: sourceNode.params,\n },\n [ECMAScriptCode]: {\n value:\n sourceNode.body.type === \"BlockStatement\"\n ? sourceNode.body.body\n : sourceNode.body,\n },\n [Environment]: {\n value: scope,\n },\n [IsConstructor]: {\n value: isConstructor,\n },\n [ThisMode]: {\n value: lexicalThis ? Mode.LEXICAL : Mode.STRICT,\n },\n });\n\n const len = ExpectedArgumentCount(sourceNode.params);\n Object.defineProperty(F, \"length\", {\n configurable: true,\n value: len,\n });\n\n if (debug || externalSourceForDebug) {\n Object.defineProperty(F, DebuggerCall, {\n value: function () {\n // eslint-disable-next-line prefer-rest-params\n return CallFunction(F, this, arguments);\n },\n });\n }\n return F;\n }\n\n function ExpectedArgumentCount(\n params: (Identifier | Pattern | RestElement)[]\n ) {\n let count = 0;\n for (const param of params) {\n switch (param.type) {\n case \"AssignmentPattern\":\n case \"RestElement\":\n return count;\n default:\n count++;\n }\n }\n return count;\n }\n\n // Patterns initialization.\n // https://tc39.es/ecma262/#sec-runtime-semantics-bindinginitialization\n function* BindingInitialization(\n node: EstreeLVal,\n value: unknown,\n environment?: EnvironmentRecord\n ): EvaluateResult<unknown, CompletionRecord | undefined> {\n switch (node.type) {\n case \"Identifier\":\n return InitializeBoundName(node.name, value, environment);\n case \"ObjectPattern\":\n RequireObjectCoercible(value);\n return yield* PropertyBindingInitialization(\n (node as EstreeObjectPattern).properties,\n value,\n environment\n );\n case \"ArrayPattern\": {\n const iteratorRecord = CreateListIteratorRecord(\n value as Iterable<unknown>\n );\n return yield* IteratorBindingInitialization(\n node.elements,\n iteratorRecord,\n environment\n );\n }\n }\n }\n\n // https://tc39.es/ecma262/#sec-destructuring-binding-patterns-runtime-semantics-propertybindinginitialization\n function* PropertyBindingInitialization(\n properties: (EstreeProperty | RestElement)[],\n value: unknown,\n environment?: EnvironmentRecord\n ): CompletionRecordResult {\n const excludedNames = new Set<PropertyKey>();\n for (const prop of properties) {\n if (prop.type === \"RestElement\") {\n return RestBindingInitialization(\n prop,\n value,\n environment,\n excludedNames\n );\n }\n if (!prop.computed && prop.key.type === \"Identifier\") {\n yield* KeyedBindingInitialization(\n prop.value as EstreeLVal,\n value,\n environment,\n prop.key.name\n );\n excludedNames.add(prop.key.name);\n } else {\n const P = yield* EvaluateComputedPropertyName(prop.key as Expression);\n yield* KeyedBindingInitialization(\n prop.value as EstreeLVal,\n value,\n environment,\n P\n );\n excludedNames.add(P);\n }\n }\n return NormalCompletion(Empty);\n }\n\n // https://tc39.es/ecma262/#prod-ComputedPropertyName\n function* EvaluateComputedPropertyName(\n node: Expression\n ): EvaluateResult<unknown, PropertyKey> {\n const propName = GetValue(yield* Evaluate(node));\n return ToPropertyKey(propName);\n }\n\n // https://tc39.es/ecma262/#sec-destructuring-binding-patterns-runtime-semantics-restbindinginitialization\n function RestBindingInitialization(\n restProperty: RestElement,\n value: unknown,\n environment: EnvironmentRecord | undefined,\n excludedNames: Set<PropertyKey>\n ): CompletionRecord {\n const lhs = ResolveBinding(\n (restProperty.argument as Identifier).name,\n environment\n );\n const restObj = CopyDataProperties({}, value, excludedNames);\n if (!environment) {\n return PutValue(lhs, restObj);\n }\n return InitializeReferencedBinding(lhs, restObj);\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-iteratorbindinginitialization\n function* IteratorBindingInitialization(\n elements: (PatternLike | LVal | null)[],\n iteratorRecord: Iterator<unknown>,\n environment?: EnvironmentRecord\n ): EvaluateResult<unknown, CompletionRecord | undefined> {\n if (elements.length === 0) {\n return NormalCompletion(Empty);\n }\n let result;\n for (const node of elements) {\n if (!node) {\n // Elision element.\n iteratorRecord.next();\n result = NormalCompletion(Empty);\n } else if (node.type === \"RestElement\") {\n // Rest element.\n if (node.argument.type === \"Identifier\") {\n const lhs = ResolveBinding(node.argument.name, environment);\n const A: unknown[] = new ArrayConstructor();\n let n = 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const { done, value } = iteratorRecord.next();\n if (done) {\n result = environment\n ? InitializeReferencedBinding(lhs, A)\n : PutValue(lhs, A);\n break;\n }\n A[n] = value;\n n++;\n }\n } else {\n const A: unknown[] = new ArrayConstructor();\n let n = 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const { done, value } = iteratorRecord.next();\n if (done) {\n result = yield* BindingInitialization(\n node.argument,\n A,\n environment\n );\n break;\n }\n A[n] = value;\n n++;\n }\n }\n } else {\n // Normal element.\n const bindingElement =\n node.type === \"AssignmentPattern\" ? node.left : node;\n switch (bindingElement.type) {\n case \"ObjectPattern\":\n case \"ArrayPattern\": {\n let v: unknown;\n const { done, value } = iteratorRecord.next();\n if (!done) {\n v = value;\n }\n if (node.type === \"AssignmentPattern\" && v === undefined) {\n const defaultValue = yield* Evaluate(node.right);\n v = GetValue(defaultValue);\n }\n result = yield* BindingInitialization(\n bindingElement,\n v,\n environment\n );\n break;\n }\n case \"Identifier\": {\n const bindingId = bindingElement.name;\n const lhs = ResolveBinding(bindingId, environment);\n let v: unknown;\n const { done, value } = iteratorRecord.next();\n if (!done) {\n v = value;\n }\n if (node.type === \"AssignmentPattern\" && v === undefined) {\n if (IsAnonymousFunctionDefinition(node.right)) {\n v = NamedEvaluation(node.right, bindingId);\n } else {\n const defaultValue = yield* Evaluate(node.right);\n v = GetValue(defaultValue);\n }\n }\n result = environment\n ? InitializeReferencedBinding(lhs, v)\n : PutValue(lhs, v);\n break;\n }\n }\n }\n }\n return result;\n }\n\n // https://tc39.es/ecma262/#sec-runtime-semantics-keyedbindinginitialization\n function* KeyedBindingInitialization(\n node: EstreeLVal,\n value: unknown,\n environment: EnvironmentRecord | undefined,\n propertyName: PropertyKey\n ): EvaluateResult<unknown, CompletionRecord | undefined> {\n const isIdentifier =\n node.type === \"Identifier\" ||\n (node.type === \"AssignmentPattern\" && node.left.type === \"Identifier\");\n if (isIdentifier) {\n const bindingId =\n node.type === \"Identifier\" ? node.name : (node.left as Identifier).name;\n const lhs = ResolveBinding(bindingId, environment);\n let v = GetV(value, propertyName);\n if (node.type === \"AssignmentPattern\" && v === undefined) {\n if (IsAnonymousFunctionDefinition(node.right)) {\n v = NamedEvaluation(node.right, bindingId);\n } else {\n const defaultValue = yield* Evaluate(node.right);\n v = GetValue(defaultValue);\n }\n }\n if (!environment) {\n return PutValue(lhs, v);\n }\n return InitializeReferencedBinding(lhs, v);\n }\n\n let v = GetV(value, propertyName);\n if (node.type === \"AssignmentPattern\" && v === undefined) {\n const defaultValue = yield* Evaluate(node.right);\n v = GetValue(defaultValue);\n }\n return yield* BindingInitialization(\n node.type === \"AssignmentPattern\" ? node.left : node,\n v,\n environment\n );\n }\n\n // https://tc39.es/ecma262/#sec-initializeboundname\n function InitializeBoundName(\n name: string,\n value: unknown,\n environment?: EnvironmentRecord\n ): CompletionRecord {\n // Assert: environment is always present.\n environment!.InitializeBinding(name, value);\n return NormalCompletion(Empty);\n }\n\n function ThrowIfFunctionIsInvalid(\n func: FunctionDeclaration | FunctionExpression | ArrowFunctionExpression\n ): void {\n if (func.async || func.generator) {\n throw new SyntaxError(\n `${func.async ? \"Async\" : \"Generator\"} function is not allowed`\n );\n }\n if (expressionOnly && !(func as ArrowFunctionExpression).expression) {\n throw new SyntaxError(\n \"Only an `Expression` is allowed in `ArrowFunctionExpression`'s body\"\n );\n }\n }\n\n if (expressionOnly) {\n return GetValue(unwind(Evaluate(rootAst)));\n }\n\n hooks.beforeEvaluate?.(rootAst);\n ThrowIfFunctionIsInvalid(rootAst);\n const [fn] = collectBoundNames(rootAst);\n // Create an immutable binding for the root function.\n rootEnv.CreateImmutableBinding(fn, true);\n const fo = InstantiateFunctionObject(rootAst, rootEnv);\n rootEnv.InitializeBinding(fn, fo);\n\n if (debug) {\n Object.defineProperties(fo, {\n [DebuggerScope]: {\n value: function () {\n return getRunningContext().LexicalEnvironment;\n },\n },\n [DebuggerNode]: {\n value: function () {\n return currentNode;\n },\n },\n });\n }\n\n return fo;\n}\n\nfunction unwind(iterator: EvaluateResult<unknown, unknown>): unknown {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const { done, value } = iterator.next();\n if (done) {\n return value;\n }\n }\n}\n","import {\n ArrowFunctionExpression,\n Expression,\n FunctionDeclaration,\n FunctionExpression,\n Statement,\n} from \"@babel/types\";\n\n// https://tc39.es/ecma262/#sec-execution-contexts\nexport class AnalysisContext {\n VariableEnvironment?: AnalysisEnvironment;\n LexicalEnvironment?: AnalysisEnvironment;\n}\n\n// https://tc39.es/ecma262/#sec-environment-records\nexport class AnalysisEnvironment {\n readonly OuterEnv: AnalysisEnvironment | null | undefined;\n private readonly bindingSet = new Set<string>();\n\n constructor(outer: AnalysisEnvironment | null | undefined) {\n this.OuterEnv = outer;\n }\n\n HasBinding(name: string): boolean {\n return this.bindingSet.has(name);\n }\n\n CreateBinding(name: string): void {\n this.bindingSet.add(name);\n }\n}\n\nexport interface AnalysisFunctionObject {\n Function: FunctionDeclaration | FunctionExpression | ArrowFunctionExpression;\n FormalParameters: FunctionDeclaration[\"params\"];\n ECMAScriptCode: Statement[] | Expression;\n Environment?: AnalysisEnvironment;\n ThisMode: \"LEXICAL\" | \"STRICT\";\n}\n","import {\n ArrowFunctionExpression,\n Expression,\n FunctionDeclaration,\n FunctionExpression,\n Identifier,\n Statement,\n SwitchCase,\n VariableDeclaration,\n} from \"@babel/types\";\nimport { hasOwnProperty } from \"./hasOwnProperty.js\";\nimport {\n AnalysisContext,\n AnalysisEnvironment,\n AnalysisFunctionObject,\n} from \"./AnalysisContext.js\";\nimport {\n EstreeNode,\n EstreeVisitors,\n NodeWithBoundNames,\n} from \"./interfaces.js\";\nimport {\n collectBoundNames,\n collectScopedDeclarations,\n containsExpression,\n} from \"./traverse.js\";\n\nexport interface PrecookOptions {\n expressionOnly?: boolean;\n /** @deprecated Use hooks instead. */\n visitors?: EstreeVisitors;\n hooks?: PrecookHooks;\n withParent?: boolean;\n externalSourceForDebug?: boolean;\n}\n\nexport type EstreeParent = EstreeParentItem[];\n\nexport interface EstreeParentItem {\n node: EstreeNode;\n key: string;\n index?: number;\n}\n\nexport interface PrecookHooks {\n beforeVisit?(node: EstreeNode, parent?: EstreeParent): void;\n beforeVisitGlobal?(node: Identifier, parent?: EstreeParent): void;\n /** Return true if want to silent warnings for unknown nodes. */\n beforeVisitUnknown?(node: EstreeNode, parent?: EstreeParent): boolean | void;\n}\n\n/**\n * Analysis an AST of a storyboard function or an evaluation expression.\n *\n * @param rootAst - The root AST.\n * @param options - Analysis options.\n * @returns A set of global variables the root AST attempts to access.\n */\nexport function precook(\n rootAst: Expression | FunctionDeclaration,\n {\n expressionOnly,\n visitors,\n withParent,\n externalSourceForDebug,\n hooks = {},\n }: PrecookOptions = {}\n): Set<string> {\n const attemptToVisitGlobals = new Set<string>();\n const analysisContextStack: AnalysisContext[] = [];\n const rootEnv = new AnalysisEnvironment(null);\n const rootContext = new AnalysisContext();\n rootContext.VariableEnvironment = rootEnv;\n rootContext.LexicalEnvironment = rootEnv;\n analysisContextStack.push(rootContext);\n\n function getRunningContext(): AnalysisContext {\n return analysisContextStack[analysisContextStack.length - 1];\n }\n\n function visit(node: EstreeNode): void {\n if (visitors && hasOwnProperty(visitors, node.type)) {\n visitors[node.type](node);\n }\n }\n\n function EvaluateChildren<T extends EstreeNode>(\n node: T,\n keys: (keyof T)[],\n parent?: EstreeParent\n ): void {\n for (const key of keys) {\n Evaluate(\n node[key] as unknown as EstreeNode | EstreeNode[],\n parent?.concat({ node, key } as EstreeParentItem)\n );\n }\n }\n\n function Evaluate(\n node: EstreeNode | EstreeNode[],\n parent?: EstreeParent\n ): void {\n if (Array.isArray(node)) {\n node.forEach((n, index) => {\n Evaluate(\n n,\n parent\n ? parent.slice(0, -1).concat({\n ...parent[parent.length - 1],\n index,\n })\n : parent\n );\n });\n } else if (node) {\n // `node` maybe `null` in some cases.\n hooks.beforeVisit?.(node, parent);\n visit(node);\n // Expressions:\n switch (node.type) {\n case \"Identifier\":\n if (!ResolveBinding(node.name)) {\n hooks.beforeVisitGlobal?.(node, parent);\n attemptToVisitGlobals.add(node.name);\n }\n return;\n case \"ArrayExpression\":\n case \"ArrayPattern\":\n EvaluateChildren(node, [\"elements\"], parent);\n return;\n case \"ArrowFunctionExpression\": {\n const env = getRunningContext().LexicalEnvironment;\n const closure = OrdinaryFunctionCreate(node, env, true);\n CallFunction(closure, parent);\n return;\n }\n case \"AssignmentPattern\":\n case \"BinaryExpression\":\n case \"LogicalExpression\":\n EvaluateChildren(node, [\"left\", \"right\"], parent);\n return;\n case \"CallExpression\":\n case \"NewExpression\":\n EvaluateChildren(node, [\"callee\", \"arguments\"], parent);\n return;\n case \"ChainExpression\":\n EvaluateChildren(node, [\"expression\"], parent);\n return;\n case \"ConditionalExpression\":\n EvaluateChildren(node, [\"test\", \"consequent\", \"alternate\"], parent);\n return;\n case \"MemberExpression\":\n EvaluateChildren(node, [\"object\"], parent);\n if (node.computed) {\n EvaluateChildren(node, [\"property\"], parent);\n }\n return;\n case \"ObjectExpression\":\n case \"ObjectPattern\":\n EvaluateChildren(node, [\"properties\"], parent);\n return;\n case \"Property\":\n if (node.computed) {\n EvaluateChildren(node, [\"key\"], parent);\n }\n EvaluateChildren(node, [\"value\"], parent);\n return;\n case \"RestElement\":\n case \"SpreadElement\":\n case \"UnaryExpression\":\n EvaluateChildren(node, [\"argument\"], parent);\n return;\n case \"SequenceExpression\":\n case \"TemplateLiteral\":\n EvaluateChildren(node, [\"expressions\"], parent);\n return;\n case \"TaggedTemplateExpression\":\n EvaluateChildren(node, [\"tag\", \"quasi\"], parent);\n return;\n case \"Literal\":\n return;\n }\n if (!expressionOnly) {\n // Statements and assignments:\n switch (node.type) {\n case \"AssignmentExpression\":\n EvaluateChildren(node, [\"right\", \"left\"], parent);\n return;\n case \"BlockStatement\": {\n if (!node.body.length) {\n return;\n }\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n const blockEnv = new AnalysisEnvironment(oldEnv);\n BlockDeclarationInstantiation(node.body, blockEnv);\n runningContext.LexicalEnvironment = blockEnv;\n EvaluateChildren(node, [\"body\"], parent);\n runningContext.LexicalEnvironment = oldEnv;\n return;\n }\n case \"BreakStatement\":\n case \"ContinueStatement\":\n case \"EmptyStatement\":\n return;\n case \"CatchClause\": {\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n const catchEnv = new AnalysisEnvironment(oldEnv);\n BoundNamesInstantiation(node.param, catchEnv);\n runningContext.LexicalEnvironment = catchEnv;\n EvaluateChildren(node, [\"param\", \"body\"], parent);\n runningContext.LexicalEnvironment = oldEnv;\n return;\n }\n case \"DoWhileStatement\":\n EvaluateChildren(node, [\"body\", \"test\"], parent);\n return;\n case \"ExpressionStatement\":\n case \"TSAsExpression\":\n EvaluateChildren(node, [\"expression\"], parent);\n return;\n case \"ForInStatement\":\n case \"ForOfStatement\": {\n // ForIn/OfHeadEvaluation\n const lexicalBinding =\n node.left.type === \"VariableDeclaration\" &&\n node.left.kind !== \"var\";\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n if (lexicalBinding) {\n const newEnv = new AnalysisEnvironment(oldEnv);\n BoundNamesInstantiation(node.left, newEnv);\n runningContext.LexicalEnvironment = newEnv;\n }\n EvaluateChildren(node, [\"right\"], parent);\n runningContext.LexicalEnvironment = oldEnv;\n\n // ForIn/OfBodyEvaluation\n if (lexicalBinding) {\n const iterationEnv = new AnalysisEnvironment(oldEnv);\n BoundNamesInstantiation(node.left, iterationEnv);\n runningContext.LexicalEnvironment = iterationEnv;\n }\n EvaluateChildren(node, [\"left\", \"body\"], parent);\n runningContext.LexicalEnvironment = oldEnv;\n return;\n }\n case \"ForStatement\": {\n const lexicalBinding =\n node.init?.type === \"VariableDeclaration\" &&\n node.init.kind !== \"var\";\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n if (lexicalBinding) {\n const loopEnv = new AnalysisEnvironment(oldEnv);\n BoundNamesInstantiation(\n node.init as VariableDeclaration,\n loopEnv\n );\n runningContext.LexicalEnvironment = loopEnv;\n }\n EvaluateChildren(node, [\"init\", \"test\", \"body\", \"update\"], parent);\n runningContext.LexicalEnvironment = oldEnv;\n return;\n }\n case \"FunctionDeclaration\": {\n const [fn] = collectBoundNames(node);\n const env = getRunningContext().LexicalEnvironment!;\n const fo = OrdinaryFunctionCreate(node, env);\n env.CreateBinding(fn);\n CallFunction(fo, parent);\n return;\n }\n case \"FunctionExpression\": {\n const closure = InstantiateOrdinaryFunctionExpression(node);\n CallFunction(closure, parent);\n return;\n }\n case \"IfStatement\":\n EvaluateChildren(node, [\"test\", \"consequent\", \"alternate\"], parent);\n return;\n case \"ReturnStatement\":\n case \"ThrowStatement\":\n case \"UpdateExpression\":\n EvaluateChildren(node, [\"argument\"], parent);\n return;\n case \"SwitchCase\":\n EvaluateChildren(node, [\"test\", \"consequent\"], parent);\n return;\n case \"SwitchStatement\": {\n EvaluateChildren(node, [\"discriminant\"], parent);\n const runningContext = getRunningContext();\n const oldEnv = runningContext.LexicalEnvironment;\n const blockEnv = new AnalysisEnvironment(oldEnv);\n BlockDeclarationInstantiation(node.cases, blockEnv);\n runningContext.LexicalEnvironment = blockEnv;\n EvaluateChildren(node, [\"cases\"], parent);\n runningContext.LexicalEnvironment = oldEnv;\n return;\n }\n case \"ThisExpression\": {\n if (!externalSourceForDebug) {\n break;\n }\n return;\n }\n case \"TryStatement\":\n EvaluateChildren(node, [\"block\", \"handler\", \"finalizer\"], parent);\n return;\n case \"VariableDeclaration\":\n EvaluateChildren(node, [\"declarations\"], parent);\n return;\n case \"VariableDeclarator\":\n EvaluateChildren(node, [\"id\", \"init\"], parent);\n return;\n case \"WhileStatement\":\n EvaluateChildren(node, [\"test\", \"body\"], parent);\n return;\n }\n }\n const silent = hooks.beforeVisitUnknown?.(node, parent);\n if (!silent) {\n // eslint-disable-next-line no-console\n console.warn(`Unsupported node type \\`${node.type}\\``);\n }\n }\n }\n\n function BoundNamesInstantiation(\n declarations: NodeWithBoundNames | NodeWithBoundNames[] | null | undefined,\n env: AnalysisEnvironment\n ): void {\n for (const name of collectBoundNames(declarations)) {\n env.CreateBinding(name);\n }\n }\n\n function ResolveBinding(name: string): boolean {\n const env = getRunningContext().LexicalEnvironment;\n return GetIdentifierReference(env, name);\n }\n\n function GetIdentifierReference(\n env: AnalysisEnvironment | null | undefined,\n name: string\n ): boolean {\n return (\n !!env &&\n (env.HasBinding(name) || GetIdentifierReference(env.OuterEnv, name))\n );\n }\n\n function BlockDeclarationInstantiation(\n code: Statement[] | SwitchCase[],\n env: AnalysisEnvironment\n ): void {\n const declarations = collectScopedDeclarations(code, {\n var: false,\n topLevel: false,\n });\n BoundNamesInstantiation(declarations, env);\n }\n\n function CallFunction(\n closure: AnalysisFunctionObject,\n parent?: EstreeParent\n ): void {\n PrepareOrdinaryCall(closure);\n FunctionDeclarationInstantiation(closure, parent);\n Evaluate(\n closure.ECMAScriptCode,\n parent\n ?.concat({\n node: closure.Function,\n key: \"body\",\n })\n .concat(\n closure.Function.body.type === \"BlockStatement\"\n ? {\n node: closure.Function.body,\n key: \"body\",\n }\n : []\n )\n );\n analysisContextStack.pop();\n }\n\n function PrepareOrdinaryCall(F: AnalysisFunctionObject): void {\n const calleeContext = new AnalysisContext();\n const localEnv = new AnalysisEnvironment(F.Environment);\n calleeContext.VariableEnvironment = localEnv;\n calleeContext.LexicalEnvironment = localEnv;\n analysisContextStack.push(calleeContext);\n }\n\n function FunctionDeclarationInstantiation(\n func: AnalysisFunctionObject,\n parent?: EstreeParent\n ): void {\n const calleeContext = getRunningContext();\n const code = func.ECMAScriptCode;\n const formals = func.FormalParameters;\n const hasParameterExpressions = containsExpression(formals);\n const varDeclarations = collectScopedDeclarations(code, {\n var: true,\n topLevel: true,\n });\n const varNames = collectBoundNames(varDeclarations);\n\n const argumentsObjectNeeded =\n !!externalSourceForDebug && func.ThisMode !== \"LEXICAL\";\n\n const env = calleeContext.LexicalEnvironment!;\n BoundNamesInstantiation(formals, env);\n\n if (argumentsObjectNeeded) {\n env.CreateBinding(\"arguments\");\n }\n\n Evaluate(formals, parent?.concat({ node: func.Function, key: \"params\" }));\n\n let varEnv: AnalysisEnvironment;\n if (!hasParameterExpressions) {\n // NOTE: Only a single Environment Record is needed for the parameters\n // and top-level vars.\n for (const n of varNames) {\n env.CreateBinding(n);\n }\n varEnv = env;\n } else {\n // NOTE: A separate Environment Record is needed to ensure that closures\n // created by expressions in the formal parameter list do not have\n // visibility of declarations in the function body.\n varEnv = new AnalysisEnvironment(env);\n calleeContext.VariableEnvironment = varEnv;\n for (const n of varNames) {\n varEnv.CreateBinding(n);\n }\n }\n const lexEnv = varEnv;\n calleeContext.LexicalEnvironment = lexEnv;\n\n const lexDeclarations = collectScopedDeclarations(code, {\n var: false,\n topLevel: true,\n });\n BoundNamesInstantiation(lexDeclarations, lexEnv);\n }\n\n function InstantiateOrdinaryFunctionExpression(\n functionExpression: FunctionExpression\n ): AnalysisFunctionObject {\n const scope = getRunningContext().LexicalEnvironment;\n if (!functionExpression.id) {\n return OrdinaryFunctionCreate(functionExpression, scope);\n }\n const name = functionExpression.id.name;\n const funcEnv = new AnalysisEnvironment(scope);\n funcEnv.CreateBinding(name);\n return OrdinaryFunctionCreate(functionExpression, funcEnv);\n }\n\n function OrdinaryFunctionCreate(\n func: FunctionDeclaration | FunctionExpression | ArrowFunctionExpression,\n scope?: AnalysisEnvironment,\n lexicalThis?: boolean\n ): AnalysisFunctionObject {\n return {\n Function: func,\n FormalParameters: func.params,\n ECMAScriptCode:\n func.body.type === \"BlockStatement\" ? func.body.body : func.body,\n Environment: scope,\n ThisMode: lexicalThis ? \"LEXICAL\" : \"STRICT\",\n };\n }\n\n Evaluate(rootAst, withParent ? [] : undefined);\n\n return attemptToVisitGlobals;\n}\n","export function hasOwnProperty(\n object: unknown,\n property: string | number | symbol\n): boolean {\n return Object.prototype.hasOwnProperty.call(object, property);\n}\n","import type { FunctionDeclaration } from \"@babel/types\";\nimport { parseAsEstree } from \"./parse.js\";\nimport { precook, PrecookOptions } from \"./precook.js\";\n\nlet ASTCache = new WeakMap<object, FunctionDeclaration>();\n\nexport interface PrecookFunctionOptions extends PrecookOptions {\n cacheKey?: object;\n typescript?: boolean;\n}\n\nexport interface PrecookFunctionResult {\n function: FunctionDeclaration;\n attemptToVisitGlobals: Set<string>;\n}\n\nexport function precookFunction(\n source: string,\n { typescript, cacheKey, ...restOptions }: PrecookFunctionOptions = {}\n): PrecookFunctionResult {\n let func = cacheKey ? ASTCache.get(cacheKey) : undefined;\n if (!func) {\n func = parseAsEstree(source, { typescript });\n if (cacheKey) {\n ASTCache.set(cacheKey, func);\n }\n }\n const attemptToVisitGlobals = precook(func, restOptions);\n return {\n function: func,\n attemptToVisitGlobals,\n };\n}\n\nexport function clearFunctionASTCache(): void {\n ASTCache = new WeakMap();\n}\n","import { parse, parseExpression, type ParserPlugin } from \"@babel/parser\";\nimport type { Expression, FunctionDeclaration, Statement } from \"@babel/types\";\n\nexport function parseAsEstreeExpression(source: string): Expression {\n return parseExpression(source, {\n plugins: [\"estree\", [\"pipelineOperator\", { proposal: \"minimal\" }]],\n attachComment: false,\n });\n}\n\nexport interface ParseEstreeOptions {\n typescript?: boolean;\n}\n\nexport function parseAsEstree(\n source: string,\n { typescript }: ParseEstreeOptions = {}\n): FunctionDeclaration {\n const file = parse(source, {\n plugins: [\"estree\", typescript && \"typescript\"].filter(\n Boolean\n ) as ParserPlugin[],\n strictMode: true,\n attachComment: false,\n });\n const body = file.program.body;\n const jsNodes: Statement[] = typescript ? [] : body;\n if (typescript) {\n for (const node of body) {\n if (node.type.startsWith(\"TS\")) {\n if (/Enum|Import|Export/.test(node.type)) {\n throw new SyntaxError(`Unsupported TypeScript syntax: ${node.type}`);\n }\n } else {\n jsNodes.push(node);\n }\n }\n }\n if (jsNodes.length === 0) {\n throw new SyntaxError(\"Function declaration not found\");\n }\n if (jsNodes.length > 1 || jsNodes[0].type !== \"FunctionDeclaration\") {\n throw new SyntaxError(\n `Expect a single function declaration at top level, but received: ${jsNodes\n .map((node) => `\"${node.type}\"`)\n .join(\", \")}`\n );\n }\n return jsNodes[0] as FunctionDeclaration;\n}\n","import type { Expression } from \"@babel/types\";\nimport { parseAsEstreeExpression } from \"./parse.js\";\nimport { precook, PrecookOptions } from \"./precook.js\";\n\nconst ASTCache = new Map<string, Expression>();\n\nexport type PreevaluateOptions = Omit<PrecookOptions, \"expressionOnly\"> & {\n cache?: boolean;\n};\n\nexport interface PreevaluateResult {\n expression: Expression;\n attemptToVisitGlobals: Set<string>;\n source: string;\n prefix: string;\n suffix: string;\n}\n\n// `raw` should always be asserted by `isEvaluable`.\nexport function preevaluate(\n raw: string,\n { cache, ...restOptions }: PreevaluateOptions = {}\n): PreevaluateResult {\n const fixes: string[] = [];\n const source = raw.replace(/^\\s*<%[~=]?\\s|\\s%>\\s*$/g, (m) => {\n fixes.push(m);\n return \"\";\n });\n let expression = cache ? ASTCache.get(source) : undefined;\n if (!expression) {\n expression = parseAsEstreeExpression(source);\n if (cache) {\n ASTCache.set(source, expression);\n }\n }\n const attemptToVisitGlobals = precook(expression, {\n ...restOptions,\n expressionOnly: true,\n });\n return {\n expression,\n attemptToVisitGlobals,\n source,\n prefix: fixes[0],\n suffix: fixes[1],\n };\n}\n\nexport function isEvaluable(raw: string): boolean {\n return /^\\s*<%[~=]?\\s/.test(raw) && /\\s%>\\s*$/.test(raw);\n}\n\nexport function shouldAllowRecursiveEvaluations(raw: string): boolean {\n return /^\\s*<%~\\s/.test(raw);\n}\n\nexport function isTrackAll(raw: string): boolean {\n return /^\\s*<%=\\s/.test(raw) && /\\s%>\\s*$/.test(raw);\n}\n\nexport function clearExpressionASTCache(): void {\n ASTCache.clear();\n}\n","/**\n * Get site's base path, generally will be `/next/` or `/`.\n */\nexport function getBasePath(): string {\n const base = document.querySelector(\"base\");\n const basePath = base ? (base.getAttribute(\"href\") as string) : \"/\";\n return basePath;\n}\n","import type { RuntimeStoryboard } from \"@next-core/types\";\nimport { orderBy } from \"lodash\";\nimport { getRuntime } from \"./Runtime.js\";\n\nexport function matchStoryboard(\n storyboards: RuntimeStoryboard[],\n pathname: string\n): RuntimeStoryboard | undefined {\n // Put apps with longer homepage before shorter ones.\n // E.g., `/legacy/tool` will match first before `/legacy`.\n // This enables two apps with relationship of parent-child of homepage.\n const sortedStoryboards = orderBy(\n storyboards,\n (storyboard) => storyboard.app.homepage?.length ?? 0,\n \"desc\"\n );\n for (const storyboard of sortedStoryboards) {\n const homepage = storyboard.app.homepage;\n if (typeof homepage === \"string\" && homepage[0] === \"/\") {\n if (matchHomepage(homepage, pathname)) {\n return storyboard;\n }\n }\n }\n}\n\nexport function matchHomepage(homepage: string, pathname: string) {\n return homepage === \"/\"\n ? pathname === homepage\n : `${pathname.replace(/\\/+$/, \"\")}/`.startsWith(\n `${homepage.replace(/\\/+$/, \"\")}/`\n );\n}\n\n// istanbul ignore next\n/**\n * We say it's an outside app when at least one of the below conditions are true:\n * - target app is not found.\n * - target app is not the current app.\n * - current app is non-standalone mode and target app is standalone mode.\n *\n * Note: when current app is standalone mode, other apps will not be found.\n */\nexport function isOutsideApp(\n storyboard: RuntimeStoryboard | undefined\n): boolean | undefined {\n if (process.env.NODE_ENV === \"test\") {\n return false;\n }\n return (\n !storyboard ||\n // Sometimes `storyboard.app.standaloneMode` is incorrect.\n (getRuntime().getCurrentApp()?.id !== storyboard.app.id &&\n !window.STANDALONE_MICRO_APPS &&\n storyboard.app.standaloneMode)\n );\n}\n","import {\n History,\n LocationDescriptor,\n LocationDescriptorObject,\n parsePath,\n} from \"history\";\nimport { getBasePath } from \"../getBasePath.js\";\nimport { _internalApiMatchStoryboard } from \"./Runtime.js\";\nimport { isOutsideApp } from \"./matchStoryboard.js\";\n\nlet blocked = false;\nexport function getUserConfirmation(\n message: string,\n callback: (result: boolean) => void\n): void {\n blocked = !confirm(message);\n callback(!blocked);\n}\n\nexport function historyExtended(\n browserHistory: History<NextHistoryState>\n): ExtendedHistory {\n const { push: originalPush, replace: originalReplace } = browserHistory;\n\n function push(\n location: LocationDescriptor<NextHistoryState>,\n state?: NextHistoryState,\n callback?: (blocked: boolean) => void\n ): void {\n blocked = false;\n originalPush(location, state);\n callback?.(blocked);\n }\n\n function replace(\n location: LocationDescriptor<NextHistoryState>,\n state?: NextHistoryState,\n callback?: (blocked: boolean) => void\n ): void {\n blocked = false;\n originalReplace(location, state);\n callback?.(blocked);\n }\n\n function updateQueryFactory(method: \"push\" | \"replace\"): UpdateQueryFunction {\n return function updateQuery(query, options = {}, callback?): void {\n const { extraQuery, clear, keepHash, ...state } = options;\n const urlSearchParams = new URLSearchParams(\n clear ? \"\" : browserHistory.location.search\n );\n const params: Record<string, string | string[]> = {};\n Object.assign(params, query, extraQuery);\n for (const [key, value] of Object.entries(params)) {\n if (Array.isArray(value)) {\n urlSearchParams.delete(key);\n for (const item of value) {\n urlSearchParams.append(key, item);\n }\n } else if (value === undefined || value === null || value === \"\") {\n urlSearchParams.delete(key);\n } else {\n urlSearchParams.set(key, value);\n }\n }\n (method === \"push\" ? push : replace)(\n `?${urlSearchParams.toString()}${\n keepHash ? browserHistory.location.hash : \"\"\n }`,\n state,\n callback\n );\n };\n }\n\n function pushAnchor(\n hash: string,\n state?: NextHistoryState,\n callback?: (blocked: boolean) => void\n ): void {\n push(\n {\n ...browserHistory.location,\n key: undefined,\n hash,\n state: {\n // The default notify is false\n notify: false,\n ...state,\n },\n },\n undefined,\n callback\n );\n }\n\n function reload(callback?: (blocked: boolean) => void): void {\n replace(\n {\n ...browserHistory.location,\n state: {\n ...browserHistory.location.state,\n // Always notify\n notify: true,\n // Do not use incremental sub routes\n noIncremental: true,\n },\n },\n undefined,\n callback\n );\n }\n\n let blockMessage: string | undefined;\n\n function setBlockMessage(message: string | undefined): void {\n blockMessage = message;\n }\n\n function getBlockMessage(): string | undefined {\n return blockMessage;\n }\n\n function unblock(): void {\n blockMessage = undefined;\n }\n\n return {\n pushQuery: updateQueryFactory(\"push\"),\n replaceQuery: updateQueryFactory(\"replace\"),\n pushAnchor: pushAnchor,\n reload,\n setBlockMessage,\n getBlockMessage,\n unblock,\n ...historyOverridden({ ...browserHistory, push, replace }),\n };\n}\n\n/**\n * Override history for standalone micro apps.\n *\n * when `push` or `replace` to other apps, force page refresh.\n */\nfunction historyOverridden(\n browserHistory: History<NextHistoryState> &\n Pick<ExtendedHistory, \"push\" | \"replace\">\n): Pick<ExtendedHistory, \"push\" | \"replace\"> {\n const { push: originalPush, replace: originalReplace } = browserHistory;\n function updateFactory(method: \"push\" | \"replace\"): ExtendedHistory[\"push\"] {\n return function update(path, state?, callback?) {\n let pathname: string | undefined;\n const pathIsString = typeof path === \"string\";\n if (pathIsString) {\n pathname = parsePath(path).pathname;\n } else {\n pathname = path.pathname;\n }\n\n // When history.push or history.replace is performing with an absolute pathname,\n // force load the target page when it is a page of an outside app.\n if (\n typeof pathname === \"string\" &&\n pathname.startsWith(\"/\") &&\n isOutsideApp(_internalApiMatchStoryboard(pathname))\n ) {\n // Going to outside apps.\n return location[method === \"push\" ? \"assign\" : \"replace\"](\n pathIsString\n ? getBasePath() + path.substring(1)\n : browserHistory.createHref(\n path as LocationDescriptorObject<NextHistoryState>\n )\n );\n }\n\n return (method === \"push\" ? originalPush : originalReplace)(\n path as string,\n state,\n callback\n );\n };\n }\n return {\n push: updateFactory(\"push\"),\n replace: updateFactory(\"replace\"),\n };\n}\n\nexport interface NextHistoryState {\n notify?: boolean;\n from?: LocationDescriptor<NextHistoryState>;\n noIncremental?: boolean;\n}\n\n/**\n * 扩展的系统会话对象。\n */\nexport interface ExtendedHistory {\n /**\n * 更新指定的 query 参数,会保留当前其它 query 参数,往浏览器会话历史栈中推入一条新记录。\n */\n pushQuery: UpdateQueryFunction;\n\n /**\n * 更新指定的 query 参数,会保留当前其它 query 参数,替换浏览器会话历史栈中最新的一条记录。\n */\n replaceQuery: UpdateQueryFunction;\n\n /** {@inheritDoc UpdateAnchorFunction} */\n pushAnchor: UpdateAnchorFunction;\n\n /** 重载当前会话,即触发页面重新渲染。与 location.reload() 不同,它不会触发浏览器页面的重载。 */\n reload: (callback?: (blocked: boolean) => void) => void;\n\n /** @internal */\n setBlockMessage: (message: string | undefined) => void;\n\n /** @internal */\n getBlockMessage: () => string | undefined;\n\n /** 取消之前设置的阻止页面离开信息的设置。 */\n unblock: () => void;\n\n /** 推入一条记录。*/\n push: (\n location: LocationDescriptor<NextHistoryState>,\n state?: NextHistoryState,\n callback?: (blocked: boolean) => void\n ) => void;\n\n /** 替换一条记录。*/\n replace: (\n location: LocationDescriptor<NextHistoryState>,\n state?: NextHistoryState,\n callback?: (blocked: boolean) => void\n ) => void;\n}\n\n/**\n * 更新指定的 query 参数。\n *\n * @param query - 要更新的 query 参数。\n * @param options - 选项。\n */\nexport type UpdateQueryFunction = (\n query: Record<string, unknown>,\n options?: UpdateQueryOptions,\n callback?: (blocked: boolean) => void\n) => void;\n\n/** 更新 query 参数时的选项 */\nexport interface UpdateQueryOptions extends NextHistoryState {\n /** 额外要更新的 query 参数。 */\n extraQuery?: Record<string, unknown>;\n /** 是否同时清除当前的所有其它 query 参数。 */\n clear?: boolean;\n /** 是否保留当前 hash 参数。 */\n keepHash?: boolean;\n}\n\n/**\n * 设置指定的 anchor (URL hash)地址,此方法默认不会触发页面重新渲染。\n * 往浏览器会话历史栈中推入一条新记录。\n *\n * @param hash - Hash 地址。\n * @param state - 会话状态设置。\n */\nexport type UpdateAnchorFunction = (\n hash: string,\n state?: NextHistoryState,\n callback?: (blocked: boolean) => void\n) => void;\n","import { History, Location, createBrowserHistory } from \"history\";\nimport { getBasePath } from \"./getBasePath.js\";\nimport {\n type ExtendedHistory,\n getUserConfirmation,\n historyExtended,\n NextHistoryState,\n} from \"./internal/historyExtended.js\";\nimport { getV2RuntimeFromDll } from \"./getV2RuntimeFromDll.js\";\n\nexport type NextHistory = History<NextHistoryState> & ExtendedHistory;\n\nlet history: NextHistory;\n\nexport function createHistory(): NextHistory {\n if (!history) {\n // https://github.com/remix-run/history/issues/810\n const browserHistory = createBrowserHistory<NextHistoryState>({\n basename: getBasePath().replace(/\\/$/, \"\"),\n getUserConfirmation,\n });\n Object.assign(browserHistory, historyExtended(browserHistory));\n history = browserHistory as NextHistory;\n }\n return history;\n}\n\nfunction getHistoryV3(): NextHistory {\n return history;\n}\n\n/**\n * When using v3 bricks in v2 container, return history from v2 container.\n */\nfunction getHistoryV2Factory() {\n const v2Kit = getV2RuntimeFromDll();\n if (v2Kit) {\n return v2Kit.getHistory;\n }\n}\n\nexport const getHistory = getHistoryV2Factory() || getHistoryV3;\n\nexport type NextLocation = Location<NextHistoryState>;\n\nexport type { NextHistoryState };\n","import type {\n RuntimeStoryboard,\n BootstrapSettings,\n FeatureFlags,\n BootstrapData,\n Contract,\n Storyboard,\n BrickConf,\n RouteConf,\n ResolveConf,\n BrickPackage,\n UseProviderContractConf,\n} from \"@next-core/types\";\nimport { i18n, initializeI18n } from \"@next-core/i18n\";\nimport { loadBricksImperatively } from \"@next-core/loader\";\nimport { deepFreeze, isObject } from \"@next-core/utils/general\";\nimport type { PermissionApi_validatePermissions } from \"@next-api-sdk/micro-app-sdk\";\nimport moment from \"moment\";\nimport \"moment/locale/zh-cn.js\";\nimport { createHistory } from \"../history.js\";\nimport { matchStoryboard } from \"./matchStoryboard.js\";\nimport { Router } from \"./Router.js\";\nimport { NS, locales } from \"./i18n.js\";\nimport { loadNotificationService } from \"../Notification.js\";\nimport { loadDialogService } from \"../Dialog.js\";\nimport { injectedBrickPackages } from \"./injected.js\";\nimport { type AppForCheck, hasInstalledApp } from \"./hasInstalledApp.js\";\nimport type { RuntimeContext } from \"./interfaces.js\";\nimport { listenDevtoolsEagerly } from \"./devtools.js\";\nimport { getV2RuntimeFromDll } from \"../getV2RuntimeFromDll.js\";\nimport { ThemeSettings, customizeColorTheme } from \"./customizeColorTheme.js\";\n\nlet runtime: Runtime;\n\n// Allow inject bootstrap data in a runtime other than Brick Next.\nlet bootstrapData: BootstrapData | undefined;\nlet router: Router | undefined;\nlet processedBrickPackages: BrickPackage[] | undefined;\n\nexport interface RuntimeOptions {\n hooks?: RuntimeHooks;\n}\n\nexport interface ImagesFactory {\n get(name: string): string;\n}\n\nexport interface PageViewInfo {\n status: \"ok\" | \"failed\" | \"redirected\" | \"not-found\" | \"blocked\";\n path?: string;\n pageTitle?: string;\n}\n\nexport interface RuntimeHooks {\n auth?: {\n getAuth(): object;\n isLoggedIn(): boolean;\n authenticate?(...args: unknown[]): unknown;\n logout?(...args: unknown[]): unknown;\n addPathToBlackList?(path: string): void;\n isBlockedPath?(pathname: string): boolean;\n };\n fulfilStoryboard?: (storyboard: RuntimeStoryboard) => Promise<void>;\n validatePermissions?: typeof PermissionApi_validatePermissions;\n checkPermissions?: {\n checkPermissions(...actions: string[]): boolean;\n preCheckPermissions(storyboard: Storyboard): Promise<void> | undefined;\n preCheckPermissionsForBrickOrRoute(\n container: BrickConf | RouteConf,\n asyncComputeRealValue: (value: unknown) => Promise<unknown>\n ): Promise<void> | undefined;\n };\n checkInstalledApps?: {\n preCheckInstalledApps(\n storyboard: Storyboard,\n hasAppInBootstrap: (appId: string) => boolean\n ): void;\n waitForCheckingApps(appIds: string[]): Promise<void>;\n getCheckedApp(appId: string): AppForCheck | undefined;\n };\n flowApi?: {\n FLOW_API_PROVIDER: string;\n registerFlowApiProvider(): void;\n isFlowApiProvider(provider: string): boolean;\n getArgsOfFlowApi(\n provider: string,\n originalArgs: unknown[] | UseProviderContractConf,\n method?: string,\n stream?: boolean\n ): Promise<unknown[]>;\n collectContract(contracts: Contract[] | undefined): void;\n collectWidgetContract(contracts: Contract[] | undefined): void;\n clearCollectWidgetContract(): void;\n };\n menu?: {\n getMenuById(menuId: string): unknown;\n fetchMenuById(\n menuId: string,\n runtimeContext: RuntimeContext,\n runtimeHelpers: RuntimeHooksMenuHelpers\n ): Promise<unknown>;\n };\n images?: {\n imagesFactory(\n appId: string,\n isBuildPush?: boolean,\n version?: string\n ): ImagesFactory;\n widgetImagesFactory(\n widgetId: string,\n widgetVersion?: string\n ): ImagesFactory;\n };\n messageDispatcher?: {\n subscribe(...args: unknown[]): Promise<unknown>;\n unsubscribe(...args: unknown[]): Promise<unknown>;\n onMessage(channel: string, listener: (data: unknown) => void): () => void;\n onClose(listener: () => void): () => void;\n reset(): void;\n };\n pageView?: {\n create(): (info: PageViewInfo) => void;\n };\n}\n\nexport interface RuntimeHooksMenuHelpers {\n getStoryboardByAppId(appId: string): Storyboard | undefined;\n resolveData(\n resolveConf: ResolveConf,\n runtimeContext: RuntimeContext\n ): Promise<unknown>;\n asyncComputeRealValue(\n value: unknown,\n runtimeContext: RuntimeContext,\n options?: { ignoreSymbols?: boolean; noInject?: boolean }\n ): Promise<unknown>;\n}\n\nexport let hooks: RuntimeHooks | undefined;\n\nexport function createRuntime(options?: RuntimeOptions) {\n if (runtime) {\n throw new Error(\"Cannot create multiple runtimes\");\n }\n listenDevtoolsEagerly();\n hooks = options?.hooks;\n initializeI18n(NS, locales);\n moment.locale(i18n.language);\n i18n.on(\"languageChanged\", () => {\n moment.locale(i18n.language);\n });\n createHistory();\n runtime = new Runtime();\n return runtime;\n}\n\nfunction getRuntimeV3() {\n return runtime;\n}\n\n// istanbul ignore next\nfunction getRuntimeV2Factory() {\n const v2Kit = getV2RuntimeFromDll();\n if (v2Kit) {\n return function getRuntimeV2() {\n return new Proxy(v2Kit.getRuntime(), {\n get(...args) {\n const key = args[1];\n switch (key) {\n case \"getCurrentApp\":\n case \"getRecentApps\":\n case \"hasInstalledApp\":\n case \"getDesktops\":\n case \"getLaunchpadSettings\":\n case \"getLaunchpadSiteMap\":\n case \"toggleLaunchpadEffect\":\n case \"applyPageTitle\":\n case \"getNavConfig\":\n case \"getFeatureFlags\":\n case \"getMiscSettings\":\n case \"getBrandSettings\":\n return Reflect.get(...args);\n }\n },\n }) as unknown as Runtime;\n };\n }\n}\n\n// istanbul ignore next\nexport const getRuntime = getRuntimeV2Factory() || getRuntimeV3;\n\nexport class Runtime {\n #initialized = false;\n #bootstrapped = false;\n\n readonly version: number | undefined = 3;\n\n initialize(data: BootstrapData) {\n if (this.#initialized) {\n throw new Error(\"The runtime cannot be initialized more than once\");\n }\n this.#initialized = true;\n normalizeBootstrapData(data);\n bootstrapData = data;\n const { notification, dialog } = _internalApiGetPresetBricks();\n if (notification !== false) {\n loadNotificationService(\n notification ?? \"basic.show-notification\",\n this.loadBricks\n );\n }\n if (dialog !== false) {\n loadDialogService(dialog ?? \"basic.show-dialog\", this.loadBricks);\n }\n customizeColorTheme(data.settings?.misc?.theme as ThemeSettings);\n }\n\n async bootstrap(data?: BootstrapData) {\n if (data) {\n this.initialize(data);\n }\n if (this.#bootstrapped) {\n throw new Error(\"The runtime cannot be bootstrapped more than once\");\n }\n this.#bootstrapped = true;\n router = new Router(bootstrapData!.storyboards!);\n await router.bootstrap();\n }\n\n getRecentApps() {\n return router?.getRecentApps() ?? {};\n }\n\n getCurrentApp() {\n return router?.getRecentApps().currentApp;\n }\n\n hasInstalledApp(appId: string, matchVersion?: string): boolean {\n return hasInstalledApp(appId, matchVersion);\n }\n\n getFeatureFlags(): FeatureFlags {\n return {\n ...bootstrapData?.settings?.featureFlags,\n ...(\n router?.getRecentApps().currentApp?.config\n ?.settings as BootstrapSettings\n )?.featureFlags,\n \"migrate-to-brick-next-v3\": true,\n };\n }\n\n getMiscSettings() {\n return {\n ...bootstrapData?.settings?.misc,\n ...(\n router?.getRecentApps().currentApp?.config\n ?.settings as BootstrapSettings\n )?.misc,\n };\n }\n\n getBrandSettings(): Record<string, string> {\n return {\n base_title: \"DevOps 管理专家\",\n ...(bootstrapData?.settings?.brand as Record<string, string>),\n };\n }\n\n getLaunchpadSettings() {\n return {\n columns: 7,\n rows: 4,\n ...bootstrapData?.settings?.launchpad,\n };\n }\n\n getDesktops(): unknown[] {\n return bootstrapData?.desktops ?? [];\n }\n\n getLaunchpadSiteMap(): unknown[] {\n return bootstrapData?.siteSort ?? [];\n }\n\n toggleLaunchpadEffect(open: boolean): void {\n document.body.classList.toggle(\"launchpad-open\", open);\n }\n\n applyPageTitle(pageTitle: string): void {\n const baseTitle = this.getBrandSettings().base_title;\n\n document.title =\n (router?.getRecentApps().currentApp?.localeTitle as string) ||\n (pageTitle ? `${pageTitle} - ${baseTitle}` : baseTitle);\n }\n\n getNavConfig() {\n return router?.getNavConfig();\n }\n\n loadBricks(bricks: string[] | Set<string>) {\n return loadBricksImperatively(bricks, getBrickPackages());\n }\n}\n\nfunction normalizeBootstrapData(data: BootstrapData) {\n if (isObject(data.settings)) {\n deepFreeze(data.settings);\n }\n if (data.brickPackages) {\n deepFreeze(data.brickPackages);\n }\n}\n\nfunction processPublicDepsPackages(\n brickPackages: BrickPackage[],\n pubDeps: BrickPackage[] | undefined\n): BrickPackage[] {\n if (!pubDeps?.length) return brickPackages;\n\n const bricksMap = new Map();\n\n // bootstrapData 数据和 pubDeps 中可能同时存在同一个包名,需要过滤去重, 以 pubDeps 中的包为准\n [...pubDeps, ...brickPackages].forEach((pkg) => {\n const pkgName = pkg.filePath.split(\"/\")[1];\n // 始终将 pubDeps 放在前面\n if (!bricksMap.has(pkgName)) {\n bricksMap.set(pkgName, pkg);\n }\n });\n\n return Array.from(bricksMap.values());\n}\n\nexport function getBrickPackages(): BrickPackage[] {\n return (\n // Not necessary to process brick packages multiple times.\n processedBrickPackages ??\n (processedBrickPackages = processPublicDepsPackages(\n bootstrapData?.brickPackages ??\n injectedBrickPackages ??\n (window.STANDALONE_BRICK_PACKAGES as BrickPackage[] | undefined) ??\n [],\n window.PUBLIC_DEPS as BrickPackage[] | undefined\n ))\n );\n}\n\nexport function _internalApiGetPresetBricks() {\n return (bootstrapData?.settings?.presetBricks ?? {}) as {\n notification?: string | false;\n dialog?: string | false;\n error?: string | false;\n };\n}\n\nexport function _internalApiGetRenderId(): string | undefined {\n return router?.getRenderId();\n}\n\nexport function _internalApiMatchStoryboard(\n pathname: string\n): RuntimeStoryboard | undefined {\n return matchStoryboard(bootstrapData?.storyboards ?? [], pathname);\n}\n\nexport function _internalApiGetRuntimeContext() {\n return router?.getRuntimeContext();\n}\n\nexport function _internalApiGetStoryboardInBootstrapData(appId: string) {\n return bootstrapData?.storyboards?.find(\n (storyboard) => storyboard.app.id === appId\n );\n}\n\nexport function _internalApiGetAppInBootstrapData(appId: string) {\n return _internalApiGetStoryboardInBootstrapData(appId)?.app;\n}\n\nexport let _test_only_setBootstrapData: (data: BootstrapData) => void;\n\n// istanbul ignore next\nif (process.env.NODE_ENV === \"test\") {\n _test_only_setBootstrapData = (data) => {\n bootstrapData = data as BootstrapData;\n };\n}\n","import type {\n CustomTemplateConstructor,\n MetaI18n,\n StoryboardFunction,\n} from \"@next-core/types\";\nimport type { NextHistory } from \"./history.js\";\nimport type { IfContainer } from \"./internal/compute/checkIf.js\";\n\ninterface DLL {\n (moduleId: \"tYg3\"): Kit;\n}\n\ninterface Kit {\n getRuntime(): {\n registerCustomTemplate(\n tagName: string,\n constructor: CustomTemplateConstructor\n ): void;\n registerCustomProcessor(\n processorFullName: string,\n processorFunc: Function\n ): void;\n registerWidgetFunctions(\n widgetId: string,\n functions: StoryboardFunction[],\n widgetVersion?: string\n ): void;\n registerWidgetI18n(widgetId: string, i18nData: MetaI18n): void;\n };\n getHistory(): NextHistory;\n looseCheckIfByTransform(ifContainer: IfContainer, data: unknown): boolean;\n doTransform(data: unknown, to: unknown, options?: unknown): unknown;\n transformProperties(\n props: Record<string, unknown>,\n data: unknown,\n to: LegacyGeneralTransform,\n from?: string | string[],\n mapArray?: boolean | \"auto\",\n options?: unknown\n ): Record<string, unknown>;\n SingleBrickAsComponentFactory: any;\n BrickAsComponentFactory: any;\n authenticate: any;\n getAuth: any;\n isLoggedIn: any;\n logout: any;\n}\n\nexport type LegacyGeneralTransform =\n | string\n | LegacyTransformMap\n | LegacyTransformItem[]\n | null\n | undefined;\n\nexport interface LegacyTransformMap {\n [propName: string]: unknown;\n}\n\nexport interface LegacyTransformItem {\n from?: string | string[];\n to: string | LegacyTransformMap;\n mapArray?: boolean | \"auto\";\n}\n\nexport function getV2RuntimeFromDll() {\n const { dll } = window as { dll?: DLL };\n if (\n dll &&\n window.BRICK_NEXT_VERSIONS?.[\"brick-container\"]?.startsWith(\"2.\")\n ) {\n return dll(\"tYg3\");\n }\n}\n","import { getV2RuntimeFromDll } from \"./getV2RuntimeFromDll.js\";\n\nclass CustomProcessorRegistry {\n readonly #registry = new Map<string, Map<string, Function>>();\n\n define(processorFullName: string, processorFunc: Function) {\n // `namespace` should be the camelCase of the package name.\n const [namespace, processorName] = processorFullName.split(\".\");\n let pkg = this.#registry.get(namespace);\n if (!pkg) {\n pkg = new Map();\n this.#registry.set(namespace, pkg);\n }\n if (pkg.has(processorName)) {\n // eslint-disable-next-line no-console\n throw new Error(\n `Custom processor of \"${processorFullName}\" already registered`\n );\n }\n pkg.set(processorName, processorFunc);\n }\n\n get(namespace: string) {\n return this.#registry.get(namespace);\n }\n}\n\n// istanbul ignore next\nfunction getCustomProcessorsV2() {\n const v2Kit = getV2RuntimeFromDll();\n if (v2Kit) {\n return Object.freeze({\n define(processorFullName: string, processorFunc: Function) {\n return v2Kit\n .getRuntime()\n .registerCustomProcessor(processorFullName, processorFunc);\n },\n }) as CustomProcessorRegistry;\n }\n}\n\n// istanbul ignore next\nexport const customProcessors =\n getCustomProcessorsV2() || new CustomProcessorRegistry();\n","import { i18n } from \"@next-core/i18n\";\nimport { Storyboard } from \"@next-core/types\";\n\nexport function registerAppI18n({ app, meta }: Storyboard) {\n if (meta?.i18n) {\n // Prefix to avoid conflict between brick package's i18n namespace.\n const i18nNamespace = getI18nNamespace(\"app\", app.id);\n // Support any language in `meta.i18n`.\n const languages: string[] = [];\n Object.entries(meta.i18n).forEach(([lang, resources]) => {\n i18n.addResourceBundle(lang, i18nNamespace, resources);\n languages.push(lang);\n });\n return () => {\n for (const lang of languages) {\n i18n.removeResourceBundle(lang, i18nNamespace);\n }\n };\n }\n}\n\nexport function getI18nNamespace(\n type: \"app\" | \"widget\" | \"menu\",\n id: string\n): string {\n return `${type}/${id}`;\n}\n","import { i18n } from \"@next-core/i18n\";\nimport type { MetaI18n } from \"@next-core/types\";\nimport { getI18nNamespace } from \"../registerAppI18n.js\";\nimport { getV2RuntimeFromDll } from \"../../getV2RuntimeFromDll.js\";\n\nfunction registerWidgetI18nV3(widgetId: string, i18nData: MetaI18n): void {\n const ns = getI18nNamespace(\"widget\", widgetId);\n Object.entries(i18nData).forEach(([lang, resources]) => {\n i18n.addResourceBundle(lang, ns, resources);\n });\n}\n\nexport function widgetI18nFactory(widgetId: string) {\n return i18n.getFixedT(null, getI18nNamespace(\"widget\", widgetId));\n}\n\n// istanbul ignore next\nfunction registerWidgetI18nV2Factory() {\n const v2Kit = getV2RuntimeFromDll();\n if (v2Kit) {\n return function (widgetId: string, i18nData: MetaI18n) {\n return v2Kit.getRuntime().registerWidgetI18n(widgetId, i18nData);\n };\n }\n}\n\n// istanbul ignore next\nexport const registerWidgetI18n =\n registerWidgetI18nV2Factory() || registerWidgetI18nV3;\n","export const MESSAGE_SOURCE_PANEL = \"brick-next-devtools-panel\";\nexport const FRAME_ACTIVE_CHANGE = \"devtools-frame-active-change\";\nexport const PANEL_CHANGE = \"devtools-panel-change\";\n\ninterface DevtoolsHookContainer {\n __BRICK_NEXT_DEVTOOLS_HOOK__?: DevtoolsHook;\n}\n\ninterface DevtoolsHook {\n emit: (message: unknown) => void;\n}\n\ntype DevtoolsMessagePayload = FrameActiveChangePayload | PanelChangePayload;\n\ninterface FrameActiveChangePayload {\n type: typeof FRAME_ACTIVE_CHANGE;\n active: boolean;\n panel: PanelType;\n}\n\ntype PanelType = \"Bricks\" | \"Evaluations\" | \"Transformations\";\n\ninterface PanelChangePayload {\n type: typeof PANEL_CHANGE;\n panel: PanelType;\n}\n\nlet frameIsActive = true;\nlet selectedPanel: PanelType;\n\nexport function devtoolsHookEmit(type: string, payload?: unknown): void {\n const devtools = getDevHook();\n if (\n !devtools ||\n (type === \"evaluation\" &&\n !(frameIsActive && (!selectedPanel || selectedPanel === \"Evaluations\")))\n ) {\n // Ignore messages if current devtools panel is not relevant.\n return;\n }\n\n const emit = (): void => {\n devtools.emit?.({\n type,\n payload,\n });\n };\n\n // Try to emit only in idle time.\n // istanbul ignore next\n if (typeof window.requestIdleCallback === \"function\") {\n window.requestIdleCallback(emit);\n } else {\n setTimeout(emit, 0);\n }\n}\n\nexport function listenDevtoolsEagerly(): void {\n window.addEventListener(\"message\", ({ data }: MessageEvent): void => {\n if (data?.source !== MESSAGE_SOURCE_PANEL) {\n return;\n }\n const payload: DevtoolsMessagePayload = data.payload;\n switch (payload?.type) {\n case FRAME_ACTIVE_CHANGE: {\n frameIsActive = payload.active;\n break;\n }\n case PANEL_CHANGE: {\n selectedPanel = payload.panel;\n break;\n }\n }\n });\n}\n\nexport function getDevHook(): DevtoolsHook | undefined {\n return (window as DevtoolsHookContainer).__BRICK_NEXT_DEVTOOLS_HOOK__;\n}\n","import { getDevHook } from \"./devtools.js\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst THROW = (): any => {\n throw new Error(\"Can't modify read-only proxy object\");\n};\n\nconst readOnlyHandler: ProxyHandler<object> = {\n set: THROW,\n defineProperty: THROW,\n deleteProperty: THROW,\n setPrototypeOf: THROW,\n};\n\nexport function getReadOnlyProxy<T extends object>(object: T): T {\n return new Proxy<T>(object, readOnlyHandler);\n}\n\n// First, we want to make accessing property of globals lazy,\n// So we use *Proxy* to make a dynamic accessor for each of these globals.\n// But we also want to keep them working in devtools.\nexport function getDynamicReadOnlyProxy({\n get,\n ownKeys,\n}: Required<Pick<ProxyHandler<object>, \"get\" | \"ownKeys\">>): unknown {\n if (getDevHook()) {\n // In devtools, we extract them at beginning.\n const target = Object.fromEntries(\n (ownKeys(null!) as string[]).map((key) => [key, get(null!, key, null)])\n );\n return getReadOnlyProxy(target);\n }\n return new Proxy(Object.freeze({}), { get });\n}\n","import type { SiteMode, SiteTheme, SiteVariant } from \"@next-core/types\";\nimport { JsonStorage } from \"@next-core/utils/general\";\n\ninterface AppThemes {\n [appId: string]: SiteTheme;\n}\n\n// Themes.\nlet theme: SiteTheme = \"light\";\nconst storage = new JsonStorage<Record<string, AppThemes>>(localStorage);\nconst LOCAL_STORAGE_APPS_THEME_KEY = \"apps-theme\";\n\nexport function setTheme(value: SiteTheme): void {\n if (value !== \"dark\" && value !== \"light\" && value !== \"dark-v2\") {\n throw new Error(`Unsupported theme: ${value}`);\n }\n theme = value;\n}\n\nexport function getTheme(): SiteTheme {\n return theme;\n}\n\nexport function getCurrentTheme(): SiteTheme {\n return document.documentElement.dataset.theme as SiteTheme;\n}\n\nexport function applyTheme(value?: SiteTheme): void {\n if (value) {\n setTheme(value);\n } else {\n value = getTheme();\n }\n if (value !== getCurrentTheme()) {\n document.documentElement.dataset.theme = value;\n window.dispatchEvent(\n new CustomEvent<SiteTheme>(\"theme.change\", {\n detail: value,\n })\n );\n }\n}\n\nexport function batchSetAppsLocalTheme(appsTheme: AppThemes): void {\n storage.setItem(LOCAL_STORAGE_APPS_THEME_KEY, {\n ...getLocalAppsTheme(),\n ...appsTheme,\n });\n}\n\nexport function getLocalAppsTheme(): AppThemes {\n let result: AppThemes | undefined;\n try {\n result = storage.getItem(LOCAL_STORAGE_APPS_THEME_KEY);\n } catch {\n // eslint-disable-next-line no-console\n console.error(\"JSON parse error inside `getLocalAppsTheme()`\");\n }\n\n return result ?? {};\n}\n\n// Modes.\nlet mode: SiteMode = \"default\";\n\nexport function setMode(value: SiteMode): void {\n if (value !== \"dashboard\" && value !== \"default\") {\n throw new Error(`Unsupported mode: ${value}`);\n }\n mode = value;\n}\n\nexport function getMode(): SiteMode {\n return mode;\n}\n\nexport function getCurrentMode(): SiteMode {\n return document.documentElement.dataset.mode as SiteMode;\n}\n\nexport function applyMode(value?: SiteMode): void {\n if (value) {\n setMode(value);\n } else {\n value = getMode();\n }\n if (value !== getCurrentMode()) {\n document.documentElement.dataset.mode = value;\n window.dispatchEvent(\n new CustomEvent<SiteMode>(\"mode.change\", {\n detail: value,\n })\n );\n }\n}\n\nexport function getCssPropertyValue(\n name: string,\n el = document.documentElement\n): string {\n if (!el) return \"\";\n return window.getComputedStyle(el)?.getPropertyValue(name) || \"\";\n}\n\nlet variant: SiteVariant = \"default\";\n\nexport function setThemeVariant(value: unknown) {\n if (value !== \"default\" && value !== \"elevo\") {\n return setThemeVariant(\"default\");\n }\n if (variant === value) {\n return;\n }\n document.documentElement.dataset.variant = variant = value;\n window.dispatchEvent(\n new CustomEvent(\"variant.change\", {\n detail: value,\n })\n );\n}\n\nexport function getThemeVariant(): SiteVariant {\n return variant;\n}\n","import type { StoryboardFunction } from \"@next-core/types\";\nimport {\n type ReadonlyStoryboardFunctions,\n StoryboardFunctionRegistryFactory,\n} from \"../../StoryboardFunctionRegistry.js\";\n\nexport const isolatedFunctionRegistry = new Map<\n symbol,\n ReadonlyStoryboardFunctions\n>();\n\nexport function registerIsolatedFunctions(\n isolatedRoot: symbol,\n functions: StoryboardFunction[] | undefined\n): void {\n const { storyboardFunctions, registerStoryboardFunctions } =\n StoryboardFunctionRegistryFactory({ isolatedRoot });\n isolatedFunctionRegistry.set(isolatedRoot, storyboardFunctions);\n registerStoryboardFunctions(functions);\n}\n","import { identity } from \"lodash\";\nimport type { MicroApp } from \"@next-core/types\";\nimport { i18n, i18nText } from \"@next-core/i18n\";\nimport { widgetI18nFactory } from \"./WidgetI18n.js\";\nimport { getReadOnlyProxy } from \"../proxyFactories.js\";\nimport { getCssPropertyValue, getTheme } from \"../../themeAndMode.js\";\nimport { getBasePath } from \"../../getBasePath.js\";\nimport { getI18nNamespace } from \"../registerAppI18n.js\";\nimport { ImagesFactory, hooks } from \"../Runtime.js\";\nimport { isolatedFunctionRegistry } from \"./IsolatedFunctions.js\";\n\nexport interface GeneralGlobalsOptions {\n collectCoverage?: unknown;\n widgetId?: string;\n widgetVersion?: string;\n isolatedRoot?: symbol;\n app?: PartialMicroApp;\n appendI18nNamespace?: string;\n storyboardFunctions?: unknown;\n isStoryboardFunction?: boolean;\n}\n\nexport type PartialMicroApp = Pick<MicroApp, \"id\" | \"isBuildPush\">;\n\n// `GeneralGlobals` are globals which are page-state-agnostic,\n// thus they can be used both in storyboard expressions and functions.\nexport function getGeneralGlobals(\n attemptToVisitGlobals: Set<string> | string[],\n options: GeneralGlobalsOptions\n): Record<string, unknown> {\n const globalVariables: Record<string, unknown> = {};\n for (const variableName of attemptToVisitGlobals) {\n const variable = getIndividualGlobal(variableName, options);\n if (variable !== undefined) {\n globalVariables[variableName] = variable;\n }\n }\n return globalVariables;\n}\n\nfunction getIndividualGlobal(\n variableName: string,\n {\n collectCoverage,\n widgetId,\n widgetVersion,\n isolatedRoot,\n app,\n appendI18nNamespace,\n storyboardFunctions,\n isStoryboardFunction,\n }: GeneralGlobalsOptions\n): unknown {\n switch (variableName) {\n case \"BASE_URL\":\n return collectCoverage ? \"/next\" : getBasePath().replace(/\\/$/, \"\");\n case \"FN\":\n return isolatedRoot\n ? isolatedFunctionRegistry.get(isolatedRoot)\n : storyboardFunctions;\n case \"IMG\":\n return collectCoverage\n ? fakeImageFactory()\n : widgetId\n ? hooks?.images?.widgetImagesFactory(widgetId, widgetVersion)\n : hooks?.images?.imagesFactory(\n app!.id,\n app!.isBuildPush,\n (app as { currentVersion?: string }).currentVersion\n );\n case \"I18N\":\n return collectCoverage\n ? identity\n : widgetId\n ? widgetI18nFactory(widgetId)\n : i18n.getFixedT(\n null,\n [appendI18nNamespace, getI18nNamespace(\"app\", app!.id)].filter(\n Boolean\n ) as string[]\n );\n case \"I18N_TEXT\":\n return collectCoverage ? fakeI18nText : i18nText;\n case \"LANGUAGE\": {\n return collectCoverage ? \"zh\" : i18n.language || \"zh\";\n }\n case \"PERMISSIONS\":\n return getReadOnlyProxy({\n check: collectCoverage\n ? fakeCheckPermissions\n : hooks?.checkPermissions?.checkPermissions,\n });\n case \"THEME\":\n return getReadOnlyProxy({\n getTheme: collectCoverage ? () => \"light\" : getTheme,\n getCssPropertyValue: collectCoverage ? () => \"\" : getCssPropertyValue,\n });\n case \"console\":\n return isStoryboardFunction ? getReadOnlyProxy(console) : undefined;\n case \"location\":\n return collectCoverage\n ? {\n href: \"http://localhost:3000/functions/test\",\n origin: \"http://localhost:3000\",\n host: \"localhost:3000\",\n hostname: \"localhost\",\n }\n : {\n href: location.href,\n origin: location.origin,\n host: location.host,\n hostname: location.hostname,\n };\n }\n}\n\nfunction fakeI18nText(data: Record<string, string>): string {\n return data?.en;\n}\n\nfunction fakeImageFactory(): ImagesFactory {\n return {\n get(name: string) {\n return `mock/images/${name}`;\n },\n };\n}\n\nfunction fakeCheckPermissions(): boolean {\n return true;\n}\n","import type {\n MicroApp,\n StoryboardFunction,\n TransformedFunction,\n} from \"@next-core/types\";\nimport {\n cook,\n precookFunction,\n EstreeNode,\n __dev_only_clearGlobalExecutionContextStack,\n __dev_only_getGlobalExecutionContextStack,\n} from \"@next-core/cook\";\nimport { supply } from \"@next-core/supply\";\nimport { collectMemberUsageInFunction } from \"@next-core/utils/storyboard\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport type _ from \"lodash\";\nimport { getGeneralGlobals } from \"./internal/compute/getGeneralGlobals.js\";\n\n/** @internal */\nexport type ReadonlyStoryboardFunctions = Readonly<Record<string, Function>>;\n\n/** @internal */\nexport type StoryboardFunctionPatch = Pick<\n StoryboardFunction,\n \"source\" | \"typescript\" | \"transformed\"\n>;\n\n/** @internal */\nexport interface StoryboardFunctionRegistry {\n /** A readonly proxy for accessing cooked storyboard functions. */\n storyboardFunctions: ReadonlyStoryboardFunctions;\n\n /** Register storyboard functions. */\n registerStoryboardFunctions(\n functions: StoryboardFunction[] | undefined,\n app?: PartialMicroApp\n ): void;\n\n /** Update a storyboard function during debugging. */\n updateStoryboardFunction(name: string, data: StoryboardFunctionPatch): void;\n\n checkPermissionsUsage(functionNames: string[]): boolean;\n\n clearGlobalExecutionContextStack(): void;\n getGlobalExecutionContextStack(): ReturnType<\n typeof __dev_only_getGlobalExecutionContextStack\n >;\n}\n\n/** @internal */\nexport interface RuntimeStoryboardFunction {\n source: string;\n typescript?: boolean;\n processed?: boolean;\n cooked?: Function;\n deps: Set<string> | string[];\n hasPermissionsCheck: boolean;\n transformed?: TransformedFunction;\n}\n\n/** @internal */\nexport interface FunctionCoverageCollector {\n beforeVisit(node: EstreeNode): void;\n beforeEvaluate(node: EstreeNode): void;\n beforeCall(node: EstreeNode): void;\n beforeBranch(node: EstreeNode, branch: string): void;\n}\n\n/** @internal */\nexport interface FunctionCoverageSettings {\n createCollector(name: string): FunctionCoverageCollector;\n}\n\n/** @internal */\nexport type PartialMicroApp = Pick<MicroApp, \"id\" | \"isBuildPush\" | \"config\">;\n\n/** @internal */\nexport function StoryboardFunctionRegistryFactory({\n widgetId,\n widgetVersion,\n isolatedRoot,\n collectCoverage,\n debuggerOverrides,\n}: {\n widgetId?: string;\n widgetVersion?: string;\n isolatedRoot?: symbol;\n collectCoverage?: FunctionCoverageSettings;\n debuggerOverrides?: (ctx: {\n precookFunction: typeof precookFunction;\n cook: typeof cook;\n supply: typeof supply;\n }) => {\n LodashWithStaticFields?: Partial<typeof _>;\n ArrayConstructor?: typeof Array;\n ObjectWithStaticFields?: Partial<typeof Object>;\n };\n} = {}): StoryboardFunctionRegistry {\n const registeredFunctions = new Map<string, RuntimeStoryboardFunction>();\n\n const overrides = debuggerOverrides?.({\n precookFunction,\n cook,\n supply,\n });\n\n // Use `Proxy` with a frozen target, to make a readonly function registry.\n const storyboardFunctions = new Proxy(Object.freeze({}), {\n get(_target, key) {\n return getStoryboardFunction(key as string);\n },\n }) as ReadonlyStoryboardFunctions;\n\n let currentApp: PartialMicroApp | undefined;\n\n function registerStoryboardFunctions(\n functions: StoryboardFunction[] | undefined,\n app?: PartialMicroApp\n ): void {\n if (app) {\n currentApp = app;\n }\n registeredFunctions.clear();\n if (Array.isArray(functions)) {\n for (const fn of functions) {\n let deps: Set<string> | string[] | undefined = fn.deps;\n if (deps == null) {\n deps = collectMemberUsageInFunction(fn, \"FN\", !!collectCoverage);\n (deps as Set<string>).delete(fn.name);\n }\n const hasPermissionsCheck =\n fn.perm ??\n collectMemberUsageInFunction(\n fn,\n \"PERMISSIONS\",\n !!collectCoverage\n ).has(\"check\");\n registeredFunctions.set(fn.name, {\n source: fn.source,\n typescript: fn.typescript,\n transformed: fn.transformed,\n deps,\n hasPermissionsCheck,\n });\n }\n }\n }\n\n function getGlobalVariables(globals: Set<string> | string[]) {\n return supply(\n globals,\n getGeneralGlobals(globals, {\n collectCoverage,\n widgetId,\n widgetVersion,\n isolatedRoot,\n app: currentApp,\n storyboardFunctions,\n isStoryboardFunction: true,\n }),\n !!collectCoverage\n );\n }\n\n function getStoryboardFunction(name: string): Function | undefined {\n const fn = registeredFunctions.get(name);\n if (!fn) {\n return undefined;\n }\n if (fn.processed) {\n return fn.cooked;\n }\n let collector: FunctionCoverageCollector | undefined;\n if (collectCoverage) {\n collector = collectCoverage.createCollector(name);\n }\n\n // Do not use transformed functions when debugging.\n const transformed = !overrides && !collector && fn.transformed;\n if (transformed) {\n const globalVariables = getGlobalVariables(transformed.globals);\n // Spread globals as params to prevent accessing forbidden globals.\n // NOTE: in native mode, forbidden globals are declared as `undefined`,\n // thus accessing them will not throw a ReferenceError.\n fn.cooked = new Function(\n ...transformed.globals,\n `\"use strict\";return (${transformed.source})`\n )(\n ...transformed.globals.map((key) =>\n hasOwnProperty(globalVariables, key)\n ? globalVariables[key]\n : undefined\n )\n );\n } else {\n const precooked = precookFunction(fn.source, {\n typescript: fn.typescript,\n hooks: collector && {\n beforeVisit: collector.beforeVisit,\n },\n cacheKey: fn,\n });\n const globalVariables = getGlobalVariables(\n precooked.attemptToVisitGlobals\n );\n fn.cooked = cook(precooked.function, fn.source, {\n rules: {\n noVar: true,\n },\n globalVariables: overrides\n ? {\n ...globalVariables,\n ...(overrides?.LodashWithStaticFields &&\n precooked.attemptToVisitGlobals.has(\"_\")\n ? {\n _: {\n ...(globalVariables._ as typeof _),\n ...overrides.LodashWithStaticFields,\n },\n }\n : null),\n ...(overrides?.ArrayConstructor &&\n precooked.attemptToVisitGlobals.has(\"Array\")\n ? {\n Array: overrides.ArrayConstructor,\n }\n : null),\n ...(overrides?.ObjectWithStaticFields &&\n precooked.attemptToVisitGlobals.has(\"Object\")\n ? {\n Object: {\n ...(globalVariables.Object as typeof Object),\n ...overrides.ObjectWithStaticFields,\n },\n }\n : null),\n }\n : globalVariables,\n ArrayConstructor: overrides?.ArrayConstructor,\n hooks: collector && {\n beforeEvaluate: collector.beforeEvaluate,\n beforeCall: collector.beforeCall,\n beforeBranch: collector.beforeBranch,\n },\n debug: !!debuggerOverrides,\n }) as Function;\n }\n fn.processed = true;\n return fn.cooked;\n }\n\n return {\n storyboardFunctions,\n registerStoryboardFunctions,\n updateStoryboardFunction(\n name: string,\n data: StoryboardFunctionPatch\n ): void {\n const newFn = {\n ...data,\n name,\n };\n const deps = collectMemberUsageInFunction(newFn, \"FN\", true);\n const hasPermissionsCheck = collectMemberUsageInFunction(\n newFn,\n \"PERMISSIONS\",\n true\n ).has(\"check\");\n registeredFunctions.set(name, {\n source: data.source,\n typescript: data.typescript,\n transformed: data.transformed,\n deps,\n hasPermissionsCheck,\n });\n },\n /**\n * Check whether listed functions attempt to call `PERMISSIONS.check()`,\n * includes in nested `FN.*()` calls.\n */\n checkPermissionsUsage(functionNames) {\n const checkedFunctions = new Set<string>();\n const hasPermissionsCheck = (name: string): boolean => {\n if (!checkedFunctions.has(name)) {\n checkedFunctions.add(name);\n const fn = registeredFunctions.get(name);\n return (\n !!fn &&\n (fn.hasPermissionsCheck || [...fn.deps].some(hasPermissionsCheck))\n );\n }\n return false;\n };\n return functionNames.some(hasPermissionsCheck);\n },\n clearGlobalExecutionContextStack() {\n __dev_only_clearGlobalExecutionContextStack();\n },\n getGlobalExecutionContextStack() {\n return __dev_only_getGlobalExecutionContextStack();\n },\n };\n}\n","import { StoryboardFunctionRegistryFactory } from \"../../StoryboardFunctionRegistry.js\";\n\nexport const {\n storyboardFunctions,\n registerStoryboardFunctions,\n checkPermissionsUsage,\n} = StoryboardFunctionRegistryFactory();\n","import EventTarget from \"@ungap/event-target\";\n\nexport interface Media {\n breakpoint?: MediaBreakpoint;\n}\n\nexport enum MediaBreakpoint {\n xLarge = \"xLarge\",\n large = \"large\",\n medium = \"medium\",\n small = \"small\",\n xSmall = \"xSmall\",\n}\n\nexport const mediaBreakpointMinWidthMap = new Map<\n MediaBreakpoint,\n string | number\n>([\n [MediaBreakpoint.xLarge, \"1920px\"],\n [MediaBreakpoint.large, \"1600px\"],\n [MediaBreakpoint.medium, \"1280px\"],\n [MediaBreakpoint.small, \"1024px\"],\n [MediaBreakpoint.xSmall, 0],\n]);\nexport const mediaEventTarget = new EventTarget();\n\nconst breakpointMatchesMap: Partial<Record<MediaBreakpoint, boolean>> = {};\nconst MEDIA: Media = {};\n\nfunction handleMatchesChange(\n data: { readonly matches: boolean; readonly media: string },\n breakpoint: MediaBreakpoint\n): void {\n let changed = false;\n breakpointMatchesMap[breakpoint] = data.matches;\n\n for (const [breakpoint] of mediaBreakpointMinWidthMap) {\n if (breakpointMatchesMap[breakpoint] && MEDIA.breakpoint !== breakpoint) {\n MEDIA.breakpoint = breakpoint;\n changed = true;\n break;\n }\n }\n\n if (changed) {\n mediaEventTarget.dispatchEvent(\n new CustomEvent(\"change\", { detail: MEDIA })\n );\n }\n}\n\nmediaBreakpointMinWidthMap.forEach((minWidth, breakpoint) => {\n const mediaQueryList = window.matchMedia(`(min-width: ${minWidth})`);\n\n handleMatchesChange(mediaQueryList, breakpoint);\n\n if (mediaQueryList.addEventListener) {\n mediaQueryList.addEventListener(\"change\", (event) => {\n handleMatchesChange(event, breakpoint);\n });\n } else {\n mediaQueryList.addListener((event) => {\n handleMatchesChange(event, breakpoint);\n });\n }\n});\n\nexport const getMedia = (): Media => MEDIA;\n","export function getStorageItem(storageType: \"local\" | \"session\") {\n return function (name: string) {\n const storage = storageType === \"local\" ? localStorage : sessionStorage;\n return JSON.parse(storage.getItem(name) ?? \"null\");\n };\n}\n","import { getRuntime } from \"./index.js\";\nimport type { RuntimeContext } from \"./internal/interfaces.js\";\n\nexport function isStrictMode(runtimeContext?: RuntimeContext) {\n return !!(\n runtimeContext ? runtimeContext.flags : getRuntime()?.getFeatureFlags()\n )?.[\"brick-next-v3-strict-mode\"];\n}\n\nexport function warnAboutStrictMode(\n strict: boolean,\n message: string,\n ...extraLogs: unknown[]\n) {\n const punctuation = extraLogs.length === 0 ? \"\" : \",\";\n if (strict) {\n // eslint-disable-next-line no-console\n console.error(\n `${message} is dropped in v3 strict mode${punctuation}`,\n ...extraLogs\n );\n } else {\n // eslint-disable-next-line no-console\n console.warn(\n `${message} is deprecated in v3 and will be dropped in strict mode${punctuation}`,\n ...extraLogs\n );\n }\n}\n","import type {\n ContextConf,\n CustomTemplate,\n CustomTemplateConstructor,\n CustomTemplateProxyBasicProperty,\n} from \"@next-core/types\";\nimport { uniq } from \"lodash\";\nimport type { RuntimeBrickElement } from \"./internal/interfaces.js\";\nimport { isStrictMode, warnAboutStrictMode } from \"./isStrictMode.js\";\nimport { getV2RuntimeFromDll } from \"./getV2RuntimeFromDll.js\";\n\n// Note: `prefix` is a native prop on Element, but it's only used in XML documents.\nconst allowedNativeProps = new Set([\"prefix\"]);\n\ninterface LegacyTplPropProxy extends CustomTemplateProxyBasicProperty {\n asVariable?: boolean;\n mergeProperty?: unknown;\n refTransform?: unknown;\n}\n\nexport class CustomTemplateRegistry {\n readonly #registry = new Map<string, CustomTemplate>();\n readonly #isolated: boolean | undefined;\n\n constructor(isolated?: boolean) {\n this.#isolated = isolated;\n }\n\n define(tagName: string, constructor: CustomTemplateConstructor): void {\n let registered = this.#registry.has(tagName);\n if (registered) {\n // When open launchpad, the storyboard will be updated.\n // However, we can't *undefine* a custom element.\n // Just ignore re-registering custom templates.\n // eslint-disable-next-line no-console\n console.warn(`Custom template of \"${tagName}\" already registered.`);\n } else {\n registered = !!customElements.get(tagName);\n if (registered) {\n // eslint-disable-next-line no-console\n console.warn(\n `Custom template of \"${tagName}\" already defined by customElements.`\n );\n }\n }\n\n // Transform legacy `proxy.properties[].asVariable` as states.\n const strict = isStrictMode();\n const proxyProperties = (constructor.proxy?.properties ?? {}) as {\n [name: string]: LegacyTplPropProxy;\n };\n const validProxyProps: [string, CustomTemplateProxyBasicProperty][] = [];\n const legacyTplVariables: string[] = [];\n for (const [key, value] of Object.entries(proxyProperties)) {\n if (value.asVariable) {\n warnAboutStrictMode(strict, \"Template `asVariable`\", tagName, key);\n // istanbul ignore next\n if (!strict) {\n // For existed TPL usage, treat it as a STATE.\n legacyTplVariables.push(key);\n }\n } else if (value.mergeProperty || value.refTransform) {\n // eslint-disable-next-line no-console\n console.error(\n \"Template `mergeProperty` and `refTransform` are dropped in v3:\",\n tagName,\n key\n );\n } else if (value.ref) {\n validProxyProps.push([key, value]);\n }\n // Else: documentation only, for exposed states.\n }\n\n const compatibleConstructor = {\n ...constructor,\n proxy: {\n ...constructor.proxy,\n properties: Object.fromEntries(validProxyProps),\n },\n state: (constructor.state\n ? strict\n ? constructor.state\n : constructor.state.map((item) => ({\n // Make `expose` defaults to true in non-strict mode.\n expose: true,\n ...item,\n }))\n : []\n ).concat(legacyTplVariables.map((tpl) => ({ name: tpl, expose: true }))),\n };\n\n // Now we allow re-register custom template\n this.#registry.set(tagName, {\n ...compatibleConstructor,\n name: tagName,\n });\n\n const exposedStates = getExposedStates(compatibleConstructor.state);\n const proxyMethods = Object.entries(\n compatibleConstructor.proxy?.methods ?? {}\n );\n\n const props = exposedStates.concat(\n validProxyProps.map((entry) => entry[0])\n );\n const methods = proxyMethods.map((entry) => entry[0]);\n\n const nativeProps = props\n .concat(methods)\n .filter(\n (prop) => prop in HTMLElement.prototype && !allowedNativeProps.has(prop)\n );\n if (nativeProps.length > 0) {\n warnAboutStrictMode(\n strict,\n \"Using native HTMLElement properties as template properties or methods\",\n tagName,\n ...nativeProps\n );\n // istanbul ignore next\n if (strict) {\n throw new Error(\n `In custom template \"${tagName}\", ${nativeProps\n .map((p) => `\"${p}\"`)\n .join(\n \", \"\n )} are native HTMLElement properties, and should be avoid to be used as brick properties or methods.`\n );\n }\n }\n\n if (registered) {\n return;\n }\n\n class TplElement extends HTMLElement {\n get $$typeof() {\n return \"custom-template\" as const;\n }\n\n static get _dev_only_definedProperties(): string[] {\n return props;\n }\n\n static get _dev_only_definedMethods(): string[] {\n return methods;\n }\n\n $$getElementByRef(this: RuntimeBrickElement, ref: string) {\n return this.$$tplStateStore?.hostBrick?.tplHostMetadata?.internalBricksByRef.get(\n ref\n )?.element;\n }\n\n connectedCallback() {\n let shadowRoot = this.shadowRoot;\n if (!shadowRoot) {\n shadowRoot = this.attachShadow({ mode: \"open\" });\n }\n const fragment = document.createDocumentFragment();\n const style = document.createElement(\"style\");\n style.textContent = \":host{display:block}:host([hidden]){display:none}\";\n const slot = document.createElement(\"slot\");\n fragment.appendChild(style);\n fragment.appendChild(slot);\n shadowRoot.appendChild(fragment);\n }\n\n disconnectedCallback() {\n if (this.shadowRoot) {\n this.shadowRoot.textContent = \"\";\n }\n }\n }\n\n for (const propName of exposedStates) {\n if (validProxyProps.some((entry) => entry[0] === propName)) {\n // eslint-disable-next-line no-console\n console.error(\n `Cannot define an exposed state that is also a proxy property: \"${propName}\" in ${tagName}`\n );\n continue;\n }\n Object.defineProperty(TplElement.prototype, propName, {\n get(this: RuntimeBrickElement) {\n return this.$$tplStateStore!.getValue(propName);\n },\n set(this: RuntimeBrickElement, value: unknown) {\n // 在 mount 过程中,先设置属性,再设置 `$$tplStateStore`,这样,当触发属性设置时,\n // 避免初始化的一次 state update 操作及其 onChange 事件。\n this.$$tplStateStore?.updateValue(propName, value, \"replace\");\n },\n enumerable: true,\n });\n }\n\n for (const [from, to] of validProxyProps) {\n Object.defineProperty(TplElement.prototype, from, {\n get(this: TplElement) {\n const element = this.$$getElementByRef!(to.ref) as unknown as Record<\n string,\n unknown\n >;\n return element[to.refProperty ?? from];\n },\n set(this: TplElement, value: unknown) {\n // 同上 exposedState.set\n const element = this.$$getElementByRef?.(to.ref) as unknown as Record<\n string,\n unknown\n >;\n if (element) {\n element[to.refProperty ?? from] = value;\n }\n },\n enumerable: true,\n });\n }\n\n for (const [from, to] of proxyMethods) {\n Object.defineProperty(TplElement.prototype, from, {\n value(this: TplElement, ...args: unknown[]) {\n const element = this.$$getElementByRef!(to.ref) as unknown as Record<\n string,\n Function\n >;\n return element[to.refMethod ?? from](...args);\n },\n enumerable: true,\n });\n }\n\n customElements.define(tagName, TplElement);\n }\n\n get(tagName: string) {\n return this.#registry.get(tagName);\n }\n\n clearIsolatedRegistry() {\n if (this.#isolated) {\n this.#registry.clear();\n }\n }\n}\n\nfunction getExposedStates(state: ContextConf[] | undefined): string[] {\n // Allow duplicated state names which maybe mutually exclusive.\n return uniq(\n state?.filter((item) => item.expose).map((item) => item.name) ?? []\n );\n}\n\n// istanbul ignore next\nfunction getCustomTemplatesV2() {\n const v2Kit = getV2RuntimeFromDll();\n if (v2Kit) {\n return Object.freeze({\n define(tagName: string, constructor: CustomTemplateConstructor) {\n return v2Kit.getRuntime().registerCustomTemplate(tagName, constructor);\n },\n }) as CustomTemplateRegistry;\n }\n}\n\n// istanbul ignore next\nexport const customTemplates =\n getCustomTemplatesV2() || new CustomTemplateRegistry();\n","import type { CustomTemplate } from \"@next-core/types\";\nimport { CustomTemplateRegistry } from \"../CustomTemplates.js\";\n\nexport const isolatedTemplateRegistryMap = new Map<\n symbol,\n CustomTemplateRegistry\n>();\n\nexport function registerIsolatedTemplates(\n isolatedRoot: symbol,\n templates: CustomTemplate[] | undefined\n) {\n let registry = isolatedTemplateRegistryMap.get(isolatedRoot);\n if (!registry) {\n registry = new CustomTemplateRegistry(true);\n isolatedTemplateRegistryMap.set(isolatedRoot, registry);\n }\n registry.clearIsolatedRegistry();\n if (Array.isArray(templates)) {\n for (const tpl of templates) {\n registry.define(tpl.name, tpl);\n }\n }\n}\n","import type { DataStore } from \"../data/DataStore.js\";\nimport type { RuntimeBrickElement, RuntimeContext } from \"../interfaces.js\";\nimport { customTemplates } from \"../../CustomTemplates.js\";\nimport { isolatedTemplateRegistryMap } from \"../IsolatedTemplates.js\";\n\ntype MinimalTplStateStoreContext = Pick<\n RuntimeContext,\n \"tplStateStoreId\" | \"tplStateStoreMap\"\n>;\n\nexport function getTplStateStore(\n { tplStateStoreId, tplStateStoreMap }: MinimalTplStateStoreContext,\n using: string,\n extraInfo?: string\n): DataStore<\"STATE\"> {\n if (!tplStateStoreId) {\n throw new Error(\n `Using \"${using}\" outside of a custom template${extraInfo ?? \"\"}`\n );\n }\n const store = tplStateStoreMap.get(tplStateStoreId);\n if (!store) {\n throw new Error(\n `Template state store is not found when using \"${using}\"${\n extraInfo ?? \"\"\n }.\\nThis is a bug of Brick Next, please report it.`\n );\n }\n return store;\n}\n\nexport function getTplHostElement(\n runtimeContext: MinimalTplStateStoreContext,\n using: string,\n extraInfo?: string\n): RuntimeBrickElement {\n const store = getTplStateStore(runtimeContext, using, extraInfo);\n const hostElement = store.hostBrick!.element;\n if (!hostElement) {\n throw new Error(\n `Template host element is gone when using \"${using}\"${\n extraInfo ?? \"\"\n }.\\nThis is a bug of Brick Next, please report it.`\n );\n }\n return hostElement;\n}\n\nexport function getTagNameOfCustomTemplate(\n brick: string,\n runtimeContext: Pick<RuntimeContext, \"app\" | \"isolatedRoot\">\n): false | string {\n if (runtimeContext.isolatedRoot) {\n const registry = isolatedTemplateRegistryMap.get(\n runtimeContext.isolatedRoot\n );\n if (registry?.get(brick)) {\n return brick;\n }\n return false;\n }\n\n // When a template is registered by an app, it's namespace maybe missed.\n if (!brick.includes(\".\") && brick.startsWith(\"tpl-\") && runtimeContext.app) {\n const tagName = `${runtimeContext.app.id}.${brick}`;\n if (customTemplates.get(tagName)) {\n return tagName;\n }\n }\n if (customTemplates.get(brick)) {\n return brick;\n }\n return false;\n}\n","import { StoryboardFunction } from \"@next-core/types\";\nimport {\n ReadonlyStoryboardFunctions,\n StoryboardFunctionRegistryFactory,\n} from \"../../StoryboardFunctionRegistry.js\";\nimport { getV2RuntimeFromDll } from \"../../getV2RuntimeFromDll.js\";\n\nconst widgetFunctionRegistry = new Map<string, ReadonlyStoryboardFunctions>();\n\nexport const widgetFunctions = new Proxy(Object.freeze({}), {\n get(target, key: string) {\n return widgetFunctionRegistry.get(key);\n },\n}) as Readonly<Record<string, ReadonlyStoryboardFunctions>>;\n\nfunction registerWidgetFunctionsV3(\n widgetId: string,\n functions: StoryboardFunction[],\n widgetVersion?: string\n): void {\n if (widgetFunctionRegistry.has(widgetId)) {\n throw new Error(`Widget functions of \"${widgetId}\" already registered`);\n }\n const { storyboardFunctions, registerStoryboardFunctions } =\n StoryboardFunctionRegistryFactory({ widgetId, widgetVersion });\n widgetFunctionRegistry.set(widgetId, storyboardFunctions);\n registerStoryboardFunctions(functions);\n}\n\n// istanbul ignore next\nfunction registerWidgetFunctionsV2Factory() {\n const v2Kit = getV2RuntimeFromDll();\n if (v2Kit) {\n return function (\n widgetId: string,\n functions: StoryboardFunction[],\n widgetVersion?: string\n ) {\n return v2Kit\n .getRuntime()\n .registerWidgetFunctions(widgetId, functions, widgetVersion);\n };\n }\n}\n\n// istanbul ignore next\nexport const registerWidgetFunctions =\n registerWidgetFunctionsV2Factory() || registerWidgetFunctionsV3;\n","import type { MicroApp } from \"@next-core/types\";\nimport { type CompareOperator, compare } from \"compare-versions\";\nimport { _internalApiGetAppInBootstrapData, hooks } from \"./Runtime.js\";\n\nexport type AppForCheck = Pick<\n MicroApp,\n \"id\" | \"currentVersion\" | \"installStatus\"\n>;\n\nexport function hasInstalledApp(appId: string, matchVersion?: string): boolean {\n // First, check whether the app is in bootstrap already.\n let app = _internalApiGetAppInBootstrapData(appId) as AppForCheck | undefined;\n if (!app && hooks?.checkInstalledApps) {\n app = hooks.checkInstalledApps.getCheckedApp(appId);\n }\n if (!app || app.installStatus === \"running\") {\n return false;\n }\n // Todo: `currentVersion` maybe `\"\"`\n if (!matchVersion || !app.currentVersion) {\n return true;\n }\n // Valid `matchVersion`:\n // >=1.2.3\n // >1.2.3\n // =1.2.3\n // <=1.2.3\n // <1.2.3\n const matches = matchVersion.match(/^([><]=?|=)(.*)$/);\n try {\n if (!matches) {\n throw new TypeError(`Invalid match version: ${matchVersion}`);\n }\n return compare(\n app.currentVersion,\n matches[2],\n matches[1] as CompareOperator\n );\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n }\n return false;\n}\n","import type { DataStore } from \"../data/DataStore.js\";\nimport type { RuntimeContext } from \"../interfaces.js\";\n\ntype MinimalTplStateStoreContext = Pick<\n RuntimeContext,\n \"formStateStoreId\" | \"formStateStoreMap\"\n>;\n\nexport function getFormStateStore(\n { formStateStoreId, formStateStoreMap }: MinimalTplStateStoreContext,\n using: string,\n extraInfo?: string\n): DataStore<\"FORM_STATE\"> {\n if (!formStateStoreId) {\n throw new Error(\n `Using \"${using}\" outside of form renderer${extraInfo ?? \"\"}`\n );\n }\n const store = formStateStoreMap.get(formStateStoreId);\n if (!store) {\n throw new Error(\n `Form state store is not found when using \"${using}\"${\n extraInfo ?? \"\"\n }.\\nThis is a bug of Brick Next, please report it.`\n );\n }\n return store;\n}\n","import { loadBricksImperatively } from \"@next-core/loader\";\nimport { getBrickPackages, hooks } from \"../Runtime.js\";\n\nconst pool = new Map<string, HTMLElement>();\nexport async function getProviderBrick(provider: string): Promise<HTMLElement> {\n const isFlowApi = hooks?.flowApi?.isFlowApiProvider(provider);\n if (isFlowApi) {\n provider = hooks!.flowApi!.FLOW_API_PROVIDER;\n }\n\n let brick = pool.get(provider);\n if (brick) {\n return brick;\n }\n\n if (provider.includes(\"-\") && !customElements.get(provider)) {\n if (isFlowApi) {\n hooks!.flowApi!.registerFlowApiProvider();\n } else {\n await loadBricksImperatively([provider], getBrickPackages());\n\n if (!customElements.get(provider)) {\n throw new Error(`Provider not defined: \"${provider}\".`);\n }\n }\n }\n\n brick = document.createElement(provider);\n pool.set(provider, brick);\n return brick;\n}\n","import { isObject } from \"@next-core/utils/general\";\n\nlet computed = new WeakSet();\n\n// The computed (or transformed) result should never be *computed* again.\n// So does the fetched data from a remote api.\nexport function markAsComputed(value: unknown): void {\n if (isObject(value)) {\n if (!hasBeenComputed(value)) {\n computed.add(value);\n if (Array.isArray(value)) {\n value.forEach(markAsComputed);\n } else {\n // Only mark pure objects.\n const proto = Object.getPrototypeOf(value);\n if (!proto || proto.constructor === Object) {\n Object.values(value).forEach(markAsComputed);\n }\n }\n }\n }\n}\n\nexport function hasBeenComputed(object: unknown): boolean {\n return computed.has(object as object);\n}\n\nexport function resetAllComputedMarks(): void {\n computed = new WeakSet();\n}\n","import type {\n HandleReject,\n HandleRejectByTransform,\n ResolveConf,\n UseProviderContractConf,\n} from \"@next-core/types\";\nimport { asyncComputeRealValue } from \"../compute/computeRealValue.js\";\nimport { getProviderBrick } from \"./getProviderBrick.js\";\nimport type { RuntimeContext } from \"../interfaces.js\";\nimport { _internalApiGetRenderId, hooks } from \"../Runtime.js\";\nimport { markAsComputed } from \"../compute/markAsComputed.js\";\nimport { get } from \"lodash\";\nimport { isStrictMode, warnAboutStrictMode } from \"../../isStrictMode.js\";\n\nconst cache = new Map<string, Promise<unknown>>();\n\nexport interface ResolveOptions {\n /**\n * Cache mode of resolve.\n *\n * See https://developer.mozilla.org/en-US/docs/Web/API/Request/cache\n *\n * - `default`: Looks for a matching cache.\n * - `reload`: Without looking for a matching cache.\n */\n cache?: \"default\" | \"reload\";\n renderId?: string;\n}\n\nexport async function resolveData(\n resolveConf: ResolveConf,\n runtimeContext: RuntimeContext,\n resolveOptions?: ResolveOptions\n) {\n const {\n useProvider,\n method = \"resolve\",\n args,\n params,\n options,\n filename,\n onReject,\n } = resolveConf;\n\n const { provider: legacyProvider, field: legacyField } = resolveConf as {\n provider?: string;\n field?: string | string[];\n };\n if (legacyProvider && !useProvider) {\n throw new Error(\n `You're using \"provider: ${legacyProvider}\" which is dropped in v3, please use \"useProvider\" instead`\n );\n }\n\n const hasLegacyField = legacyField !== null && legacyField !== undefined;\n if (hasLegacyField) {\n const strict = isStrictMode();\n warnAboutStrictMode(strict, \"`resolve.field`\");\n // istanbul ignore next\n if (strict) {\n throw new Error(\"Using deprecated `resolve.field`\");\n }\n }\n\n const contractConf =\n !Array.isArray(args) &&\n params &&\n hooks?.flowApi?.isFlowApiProvider(useProvider)\n ? ({ params, options, filename } as UseProviderContractConf)\n : null;\n\n const [providerBrick, actualArgs, actualContractConf] = await Promise.all([\n getProviderBrick(useProvider) as unknown as Promise<\n Record<string, Function>\n >,\n asyncComputeRealValue(args, runtimeContext) as Promise<\n unknown[] | undefined\n >,\n asyncComputeRealValue(\n contractConf,\n runtimeContext\n ) as Promise<UseProviderContractConf | null>,\n ]);\n\n // `clearResolveCache` maybe called during the above promise being\n // fulfilled, so we manually mark it as stale for this case.\n const renderId = resolveOptions?.renderId;\n const isStale = () => !!renderId && renderId !== _internalApiGetRenderId();\n\n const promise = resolveByProvider(\n providerBrick,\n useProvider,\n method,\n actualContractConf?.params ? actualContractConf : (actualArgs ?? []),\n resolveOptions,\n args,\n isStale\n );\n\n let { transform } = resolveConf;\n let data: unknown;\n\n try {\n const value = await promise;\n data = hasLegacyField ? get(value, legacyField) : value;\n // The fetched data and its inner objects should never be *injected* again.\n markAsComputed(data);\n } catch (error) {\n if (isHandleRejectByTransform(onReject)) {\n transform = onReject.transform;\n data = error;\n } else {\n throw error;\n }\n }\n\n if (!transform) {\n return data;\n }\n\n // Keep backward compatibility of string transform.\n if (typeof transform === \"string\") {\n return { [transform]: data };\n }\n\n return asyncComputeRealValue(transform, { ...runtimeContext, data });\n}\n\nexport function clearResolveCache() {\n cache.clear();\n}\n\nexport async function resolveByProvider(\n brick: Record<string, Function>,\n useProvider: string,\n method: string,\n args: unknown[] | UseProviderContractConf,\n options?: ResolveOptions,\n originalArgs?: unknown[],\n isStale?: () => boolean\n) {\n let cacheKey: string;\n try {\n // `args` may contain circular references, which makes\n // JSON stringify failed, thus we fallback to original args.\n cacheKey = JSON.stringify({\n useProvider,\n method,\n args,\n });\n } catch (e) {\n if (!originalArgs) {\n throw e;\n }\n cacheKey = JSON.stringify({\n useProvider,\n method,\n originalArgs,\n });\n }\n\n let promise: Promise<unknown> | undefined;\n if (options?.cache !== \"reload\") {\n promise = cache.get(cacheKey);\n }\n if (!promise) {\n promise = (async () => {\n const finalArgs = hooks?.flowApi?.isFlowApiProvider(useProvider)\n ? await hooks.flowApi.getArgsOfFlowApi(useProvider, args, method)\n : (args as unknown[]);\n return brick[method](...finalArgs);\n })();\n\n if (!isStale?.()) {\n cache.set(cacheKey, promise);\n }\n }\n\n return promise;\n}\n\nfunction isHandleRejectByTransform(\n onReject: HandleReject | undefined\n): onReject is HandleRejectByTransform {\n return !!(onReject as HandleRejectByTransform)?.transform;\n}\n","import {\n cook,\n preevaluate,\n PreevaluateResult,\n shouldAllowRecursiveEvaluations,\n} from \"@next-core/cook\";\nimport { loadProcessorsImperatively } from \"@next-core/loader\";\nimport { supply } from \"@next-core/supply\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport {\n strictCollectMemberUsage,\n collectAppGetMenuUsage,\n collectInstalledAppsHasUsage,\n MemberCallUsage,\n} from \"@next-core/utils/storyboard\";\nimport { cloneDeep, omit } from \"lodash\";\nimport type { RuntimeContext } from \"../interfaces.js\";\nimport { customProcessors } from \"../../CustomProcessors.js\";\nimport {\n checkPermissionsUsage,\n storyboardFunctions,\n} from \"./StoryboardFunctions.js\";\nimport { getGeneralGlobals } from \"./getGeneralGlobals.js\";\nimport {\n getDynamicReadOnlyProxy,\n getReadOnlyProxy,\n} from \"../proxyFactories.js\";\nimport { devtoolsHookEmit, getDevHook } from \"../devtools.js\";\nimport { getMedia } from \"../mediaQuery.js\";\nimport { getStorageItem } from \"./getStorageItem.js\";\nimport {\n _internalApiGetRuntimeContext,\n _internalApiGetStoryboardInBootstrapData,\n getBrickPackages,\n getRuntime,\n hooks,\n} from \"../Runtime.js\";\nimport type { DataStore } from \"../data/DataStore.js\";\nimport { getTplStateStore } from \"../CustomTemplates/utils.js\";\nimport { widgetFunctions } from \"./WidgetFunctions.js\";\nimport { widgetI18nFactory } from \"./WidgetI18n.js\";\nimport { hasInstalledApp } from \"../hasInstalledApp.js\";\nimport { isStrictMode, warnAboutStrictMode } from \"../../isStrictMode.js\";\nimport { getFormStateStore } from \"../FormRenderer/utils.js\";\nimport { resolveData } from \"../data/resolveData.js\";\nimport { asyncComputeRealValue } from \"./computeRealValue.js\";\n\nconst symbolForRaw = Symbol.for(\"pre.evaluated.raw\");\nconst symbolForContext = Symbol.for(\"pre.evaluated.context\");\n\nexport interface PreEvaluated {\n [symbolForRaw]: string;\n [symbolForContext]: RuntimeContext;\n}\n\nexport interface EvaluateOptions {\n lazy?: boolean;\n evaluationId?: number;\n}\n\nexport function isPreEvaluated(raw: unknown): raw is PreEvaluated {\n return !!(raw as PreEvaluated)?.[symbolForRaw];\n}\n\nexport function getPreEvaluatedRaw(pre: PreEvaluated): string {\n return pre[symbolForRaw];\n}\n\nexport function shouldDismissMarkingComputed(\n raw: string | PreEvaluated\n): boolean {\n if (typeof raw === \"string\") {\n return shouldAllowRecursiveEvaluations(raw);\n }\n return shouldAllowRecursiveEvaluations(raw[symbolForRaw]);\n}\n\nconst possibleErrorConstructs = new WeakSet<ErrorConstructor>([\n SyntaxError,\n TypeError,\n ReferenceError,\n]);\n\nexport function getCookErrorConstructor(error: any): ErrorConstructor {\n return possibleErrorConstructs.has(error.constructor)\n ? error.constructor\n : TypeError;\n}\n\nexport async function asyncEvaluate(\n raw: string | PreEvaluated, // string or pre-evaluated object.\n runtimeContext: RuntimeContext,\n options?: EvaluateOptions\n): Promise<unknown> {\n const { blockingList, run } = lowLevelEvaluate(\n raw,\n runtimeContext,\n options,\n true\n );\n await Promise.all(blockingList);\n return run();\n}\n\nexport function evaluate(\n raw: string | PreEvaluated, // string or pre-evaluated object.\n runtimeContext: RuntimeContext,\n options?: EvaluateOptions\n): Promise<unknown> {\n const { run } = lowLevelEvaluate(raw, runtimeContext, options, false);\n return run();\n}\n\nfunction lowLevelEvaluate(\n raw: string | PreEvaluated, // string or pre-evaluated object.\n runtimeContext: RuntimeContext,\n options: EvaluateOptions = {},\n isAsync?: boolean\n): {\n blockingList: (Promise<unknown> | undefined)[];\n run: Function;\n} {\n const blockingList: (Promise<unknown> | undefined)[] = [];\n if (typeof raw !== \"string\") {\n // If the `raw` is not a string, it must be a pre-evaluated object.\n // Then fulfil the context, and restore the original `raw`.\n\n const passByRuntimeContext = omit(runtimeContext, [\n \"pendingPermissionsPreCheck\",\n \"tplStateStoreMap\",\n \"tplStateStoreScope\",\n \"formStateStoreMap\",\n \"formStateStoreScope\",\n ]);\n\n runtimeContext = {\n ...raw[symbolForContext],\n ...passByRuntimeContext,\n };\n raw = raw[symbolForRaw];\n }\n\n // Collect `APP.getMenu(...)` usage before evaluating.\n const menuUsage: MemberCallUsage = {\n usedArgs: new Set(),\n };\n const hasAppUsage: MemberCallUsage = {\n usedArgs: new Set(),\n };\n\n // A `SyntaxError` maybe thrown.\n let precooked: PreevaluateResult;\n try {\n precooked = preevaluate(raw, {\n cache: true,\n withParent: true,\n hooks: {\n beforeVisitGlobal(node, parent) {\n collectAppGetMenuUsage(menuUsage, node, parent!);\n collectInstalledAppsHasUsage(hasAppUsage, node, parent!);\n },\n },\n });\n } catch (error: any) {\n const message = `${error.message}, in \"${raw}\"`;\n const errorConstructor = getCookErrorConstructor(error);\n throw new errorConstructor(message);\n }\n\n if (menuUsage.hasNonStaticUsage) {\n throw new Error(\n `Non-static usage of \"APP.getMenu\" is prohibited in v3, check your expression: \"${raw}\"`\n );\n }\n\n if (hasAppUsage.hasNonStaticUsage) {\n throw new Error(\n `Non-static usage of \"INSTALLED_APPS.has\" is prohibited in v3, check your expression: \"${raw}\"`\n );\n }\n\n const globalVariables: Record<string, unknown> = {};\n const { attemptToVisitGlobals } = precooked;\n\n // Ignore evaluating if required `event/DATA` is missing in\n // context. Since they are are provided in different context, whenever\n // missing one of them, memorize the current context for later consuming.\n if (\n options.lazy ||\n (attemptToVisitGlobals.has(\"EVENT\") &&\n !hasOwnProperty(runtimeContext, \"event\")) ||\n (attemptToVisitGlobals.has(\"EVENT_BY_KEY\") &&\n !hasOwnProperty(runtimeContext, \"eventMap\")) ||\n (attemptToVisitGlobals.has(\"DATA\") &&\n !hasOwnProperty(runtimeContext, \"data\"))\n ) {\n return {\n blockingList,\n run() {\n return Object.keys(runtimeContext).length > 0\n ? ({\n [symbolForRaw]: raw,\n [symbolForContext]: runtimeContext,\n } as PreEvaluated)\n : raw;\n },\n };\n }\n\n let usedCtx: Set<string> | undefined;\n let usedProcessors: Set<string>;\n let usedStates: Set<string>;\n let tplStateStore: DataStore<\"STATE\"> | undefined;\n const strict = isStrictMode(runtimeContext);\n\n // For existed TPL usage, treat it as a STATE.\n if (\n attemptToVisitGlobals.has(\"STATE\") ||\n (!strict && attemptToVisitGlobals.has(\"TPL\"))\n ) {\n tplStateStore = getTplStateStore(runtimeContext, \"STATE\", `: \"${raw}\"`);\n }\n\n let usedFormStates: Set<string>;\n let formStateStore: DataStore<\"FORM_STATE\"> | undefined;\n if (attemptToVisitGlobals.has(\"FORM_STATE\")) {\n formStateStore = getFormStateStore(\n runtimeContext,\n \"FORM_STATE\",\n `: \"${raw}\"`\n );\n }\n\n const devHook = getDevHook();\n if (isAsync || devHook) {\n if (attemptToVisitGlobals.has(\"CTX\")) {\n usedCtx = strictCollectMemberUsage(raw, \"CTX\");\n isAsync && blockingList.push(runtimeContext.ctxStore.waitFor(usedCtx));\n }\n\n if (tplStateStore) {\n usedStates = strictCollectMemberUsage(raw, \"STATE\");\n // istanbul ignore if\n if (!strict) {\n const usedTpls = strictCollectMemberUsage(raw, \"TPL\");\n for (const tpl of usedTpls) {\n usedStates.add(tpl);\n }\n }\n isAsync && blockingList.push(tplStateStore.waitFor(usedStates));\n }\n\n if (formStateStore) {\n usedFormStates = strictCollectMemberUsage(raw, \"FORM_STATE\");\n isAsync && blockingList.push(formStateStore.waitFor(usedFormStates));\n }\n\n if (attemptToVisitGlobals.has(\"PROCESSORS\")) {\n usedProcessors = strictCollectMemberUsage(raw, \"PROCESSORS\", 2);\n isAsync &&\n blockingList.push(\n loadProcessorsImperatively(usedProcessors, getBrickPackages())\n );\n }\n }\n\n if (isAsync) {\n let attemptToCheckPermissions = attemptToVisitGlobals.has(\"PERMISSIONS\");\n // There maybe `PERMISSIONS.check()` usage in functions\n if (!attemptToCheckPermissions && attemptToVisitGlobals.has(\"FN\")) {\n const usedFunctions = [...strictCollectMemberUsage(raw, \"FN\")];\n attemptToCheckPermissions = checkPermissionsUsage(usedFunctions);\n }\n\n if (attemptToCheckPermissions) {\n blockingList.push(...runtimeContext.pendingPermissionsPreCheck);\n }\n\n if (menuUsage.usedArgs.size > 0 && hooks?.menu) {\n // Block evaluating if has `APP.getMenu(...)` usage.\n const usedMenuIds = [...menuUsage.usedArgs];\n blockingList.push(\n Promise.all(\n usedMenuIds.map((menuId) =>\n hooks!.menu!.fetchMenuById(menuId, runtimeContext, {\n getStoryboardByAppId: _internalApiGetStoryboardInBootstrapData,\n resolveData,\n asyncComputeRealValue,\n })\n )\n )\n );\n }\n\n if (hasAppUsage.usedArgs.size > 0) {\n // Only wait for specific apps\n blockingList.push(\n hooks?.checkInstalledApps?.waitForCheckingApps([\n ...hasAppUsage.usedArgs,\n ])\n );\n }\n }\n\n return {\n blockingList,\n run() {\n const { ctxStore, data, event, eventMap, unsafe_penetrate } =\n runtimeContext;\n\n const penetrableCtx = unsafe_penetrate\n ? _internalApiGetRuntimeContext()!\n : runtimeContext;\n\n const {\n app: currentApp,\n location,\n query,\n match,\n flags,\n sys,\n } = penetrableCtx;\n const app = penetrableCtx.overrideApp ?? currentApp;\n\n for (const variableName of attemptToVisitGlobals) {\n switch (variableName) {\n // case \"ALIAS\":\n case \"ANCHOR\":\n globalVariables[variableName] = location.hash\n ? location.hash.substring(1)\n : null;\n break;\n case \"APP\":\n if (app == null) {\n throw new ReferenceError(`APP is not defined, in \"${raw}\"`);\n }\n globalVariables[variableName] = {\n ...cloneDeep(app),\n getMenu: hooks?.menu?.getMenuById,\n };\n break;\n case \"CTX\":\n globalVariables[variableName] = getDynamicReadOnlyProxy({\n get(_target, key) {\n // Allow accessing global `CTX.DS` from an isolated root such as dashboard.\n if (key === \"DS\" && !ctxStore.has(key)) {\n const internalCtxStore =\n _internalApiGetRuntimeContext()?.ctxStore;\n if (internalCtxStore?.has(key)) {\n return internalCtxStore.getValue(key);\n }\n }\n return ctxStore.getValue(key as string);\n },\n ownKeys() {\n return usedCtx ? Array.from(usedCtx) : [];\n },\n });\n break;\n case \"DATA\":\n globalVariables[variableName] = data;\n break;\n case \"EVENT\":\n globalVariables[variableName] = event;\n break;\n case \"EVENT_BY_KEY\":\n globalVariables[variableName] = getDynamicReadOnlyProxy({\n get(_target, key) {\n return eventMap?.get(key as string);\n },\n // istanbul ignore next: dev only\n ownKeys() {\n return Array.from(eventMap?.keys() ?? []);\n },\n });\n break;\n case \"FLAGS\":\n globalVariables[variableName] = getReadOnlyProxy(flags);\n break;\n case \"FORM_STATE\":\n globalVariables[variableName] = getDynamicReadOnlyProxy({\n get(_target, key) {\n return formStateStore!.getValue(key as string);\n },\n ownKeys() {\n return Array.from(usedFormStates);\n },\n });\n break;\n case \"HASH\":\n globalVariables[variableName] = location.hash;\n break;\n case \"INSTALLED_APPS\":\n globalVariables[variableName] = getReadOnlyProxy({\n has: hasInstalledApp,\n });\n break;\n case \"ITEM\":\n case \"INDEX\":\n case \"SIZE\": {\n const property =\n variableName === \"ITEM\"\n ? \"forEachItem\"\n : variableName === \"INDEX\"\n ? \"forEachIndex\"\n : \"forEachSize\";\n if (!hasOwnProperty(runtimeContext, property)) {\n // eslint-disable-next-line no-console\n console.error(\n `Using \\`${variableName}\\` but no \\`:forEach\\` is found, check your expression: \"${raw}\"`\n );\n } else {\n globalVariables[variableName] = runtimeContext[property];\n }\n break;\n }\n case \"LOCAL_STORAGE\":\n globalVariables[variableName] = getReadOnlyProxy({\n getItem: getStorageItem(\"local\"),\n });\n break;\n case \"MEDIA\":\n globalVariables[variableName] = getReadOnlyProxy(getMedia());\n break;\n case \"MISC\":\n globalVariables[variableName] = getRuntime().getMiscSettings();\n break;\n case \"PARAMS\":\n if (query == null) {\n throw new ReferenceError(`PARAMS is not defined, in \"${raw}\"`);\n }\n globalVariables[variableName] = new URLSearchParams(query);\n break;\n case \"PATH\":\n globalVariables[variableName] = getReadOnlyProxy(\n match?.params ?? {}\n );\n break;\n case \"PATH_NAME\":\n globalVariables[variableName] = location.pathname;\n break;\n case \"PROCESSORS\":\n globalVariables[variableName] = getDynamicReadOnlyProxy({\n get(_target, key) {\n const pkg = customProcessors.get(key as string);\n if (!pkg) {\n throw new Error(\n `'PROCESSORS.${\n key as string\n }' is not registered! Have you installed the relevant brick package?`\n );\n }\n return getDynamicReadOnlyProxy({\n get(_t, k) {\n return pkg.get(k as string);\n },\n ownKeys() {\n return Array.from(pkg.keys());\n },\n });\n },\n ownKeys() {\n const keys = new Set<string>();\n for (const processor of usedProcessors) {\n const namespace = processor.split(\".\")[0];\n keys.add(namespace);\n }\n return Array.from(keys);\n },\n });\n break;\n case \"QUERY\":\n if (query == null) {\n throw new ReferenceError(`QUERY is not defined, in \"${raw}\"`);\n }\n globalVariables[variableName] = Object.fromEntries(\n Array.from(query.keys()).map((key) => [key, query.get(key)])\n );\n break;\n case \"QUERY_ARRAY\":\n if (query == null) {\n throw new ReferenceError(\n `QUERY_ARRAY is not defined, in \"${raw}\"`\n );\n }\n globalVariables[variableName] = Object.fromEntries(\n Array.from(query.keys()).map((key) => [key, query.getAll(key)])\n );\n // case \"SEGUE\":\n break;\n case \"SESSION_STORAGE\":\n globalVariables[variableName] = getReadOnlyProxy({\n getItem: getStorageItem(\"session\"),\n });\n break;\n // istanbul ignore next\n case \"TPL\":\n warnAboutStrictMode(\n strict,\n 'Using \"TPL\" in expression',\n `check your expression: \"${raw}\"`\n );\n if (strict) {\n break;\n }\n // eslint-disable-next-line no-fallthrough\n case \"STATE\":\n globalVariables[variableName] = getDynamicReadOnlyProxy({\n get(_target, key) {\n return tplStateStore!.getValue(key as string);\n },\n ownKeys() {\n return Array.from(usedStates);\n },\n });\n break;\n case \"SYS\":\n globalVariables[variableName] = getReadOnlyProxy(sys ?? {});\n break;\n case \"CONSTANTS\":\n // globalVariables[variableName] = getReadOnlyProxy(app?.constants ?? {});\n globalVariables[variableName] = getDynamicReadOnlyProxy({\n get(_target, key) {\n if (!app?.constants || !hasOwnProperty(app.constants, key)) {\n throw new ReferenceError(\n `CONSTANTS.${key as string} is not defined`\n );\n }\n return app.constants[key as string];\n },\n ownKeys() {\n return app?.constants ? Object.keys(app.constants) : [];\n },\n });\n break;\n case \"__WIDGET_FN__\":\n globalVariables[variableName] = widgetFunctions;\n break;\n case \"__WIDGET_IMG__\":\n globalVariables[variableName] = hooks?.images?.widgetImagesFactory;\n break;\n case \"__WIDGET_I18N__\":\n globalVariables[variableName] = widgetI18nFactory;\n break;\n }\n }\n\n Object.assign(\n globalVariables,\n getGeneralGlobals(precooked.attemptToVisitGlobals, {\n storyboardFunctions,\n app,\n appendI18nNamespace: runtimeContext.appendI18nNamespace,\n isolatedRoot: runtimeContext.isolatedRoot,\n })\n );\n\n try {\n const result = cook(precooked.expression, precooked.source, {\n globalVariables: supply(\n precooked.attemptToVisitGlobals,\n globalVariables\n ),\n });\n const detail = { raw, context: globalVariables, result };\n devtoolsHookEmit(\"evaluation\", detail);\n return result;\n } catch (error: any) {\n const message = `${error.message}, in \"${raw}\"`;\n const errorConstructor = getCookErrorConstructor(error);\n throw new errorConstructor(message);\n }\n },\n };\n}\n","export enum StateOfUseBrick {\n INITIAL,\n USE_BRICK,\n USE_BRICK_ITEM,\n USE_BRICK_PROPERTIES,\n // Compatible mode\n USE_BRICK_TRANSFORM,\n USE_BRICK_EVENTS,\n USE_BRICK_IF,\n USE_BRICK_SLOTS,\n USE_BRICK_SLOTS_ITEM,\n USE_BRICK_SLOTS_ITEM_BRICKS,\n USE_BRICK_SLOTS_ITEM_BRICKS_ITEM,\n USE_BRICK_LIFECYCLE,\n USE_BRICK_DATA_SOURCE,\n}\n\nexport function isLazyContentInUseBrick(\n state: StateOfUseBrick | undefined\n): boolean {\n switch (state) {\n case StateOfUseBrick.USE_BRICK_PROPERTIES:\n case StateOfUseBrick.USE_BRICK_TRANSFORM:\n case StateOfUseBrick.USE_BRICK_EVENTS:\n case StateOfUseBrick.USE_BRICK_IF:\n case StateOfUseBrick.USE_BRICK_LIFECYCLE:\n case StateOfUseBrick.USE_BRICK_DATA_SOURCE:\n return true;\n }\n return false;\n}\n\nexport function getNextStateOfUseBrick(\n state: StateOfUseBrick | undefined,\n isArray?: boolean,\n key?: string\n): StateOfUseBrick | undefined {\n if (isLazyContentInUseBrick(state)) {\n return state;\n }\n if (isArray) {\n switch (state) {\n case StateOfUseBrick.USE_BRICK:\n return StateOfUseBrick.USE_BRICK_ITEM;\n case StateOfUseBrick.USE_BRICK_SLOTS_ITEM_BRICKS:\n return StateOfUseBrick.USE_BRICK_SLOTS_ITEM_BRICKS_ITEM;\n }\n } else {\n switch (state) {\n case StateOfUseBrick.INITIAL:\n if (key === \"useBrick\") {\n return StateOfUseBrick.USE_BRICK;\n }\n break;\n case StateOfUseBrick.USE_BRICK:\n case StateOfUseBrick.USE_BRICK_ITEM:\n case StateOfUseBrick.USE_BRICK_SLOTS_ITEM_BRICKS_ITEM: {\n switch (key) {\n case \"properties\":\n return StateOfUseBrick.USE_BRICK_PROPERTIES;\n case \"transform\":\n return StateOfUseBrick.USE_BRICK_TRANSFORM;\n case \"dataSource\":\n return StateOfUseBrick.USE_BRICK_DATA_SOURCE;\n case \"events\":\n return StateOfUseBrick.USE_BRICK_EVENTS;\n case \"slots\":\n return StateOfUseBrick.USE_BRICK_SLOTS;\n case \"children\":\n return StateOfUseBrick.USE_BRICK_SLOTS_ITEM_BRICKS;\n case \"if\":\n return StateOfUseBrick.USE_BRICK_IF;\n case \"lifeCycle\":\n return StateOfUseBrick.USE_BRICK_LIFECYCLE;\n }\n break;\n }\n case StateOfUseBrick.USE_BRICK_SLOTS:\n return StateOfUseBrick.USE_BRICK_SLOTS_ITEM;\n case StateOfUseBrick.USE_BRICK_SLOTS_ITEM:\n if (key === \"bricks\") {\n return StateOfUseBrick.USE_BRICK_SLOTS_ITEM_BRICKS;\n }\n break;\n }\n }\n return StateOfUseBrick.INITIAL;\n}\n","import { omit, pick } from \"lodash\";\nimport { isEvaluable } from \"@next-core/cook\";\nimport { hasOwnProperty, isObject } from \"@next-core/utils/general\";\nimport { transformAndInject, transform, inject } from \"@next-core/inject\";\nimport {\n asyncEvaluate,\n isPreEvaluated,\n evaluate,\n shouldDismissMarkingComputed,\n} from \"./evaluate.js\";\nimport type { RuntimeContext } from \"../interfaces.js\";\nimport {\n StateOfUseBrick,\n getNextStateOfUseBrick,\n isLazyContentInUseBrick,\n} from \"./getNextStateOfUseBrick.js\";\nimport { hasBeenComputed, markAsComputed } from \"./markAsComputed.js\";\nimport { _internalApiGetRuntimeContext } from \"../Runtime.js\";\n\nconst penetrableCtxNames = [\n \"app\",\n \"location\",\n \"query\",\n \"match\",\n \"flags\",\n \"sys\",\n] as const;\n\nexport interface ComputeOptions {\n $$lazyForUseBrick?: boolean;\n $$stateOfUseBrick?: StateOfUseBrick;\n ignoreSymbols?: boolean;\n noInject?: boolean;\n}\n\nexport async function asyncComputeRealValue(\n value: unknown,\n runtimeContext: RuntimeContext,\n internalOptions: ComputeOptions = {}\n): Promise<unknown> {\n const preEvaluated = isPreEvaluated(value);\n\n if (preEvaluated || typeof value === \"string\") {\n // For `useBrick`, some fields such as `properties`/`transform`/`events`/`if`,\n // are kept and to be evaluated later.\n const lazy =\n internalOptions.$$lazyForUseBrick &&\n isLazyContentInUseBrick(internalOptions.$$stateOfUseBrick);\n\n let result: unknown;\n let dismissMarkingComputed = false;\n\n if (preEvaluated || isEvaluable(value as string)) {\n result = await asyncEvaluate(value, runtimeContext, { lazy });\n dismissMarkingComputed = shouldDismissMarkingComputed(value);\n } else if (lazy || runtimeContext.app?.noPlaceholders) {\n result = value;\n dismissMarkingComputed = true;\n } else {\n const penetrableCtx = runtimeContext.unsafe_penetrate\n ? ({\n ...pick(_internalApiGetRuntimeContext(), penetrableCtxNames),\n ...omit(runtimeContext, penetrableCtxNames),\n } as RuntimeContext)\n : runtimeContext;\n\n result = (\n hasOwnProperty(penetrableCtx, \"data\")\n ? internalOptions.noInject\n ? transform\n : transformAndInject\n : internalOptions.noInject\n ? identity\n : inject\n )(value, penetrableCtx);\n }\n\n if (!dismissMarkingComputed) {\n markAsComputed(result);\n }\n\n return result;\n }\n\n if (\n !isObject(value) ||\n hasBeenComputed(value) ||\n typeof value === \"function\"\n ) {\n return value;\n }\n\n if (Array.isArray(value)) {\n const nextOptions = getNextComputeOptions(internalOptions, true);\n return Promise.all(\n value.map((v) => asyncComputeRealValue(v, runtimeContext, nextOptions))\n );\n }\n\n return Object.fromEntries(\n (\n await Promise.all(\n Object.entries(value).map(([k, v]) =>\n Promise.all([\n asyncComputeRealValue(k, runtimeContext),\n asyncComputeRealValue(\n v,\n runtimeContext,\n getNextComputeOptions(internalOptions, false, k)\n ),\n ])\n )\n )\n ).concat(\n internalOptions.ignoreSymbols\n ? []\n : Object.getOwnPropertySymbols(value).map((k) => [\n k,\n (value as Record<string | symbol, unknown>)[k],\n ])\n )\n );\n}\n\nexport function computeRealValue(\n value: unknown,\n runtimeContext: RuntimeContext,\n internalOptions: ComputeOptions = {}\n): unknown {\n const preEvaluated = isPreEvaluated(value);\n\n if (preEvaluated || typeof value === \"string\") {\n // For `useBrick`, some fields such as `properties`/`transform`/`events`/`if`,\n // are kept and to be evaluated later.\n const lazy =\n internalOptions.$$lazyForUseBrick &&\n isLazyContentInUseBrick(internalOptions.$$stateOfUseBrick);\n\n let result: unknown;\n let dismissMarkingComputed = false;\n\n if (preEvaluated || isEvaluable(value as string)) {\n result = evaluate(value, runtimeContext);\n dismissMarkingComputed = shouldDismissMarkingComputed(value);\n } else if (lazy || runtimeContext.app?.noPlaceholders) {\n result = value;\n dismissMarkingComputed = true;\n } else {\n const penetrableCtx = runtimeContext.unsafe_penetrate\n ? ({\n ...pick(_internalApiGetRuntimeContext(), penetrableCtxNames),\n ...omit(runtimeContext, penetrableCtxNames),\n } as RuntimeContext)\n : runtimeContext;\n\n result = (\n hasOwnProperty(penetrableCtx, \"data\")\n ? internalOptions.noInject\n ? transform\n : transformAndInject\n : internalOptions.noInject\n ? identity\n : inject\n )(value, penetrableCtx);\n }\n\n if (!dismissMarkingComputed) {\n markAsComputed(result);\n }\n\n return result;\n }\n\n if (\n !isObject(value) ||\n hasBeenComputed(value) ||\n typeof value === \"function\"\n ) {\n return value;\n }\n\n if (Array.isArray(value)) {\n const nextOptions = getNextComputeOptions(internalOptions, true);\n return value.map((v) => computeRealValue(v, runtimeContext, nextOptions));\n }\n\n return Object.fromEntries(\n Object.entries(value)\n .map(([k, v]) => [\n computeRealValue(k, runtimeContext),\n computeRealValue(\n v,\n runtimeContext,\n getNextComputeOptions(internalOptions, false, k)\n ),\n ])\n .concat(\n internalOptions.ignoreSymbols\n ? []\n : Object.getOwnPropertySymbols(value).map((k) => [\n k,\n (value as Record<string | symbol, unknown>)[k],\n ])\n )\n );\n}\n\nfunction getNextComputeOptions(\n internalOptions: ComputeOptions,\n isArray: boolean,\n key?: string\n): ComputeOptions {\n return internalOptions.$$lazyForUseBrick\n ? {\n ...internalOptions,\n $$stateOfUseBrick: getNextStateOfUseBrick(\n internalOptions.$$stateOfUseBrick,\n isArray,\n key\n ),\n }\n : internalOptions;\n}\n\nfunction identity<T>(value: T): T {\n return value;\n}\n","import { hasOwnProperty, isObject } from \"@next-core/utils/general\";\nimport type { BrickConf, ResolveConf } from \"@next-core/types\";\nimport { asyncComputeRealValue, computeRealValue } from \"./computeRealValue.js\";\nimport { isPreEvaluated } from \"./evaluate.js\";\nimport { resolveData } from \"../data/resolveData.js\";\nimport type { RuntimeContext } from \"../interfaces.js\";\nimport { getV2RuntimeFromDll } from \"../../getV2RuntimeFromDll.js\";\n\n/**\n * 包含 `if` 条件判断的对象。\n */\nexport interface IfContainer {\n /**\n * 条件判断,可以为表达式字符串。\n *\n * @example\n *\n * ```yaml\n * - brick: your.any-brick\n * if: '<% FLAGS[\"your-feature-flag\"] %>'\n * ```\n */\n if?: unknown;\n}\n\nexport async function asyncCheckIf(\n ifContainer: IfContainer,\n runtimeContext: RuntimeContext\n): Promise<boolean> {\n return (\n !hasOwnProperty(ifContainer, \"if\") ||\n !!(typeof ifContainer.if === \"string\" || isPreEvaluated(ifContainer.if)\n ? await asyncComputeRealValue(ifContainer.if, runtimeContext)\n : ifContainer.if)\n );\n}\n\nexport function checkIf(\n ifContainer: IfContainer,\n runtimeContext: RuntimeContext\n): boolean {\n return (\n !hasOwnProperty(ifContainer, \"if\") ||\n !!(typeof ifContainer.if === \"string\" || isPreEvaluated(ifContainer.if)\n ? computeRealValue(ifContainer.if, runtimeContext)\n : ifContainer.if)\n );\n}\n\nexport function checkIfOfComputed(ifContainer: IfContainer): boolean {\n return !hasOwnProperty(ifContainer, \"if\") || !!ifContainer.if;\n}\n\nexport async function asyncCheckBrickIf(\n brickConf: BrickConf,\n runtimeContext: RuntimeContext\n): Promise<boolean> {\n if (isObject(brickConf.if) && !isPreEvaluated(brickConf.if)) {\n const resolved = (await resolveData(\n brickConf.if as ResolveConf,\n runtimeContext\n )) as { if?: unknown };\n return checkIfOfComputed(resolved);\n }\n return asyncCheckIf(brickConf, runtimeContext);\n}\n\nfunction checkIfByTransformV3(ifContainer: IfContainer, data: unknown) {\n return checkIf(ifContainer, { data } as RuntimeContext);\n}\n\n// istanbul ignore next\nfunction checkIfByTransformV2Factory() {\n const v2Kit = getV2RuntimeFromDll();\n if (v2Kit) {\n return v2Kit.looseCheckIfByTransform;\n }\n}\n\n// istanbul ignore next\nexport const checkIfByTransform =\n checkIfByTransformV2Factory() || checkIfByTransformV3;\n","import { isEvaluable, isTrackAll } from \"@next-core/cook\";\nimport { track, trackAll } from \"@next-core/utils/storyboard\";\nimport {\n PreEvaluated,\n getPreEvaluatedRaw,\n isPreEvaluated,\n} from \"./evaluate.js\";\n\nexport function getTracks(value: unknown) {\n let contextNames: string[] | Set<string> | false = false;\n let stateNames: string[] | Set<string> | false = false;\n let formStateNames: string[] | Set<string> | false = false;\n if (typeof value === \"string\" ? isEvaluable(value) : isPreEvaluated(value)) {\n const raw =\n typeof value === \"string\"\n ? value\n : getPreEvaluatedRaw(value as PreEvaluated);\n if (isTrackAll(raw)) {\n const result = trackAll(raw);\n if (result) {\n contextNames = result.context;\n stateNames = result.state;\n formStateNames = result.formState;\n }\n } else {\n contextNames = track(raw, \"track context\", \"CTX\");\n stateNames = track(raw, \"track state\", \"STATE\");\n formStateNames = track(raw, \"track formstate\", \"FORM_STATE\");\n }\n }\n\n return { contextNames, stateNames, formStateNames };\n}\n","import { isObject } from \"@next-core/utils/general\";\nimport { asyncComputeRealValue, computeRealValue } from \"./computeRealValue.js\";\nimport { TrackingContextItem } from \"./listenOnTrackingContext.js\";\nimport type { AsyncPropertyEntry, RuntimeContext } from \"../interfaces.js\";\nimport { StateOfUseBrick } from \"./getNextStateOfUseBrick.js\";\nimport { getTracks } from \"./getTracks.js\";\n\nexport function asyncComputeRealPropertyEntries(\n properties: Record<string, unknown> | undefined,\n runtimeContext: RuntimeContext,\n trackingContextList: TrackingContextItem[]\n): AsyncPropertyEntry[] {\n if (isObject(properties)) {\n return Object.entries(properties).map<[string, Promise<unknown>]>(\n ([propName, propValue]) => {\n const { contextNames, stateNames, formStateNames } =\n getTracks(propValue);\n if (contextNames || stateNames || formStateNames) {\n trackingContextList.push({\n contextNames,\n stateNames,\n formStateNames,\n propName,\n propValue,\n });\n }\n // Related: https://github.com/facebook/react/issues/11347\n const asyncValue = asyncComputeRealValue(propValue, runtimeContext, {\n $$lazyForUseBrick: true,\n $$stateOfUseBrick:\n propName === \"useBrick\"\n ? StateOfUseBrick.USE_BRICK\n : StateOfUseBrick.INITIAL,\n });\n return [propName, asyncValue];\n }\n );\n }\n\n return [];\n}\n\nexport async function computePropertyValue(\n asyncPropertyEntries: AsyncPropertyEntry[],\n propName: string\n): Promise<unknown> {\n for (const [name, asyncValue, ignoreUndefined] of asyncPropertyEntries) {\n if (name === propName) {\n const value = await asyncValue;\n if (value !== undefined || !ignoreUndefined) {\n return value;\n }\n }\n }\n}\n\nexport async function constructAsyncProperties(\n asyncPropertyEntries: AsyncPropertyEntry[]\n): Promise<Record<string, unknown>> {\n const props: Record<string, unknown> = {};\n for (const [propName, asyncValue, ignoreUndefined] of asyncPropertyEntries) {\n const value = await asyncValue;\n if (\n (value !== undefined || !ignoreUndefined) &&\n // For `style` and `dataset`, only object is acceptable.\n ((propName !== \"style\" && propName !== \"dataset\") || isObject(value))\n ) {\n props[propName] = value;\n }\n }\n return props;\n}\n\nexport function computeRealProperties(\n properties: Record<string, unknown> | undefined,\n runtimeContext: RuntimeContext\n): Record<string, unknown> {\n if (isObject(properties)) {\n return Object.fromEntries(\n Object.entries(properties)\n .map<[string, unknown] | undefined>(([propName, propValue]) => {\n // Related: https://github.com/facebook/react/issues/11347\n const realValue = computeRealValue(propValue, runtimeContext, {\n $$lazyForUseBrick: true,\n $$stateOfUseBrick:\n propName === \"useBrick\"\n ? StateOfUseBrick.USE_BRICK\n : StateOfUseBrick.INITIAL,\n });\n // For `style` and `dataset`, only object is acceptable.\n if (\n (propName !== \"style\" && propName !== \"dataset\") ||\n isObject(realValue)\n ) {\n return [propName, realValue];\n }\n })\n .filter(Boolean) as [string, unknown][]\n );\n }\n\n return {};\n}\n","export function setRealProperties(\n brick: HTMLElement,\n realProps: Record<string, unknown> | undefined\n): void {\n if (!realProps) {\n return;\n }\n for (const [propName, propValue] of Object.entries(realProps)) {\n switch (propName) {\n case \"style\":\n case \"dataset\":\n for (const [k, v] of Object.entries(\n propValue as Record<string, unknown>\n )) {\n if (propName === \"style\") {\n setValueForStyle(brick.style, k, v);\n } else {\n (brick[propName] as unknown as Record<string, unknown>)[k] = v;\n }\n }\n break;\n case \"constructor\":\n case \"__proto__\":\n case \"innerHTML\":\n // `innerHTML` is dangerous, use `textContent` instead.\n throw new Error(`set \\`${propName}\\` is prohibited`);\n default:\n if (propName.startsWith(\"data-\")) {\n brick.setAttribute(propName, String(propValue));\n } else {\n (brick as unknown as Record<string, unknown>)[propName] = propValue;\n }\n }\n }\n}\n\nexport function setValueForStyle(\n style: CSSStyleDeclaration,\n key: string,\n value: unknown\n) {\n if (key.startsWith(\"--\")) {\n style.setProperty(key, value as string);\n } else if (key === \"float\") {\n style.cssFloat = value as string;\n } else {\n (style as unknown as Record<string, unknown>)[key] = value;\n }\n}\n","import { computeRealProperties } from \"./computeRealProperties.js\";\nimport { setRealProperties } from \"./setRealProperties.js\";\nimport type { RuntimeContext } from \"../interfaces.js\";\n\nexport function setProperties(\n bricks: HTMLElement | HTMLElement[],\n properties: Record<string, unknown>,\n runtimeContext: RuntimeContext\n): void {\n const realProps = computeRealProperties(properties, runtimeContext);\n if (!Array.isArray(bricks)) {\n bricks = [bricks];\n }\n bricks.forEach((brick) => {\n setRealProperties(brick, realProps);\n });\n}\n","import { setProperties } from \"./setProperties.js\";\nimport type { RuntimeBrick, RuntimeContext } from \"../interfaces.js\";\nimport { getTplStateStore } from \"../CustomTemplates/utils.js\";\nimport { getFormStateStore } from \"../FormRenderer/utils.js\";\n\nexport interface TrackingContextItem {\n contextNames: string[] | Set<string> | false;\n stateNames: string[] | Set<string> | false;\n formStateNames: string[] | Set<string> | false;\n propName: string;\n propValue: unknown;\n}\n\nexport interface InitialTracker {\n disposes: (() => void)[];\n listener: () => void;\n}\n\nexport function listenOnTrackingContext(\n brick: RuntimeBrick,\n trackingContextList: TrackingContextItem[]\n): void {\n for (const track of trackingContextList) {\n const listener = (): void => {\n if (brick.element) {\n setProperties(\n brick.element,\n { [track.propName]: track.propValue },\n brick.runtimeContext\n );\n }\n };\n brick.disposes ??= [];\n if (track.contextNames) {\n for (const contextName of track.contextNames) {\n brick.disposes.push(\n brick.runtimeContext.ctxStore.onChange(contextName, listener)\n );\n }\n }\n if (track.stateNames) {\n const tplStateStore = getTplStateStore(\n brick.runtimeContext,\n \"STATE\",\n `: \"${track.propValue}\"`\n );\n for (const stateName of track.stateNames) {\n brick.disposes.push(tplStateStore.onChange(stateName, listener));\n }\n }\n if (track.formStateNames) {\n const formStateStore = getFormStateStore(\n brick.runtimeContext,\n \"FORM_STATE\",\n `: \"${track.propValue}\"`\n );\n for (const stateName of track.formStateNames) {\n brick.disposes.push(formStateStore.onChange(stateName, listener));\n }\n }\n }\n}\n\nexport function trackAfterInitial(\n runtimeContext: RuntimeContext,\n trackingContextList: Pick<\n TrackingContextItem,\n \"contextNames\" | \"stateNames\" | \"propValue\"\n >[],\n initialTracker: InitialTracker | undefined\n) {\n if (!initialTracker) {\n return;\n }\n for (const { contextNames, stateNames, propValue } of trackingContextList) {\n if (contextNames) {\n for (const contextName of contextNames) {\n initialTracker.disposes.push(\n runtimeContext.ctxStore.onChange(contextName, initialTracker.listener)\n );\n }\n }\n if (stateNames) {\n for (const stateName of stateNames) {\n const tplStateStore = getTplStateStore(\n runtimeContext,\n \"STATE\",\n `: \"${propValue}\"`\n );\n initialTracker.disposes.push(\n tplStateStore.onChange(stateName, initialTracker.listener)\n );\n }\n }\n }\n}\n","// Ref https://github.com/ReactTraining/react-router/blob/master/packages/react-router/modules/matchPath.js\nimport type { LegacyCompatibleRuntimeContext } from \"@next-core/inject\";\nimport { pathToRegexp, Key, compile } from \"path-to-regexp\";\n\nconst cache: Map<string, Map<string, CompileResult>> = new Map();\nconst cacheLimit = 10000;\nlet cacheCount = 0;\n\nfunction compilePath(path: string, options: CompileOptions): CompileResult {\n const cacheKey = `${options.end}${options.strict}${options.sensitive}`;\n let pathCache = cache.get(cacheKey);\n if (!pathCache) {\n cache.set(cacheKey, (pathCache = new Map()));\n }\n\n const cacheResult = pathCache.get(path);\n if (cacheResult) {\n return cacheResult;\n }\n\n const keys: Key[] = [];\n const regexp = pathToRegexp(path, keys, options);\n const result = { regexp, keys };\n\n if (cacheCount < cacheLimit) {\n pathCache.set(path, result);\n cacheCount++;\n }\n\n return result;\n}\n\n/**\n * Public API for matching a URL pathname to a path.\n */\nexport function matchPath(\n pathname: string,\n options: MatchPathOptions\n): MatchResult | null {\n const { path: p, exact = false, strict = false, sensitive = true } = options;\n\n const paths = Array.isArray(p) ? p : [p];\n\n return paths.reduce<MatchResult | null>((matched, path) => {\n if (matched) {\n return matched;\n }\n const { regexp, keys } = compilePath(path, {\n end: exact,\n strict,\n sensitive,\n });\n const match = regexp.exec(pathname);\n\n if (!match) {\n return null;\n }\n\n const [url, ...values] = match;\n const isExact = pathname === url;\n\n if (exact && !isExact) {\n return null;\n }\n\n const initialParams: MatchResult[\"params\"] = {};\n const result = {\n path, // the path used to match\n url: path === \"/\" && url === \"\" ? \"/\" : url, // the matched portion of the URL\n isExact, // whether or not we matched exactly\n params: keys.reduce((memo, key, index) => {\n memo[key.name] = values[index];\n return memo;\n }, initialParams),\n };\n\n return result;\n }, null);\n}\n\nexport function toPath(\n path: string,\n pathParams?: Record<string, unknown>\n): string {\n return compile(path)(pathParams);\n}\n\ninterface CompileOptions {\n end?: boolean;\n strict?: boolean;\n sensitive?: boolean;\n}\n\ninterface CompileResult {\n regexp: RegExp;\n keys: Key[];\n}\n\nexport interface MatchOptions {\n path: string | string[];\n exact?: boolean;\n}\n\nexport type MatchPathOptions = MatchOptions & CompileOptions;\n\nexport type MatchResult = Exclude<\n LegacyCompatibleRuntimeContext[\"match\"],\n undefined\n>;\n","import type { RouteConf } from \"@next-core/types\";\nimport { MatchResult, matchPath } from \"./matchPath.js\";\nimport { asyncCheckIf } from \"./compute/checkIf.js\";\nimport type { RuntimeContext } from \"./interfaces.js\";\nimport { hooks } from \"./Runtime.js\";\n\ntype MatchRoutesResult =\n | {\n match: MatchResult;\n route: RouteConf;\n }\n | \"missed\"\n | \"unauthenticated\";\n\nexport async function matchRoutes(\n routes: RouteConf[],\n runtimeContext: RuntimeContext\n): Promise<MatchRoutesResult> {\n for (const route of routes) {\n if (typeof route.path !== \"string\") {\n // eslint-disable-next-line no-console\n console.error(\"Invalid route with invalid path:\", route);\n throw new Error(\n `Invalid route with invalid type of path: ${typeof route.path}`\n );\n }\n const match = matchRoute(\n route,\n runtimeContext.app.homepage,\n runtimeContext.location.pathname\n );\n if (match && (await asyncCheckIf(route, runtimeContext))) {\n if (\n runtimeContext.app.noAuthGuard ||\n route.public ||\n !hooks?.auth ||\n hooks.auth.isLoggedIn()\n ) {\n return { match, route };\n }\n return \"unauthenticated\";\n }\n }\n return \"missed\";\n}\n\nexport function matchRoute(\n route: RouteConf,\n homepage: string,\n pathname: string\n) {\n const routePath = route.path.replace(/^\\$\\{APP.homepage\\}/, homepage);\n return matchPath(pathname, {\n path: routePath,\n exact: route.exact,\n });\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { AsyncPropertyEntry } from \"../interfaces.js\";\n\nexport const symbolForAsyncComputedPropsFromHost = Symbol.for(\n \"tpl.asyncComputedPropsFromHost\"\n);\nexport const symbolForTplStateStoreId = Symbol.for(\"tpl.stateStoreId\");\nexport const symbolForTPlExternalForEachItem = Symbol.for(\n \"tpl.externalForEachItem\"\n);\nexport const symbolForTPlExternalForEachIndex = Symbol.for(\n \"tpl.externalForEachIndex\"\n);\nexport const symbolForTPlExternalForEachSize = Symbol.for(\n \"tpl.externalForEachSize\"\n);\n\nexport type RuntimeBrickConfWithTplSymbols = BrickConf &\n RuntimeBrickConfOfTplSymbols;\n\nexport interface RuntimeBrickConfOfTplSymbols {\n [symbolForAsyncComputedPropsFromHost]?: AsyncPropertyEntry[];\n [symbolForTplStateStoreId]?: string;\n [symbolForTPlExternalForEachItem]?: unknown;\n [symbolForTPlExternalForEachIndex]?: number;\n [symbolForTPlExternalForEachSize]?: number;\n}\n","import type { ProviderPollOptions } from \"@next-core/types\";\nimport { pick } from \"lodash\";\nimport { _internalApiGetRenderId } from \"./Runtime.js\";\nimport { computeRealValue } from \"./compute/computeRealValue.js\";\nimport { RuntimeContext } from \"./interfaces.js\";\n\nexport type PollableCallbackFunction = (result?: unknown) => unknown;\n\nexport interface PollableCallback {\n progress?: PollableCallbackFunction;\n success?: PollableCallbackFunction;\n error?: PollableCallbackFunction;\n finally?: PollableCallbackFunction;\n}\n\nconst timeoutIdList = new Set<number>();\n\nexport function startPoll(\n task: () => unknown,\n { progress, success, error, finally: finallyCallback }: PollableCallback,\n pollOptions: ProviderPollOptions,\n runtimeContext: RuntimeContext\n): void {\n const { expectPollStopImmediately, expectPollEnd } = pollOptions;\n const { interval, leadingRequestDelay, continueOnError, delegateLoadingBar } =\n computeRealValue(\n pick(pollOptions, [\n \"interval\",\n \"leadingRequestDelay\",\n \"continueOnError\",\n \"delegateLoadingBar\",\n ]),\n runtimeContext\n ) as ProviderPollOptions;\n const currentRenderId = _internalApiGetRenderId();\n let currentTimeoutId: number;\n async function poll(): Promise<void> {\n timeoutIdList.delete(currentTimeoutId);\n let shouldStop: boolean | undefined;\n try {\n shouldStop = (\n computeRealValue(expectPollStopImmediately, runtimeContext) as\n | (() => boolean)\n | undefined\n )?.();\n // Stop polling immediately when the expectation is match before task.\n if (!shouldStop) {\n const result = await task();\n const expectPollStopImmediatelyResult = (\n computeRealValue(expectPollStopImmediately, runtimeContext) as\n | (() => boolean)\n | undefined\n )?.();\n // Stop polling immediately when the expectation is match or a different router\n // is rendering after the task processed.\n shouldStop =\n expectPollStopImmediatelyResult ||\n currentRenderId !== _internalApiGetRenderId();\n if (!shouldStop) {\n progress?.(result);\n if (\n (\n computeRealValue(expectPollEnd, runtimeContext) as\n | ((result: unknown) => boolean)\n | undefined\n )?.(result)\n ) {\n if (delegateLoadingBar) {\n window.dispatchEvent(new Event(\"request.end\"));\n }\n success?.(result);\n finallyCallback?.();\n } else {\n delayedPoll(interval ?? 3000);\n }\n } else if (expectPollStopImmediatelyResult) {\n finallyCallback?.();\n }\n } else {\n finallyCallback?.();\n }\n } catch (e) {\n const expectPollStopImmediatelyResult = (\n computeRealValue(expectPollStopImmediately, runtimeContext) as\n | (() => boolean)\n | undefined\n )?.();\n // Stop polling immediately when the expectation is match or a different router\n // is rendering after the task processed.\n shouldStop =\n expectPollStopImmediatelyResult ||\n currentRenderId !== _internalApiGetRenderId();\n if (!shouldStop) {\n error?.(e);\n if (continueOnError) {\n delayedPoll(interval ?? 3000);\n } else {\n finallyCallback?.();\n }\n } else if (expectPollStopImmediatelyResult) {\n finallyCallback?.();\n }\n } finally {\n // Manually dispatch an event of `request.end` when the polling is stopped immediately.\n if (delegateLoadingBar && shouldStop) {\n window.dispatchEvent(new Event(\"request.end\"));\n }\n }\n }\n\n function delayedPoll(delay: number): void {\n currentTimeoutId = setTimeout(poll, delay) as unknown as number;\n timeoutIdList.add(currentTimeoutId);\n }\n\n delayedPoll(leadingRequestDelay ?? 0);\n\n if (delegateLoadingBar) {\n window.dispatchEvent(new Event(\"request.start\"));\n }\n}\n\nexport function clearPollTimeout(): void {\n for (const timeoutId of timeoutIdList) {\n clearTimeout(timeoutId);\n }\n timeoutIdList.clear();\n}\n","export enum K {\n REQUEST_FAILED = \"REQUEST_FAILED\",\n SOMETHING_WENT_WRONG = \"SOMETHING_WENT_WRONG\",\n LOGIN_TIMEOUT_MESSAGE = \"LOGIN_TIMEOUT_MESSAGE\",\n NETWORK_ERROR = \"NETWORK_ERROR\",\n LICENSE_EXPIRED = \"LICENSE_EXPIRED\",\n LICENSE_BLOCKED = \"LICENSE_BLOCKED\",\n NO_PERMISSION = \"NO_PERMISSION\",\n PAGE_NOT_FOUND = \"PAGE_NOT_FOUND\",\n APP_NOT_FOUND = \"APP_NOT_FOUND\",\n UNKNOWN_ERROR = \"UNKNOWN_ERROR\",\n GO_BACK_TO_PREVIOUS_PAGE = \"GO_BACK_TO_PREVIOUS_PAGE\",\n GO_BACK_HOME = \"GO_BACK_HOME\",\n RELOAD = \"RELOAD\",\n}\n\nconst en: Locale = {\n [K.REQUEST_FAILED]: \"Request Failed\",\n [K.SOMETHING_WENT_WRONG]: \"Something went wrong!\",\n [K.LOGIN_TIMEOUT_MESSAGE]:\n \"You haven't logged in or your login session has expired. Login right now?\",\n [K.NETWORK_ERROR]: \"Network error, please check your network.\",\n [K.LICENSE_EXPIRED]:\n \"The license authorization has expired, please contact the platform administrator\",\n [K.LICENSE_BLOCKED]:\n \"The page is not authorized, please contact the platform administrator\",\n [K.NO_PERMISSION]:\n \"Unauthorized access, unable to retrieve the required resources for this page\",\n [K.PAGE_NOT_FOUND]: \"Page not found, please check the URL\",\n [K.APP_NOT_FOUND]:\n \"App not found, maybe the URL is wrong or you don't have permission to access\",\n [K.UNKNOWN_ERROR]: \"Oops! Something went wrong\",\n [K.GO_BACK_TO_PREVIOUS_PAGE]: \"Go back to previous page\",\n [K.GO_BACK_HOME]: \"Go back to home page\",\n [K.RELOAD]: \"Reload\",\n};\n\nconst zh: Locale = {\n [K.REQUEST_FAILED]: \"请求失败\",\n [K.SOMETHING_WENT_WRONG]: \"出现了一些问题!\",\n [K.LOGIN_TIMEOUT_MESSAGE]: \"您还未登录或登录信息已过期,现在重新登录?\",\n [K.NETWORK_ERROR]: \"网络错误,请检查您的网络连接。\",\n [K.LICENSE_EXPIRED]: \"License 授权失效,请联系平台管理员\",\n [K.LICENSE_BLOCKED]: \"该页面未授权,请联系平台管理员\",\n [K.NO_PERMISSION]: \"没有权限,无法获取页面所需要的资源\",\n [K.PAGE_NOT_FOUND]: \"请求的页面未找到,请确认 URL 是否正确\",\n [K.APP_NOT_FOUND]: \"请求的微应用无法找到, 可能是 URL 错误或者无权限访问\",\n [K.UNKNOWN_ERROR]: \"糟糕!页面出现了一些问题\",\n [K.GO_BACK_TO_PREVIOUS_PAGE]: \"回到上一页\",\n [K.GO_BACK_HOME]: \"回到首页\",\n [K.RELOAD]: \"刷新\",\n};\n\nexport const NS = \"core/runtime\";\n\nexport const locales = { en, zh };\n\ntype Locale = { [key in K]: string };\n","let brick: {\n resolve(options: DialogOptions): Promise<void>;\n};\n\nfunction show(options: DialogOptions): Promise<void> {\n if (brick) {\n return brick.resolve(options);\n } else {\n if (options.type === \"confirm\") {\n const confirmed = confirm(options.content);\n return new Promise((resolve, reject) =>\n setTimeout(() => {\n (confirmed ? resolve : reject)();\n }, 1)\n );\n } else {\n alert(options.content);\n return new Promise((resolve) =>\n setTimeout(() => {\n resolve();\n }, 1)\n );\n }\n }\n}\n\nexport function loadDialogService(\n tagName: string,\n loader: (bricks: string[]) => Promise<void>\n) {\n loader([tagName]).then(\n () => {\n brick = document.createElement(tagName) as any;\n },\n (error: unknown) => {\n // eslint-disable-next-line no-console\n console.error(\"Load dialog service failed:\", error);\n }\n );\n}\n\nexport interface DialogOptions {\n type?: \"success\" | \"error\" | \"warn\" | \"info\" | \"confirm\";\n title?: string | null;\n content: string;\n contentStyle?: object;\n}\n\nexport const Dialog = Object.freeze({\n show,\n});\n","import { NextLocation } from \"./history.js\";\n\nexport function setLoginStateCookie(location: NextLocation): void {\n // 独立打包应用 登录时间超时后还是由前端控制跳转,后台无法处理设置登录前的 path 和 query 的 cookie 值\n // 此这场景下前端做下处理\n\n const { search, pathname } = location;\n\n const pathValue = pathname ? window.btoa(encodeURIComponent(pathname)) : \"\";\n\n const searchValue = search ? window.btoa(encodeURIComponent(search)) : \"\";\n\n document.cookie = `SALOGINPATH=${pathValue}; path=/`;\n document.cookie = `SALOGINQUERY=${searchValue}; path=/`;\n}\n","import {\n HttpAbortError,\n HttpFetchError,\n HttpResponseError,\n} from \"@next-core/http\";\nimport { i18n } from \"@next-core/i18n\";\nimport { getRuntime } from \"./internal/Runtime.js\";\nimport { getHistory } from \"./history.js\";\nimport { K, NS } from \"./internal/i18n.js\";\nimport { Dialog } from \"./Dialog.js\";\nimport { setLoginStateCookie } from \"./setLoginStateCookie.js\";\n\n/**\n * 将 http 请求错误转换为可读的字符串。\n *\n * @remarks\n *\n * 将依次尝试读取返回的 JSON 格式数据的字符串类型的 `error` 和 `msg` 字段,如果没有找到则返回 `error.toString()` 的结果。\n *\n * @param error - 错误对象。\n *\n * @returns 转换为字符串的错误信息。\n */\nexport function httpErrorToString(error: unknown): string {\n if (error instanceof Event && error.target instanceof HTMLScriptElement) {\n return error.target.src;\n }\n if (error instanceof HttpFetchError) {\n return i18n.t(`${NS}:${K.NETWORK_ERROR}`);\n }\n if (error instanceof HttpResponseError) {\n if (error.responseJson) {\n if (typeof error.responseJson.error === \"string\") {\n return error.responseJson.error;\n } else if (typeof error.responseJson.msg === \"string\") {\n return error.responseJson.msg;\n }\n }\n }\n if (error == null) {\n return \"Unknown error\";\n }\n return error.toString();\n}\n\nexport function isUnauthenticatedError(error: unknown): boolean {\n return (\n error instanceof HttpResponseError &&\n error.response.status === 401 &&\n !!error.responseJson &&\n error.responseJson.code === 100003\n );\n}\n\nlet unauthenticatedConfirming = false;\n\nlet lastErrorMessage: string | undefined;\n\n/**\n * 处理 http 请求错误(使用 AntDesign 模态框弹出错误信息)。\n *\n * @param error - 错误对象。\n */\nexport function handleHttpError(error: unknown) {\n // Do nothing if aborted http requests\n if (error instanceof HttpAbortError) {\n return;\n }\n\n // Redirect to login page if not logged in.\n if (isUnauthenticatedError(error) && !window.NO_AUTH_GUARD) {\n if (unauthenticatedConfirming) {\n return;\n }\n unauthenticatedConfirming = true;\n Dialog.show({\n type: \"confirm\",\n content: i18n.t(`${NS}:${K.LOGIN_TIMEOUT_MESSAGE}`),\n }).then(\n () => {\n redirectToLogin();\n unauthenticatedConfirming = false;\n },\n () => {\n unauthenticatedConfirming = false;\n }\n );\n return;\n }\n\n // eslint-disable-next-line no-console\n console.error(error);\n\n const message = httpErrorToString(error);\n if (message !== lastErrorMessage) {\n lastErrorMessage = message;\n Dialog.show({\n type: \"error\",\n title: i18n.t(`${NS}:${K.REQUEST_FAILED}`),\n content: message,\n contentStyle: {\n whiteSpace: \"pre-wrap\",\n wordBreak: \"break-word\",\n },\n }).then(() => {\n lastErrorMessage = undefined;\n });\n }\n return;\n}\n\nfunction redirectToLogin() {\n const ssoEnabled = getRuntime().getFeatureFlags()[\"sso-enabled\"];\n const history = getHistory();\n setLoginStateCookie(history.location);\n history.push(ssoEnabled ? \"/sso-auth/login\" : \"/auth/login\", {\n from: {\n ...history.location,\n state: undefined,\n },\n });\n}\n","let brick: {\n resolve(options: NotificationOptions): void;\n};\n\nfunction show(options: NotificationOptions) {\n if (brick) {\n brick.resolve(options);\n } else {\n alert(options.message);\n }\n}\n\nexport function loadNotificationService(\n tagName: string,\n loader: (bricks: string[]) => Promise<void>\n) {\n loader([tagName]).then(\n () => {\n brick = document.createElement(tagName) as any;\n },\n (error: unknown) => {\n // eslint-disable-next-line no-console\n console.error(\"Load notification service failed:\", error);\n }\n );\n}\n\nexport interface NotificationOptions {\n type?: \"success\" | \"error\" | \"warn\" | \"info\";\n message: string;\n}\n\nexport const Notification = Object.freeze({\n show,\n});\n","class DebugManager {\n private static instance: DebugManager;\n private debugMode = false;\n private debugType: \"session\" | \"persistent\" | \"none\" = \"none\";\n\n static getInstance(): DebugManager {\n if (!DebugManager.instance) {\n DebugManager.instance = new DebugManager();\n }\n return DebugManager.instance;\n }\n\n constructor() {\n this.initDebugMode();\n this.setupWindowAPI();\n }\n\n private initDebugMode(): void {\n // 1. 首先检查URL参数\n const urlParams = new URLSearchParams(window.location.search);\n const debugFromUrl = urlParams.get(\"__debugConsole__\");\n\n if (debugFromUrl === \"true\") {\n this.activateSessionDebug();\n return;\n }\n\n // 2. 检查localStorage(内部人员长期调试)\n const persistentDebug = localStorage.getItem(\"debugConsole\");\n if (persistentDebug === \"true\") {\n this.debugMode = true;\n this.debugType = \"persistent\";\n // eslint-disable-next-line no-console\n console.log(\"🔧 调试模式已开启(持久模式 - 内部调试)\");\n return;\n }\n\n // 3. 检查sessionStorage(客户临时调试)\n const sessionDebug = sessionStorage.getItem(\"debugConsole\");\n if (sessionDebug === \"true\") {\n this.debugMode = true;\n this.debugType = \"session\";\n // eslint-disable-next-line no-console\n console.log(\"🔧 调试模式已开启(会话模式 - 关闭标签页后失效)\");\n return;\n }\n\n // 4. 检查日志级别设置\n }\n\n private activateSessionDebug(): void {\n this.debugMode = true;\n this.debugType = \"session\";\n sessionStorage.setItem(\"debugConsole\", \"true\");\n // eslint-disable-next-line no-console\n console.log(\"🔧 调试模式已通过URL参数激活(会话模式)\");\n }\n\n private setupWindowAPI(): void {\n (window as any).debugConsole = {\n // 开启会话调试模式(客户现场使用)\n enable: () => {\n this.debugMode = true;\n this.debugType = \"session\";\n sessionStorage.setItem(\"debugConsole\", \"true\");\n // eslint-disable-next-line no-console\n console.log(\"🔧 调试模式已开启(会话模式 - 关闭标签页后失效)\");\n return this.debugMode;\n },\n\n // 开启持久调试模式(内部人员使用)\n enablePersistent: () => {\n this.debugMode = true;\n this.debugType = \"persistent\";\n localStorage.setItem(\"debugConsole\", \"true\");\n // eslint-disable-next-line no-console\n console.log(\"🔧 调试模式已开启(持久模式 - 内部调试)\");\n return this.debugMode;\n },\n\n // 关闭调试模式\n disable: () => {\n this.debugMode = false;\n this.debugType = \"none\";\n sessionStorage.removeItem(\"debugConsole\");\n localStorage.removeItem(\"debugConsole\");\n // eslint-disable-next-line no-console\n console.log(\"🔧 调试模式已关闭\");\n return this.debugMode;\n },\n\n // 切换调试模式\n toggle: () => {\n if (this.debugMode) {\n this.debugMode = false;\n this.debugType = \"none\";\n sessionStorage.removeItem(\"debugConsole\");\n localStorage.removeItem(\"debugConsole\");\n // eslint-disable-next-line no-console\n console.log(\"🔧 调试模式已关闭\");\n } else {\n this.debugMode = true;\n this.debugType = \"session\";\n sessionStorage.setItem(\"debugConsole\", \"true\");\n // eslint-disable-next-line no-console\n console.log(\"🔧 调试模式已开启(会话模式 - 关闭标签页后失效)\");\n }\n return this.debugMode;\n },\n\n // 切换持久调试模式\n togglePersistent: () => {\n if (this.debugMode && this.debugType === \"persistent\") {\n this.debugMode = false;\n this.debugType = \"none\";\n sessionStorage.removeItem(\"debugConsole\");\n localStorage.removeItem(\"debugConsole\");\n // eslint-disable-next-line no-console\n console.log(\"🔧 调试模式已关闭\");\n } else {\n this.debugMode = true;\n this.debugType = \"persistent\";\n localStorage.setItem(\"debugConsole\", \"true\");\n // eslint-disable-next-line no-console\n console.log(\"🔧 调试模式已开启(持久模式 - 内部调试)\");\n }\n return this.debugMode;\n },\n\n // 获取当前状态\n status: () => {\n const status = {\n debugMode: this.debugMode,\n debugType: this.debugType,\n description: this.getStatusDescription(),\n };\n // eslint-disable-next-line no-console\n console.log(\"🔧 调试状态:\", status);\n return status;\n },\n // 帮助信息\n help: () => {\n // eslint-disable-next-line no-console\n console.log(`\n🔧 混合调试控制台使用说明:\n\n👥 生产环境使用(临时调试):\n window.debugConsole.enable() - 开启会话调试(关闭标签页后失效)\n window.debugConsole.disable() - 关闭调试模式\n window.debugConsole.toggle() - 切换会话调试模式\n\n👨💻 开发人员使用(长期调试):\n window.debugConsole.enablePersistent() - 开启持久调试(长期有效)\n window.debugConsole.togglePersistent() - 切换持久调试模式\n window.debugConsole.disable() - 关闭调试模式\n\n🔍 其他功能:\n window.debugConsole.status() - 查看当前状态\n window.debugConsole.help() - 显示此帮助信息\n\n🌐 URL参数:\n ?__debugConsole__=true - 通过URL激活会话调试模式\n\n📝 说明:\n - 会话模式:刷新页面后仍然有效,关闭标签页后失效\n - 持久模式:长期有效,除非手动关闭\n `);\n },\n };\n\n // 显示初始状态\n if (this.debugMode) {\n // eslint-disable-next-line no-console\n console.log(\n `🔧 调试模式已开启(${\n this.debugType === \"persistent\" ? \"持久模式\" : \"会话模式\"\n })`\n );\n } else if (process.env.NODE_ENV !== \"test\") {\n // eslint-disable-next-line no-console\n console.log(\"💡 提示:使用 window.debugConsole.help() 查看使用说明\");\n }\n }\n\n private getStatusDescription(): string {\n if (!this.debugMode) {\n return \"调试模式已关闭\";\n }\n\n switch (this.debugType) {\n case \"persistent\":\n return \"持久模式 - 内部调试(长期有效)\";\n case \"session\":\n return \"会话模式 - 临时调试(关闭标签页后失效)\";\n default:\n return \"未知模式\";\n }\n }\n\n isDebugMode(): boolean {\n return this.debugMode;\n }\n\n getDebugType(): \"session\" | \"persistent\" | \"none\" {\n return this.debugType;\n }\n\n shouldLog(method: \"log\" | \"error\" | \"warn\" | \"info\"): boolean {\n return method === \"error\" ? true : this.debugMode;\n }\n}\n\nexport const debugManager = DebugManager.getInstance();\n","import type {\n BrickEventHandler,\n BrickEventHandlerCallback,\n BrickEventsMap,\n BuiltinBrickEventHandler,\n CustomBrickEventHandler,\n ExecuteCustomBrickEventHandler,\n ProviderPollOptions,\n SetPropsCustomBrickEventHandler,\n SiteTheme,\n UseProviderEventHandler,\n ConditionalEventHandler,\n BatchUpdateContextItem,\n UseProviderContractConf,\n} from \"@next-core/types\";\nimport { isEvaluable } from \"@next-core/cook\";\nimport { isObject } from \"@next-core/utils/general\";\nimport { pick } from \"lodash\";\nimport { checkIf } from \"./compute/checkIf.js\";\nimport { computeRealValue } from \"./compute/computeRealValue.js\";\nimport { getHistory } from \"../history.js\";\nimport { getProviderBrick } from \"./data/getProviderBrick.js\";\nimport { PollableCallback, startPoll } from \"./poll.js\";\nimport { isPreEvaluated } from \"./compute/evaluate.js\";\nimport { setProperties } from \"./compute/setProperties.js\";\nimport { applyMode, applyTheme } from \"../themeAndMode.js\";\nimport type {\n ElementHolder,\n RuntimeBrickElement,\n RuntimeContext,\n} from \"./interfaces.js\";\nimport {\n getTplHostElement,\n getTplStateStore,\n} from \"./CustomTemplates/utils.js\";\nimport { handleHttpError } from \"../handleHttpError.js\";\nimport { Notification } from \"../Notification.js\";\nimport { getFormStateStore } from \"./FormRenderer/utils.js\";\nimport { DataStore } from \"./data/DataStore.js\";\nimport { hooks } from \"./Runtime.js\";\nimport { startSSEStream } from \"./sse.js\";\nimport { debugManager } from \"./debugManager.js\";\n\nexport function bindListeners(\n brick: RuntimeBrickElement,\n eventsMap: BrickEventsMap | undefined,\n runtimeContext: RuntimeContext\n): void {\n if (!eventsMap) {\n return;\n }\n Object.entries(eventsMap).forEach(([eventType, handlers]) => {\n const listener = listenerFactory(handlers, runtimeContext, {\n element: brick,\n });\n brick.addEventListener(eventType, listener);\n\n // Remember added listeners for unbinding.\n if (!brick.$$listeners) {\n brick.$$listeners = [];\n }\n brick.$$listeners.push([eventType, listener]);\n\n // Remember added listeners for devtools.\n if (!brick.$$eventListeners) {\n brick.$$eventListeners = [];\n }\n for (const handler of ([] as BrickEventHandler[]).concat(handlers)) {\n brick.$$eventListeners.push([eventType, null, handler]);\n }\n });\n}\n\nexport function unbindListeners(brick: RuntimeBrickElement): void {\n if (brick.$$listeners) {\n for (const [eventType, listener] of brick.$$listeners) {\n brick.removeEventListener(eventType, listener);\n }\n brick.$$listeners.length = 0;\n }\n}\n\nexport function isBuiltinHandler(\n handler: BrickEventHandler\n): handler is BuiltinBrickEventHandler {\n return typeof (handler as BuiltinBrickEventHandler).action === \"string\";\n}\n\nexport function isUseProviderHandler(\n handler: BrickEventHandler\n): handler is UseProviderEventHandler {\n return typeof (handler as UseProviderEventHandler).useProvider === \"string\";\n}\n\nexport function isCustomHandler(\n handler: BrickEventHandler\n): handler is CustomBrickEventHandler {\n return !!(\n ((handler as CustomBrickEventHandler).target ||\n (handler as CustomBrickEventHandler).targetRef) &&\n ((handler as ExecuteCustomBrickEventHandler).method ||\n (handler as SetPropsCustomBrickEventHandler).properties)\n );\n}\n\nexport function isExecuteCustomHandler(\n handler: CustomBrickEventHandler\n): handler is ExecuteCustomBrickEventHandler {\n return !!(handler as ExecuteCustomBrickEventHandler).method;\n}\n\nexport function isSetPropsCustomHandler(\n handler: CustomBrickEventHandler\n): handler is SetPropsCustomBrickEventHandler {\n return !!(handler as SetPropsCustomBrickEventHandler).properties;\n}\n\nexport function isConditionalEventHandler(\n handler: BrickEventHandler\n): handler is ConditionalEventHandler {\n return !!(handler as ConditionalEventHandler).then;\n}\n\nexport function listenerFactory(\n handlers: BrickEventHandler | BrickEventHandler[],\n _runtimeContext: RuntimeContext,\n runtimeBrick?: ElementHolder\n) {\n return function (event: Event): void {\n for (const handler of ([] as BrickEventHandler[]).concat(handlers)) {\n let runtimeContext = _runtimeContext;\n if (handler.key && typeof handler.key === \"string\") {\n runtimeContext = {\n ..._runtimeContext,\n eventMap: new Map([\n ...(_runtimeContext.eventMap || []),\n [handler.key, event],\n ]),\n };\n }\n\n if (!checkIf(handler, { ...runtimeContext, event })) {\n if (handler.else) {\n listenerFactory(handler.else, runtimeContext, runtimeBrick)(event);\n }\n continue;\n }\n\n if (isConditionalEventHandler(handler)) {\n listenerFactory(handler.then, runtimeContext, runtimeBrick)(event);\n } else if (isBuiltinHandler(handler)) {\n const [object, method] = handler.action.split(\".\") as any;\n switch (handler.action) {\n case \"history.push\":\n case \"history.replace\":\n case \"history.pushQuery\":\n case \"history.replaceQuery\":\n case \"history.pushAnchor\":\n case \"history.block\":\n case \"history.goBack\":\n case \"history.goForward\":\n case \"history.reload\":\n case \"history.unblock\":\n handleHistoryAction(\n event,\n method,\n handler.args,\n handler.callback,\n runtimeContext\n );\n break;\n\n // case \"segue.push\":\n // case \"segue.replace\":\n // case \"alias.push\":\n // case \"alias.replace\":\n\n case \"window.open\":\n handleWindowOpenAction(event, handler.args, runtimeContext);\n break;\n\n case \"window.postMessage\":\n handleWindowPostMessageAction(event, handler.args, runtimeContext);\n break;\n\n case \"parent.postMessage\":\n handleParentPostMessageAction(event, handler.args, runtimeContext);\n break;\n\n case \"location.reload\":\n case \"location.assign\":\n handleLocationAction(event, method, handler.args, runtimeContext);\n break;\n\n case \"localStorage.setItem\":\n case \"localStorage.removeItem\":\n case \"sessionStorage.setItem\":\n case \"sessionStorage.removeItem\":\n handleStorageAction(\n event,\n object,\n method,\n handler.args,\n runtimeContext\n );\n break;\n\n case \"event.preventDefault\":\n event.preventDefault();\n break;\n case \"event.stopPropagation\":\n event.stopPropagation();\n break;\n\n case \"console.log\":\n case \"console.error\":\n case \"console.warn\":\n case \"console.info\":\n handleConsoleAction(event, method, handler.args, runtimeContext);\n break;\n\n case \"message.success\":\n case \"message.error\":\n case \"message.info\":\n case \"message.warn\":\n handleMessageAction(event, method, handler.args, runtimeContext);\n break;\n\n case \"handleHttpError\":\n handleHttpError((event as CustomEvent).detail);\n break;\n\n case \"context.assign\":\n case \"context.replace\":\n case \"context.refresh\":\n case \"context.load\":\n case \"context.set\":\n handleContextAction(\n event,\n method,\n handler.args,\n handler.batch ?? true,\n handler.callback,\n runtimeContext\n );\n break;\n\n case \"state.update\":\n case \"state.refresh\":\n case \"state.load\":\n case \"state.set\":\n handleTplStateAction(\n event,\n method,\n handler.args,\n handler.batch ?? true,\n handler.callback,\n runtimeContext\n );\n break;\n\n case \"tpl.dispatchEvent\": {\n const [type, init] = argsFactory(\n handler.args,\n runtimeContext,\n event\n ) as [string, CustomEventInit];\n const tplHostElement = getTplHostElement(\n runtimeContext,\n handler.action,\n `: ${type}`\n );\n tplHostElement.dispatchEvent(new CustomEvent(type, init));\n break;\n }\n\n case \"formstate.update\":\n handleFormStateAction(\n event,\n handler.args,\n handler.callback,\n runtimeContext\n );\n break;\n\n case \"message.subscribe\":\n case \"message.unsubscribe\":\n handleMessageDispatcher(\n event,\n method,\n handler.args,\n runtimeContext,\n runtimeBrick,\n handler.callback\n );\n break;\n\n case \"theme.setDarkTheme\":\n case \"theme.setLightTheme\":\n applyTheme(\n handler.action === \"theme.setDarkTheme\" ? \"dark\" : \"light\"\n );\n break;\n case \"theme.setTheme\": {\n const [theme] = argsFactory(handler.args, runtimeContext, event);\n applyTheme(theme as SiteTheme);\n break;\n }\n case \"mode.setDashboardMode\":\n case \"mode.setDefaultMode\":\n applyMode(\n handler.action === \"mode.setDashboardMode\"\n ? \"dashboard\"\n : \"default\"\n );\n break;\n\n // case \"menu.clearMenuTitleCache\":\n // case \"menu.clearMenuCache\":\n\n // case \"analytics.event\":\n\n // case \"preview.debug\":\n\n default:\n // eslint-disable-next-line no-console\n console.error(\"unknown event listener action:\", handler.action);\n }\n } else if (isUseProviderHandler(handler)) {\n handleUseProviderAction(event, handler, runtimeContext, runtimeBrick);\n } else if (isCustomHandler(handler)) {\n handleCustomAction(event, handler, runtimeContext, runtimeBrick!);\n } else {\n // eslint-disable-next-line no-console\n console.error(\"unknown event handler:\", handler);\n }\n }\n };\n}\n\nfunction handleUseProviderAction(\n event: Event,\n handler: UseProviderEventHandler,\n runtimeContext: RuntimeContext,\n runtimeBrick?: ElementHolder\n) {\n const method = handler.method !== \"saveAs\" ? \"resolve\" : \"saveAs\";\n brickCallback(\n event,\n handler.useProvider,\n handler,\n method,\n runtimeContext,\n runtimeBrick\n );\n}\n\nfunction handleCustomAction(\n event: Event,\n handler: CustomBrickEventHandler,\n runtimeContext: RuntimeContext,\n runtimeBrick: ElementHolder\n) {\n let targets: HTMLElement[] = [];\n const rawTarget = handler.target;\n const rawTargetRef = handler.targetRef;\n let computedTarget = rawTarget;\n // Allow `target` to be set as evaluable string.\n if (\n typeof rawTarget === \"string\"\n ? isEvaluable(rawTarget)\n : isPreEvaluated(rawTarget)\n ) {\n computedTarget = computeRealValue(rawTarget, { ...runtimeContext, event });\n }\n if (typeof computedTarget === \"string\") {\n if (computedTarget === \"_self\") {\n targets.push(runtimeBrick.element!);\n } else if (handler.multiple) {\n targets = Array.from(document.querySelectorAll(computedTarget));\n } else {\n const found = document.querySelector(computedTarget) as HTMLElement;\n if (found !== null) {\n targets.push(found);\n }\n }\n } else if (computedTarget) {\n if (computedTarget instanceof HTMLElement) {\n targets.push(computedTarget as HTMLElement);\n } else {\n // eslint-disable-next-line no-console\n console.error(\"unexpected target:\", computedTarget);\n }\n } else if (rawTargetRef) {\n let computedTargetRef = rawTargetRef;\n // Allow `targetRef` to be set as evaluable string.\n if (\n typeof rawTargetRef === \"string\"\n ? isEvaluable(rawTargetRef)\n : isPreEvaluated(rawTargetRef)\n ) {\n computedTargetRef = computeRealValue(rawTargetRef, {\n ...runtimeContext,\n event,\n }) as string | string[];\n }\n const targetRefs = ([] as string[]).concat(computedTargetRef);\n const tplHostElement = getTplHostElement(\n runtimeContext,\n \"targetRef\",\n `: ${targetRefs.join(\", \")}`\n );\n targets.push(\n ...(targetRefs\n .map((ref) => tplHostElement.$$getElementByRef?.(ref))\n .filter(Boolean) as HTMLElement[])\n );\n }\n if (targets.length === 0) {\n // eslint-disable-next-line no-console\n console.error(\"target not found:\", rawTarget || rawTargetRef);\n return;\n }\n if (isExecuteCustomHandler(handler)) {\n targets.forEach((target) => {\n brickCallback(\n event,\n target,\n handler,\n handler.method,\n runtimeContext,\n runtimeBrick,\n {\n useEventAsDefault: true,\n }\n );\n });\n } else if (isSetPropsCustomHandler(handler)) {\n setProperties(targets, handler.properties, {\n ...runtimeContext,\n event,\n });\n }\n}\n\nasync function brickCallback(\n event: Event,\n targetOrProvider: HTMLElement | string,\n handler: ExecuteCustomBrickEventHandler | UseProviderEventHandler,\n method: string,\n runtimeContext: RuntimeContext,\n runtimeBrick?: ElementHolder,\n options?: ArgsFactoryOptions\n): Promise<void> {\n const isProvider = isUseProviderHandler(handler);\n\n const task = async (): Promise<unknown> => {\n const realTarget = isProvider\n ? await getProviderBrick(targetOrProvider as string)\n : (targetOrProvider as HTMLElement);\n\n if (typeof (realTarget as any)[method] !== \"function\") {\n throw new Error(\n `target <${realTarget.tagName.toLowerCase()}> has no method: ${method}`\n );\n }\n\n const isUseProvider = isUseProviderHandler(handler);\n let computedArgs: unknown[];\n\n let argsOrContractConf: unknown[] | UseProviderContractConf | undefined =\n isUseProvider\n ? computeArgs(handler.args, runtimeContext, event)\n : argsFactory(handler.args, runtimeContext, event, options);\n\n if (\n isUseProvider &&\n hooks?.flowApi?.isFlowApiProvider(handler.useProvider)\n ) {\n if (!Array.isArray(handler.args) && handler.params) {\n argsOrContractConf = computeRealValue(\n pick(handler, \"params\", \"options\", \"filename\"),\n {\n ...runtimeContext,\n event,\n }\n ) as UseProviderContractConf;\n }\n\n computedArgs = await hooks.flowApi.getArgsOfFlowApi(\n handler.useProvider,\n argsOrContractConf ?? [],\n method,\n handler.sse?.stream\n );\n } else {\n computedArgs = argsOrContractConf ?? [];\n }\n return (realTarget as any)[method](...computedArgs);\n };\n\n if (!handler.callback) {\n task();\n return;\n }\n\n const callbackFactory = eventCallbackFactory(\n handler.callback,\n runtimeContext,\n runtimeBrick\n );\n\n const pollableCallback: Required<PollableCallback> = {\n progress: callbackFactory(\"progress\"),\n success: callbackFactory(\"success\"),\n error: callbackFactory(\"error\"),\n finally: callbackFactory(\"finally\"),\n };\n\n if (isProvider) {\n const pollRuntimeContext = {\n ...runtimeContext,\n event,\n };\n\n const sseStream = computeRealValue(\n handler.sse?.stream,\n pollRuntimeContext\n ) as boolean | undefined;\n\n if (sseStream) {\n startSSEStream(\n task as () => Promise<AsyncIterable<unknown>>,\n pollableCallback\n );\n return;\n }\n\n const pollEnabled = computeRealValue(\n handler.poll?.enabled,\n pollRuntimeContext\n ) as boolean | undefined;\n\n if (pollEnabled) {\n startPoll(\n task,\n pollableCallback,\n handler.poll as ProviderPollOptions,\n pollRuntimeContext\n );\n\n return;\n }\n }\n\n try {\n // Try to catch synchronized tasks too.\n const result = await task();\n pollableCallback.success(result);\n } catch (err) {\n pollableCallback.error(err);\n } finally {\n pollableCallback[\"finally\"]();\n }\n}\n\nfunction handleHistoryAction(\n event: Event,\n method:\n | \"push\"\n | \"replace\"\n | \"pushQuery\"\n | \"replaceQuery\"\n | \"pushAnchor\"\n | \"block\"\n | \"goBack\"\n | \"goForward\"\n | \"reload\"\n | \"unblock\",\n args: unknown[] | undefined,\n callback: BrickEventHandlerCallback | undefined,\n runtimeContext: RuntimeContext\n) {\n let baseArgsLength = 0;\n let hasCallback = false;\n let overrideMethod = method as \"setBlockMessage\";\n switch (method) {\n case \"push\":\n case \"replace\":\n case \"pushQuery\":\n case \"replaceQuery\":\n case \"pushAnchor\":\n baseArgsLength = 2;\n hasCallback = true;\n break;\n case \"reload\":\n hasCallback = true;\n break;\n case \"block\":\n baseArgsLength = 1;\n overrideMethod = \"setBlockMessage\";\n break;\n }\n let computedArgs: unknown[] = [];\n if (baseArgsLength > 0) {\n computedArgs = argsFactory(args, runtimeContext, event, {\n useEventDetailAsDefault: true,\n });\n computedArgs.length = baseArgsLength;\n }\n if (hasCallback && callback) {\n const callbackFactory = eventCallbackFactory(\n callback,\n runtimeContext,\n undefined\n );\n computedArgs.push((blocked: boolean) => {\n callbackFactory(blocked ? \"error\" : \"success\")({ blocked });\n callbackFactory(\"finally\")({ blocked });\n });\n }\n (getHistory()[overrideMethod] as (...args: unknown[]) => unknown)(\n ...computedArgs\n );\n}\n\nfunction handleWindowOpenAction(\n event: Event,\n args: unknown[] | undefined,\n runtimeContext: RuntimeContext\n) {\n const [url, target, features] = argsFactory(args, runtimeContext, event) as [\n string,\n string,\n string,\n ];\n window.open(url, target || \"_self\", features);\n}\n\nfunction handleWindowPostMessageAction(\n event: Event,\n args: unknown[] | undefined,\n runtimeContext: RuntimeContext\n) {\n const computedArgs = argsFactory(args, runtimeContext, event) as Parameters<\n typeof window.postMessage\n >;\n if (computedArgs.length === 1) {\n // Add default target origin\n computedArgs.push(location.origin);\n }\n window.postMessage(...computedArgs);\n}\n\nfunction handleParentPostMessageAction(\n event: Event,\n args: unknown[] | undefined,\n runtimeContext: RuntimeContext\n) {\n if (parent === window) {\n throw new Error(\"parent is the window itself\");\n }\n const computedArgs = argsFactory(args, runtimeContext, event) as Parameters<\n typeof window.postMessage\n >;\n parent.postMessage(...computedArgs);\n}\n\nfunction batchUpdate(\n args: unknown[],\n batch: boolean,\n method: \"replace\" | \"assign\",\n store: DataStore<\"CTX\" | \"STATE\">,\n runtimeContext: RuntimeContext,\n event: CustomEvent | Event\n): void {\n if (batch) {\n store.updateValues(\n args as BatchUpdateContextItem[],\n method,\n (arg: unknown[]) => {\n return argsFactory(\n arg,\n runtimeContext,\n event\n )[0] as BatchUpdateContextItem;\n }\n );\n } else {\n args.forEach((arg) => {\n const { name, value } = argsFactory(\n [arg],\n runtimeContext,\n event\n )[0] as BatchUpdateContextItem;\n store.updateValue(name, value, method);\n });\n }\n}\n\nfunction handleContextAction(\n event: Event,\n method: \"assign\" | \"replace\" | \"refresh\" | \"load\" | \"set\",\n args: unknown[] | undefined,\n batch: boolean,\n callback: BrickEventHandlerCallback | undefined,\n runtimeContext: RuntimeContext\n) {\n const isBatch = Array.isArray(args) && args.every(isObject);\n if (isBatch && (method === \"assign\" || method === \"replace\")) {\n batchUpdate(\n args,\n batch,\n method,\n runtimeContext.ctxStore,\n runtimeContext,\n event\n );\n } else {\n const [name, value] = argsFactory(args, runtimeContext, event);\n runtimeContext.ctxStore.updateValue(\n name as string,\n value,\n method,\n callback,\n runtimeContext\n );\n }\n}\n\nfunction handleTplStateAction(\n event: Event,\n method: \"update\" | \"refresh\" | \"load\" | \"set\",\n args: unknown[] | undefined,\n batch: boolean,\n callback: BrickEventHandlerCallback | undefined,\n runtimeContext: RuntimeContext\n) {\n const isBatch = Array.isArray(args) && args.every(isObject);\n if (isBatch && method === \"update\") {\n const tplStateStore = getTplStateStore(\n runtimeContext,\n `state.${method}`,\n `: ${JSON.stringify(args)}`\n );\n batchUpdate(args, batch, \"replace\", tplStateStore, runtimeContext, event);\n } else {\n const [name, value] = argsFactory(args, runtimeContext, event);\n const tplStateStore = getTplStateStore(\n runtimeContext,\n `state.${method}`,\n `: ${name}`\n );\n tplStateStore.updateValue(\n name as string,\n value,\n method === \"update\" ? \"replace\" : method,\n callback,\n runtimeContext\n );\n }\n}\n\nfunction handleFormStateAction(\n event: Event,\n args: unknown[] | undefined,\n callback: BrickEventHandlerCallback | undefined,\n runtimeContext: RuntimeContext\n) {\n const [name, value] = argsFactory(args, runtimeContext, event);\n const formStateStore = getFormStateStore(\n runtimeContext,\n \"formstate.update\",\n `: ${name}`\n );\n formStateStore.updateValue(\n name as string,\n value,\n \"replace\",\n callback,\n runtimeContext\n );\n}\n\nfunction handleLocationAction(\n event: Event,\n method: \"assign\" | \"reload\",\n args: unknown[] | undefined,\n runtimeContext: RuntimeContext\n) {\n if (method === \"assign\") {\n const [url] = argsFactory(args, runtimeContext, event) as [string];\n location.assign(url);\n } else {\n location[method]();\n }\n}\n\nfunction handleStorageAction(\n event: Event,\n object: \"localStorage\" | \"sessionStorage\",\n method: \"setItem\" | \"removeItem\",\n args: unknown[] | undefined,\n runtimeContext: RuntimeContext\n) {\n const storage = object === \"localStorage\" ? localStorage : sessionStorage;\n const [name, value] = argsFactory(args, runtimeContext, event);\n if (method === \"setItem\") {\n if (value !== undefined) {\n storage.setItem(name as string, JSON.stringify(value));\n }\n } else {\n storage.removeItem(name as string);\n }\n}\n\nfunction handleConsoleAction(\n event: Event,\n method: \"log\" | \"error\" | \"warn\" | \"info\",\n args: unknown[] | undefined,\n runtimeContext: RuntimeContext\n) {\n const isProduction = process.env.NODE_ENV === \"production\";\n\n // 生产环境下,只有调试模式开启且符合日志级别才输出\n if (isProduction && !debugManager.shouldLog(method)) {\n return;\n }\n\n // eslint-disable-next-line no-console\n console[method](\n ...argsFactory(args, runtimeContext, event, {\n useEventAsDefault: true,\n })\n );\n}\n\nfunction handleMessageAction(\n event: Event,\n method: \"success\" | \"error\" | \"info\" | \"warn\",\n args: unknown[] | undefined,\n runtimeContext: RuntimeContext\n) {\n const computedArgs = argsFactory(args, runtimeContext, event, {\n useEventAsDefault: true,\n });\n Notification.show({\n type: method,\n message: computedArgs[0] as string,\n });\n}\n\nasync function handleMessageDispatcher(\n event: Event,\n method: \"subscribe\" | \"unsubscribe\",\n args: unknown[] | undefined,\n runtimeContext: RuntimeContext,\n runtimeBrick?: ElementHolder,\n callback?: BrickEventHandlerCallback\n) {\n const task = () => {\n const computedArgs = argsFactory(args, runtimeContext, event);\n return hooks?.messageDispatcher?.[method](...computedArgs);\n };\n if (!callback) {\n task();\n return;\n }\n const callbackFactory = eventCallbackFactory(\n callback,\n runtimeContext,\n runtimeBrick\n );\n try {\n const result = await task();\n callbackFactory(\"success\")(result);\n } catch (error) {\n callbackFactory(\"error\")(error);\n } finally {\n callbackFactory(\"finally\")();\n }\n}\n\nexport function eventCallbackFactory(\n callback: BrickEventHandlerCallback,\n runtimeContext: RuntimeContext,\n runtimeBrick?: ElementHolder\n) {\n return function callbackFactory(\n type: \"success\" | \"error\" | \"finally\" | \"progress\"\n ) {\n return function (result?: unknown) {\n const handlers = callback?.[type];\n if (handlers) {\n try {\n const event = new CustomEvent(`callback.${type}`, {\n detail: result,\n });\n listenerFactory(handlers, runtimeContext, runtimeBrick)(event);\n } catch (err) {\n // Do not throw errors in `callback.success` or `callback.progress`,\n // to avoid the following triggering of `callback.error`.\n // eslint-disable-next-line\n console.error(err);\n }\n } else if (type === \"error\") {\n // eslint-disable-next-line\n console.error(\"Unhandled callback error:\", result);\n }\n };\n };\n}\n\ninterface ArgsFactoryOptions {\n useEventAsDefault?: boolean;\n useEventDetailAsDefault?: boolean;\n}\n\nfunction argsFactory(\n args: unknown[] | undefined,\n runtimeContext: RuntimeContext,\n event: Event,\n options: ArgsFactoryOptions = {}\n): unknown[] {\n return Array.isArray(args)\n ? (computeRealValue(args, {\n ...runtimeContext,\n event,\n }) as unknown[])\n : options.useEventAsDefault\n ? [event]\n : options.useEventDetailAsDefault\n ? [(event as CustomEvent).detail]\n : [];\n}\n\nfunction computeArgs(\n args: unknown[] | undefined,\n runtimeContext: RuntimeContext,\n event: Event\n): unknown[] | undefined {\n if (!Array.isArray(args)) {\n return args;\n }\n return computeRealValue(args, {\n ...runtimeContext,\n event,\n }) as unknown[];\n}\n","import { _internalApiGetRenderId } from \"./Runtime.js\";\nimport type { PollableCallback } from \"./poll.js\";\n\nexport async function startSSEStream(\n task: () => Promise<AsyncIterable<unknown>>,\n { progress, success, error, finally: finallyCallback }: PollableCallback\n) {\n const currentRenderId = _internalApiGetRenderId();\n try {\n const stream = await task();\n for await (const value of stream) {\n if (currentRenderId !== _internalApiGetRenderId()) {\n return;\n }\n progress?.(value);\n }\n if (currentRenderId !== _internalApiGetRenderId()) {\n return;\n }\n success?.();\n } catch (e) {\n if (currentRenderId !== _internalApiGetRenderId()) {\n return;\n }\n error?.(e);\n } finally {\n finallyCallback?.();\n }\n}\n","import type { RuntimeBrick } from \"../interfaces.js\";\nimport { getTplStateStore } from \"./utils.js\";\n\nexport function bindTemplateProxy(brick: RuntimeBrick) {\n const { ref, runtimeContext, element } = brick;\n\n // Error recovering brick may have no runtimeContext.\n if (!ref || !runtimeContext.tplStateStoreId) {\n return;\n }\n\n const { hostBrick } = getTplStateStore(runtimeContext, \"bindTemplateProxy\");\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const tplHostMetadata = hostBrick!.tplHostMetadata!;\n\n tplHostMetadata.internalBricksByRef.set(ref, brick);\n\n const events = tplHostMetadata.proxy?.events;\n if (events) {\n for (const [from, to] of Object.entries(events)) {\n if (to.ref === ref) {\n const listener = (e: Event) => {\n if (e.bubbles) {\n e.stopPropagation();\n }\n hostBrick!.element!.dispatchEvent(\n new CustomEvent(from, {\n detail: (e as CustomEvent).detail,\n bubbles: e.bubbles,\n cancelable: e.cancelable,\n composed: e.composed,\n })\n );\n };\n const eventType = to.refEvent ?? from;\n element!.addEventListener(eventType, listener);\n element!.$$proxyListeners ??= [];\n element!.$$proxyListeners.push([eventType, listener]);\n }\n }\n }\n}\n\nexport function unbindTemplateProxy(brick: RuntimeBrick) {\n const { ref, runtimeContext, element } = brick;\n\n if (!runtimeContext?.tplStateStoreId || !ref) {\n return;\n }\n\n const { hostBrick } = getTplStateStore(runtimeContext, \"unbindTemplateProxy\");\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const tplHostMetadata = hostBrick!.tplHostMetadata!;\n\n tplHostMetadata.internalBricksByRef.delete(ref);\n\n for (const [type, fn] of element!.$$proxyListeners ?? []) {\n element!.removeEventListener(type, fn);\n }\n delete element!.$$proxyListeners;\n}\n","export enum RenderTag {\n ROOT = 1,\n BRICK = 2,\n ABSTRACT = 3,\n}\n","import { bindTemplateProxy } from \"./CustomTemplates/bindTemplateProxy.js\";\nimport { getTplStateStore } from \"./CustomTemplates/utils.js\";\nimport { bindListeners } from \"./bindListeners.js\";\nimport { setRealProperties } from \"./compute/setRealProperties.js\";\nimport { RenderTag } from \"./enums.js\";\nimport type {\n RenderReturnNode,\n RenderRoot,\n RuntimeBrickElement,\n} from \"./interfaces.js\";\n\nexport function unmountTree(mountPoint: HTMLElement | DocumentFragment) {\n mountPoint.replaceChildren();\n}\n\nexport function mountTree(\n root: RenderRoot,\n initializedElement?: RuntimeBrickElement\n): void {\n root.mounted = true;\n window.DISABLE_REACT_FLUSH_SYNC = false;\n let current = root.child;\n const portalElements: RuntimeBrickElement[] = [];\n while (current) {\n current.mounted = true;\n if (current.tag === RenderTag.BRICK) {\n const tagName = current.type;\n\n if (tagName.includes(\"-\") && !customElements.get(tagName)) {\n // eslint-disable-next-line no-console\n console.error(`Undefined custom element: ${tagName}`);\n }\n\n // istanbul ignore if\n if (tagName === \"basic-bricks.script-brick\") {\n // eslint-disable-next-line no-console\n console.warn(\n \"`basic-bricks.script-brick` is deprecated, please take caution when using it\"\n );\n }\n\n const element: RuntimeBrickElement =\n initializedElement && current === root.child\n ? initializedElement\n : document.createElement(tagName);\n current.element = element;\n\n if (current.slotId) {\n element.setAttribute(\"slot\", current.slotId);\n }\n if (current.iid) {\n element.dataset.iid = current.iid;\n }\n if (current.tplHostMetadata?.tplStateStoreId) {\n element.dataset.tplStateStoreId =\n current.tplHostMetadata.tplStateStoreId;\n }\n setRealProperties(element, current.properties);\n bindListeners(element, current.events, current.runtimeContext);\n if (current.tplHostMetadata) {\n // 先设置属性,再设置 `$$tplStateStore`,这样,当触发属性设置时,\n // 避免初始化的一次 state update 操作及其 onChange 事件。\n element.$$tplStateStore = getTplStateStore(\n {\n tplStateStoreId: current.tplHostMetadata.tplStateStoreId,\n tplStateStoreMap: current.runtimeContext.tplStateStoreMap,\n },\n \"mount\"\n );\n }\n bindTemplateProxy(current);\n\n if (current.portal) {\n portalElements.push(element);\n } else if (current.return) {\n let currentReturn = current.return;\n while (currentReturn) {\n if (currentReturn.tag === RenderTag.ABSTRACT) {\n currentReturn = currentReturn.return;\n } else {\n if (!currentReturn.childElements) {\n currentReturn.childElements = [];\n }\n currentReturn.childElements.push(element);\n break;\n }\n }\n }\n }\n\n if (current.child) {\n current = current.child;\n } else if (current.sibling) {\n current = current.sibling;\n } else {\n let currentReturn: RenderReturnNode | null | undefined = current.return;\n while (currentReturn) {\n // Append elements inside out\n if (\n currentReturn.tag !== RenderTag.ABSTRACT &&\n currentReturn.childElements\n ) {\n if (currentReturn.tag === RenderTag.ROOT) {\n currentReturn.container?.append(...currentReturn.childElements);\n } else {\n currentReturn.element!.append(...currentReturn.childElements);\n }\n currentReturn.childElements = undefined;\n }\n\n if (currentReturn.tag === RenderTag.ROOT && portalElements.length > 0) {\n const portal =\n typeof currentReturn.createPortal === \"function\"\n ? currentReturn.createPortal()\n : currentReturn.createPortal;\n portal.append(...portalElements);\n }\n\n if (currentReturn.sibling) {\n break;\n }\n currentReturn = currentReturn.return;\n }\n current = currentReturn?.sibling;\n }\n }\n setTimeout(() => {\n window.DISABLE_REACT_FLUSH_SYNC = true;\n });\n}\n","import type {\n BrickEventHandler,\n BrickLifeCycle,\n MessageConf,\n RouteConf,\n ScrollIntoViewConf,\n SlotConfOfRoutes,\n StaticMenuConf,\n} from \"@next-core/types\";\nimport type { Action, Location } from \"history\";\nimport { isEmpty, remove } from \"lodash\";\nimport { listenerFactory } from \"./bindListeners.js\";\nimport { NextHistoryState, NextLocation, getHistory } from \"../history.js\";\nimport { getReadOnlyProxy } from \"./proxyFactories.js\";\nimport { Media, mediaEventTarget } from \"./mediaQuery.js\";\nimport type {\n MenuRequestNode,\n RenderAbstract,\n RenderBrick,\n RenderChildNode,\n RenderNode,\n RenderReturnNode,\n RenderRoot,\n} from \"./interfaces.js\";\nimport { mountTree } from \"./mount.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { unbindTemplateProxy } from \"./CustomTemplates/bindTemplateProxy.js\";\nimport { hooks } from \"./Runtime.js\";\nimport type { RenderOutput } from \"./Renderer.js\";\n\ntype MemoizedLifeCycle<T> = {\n [Key in keyof T]: {\n brick: RenderBrick;\n handlers: T[Key];\n }[];\n};\n\ntype LocationChangeCallback = (\n location: Location<NextHistoryState>,\n prevLocation: Location<NextHistoryState>\n) => Promise<boolean>;\n\ninterface IncrementalRenderState {\n parentRoutes: RouteConf[];\n callback: LocationChangeCallback;\n}\n\nconst commonLifeCycles = [\n \"onMount\",\n \"onUnmount\",\n \"onMediaChange\",\n \"onScrollIntoView\",\n \"onMessage\",\n \"onMessageClose\",\n] as const;\n\nconst pageOnlyLifeCycles = [\n \"onBeforePageLoad\",\n \"onPageLoad\",\n \"onPageLeave\",\n \"onBeforePageLeave\",\n \"onAnchorLoad\",\n \"onAnchorUnload\",\n] as const;\n\nexport interface RendererContextOptions {\n unknownBricks?: \"silent\" | \"throw\";\n routeHelper?: RouteHelper;\n renderId?: string;\n}\n\nexport interface RouteHelper {\n bailout: (output: RenderOutput) => true | undefined;\n mergeMenus: (menuRequests: Promise<StaticMenuConf>[]) => Promise<void>;\n /**\n * Will always resolve when the routing is not the current bootstrap.\n * Otherwise, will throw an error when not bailout.\n *\n * @returns undefined when bailout, or failed output otherwise\n */\n catch: (\n error: unknown,\n returnNode: RenderReturnNode,\n isCurrentBootstrap?: boolean,\n isReCatch?: boolean\n ) => Promise<\n | undefined\n | {\n failed: true;\n output: RenderOutput;\n }\n >;\n}\n\nexport class RendererContext {\n /**\n * - page: render as whole page, triggering page life cycles.\n * - fragment: render as fragment, not triggering page life cycles.\n */\n public readonly scope: \"page\" | \"fragment\";\n\n public readonly unknownBricks: \"silent\" | \"throw\";\n\n public readonly renderId: string | undefined;\n\n #routeHelper: RouteHelper | undefined;\n\n constructor(scope: \"page\" | \"fragment\", options?: RendererContextOptions) {\n this.scope = scope;\n this.unknownBricks = options?.unknownBricks ?? \"throw\";\n this.#routeHelper = options?.routeHelper;\n this.renderId = options?.renderId;\n }\n\n #memoizedLifeCycle: MemoizedLifeCycle<\n Required<\n Pick<\n BrickLifeCycle,\n | \"onBeforePageLoad\"\n | \"onPageLoad\"\n | \"onPageLeave\"\n | \"onBeforePageLeave\"\n | \"onAnchorLoad\"\n | \"onAnchorUnload\"\n | \"onMediaChange\"\n | \"onScrollIntoView\"\n | \"onMount\"\n | \"onUnmount\"\n | \"onMessage\"\n | \"onMessageClose\"\n >\n >\n > = {\n onBeforePageLoad: [],\n onPageLoad: [],\n onPageLeave: [],\n onBeforePageLeave: [],\n onAnchorLoad: [],\n onAnchorUnload: [],\n onMediaChange: [],\n onScrollIntoView: [],\n onMount: [],\n onUnmount: [],\n onMessage: [],\n onMessageClose: [],\n };\n #observers = new Map<RenderBrick, IntersectionObserver[]>();\n #mediaListener: EventListener | undefined;\n\n #arbitraryLifeCycle = new Map<string, Set<() => void>>();\n\n #initialMenuRequestNode?: MenuRequestNode;\n #memoizedMenuRequestNodeMap?: WeakMap<\n RouteConf[],\n MenuRequestNode | undefined\n > = new WeakMap<RouteConf[], MenuRequestNode | undefined>();\n\n setInitialMenuRequestNode(menuRequestNode: MenuRequestNode) {\n this.#initialMenuRequestNode = menuRequestNode;\n }\n\n memoizeMenuRequestNode(\n routes: RouteConf[],\n menuRequestNode: MenuRequestNode\n ) {\n this.#memoizedMenuRequestNodeMap!.set(routes, menuRequestNode);\n }\n\n getMenuRequests() {\n const menuRequests: Promise<StaticMenuConf>[] = [];\n let current = this.#initialMenuRequestNode;\n while (current) {\n if (current.request) {\n menuRequests.push(current.request);\n }\n if (current.child) {\n current = current.child;\n } else {\n while (current && !current.sibling) {\n current = current.return;\n }\n current = current?.sibling;\n }\n }\n return menuRequests;\n }\n\n async reMergeMenuRequestNodes(\n parentMenuRequestNode: MenuRequestNode,\n routes: RouteConf[],\n menuRequestNode: MenuRequestNode = {}\n ) {\n const node = this.#memoizedMenuRequestNodeMap!.get(routes);\n this.#memoizedMenuRequestNodeMap!.set(routes, menuRequestNode);\n\n let current = parentMenuRequestNode.child;\n let previousSibling: MenuRequestNode | undefined;\n\n while (current) {\n if (current === node) {\n break;\n }\n previousSibling = current;\n current = current.sibling;\n }\n\n if (previousSibling) {\n previousSibling.sibling = menuRequestNode;\n menuRequestNode.sibling = node?.sibling;\n } else {\n parentMenuRequestNode.child = menuRequestNode;\n }\n\n await this.#routeHelper!.mergeMenus(this.getMenuRequests());\n }\n\n reBailout(output: RenderOutput) {\n return this.#routeHelper!.bailout(output);\n }\n\n /**\n * Will always resolve when the routing is not the current bootstrap.\n * Otherwise, will throw an error when not bailout.\n *\n * @returns undefined when bailout, or failed output otherwise\n */\n reCatch(error: unknown, returnNode: RenderReturnNode) {\n return this.#routeHelper!.catch(error, returnNode, false, true);\n }\n\n #incrementalRenderStates = new Map<\n SlotConfOfRoutes,\n IncrementalRenderState\n >();\n\n async didPerformIncrementalRender(\n location: Location<NextHistoryState>,\n prevLocation: Location<NextHistoryState>\n ) {\n let finalResult = false;\n const shouldIgnoreRoutes: RouteConf[] = [];\n // Perform incremental rendering from inside out.\n // This allows nested incremental sub-routes.\n for (const { parentRoutes, callback } of [\n ...this.#incrementalRenderStates.values(),\n ].reverse()) {\n const parentRoute = parentRoutes[parentRoutes.length - 1];\n if (shouldIgnoreRoutes.includes(parentRoute)) {\n // Do not re-render parent routes if any of its children has performed incremental rendering.\n // In the meantime, allow sibling-routes to perform incremental rendering.\n continue;\n }\n const result = await callback(location, prevLocation);\n // When result is true, it means the incremental rendering is performed.\n if (result) {\n shouldIgnoreRoutes.push(...parentRoutes.slice(0, -1));\n }\n // Mark incremental rendering as performed at final if result is true or null.\n if (result !== false) {\n finalResult = true;\n }\n }\n return finalResult;\n }\n\n /**\n * When `callback` resolved to `true` which means incremental rendering is performed,\n * ignore normal rendering.\n */\n performIncrementalRender(\n slotConf: SlotConfOfRoutes,\n parentRoutes: RouteConf[],\n callback: LocationChangeCallback\n ) {\n // Override stale incremental render callbacks\n this.#incrementalRenderStates.set(slotConf, { parentRoutes, callback });\n }\n\n registerBrickLifeCycle(\n brick: RenderBrick,\n lifeCycle: BrickLifeCycle | undefined\n ): void {\n if (!lifeCycle) {\n return;\n }\n const lifeCycleTypes = [\n ...commonLifeCycles,\n ...(this.scope === \"page\" ? pageOnlyLifeCycles : []),\n ];\n for (const key of lifeCycleTypes) {\n const handlers = (lifeCycle as BrickLifeCycle)[key as \"onPageLoad\"];\n if (handlers) {\n this.#memoizedLifeCycle[key as \"onPageLoad\"].push({\n brick,\n handlers: handlers as BrickEventHandler | BrickEventHandler[],\n });\n }\n }\n // istanbul ignore next\n if (!isEmpty((lifeCycle as { useResolves?: unknown }).useResolves)) {\n // eslint-disable-next-line no-console\n console.error(\"`lifeCycle.useResolves` is dropped in v3:\", lifeCycle);\n }\n }\n\n registerArbitraryLifeCycle(lifeCycle: string, fn: () => void): void {\n const arbitraryCallbacks = this.#arbitraryLifeCycle.get(lifeCycle);\n if (arbitraryCallbacks) {\n arbitraryCallbacks.add(fn);\n } else {\n this.#arbitraryLifeCycle.set(lifeCycle, new Set([fn]));\n }\n }\n\n #unmountBricks(bricks: Set<RenderBrick>): void {\n const lifeCycleTypes = [\n ...commonLifeCycles,\n ...(this.scope === \"page\" ? pageOnlyLifeCycles : []),\n ];\n const unmountList: {\n brick: RenderBrick;\n handlers: BrickEventHandler | BrickEventHandler[];\n }[] = [];\n\n // Clear life cycle handlers, record `onUnmount` at the same time\n for (const key of lifeCycleTypes) {\n const removed = remove(\n this.#memoizedLifeCycle[key as \"onPageLoad\"],\n (item) => bricks.has(item.brick)\n );\n if (key === \"onUnmount\") {\n unmountList.push(...removed);\n }\n }\n\n // Clear intersection observers\n for (const brick of bricks) {\n const observers = this.#observers.get(brick);\n if (observers?.length) {\n for (const observer of observers) {\n observer.disconnect();\n }\n observers.length = 0;\n this.#observers.delete(brick);\n }\n\n unbindTemplateProxy(brick);\n delete brick.element?.$$tplStateStore;\n // Also remove the element\n brick.element?.remove();\n // Dispose context listeners\n brick.disposes?.forEach((dispose) => dispose());\n delete brick.disposes;\n }\n\n // Dispatch unmount events\n const unmountEvent = new CustomEvent(\"unmount\");\n for (const { brick, handlers } of unmountList) {\n listenerFactory(handlers, brick.runtimeContext, brick)(unmountEvent);\n }\n }\n\n #unmountAbstracts(abstracts: Set<RenderAbstract>) {\n for (const item of abstracts) {\n item.disposes?.forEach((dispose) => dispose());\n delete item.disposes;\n }\n }\n\n #cleanUpNodes(nodes: Set<RenderAbstract | RenderBrick>) {\n for (const node of nodes) {\n delete node.child;\n delete node.sibling;\n delete (node as Partial<RenderChildNode>).return;\n node.disposed = true;\n if (node.tag === RenderTag.BRICK) {\n delete node.element;\n delete (node as Partial<RenderBrick>).runtimeContext;\n }\n Object.freeze(node);\n }\n }\n\n #initializeRerenderBricks(bricks: Set<RenderBrick>): void {\n const mountEvent = new CustomEvent(\"mount\");\n for (const { brick, handlers } of this.#memoizedLifeCycle.onMount) {\n if (bricks.has(brick)) {\n listenerFactory(handlers, brick.runtimeContext, brick)(mountEvent);\n }\n }\n\n for (const { brick, handlers: conf } of this.#memoizedLifeCycle\n .onScrollIntoView) {\n if (bricks.has(brick)) {\n this.#addObserver(brick, conf);\n }\n }\n }\n\n reRender(\n returnNode: RenderReturnNode,\n node: RenderChildNode,\n oldNode: RenderChildNode\n ) {\n // istanbul ignore next: defensive check\n if (returnNode.tag !== RenderTag.ROOT && returnNode.disposed) {\n return;\n }\n const [prevLastNormal, prevLastPortal] = findLastChildNodes(oldNode);\n const insertBeforeChild =\n (prevLastNormal\n ? prevLastNormal.element?.nextSibling\n : findNextSiblingNode(oldNode, false)?.element) ?? null;\n const insertPortalBeforeChildCandidates: ChildNode[] = [];\n let nextSibling = prevLastPortal\n ? prevLastPortal?.element?.nextSibling\n : findNextSiblingNode(oldNode, true)?.element;\n while (nextSibling) {\n insertPortalBeforeChildCandidates.push(nextSibling);\n // Collect all portal bricks from useBrick, until found a normal portal\n // brick other than from useBrick.\n // Because useBrick could be removed during unmount.\n if (\n !(nextSibling instanceof HTMLElement && nextSibling.tagName === \"DIV\")\n ) {\n break;\n }\n nextSibling = nextSibling.nextSibling;\n }\n\n // Figure out the unchanged prev sibling and next sibling\n let prevSibling: RenderChildNode | undefined;\n let current = returnNode.child;\n while (current && current !== oldNode) {\n if (current.sibling === oldNode) {\n prevSibling = current;\n break;\n }\n current = current.sibling;\n }\n\n const fragment = document.createDocumentFragment();\n const portalFragment = document.createDocumentFragment();\n const renderRoot: RenderRoot = {\n tag: RenderTag.ROOT,\n container: fragment,\n createPortal: portalFragment,\n child: node,\n };\n\n // Override `return`\n current = node;\n while (current) {\n current.return = renderRoot;\n current = current.sibling;\n }\n\n // Unmount previous brick and abstract nodes, including their descendants\n const [removeBricks, removeAbstracts] =\n getContainedBrickAndAbstractNodes(oldNode);\n this.#unmountBricks(removeBricks);\n this.#unmountAbstracts(removeAbstracts);\n\n mountTree(renderRoot);\n\n // Connect back\n if (prevSibling) {\n prevSibling.sibling = node;\n } else {\n returnNode.child = node;\n }\n node.sibling = oldNode.sibling;\n\n this.#cleanUpNodes(removeAbstracts);\n this.#cleanUpNodes(removeBricks);\n\n // Resume `return`\n current = node;\n while (current) {\n current.return = returnNode;\n current = current.sibling;\n }\n\n if (fragment.hasChildNodes()) {\n const entityReturnNode = getEntityReturnNode(returnNode);\n if (entityReturnNode.tag === RenderTag.ROOT) {\n entityReturnNode.container?.insertBefore(fragment, insertBeforeChild);\n } else {\n entityReturnNode.element?.insertBefore(fragment, insertBeforeChild);\n }\n }\n\n if (portalFragment.hasChildNodes()) {\n let root: RenderNode | undefined = node;\n while (root && root.return) {\n root = root.return;\n }\n // istanbul ignore next\n if (root?.tag !== RenderTag.ROOT) {\n throw new Error(\n \"Cannot find render root node. This is a bug of Brick Next, please report it.\"\n );\n }\n const portal =\n typeof root.createPortal === \"function\"\n ? root.createPortal()\n : root.createPortal;\n let insertPortalBeforeChild: ChildNode | null = null;\n for (const candidate of insertPortalBeforeChildCandidates) {\n // Those candidates from useBrick could be removed during unmount.\n // So we need to check if they are still in the portal.\n if (portal.contains(candidate)) {\n insertPortalBeforeChild = candidate;\n break;\n }\n }\n portal.insertBefore(portalFragment, insertPortalBeforeChild);\n }\n\n const [newBricks] = getContainedBrickAndAbstractNodes(node);\n this.#initializeRerenderBricks(newBricks);\n }\n\n dispose(): void {\n for (const list of Object.values(this.#memoizedLifeCycle)) {\n list.length = 0;\n }\n for (const list of this.#observers.values()) {\n for (const observer of list) {\n observer.disconnect();\n }\n list.length = 0;\n }\n this.#observers.clear();\n if (this.#mediaListener) {\n mediaEventTarget.removeEventListener(\"change\", this.#mediaListener);\n this.#mediaListener = undefined;\n }\n this.#arbitraryLifeCycle.clear();\n this.#incrementalRenderStates.clear();\n this.#memoizedMenuRequestNodeMap = undefined;\n }\n\n // Note: no `onScrollIntoView` and `onMessage`\n #dispatchGeneralLifeCycle(\n type:\n | \"onBeforePageLoad\"\n | \"onPageLoad\"\n | \"onPageLeave\"\n | \"onBeforePageLeave\"\n | \"onAnchorLoad\"\n | \"onAnchorUnload\"\n | \"onMediaChange\"\n | \"onMessageClose\"\n | \"onMount\"\n | \"onUnmount\",\n event: Event\n ): void {\n // istanbul ignore next\n if (\n process.env.NODE_ENV === \"development\" &&\n this.scope === \"fragment\" &&\n pageOnlyLifeCycles.includes(type as \"onPageLoad\")\n ) {\n throw new Error(\n `\\`lifeCycle.${type}\\` cannot be used in ${this.scope}.\\nThis is a bug of Brick Next, please report it.`\n );\n }\n for (const { brick, handlers } of this.#memoizedLifeCycle[type]) {\n listenerFactory(handlers, brick.runtimeContext, brick)(event);\n }\n const arbitraryCallbacks = this.#arbitraryLifeCycle.get(type);\n if (arbitraryCallbacks) {\n for (const fn of arbitraryCallbacks) {\n fn();\n }\n }\n }\n\n dispatchBeforePageLoad(): void {\n this.#dispatchGeneralLifeCycle(\n \"onBeforePageLoad\",\n new CustomEvent(\"page.beforeLoad\")\n );\n }\n\n dispatchPageLoad(): void {\n const event = new CustomEvent(\"page.load\");\n this.#dispatchGeneralLifeCycle(\"onPageLoad\", event);\n // Currently only for e2e testing\n window.dispatchEvent(event);\n }\n\n dispatchBeforePageLeave(detail: {\n location?: NextLocation;\n action?: Action;\n }): void {\n this.#dispatchGeneralLifeCycle(\n \"onBeforePageLeave\",\n new CustomEvent(\"page.beforeLeave\", { detail })\n );\n }\n\n dispatchPageLeave(): void {\n this.#dispatchGeneralLifeCycle(\n \"onPageLeave\",\n new CustomEvent(\"page.leave\")\n );\n }\n\n dispatchAnchorLoad(): void {\n const { hash } = getHistory().location;\n if (hash && hash !== \"#\") {\n this.#dispatchGeneralLifeCycle(\n \"onAnchorLoad\",\n new CustomEvent(\"anchor.load\", {\n detail: {\n hash,\n anchor: hash.substring(1),\n },\n })\n );\n } else {\n this.#dispatchGeneralLifeCycle(\n \"onAnchorUnload\",\n new CustomEvent(\"anchor.unload\")\n );\n }\n }\n\n initializeScrollIntoView(): void {\n for (const { brick, handlers: conf } of this.#memoizedLifeCycle\n .onScrollIntoView) {\n this.#addObserver(brick, conf);\n }\n }\n\n #addObserver(brick: RenderBrick, conf: ScrollIntoViewConf) {\n const threshold = conf.threshold ?? 0.1;\n const observer = new IntersectionObserver(\n (entries, observer) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n if (entry.intersectionRatio >= threshold) {\n listenerFactory(\n conf.handlers,\n brick.runtimeContext,\n brick\n )(new CustomEvent(\"scroll.into.view\"));\n observer.disconnect();\n }\n }\n });\n },\n {\n threshold,\n }\n );\n observer.observe(brick.element!);\n let list = this.#observers.get(brick);\n if (!list) {\n list = [];\n this.#observers.set(brick, list);\n }\n list.push(observer);\n }\n\n initializeMediaChange(): void {\n this.#mediaListener = (event) => {\n this.#dispatchGeneralLifeCycle(\n \"onMediaChange\",\n new CustomEvent(\"media.change\", {\n detail: getReadOnlyProxy((event as CustomEvent<Media>).detail),\n })\n );\n };\n mediaEventTarget.addEventListener(\"change\", this.#mediaListener);\n }\n\n initializeMessageDispatcher(): void {\n for (const { brick, handlers: confList } of this.#memoizedLifeCycle\n .onMessage) {\n for (const conf of ([] as MessageConf[]).concat(confList)) {\n hooks?.messageDispatcher?.onMessage(conf.channel, (detail) => {\n listenerFactory(\n conf.handlers,\n brick.runtimeContext,\n brick\n )(new CustomEvent(\"message.push\", { detail }));\n });\n }\n }\n\n hooks?.messageDispatcher?.onClose(() => {\n this.#dispatchGeneralLifeCycle(\n \"onMessageClose\",\n new CustomEvent(\"message.close\")\n );\n });\n }\n\n dispatchOnMount(): void {\n this.#dispatchGeneralLifeCycle(\"onMount\", new CustomEvent(\"mount\"));\n }\n\n dispatchOnUnmount(): void {\n this.#dispatchGeneralLifeCycle(\"onUnmount\", new CustomEvent(\"unmount\"));\n }\n}\n\n/** Find the last normal and portal child nodes of the given node. */\nfunction findLastChildNodes(\n node: RenderChildNode | undefined\n): [lastNormal: RenderBrick | undefined, lastPortal: RenderBrick | undefined] {\n let lastNormal: RenderBrick | undefined;\n let lastPortal: RenderBrick | undefined;\n let current: RenderChildNode | undefined = node;\n let level = 0;\n while (current) {\n if (current.tag === RenderTag.BRICK) {\n if (current.portal) {\n lastPortal = current;\n } else {\n lastNormal = current;\n }\n } else if (current.child && current.tag === RenderTag.ABSTRACT) {\n // Only traverse down abstract nodes\n current = current.child;\n level++;\n continue;\n }\n // Level > 0 means we are traversing down abstract nodes.\n // But we do not traverse sibling nodes of the given node.\n if (level <= 0) {\n break;\n }\n if (current.sibling) {\n current = current.sibling;\n } else {\n // After traversing down abstract nodes, we need to traverse up to find the next sibling.\n let currentReturn: RenderReturnNode | null | undefined = current.return;\n level--;\n while (currentReturn) {\n if (currentReturn.sibling) {\n break;\n }\n currentReturn = currentReturn.return;\n level--;\n }\n if (level <= 0) {\n // Do not traverse up more than the given node.\n break;\n }\n current = currentReturn?.sibling;\n }\n }\n return [lastNormal, lastPortal];\n}\n\n/** Find the normal or portal sibling node next to the given node (in DOM). */\nfunction findNextSiblingNode(\n node: RenderChildNode | undefined,\n portal: boolean\n): RenderBrick | undefined {\n let current = node;\n while (current) {\n if (\n current !== node &&\n current.tag === RenderTag.BRICK &&\n (portal ? current.portal : !current.portal)\n ) {\n return current;\n }\n if (\n current !== node &&\n current.child &&\n current.tag === RenderTag.ABSTRACT\n ) {\n // Traverse down sibling abstract nodes\n current = current.child;\n } else if (current.sibling) {\n current = current.sibling;\n } else {\n // Traverse up abstract nodes to find the next sibling in DOM\n let currentReturn: RenderReturnNode | null | undefined = current.return;\n while (currentReturn) {\n if (currentReturn.tag !== RenderTag.ABSTRACT) {\n // End the loop when encounter a non-abstract return node,\n // it means we can't find the target sibling node.\n return;\n }\n if (currentReturn.sibling) {\n break;\n }\n currentReturn = currentReturn.return;\n }\n current = currentReturn?.sibling;\n }\n }\n}\n\nfunction getContainedBrickAndAbstractNodes(\n node: RenderChildNode\n): [bricks: Set<RenderBrick>, abstracts: Set<RenderAbstract>] {\n const bricks = new Set<RenderBrick>();\n const abstracts = new Set<RenderAbstract>();\n let current: RenderNode | undefined = node;\n while (current) {\n if (current.tag === RenderTag.BRICK) {\n bricks.add(current);\n } else if (current.tag === RenderTag.ABSTRACT) {\n abstracts.add(current);\n }\n if (current.child) {\n current = current.child;\n } else if (current === node) {\n // End the loop when encounter the original node.\n break;\n } else if (current.sibling) {\n current = current.sibling;\n } else {\n let currentReturn: RenderReturnNode | null | undefined = current.return;\n while (currentReturn) {\n if (currentReturn === node) {\n // End the loop when encounter the original node.\n return [bricks, abstracts];\n }\n if (currentReturn.sibling) {\n break;\n }\n currentReturn = currentReturn.return;\n }\n current = currentReturn?.sibling;\n }\n }\n return [bricks, abstracts];\n}\n\nfunction getEntityReturnNode(node: RenderReturnNode): RenderRoot | RenderBrick {\n let current = node;\n while (current.tag === RenderTag.ABSTRACT) {\n current = current.return;\n // istanbul ignore next\n if (!current) {\n throw new Error(\n \"Cannot find render root node. This is a bug of Brick Next, please report it.\"\n );\n }\n }\n return current;\n}\n","import type { LegacyCompatibleRuntimeContext } from \"@next-core/inject\";\n\ntype RouteMatched = LegacyCompatibleRuntimeContext[\"match\"];\n\nconst routeMatchedMap = new Map<string, RouteMatched>();\n\nexport function setMatchedRoute(id: string, match: RouteMatched): void {\n routeMatchedMap.set(id, match);\n}\n\nexport function getMatchedRoute(id: string): RouteMatched {\n return routeMatchedMap.get(id);\n}\n\nexport function clearMatchedRoutes(): void {\n return routeMatchedMap.clear();\n}\n","import { get, set } from \"lodash\";\nimport { _internalApiGetRuntimeContext } from \"./Runtime.js\";\nimport { computeRealValue } from \"./compute/computeRealValue.js\";\nimport {\n getV2RuntimeFromDll,\n type LegacyGeneralTransform,\n type LegacyTransformMap,\n} from \"../getV2RuntimeFromDll.js\";\n\n/** For v2 compatibility of `doTransform` from brick-kit. */\nexport function legacyDoTransform(\n data: unknown,\n to: unknown,\n options?: unknown\n) {\n const v2Kit = getV2RuntimeFromDll();\n if (v2Kit) {\n return v2Kit.doTransform(data, to, options);\n }\n if (options) {\n throw new Error(\"Legacy doTransform does not support options in v3\");\n }\n return computeRealValue(\n to,\n {\n ..._internalApiGetRuntimeContext()!,\n data,\n },\n {\n noInject: true,\n }\n );\n}\n\n/** For v2 compatibility of `transformProperties` from brick-kit. */\nexport function legacyTransformProperties(\n props: Record<string, unknown>,\n data: unknown,\n to: LegacyGeneralTransform,\n from?: string | string[],\n mapArray?: boolean | \"auto\",\n options?: unknown\n): Record<string, unknown> {\n const v2Kit = getV2RuntimeFromDll();\n if (v2Kit) {\n return v2Kit.transformProperties(props, data, to, from, mapArray, options);\n }\n if (options) {\n throw new Error(\n \"Legacy transformProperties does not support options in v3\"\n );\n }\n\n const result = preprocessTransformProperties(data, to, from, mapArray);\n for (const [propName, propValue] of Object.entries(result)) {\n set(props, propName, propValue);\n }\n return props;\n}\n\n/** For v2 compatibility of `transformIntermediateData` from brick-kit. */\nexport function legacyTransformIntermediateData(\n data: unknown,\n to: LegacyGeneralTransform,\n from?: string | string[],\n mapArray?: boolean | \"auto\"\n): unknown {\n const intermediateData = from ? get(data, from) : data;\n if (!to) {\n return intermediateData;\n }\n return legacyTransformProperties(\n {},\n intermediateData,\n to,\n undefined,\n mapArray\n );\n}\n\nfunction preprocessTransformProperties(\n data: unknown,\n to: LegacyGeneralTransform,\n from?: string | string[],\n mapArray?: boolean | \"auto\"\n): Record<string, unknown> {\n const props: Record<string, unknown> = {};\n const processedData = from ? get(data, from) : data;\n\n if (Array.isArray(to)) {\n for (const item of to) {\n pipeableTransform(\n props,\n processedData,\n item.to,\n item.from,\n item.mapArray\n );\n }\n } else {\n pipeableTransform(props, processedData, to, undefined, mapArray);\n }\n return props;\n}\n\nfunction pipeableTransform(\n props: Record<string, unknown>,\n data: unknown,\n to: string | LegacyTransformMap | null | undefined,\n from?: string | string[],\n mapArray?: boolean | \"auto\"\n): void {\n if (!to) {\n // Do nothing if `to` is falsy.\n return;\n }\n\n let fromData = from ? get(data, from) : data;\n\n let isArray = Array.isArray(fromData);\n if (!isArray && mapArray === true) {\n isArray = true;\n fromData = [fromData];\n } else if (isArray && mapArray === false) {\n isArray = false;\n }\n\n if (typeof to === \"string\") {\n props[to] = fromData;\n return;\n }\n\n for (const [transformedPropName, transformTo] of Object.entries(to)) {\n // If `fromData` is an array, mapping it's items.\n props[transformedPropName] = isArray\n ? (fromData as unknown[]).map((item) =>\n legacyDoTransform(item, transformTo)\n )\n : legacyDoTransform(fromData, transformTo);\n }\n}\n","import type {\n BrickConf,\n CustomTemplate,\n RouteConf,\n Storyboard,\n UseSingleBrickConf,\n RuntimeSnippet,\n ContextConf,\n BrickPackage,\n RouteConfOfBricks,\n} from \"@next-core/types\";\nimport { pick } from \"lodash\";\nimport {\n _internalApiGetRenderId,\n _internalApiGetRuntimeContext,\n _internalApiGetStoryboardInBootstrapData,\n getBrickPackages,\n} from \"./Runtime.js\";\nimport {\n createScopedRuntimeContext,\n postAsyncRender,\n renderBrick,\n} from \"./Renderer.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport type { DataStore } from \"./data/DataStore.js\";\nimport { resolveData } from \"./data/resolveData.js\";\nimport { asyncComputeRealValue } from \"./compute/computeRealValue.js\";\nimport type {\n DataValueOption,\n PreviewOption,\n PreviewStoryboardPatch,\n RenderRoot,\n RuntimeContext,\n DebugDataValue,\n RuntimeDataVale,\n RuntimeDataValueOption,\n RenderBrick,\n RenderChildNode,\n} from \"./interfaces.js\";\nimport { mountTree, unmountTree } from \"./mount.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { isStrictMode } from \"../isStrictMode.js\";\nimport { customTemplates } from \"../CustomTemplates.js\";\nimport { registerAppI18n } from \"./registerAppI18n.js\";\nimport { getTplStateStore } from \"./CustomTemplates/utils.js\";\nimport {\n loadBricksImperatively,\n loadEditorsImperatively,\n} from \"@next-core/loader\";\nimport { getMatchedRoute } from \"./routeMatchedMap.js\";\n\nexport type { DataValueOption, RuntimeContext };\n\nexport const symbolForRootRuntimeContext = Symbol.for(\"root.runtimeContext\");\n\nexport interface RuntimeUseBrickConfWithRootSymbols extends UseSingleBrickConf {\n [symbolForRootRuntimeContext]?: RuntimeContext;\n}\n\nexport interface RenderUseBrickResult {\n tagName: string | null;\n renderRoot: RenderRoot;\n rendererContext: RendererContext;\n scopedStores: DataStore<\"STATE\" | \"FORM_STATE\">[];\n}\n\nexport async function renderUseBrick(\n useBrick: RuntimeUseBrickConfWithRootSymbols,\n data: unknown,\n errorBoundary?: boolean\n): Promise<RenderUseBrickResult> {\n const [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope] =\n createScopedRuntimeContext({\n ...(useBrick[symbolForRootRuntimeContext] ??\n _internalApiGetRuntimeContext()!),\n data,\n pendingPermissionsPreCheck: [],\n });\n\n scopedRuntimeContext.inUseBrick = true;\n scopedRuntimeContext.tplStateStoreMap ??= new Map();\n scopedRuntimeContext.formStateStoreMap ??= new Map();\n\n const rendererContext = new RendererContext(\"fragment\");\n\n const renderRoot: RenderRoot = {\n tag: RenderTag.ROOT,\n // Will set during `mountUseBrick`\n createPortal: null!,\n };\n\n const strict = isStrictMode();\n\n const output = await renderBrick(\n renderRoot,\n strict && !errorBoundary\n ? useBrick\n : {\n errorBoundary,\n ...useBrick,\n },\n scopedRuntimeContext,\n rendererContext,\n [],\n {}\n );\n\n const scopedStores = [...tplStateStoreScope, ...formStateStoreScope];\n\n await postAsyncRender(output, scopedRuntimeContext, scopedStores);\n\n let brickNode: RenderBrick | undefined;\n let currentNode: RenderChildNode | undefined = output.node;\n while (currentNode) {\n if (currentNode.tag === RenderTag.BRICK) {\n brickNode = currentNode;\n break;\n }\n currentNode = currentNode.child;\n }\n\n if (brickNode?.portal) {\n throw new Error(\"The root brick of useBrick cannot be a portal brick\");\n }\n\n renderRoot.child = output.node;\n\n const tagName = brickNode ? brickNode.type : null;\n\n return { tagName, renderRoot, rendererContext, scopedStores };\n}\n\nexport interface MountUseBrickResult {\n portal?: HTMLElement;\n}\n\nexport function mountUseBrick(\n { renderRoot, rendererContext, scopedStores }: RenderUseBrickResult,\n element: HTMLElement\n): MountUseBrickResult {\n let portal: HTMLElement | undefined;\n renderRoot.createPortal = () => {\n const portalRoot = document.querySelector(\n \"#portal-mount-point\"\n ) as HTMLElement;\n portal = document.createElement(\"div\");\n portalRoot.appendChild(portal);\n return portal;\n };\n\n mountTree(renderRoot, element);\n\n rendererContext.dispatchOnMount();\n rendererContext.initializeScrollIntoView();\n rendererContext.initializeMediaChange();\n rendererContext.initializeMessageDispatcher();\n\n for (const store of scopedStores) {\n store.mountAsyncData();\n }\n\n return {\n portal,\n };\n}\n\nexport function unmountUseBrick(\n { rendererContext }: RenderUseBrickResult,\n mountResult: MountUseBrickResult\n): void {\n // if (mountResult.mainBrick) {\n // mountResult.mainBrick.unmount();\n // }\n if (mountResult.portal) {\n unmountTree(mountResult.portal);\n mountResult.portal.remove();\n }\n rendererContext.dispatchOnUnmount();\n rendererContext.dispose();\n}\n\nexport function updateStoryboard(\n appId: string,\n storyboardPatch: Partial<Storyboard>\n): void {\n const storyboard = _internalApiGetStoryboardInBootstrapData(appId)!;\n Object.assign(storyboard, {\n ...storyboardPatch,\n meta: {\n // Keep runtime fields such as `injectMenus`\n ...storyboard.meta,\n ...storyboardPatch.meta,\n },\n $$fulfilling: null,\n $$fulfilled: true,\n $$registerCustomTemplateProcessed: false,\n });\n registerAppI18n(storyboard);\n}\n\nexport function updateStoryboardByRoute(appId: string, newRoute: RouteConf) {\n const storyboard = _internalApiGetStoryboardInBootstrapData(appId)!;\n let matched = false;\n\n function matchRoute(route: RouteConf) {\n return route.path === newRoute.path && !route.exact === !newRoute.exact;\n }\n\n function replaceRoutes(routes: RouteConf[]) {\n routes.forEach((route, index) => {\n if (route.type === \"routes\") {\n replaceRoutes(route.routes);\n } else {\n if (matchRoute(route)) {\n matched = true;\n routes[index] = newRoute;\n } else if (Array.isArray((route as RouteConfOfBricks).bricks)) {\n replaceBricks((route as RouteConfOfBricks).bricks);\n }\n }\n });\n }\n\n function replaceBricks(bricks: BrickConf[]) {\n bricks.forEach((brick) => {\n if (brick.slots) {\n for (const slotConf of Object.values(brick.slots)) {\n if (slotConf.type === \"routes\") {\n replaceRoutes(slotConf.routes);\n } else {\n replaceBricks(slotConf.bricks);\n }\n }\n }\n });\n }\n\n replaceRoutes(storyboard.routes);\n\n if (!matched) {\n storyboard.routes.unshift(newRoute);\n }\n}\n\nexport function updateStoryboardByTemplate(\n appId: string,\n newTemplate: CustomTemplate,\n settings: unknown\n): void {\n const tplName = `${appId}.${newTemplate.name}`;\n // customTemplateRegistry.delete(tplName);\n customTemplates.define(tplName, {\n bricks: newTemplate.bricks,\n proxy: newTemplate.proxy,\n state: newTemplate.state,\n });\n updateTemplatePreviewSettings(appId, newTemplate.name, settings);\n}\n\nexport function updateTemplatePreviewSettings(\n appId: string,\n templateId: string,\n settings?: unknown\n): void {\n _updatePreviewSettings(\n appId,\n `\\${APP.homepage}/_dev_only_/template-preview/${templateId}`,\n [\n {\n brick: templateId,\n ...pick(\n settings,\n \"properties\",\n \"events\",\n \"lifeCycle\",\n \"context\",\n \"slots\",\n \"children\"\n ),\n },\n ]\n );\n}\n\nfunction getSnippetPreviewPath(snippetId: string): string {\n return `\\${APP.homepage}/_dev_only_/snippet-preview/${snippetId}`;\n}\n\nexport function updateStoryboardBySnippet(\n appId: string,\n snippetData: {\n snippetId: string;\n bricks?: BrickConf[];\n context?: ContextConf[];\n }\n): void {\n _updatePreviewSettings(\n appId,\n getSnippetPreviewPath(snippetData.snippetId),\n snippetData.bricks?.length ? snippetData.bricks : [{ brick: \"span\" }],\n snippetData.context\n );\n}\n\nexport const updateSnippetPreviewSettings = updateStoryboardBySnippet;\n\nfunction _updatePreviewSettings(\n appId: string,\n path: string,\n bricks: BrickConf[],\n context?: ContextConf[]\n) {\n const { routes } = _internalApiGetStoryboardInBootstrapData(appId)!;\n const previewRouteIndex = routes.findIndex((route) => route.path === path);\n const newPreviewRoute: RouteConf = {\n path,\n bricks,\n context,\n menu: false,\n exact: true,\n };\n if (previewRouteIndex === -1) {\n routes.unshift(newPreviewRoute);\n } else {\n routes.splice(previewRouteIndex, 1, newPreviewRoute);\n }\n}\n\nexport function getContextValue(\n name: string,\n { tplStateStoreId }: DataValueOption\n): unknown {\n const runtimeContext = _internalApiGetRuntimeContext()!;\n\n if (tplStateStoreId) {\n const tplStateStore = getTplStateStore(\n {\n ...runtimeContext,\n tplStateStoreId,\n },\n \"STATE\"\n );\n return tplStateStore.getValue(name);\n }\n\n return runtimeContext.ctxStore.getValue(name);\n}\n\nexport function getAllContextValues({\n tplStateStoreId,\n}: DataValueOption): Record<string, unknown> {\n const runtimeContext = _internalApiGetRuntimeContext()!;\n\n if (tplStateStoreId) {\n const tplStateStore = getTplStateStore(\n {\n ...runtimeContext,\n tplStateStoreId,\n },\n \"STATE\"\n );\n return tplStateStore.getAllValues();\n }\n\n return runtimeContext.ctxStore.getAllValues();\n}\n\nexport { getBrickPackages };\n\nexport function getBrickPackagesById(id: string) {\n return getBrickPackages().find((pkg) =>\n pkg.id ? pkg.id === id : pkg.filePath.startsWith(`${id}/`)\n );\n}\n\n/**\n * Support loading v3 bricks only.\n */\nexport function loadBricks(bricks: string[]) {\n return loadBricksImperatively(bricks, getBrickPackages());\n}\n\n/**\n * Try the brick packages passed in, before using from bootstrap.\n */\nexport function loadEditors(\n editors: string[] | Set<string>,\n brickPackages?: BrickPackage[]\n) {\n return loadEditorsImperatively(editors, brickPackages ?? getBrickPackages());\n}\n\nexport function getRenderId() {\n return _internalApiGetRenderId();\n}\n\nexport async function getAddedContracts(\n storyboardPatch: PreviewStoryboardPatch,\n { appId, updateStoryboardType, collectUsedContracts }: PreviewOption\n): Promise<string[]> {\n const storyboard = _internalApiGetStoryboardInBootstrapData(appId);\n let updatedStoryboard;\n\n // 拿到更新部分的 storyboard 配置,然后扫描一遍,找到新增的 contracts\n if (updateStoryboardType === \"route\") {\n updatedStoryboard = {\n routes: [storyboardPatch as RouteConf],\n } as Storyboard;\n } else if (updateStoryboardType === \"template\") {\n updatedStoryboard = {\n meta: {\n customTemplates: [storyboardPatch as CustomTemplate],\n },\n } as Storyboard;\n } else if (updateStoryboardType === \"snippet\") {\n // snippet 是放在挂载 route 里预览,通过 previewPath 拿到当前修改 route\n const snippetPreviewPath = getSnippetPreviewPath(\n (storyboardPatch as RuntimeSnippet).snippetId\n );\n const currentRoute = storyboard?.routes?.find(\n (route) => route.path === snippetPreviewPath\n );\n\n updatedStoryboard = {\n routes: [currentRoute],\n } as Storyboard;\n }\n\n const addedContracts: string[] = [];\n\n if (updatedStoryboard && collectUsedContracts) {\n const contractApis = await collectUsedContracts(updatedStoryboard);\n\n contractApis.forEach((api: string) => {\n const [_, namespaceId, name] = api.match(\n /(.*)@(.*):\\d\\.\\d\\.\\d/\n ) as string[];\n\n if (\n !storyboard?.meta?.contracts?.some(\n (contract) =>\n contract.namespaceId === namespaceId && contract.name === name\n )\n ) {\n addedContracts.push(api);\n }\n });\n }\n\n return addedContracts;\n}\n\nexport async function debugDataValue(\n debugData: DebugDataValue,\n { tplStateStoreId, routeId }: DataValueOption\n): Promise<any> {\n const runtimeContext = {\n ..._internalApiGetRuntimeContext()!,\n tplStateStoreId,\n match: getMatchedRoute(routeId as string),\n };\n\n if (debugData.resolve) {\n return resolveData(debugData.resolve!, runtimeContext, { cache: \"reload\" });\n }\n\n return asyncComputeRealValue(debugData.value, runtimeContext);\n}\n\nexport function getLegalRuntimeValue(\n options?: RuntimeDataValueOption\n): RuntimeDataVale {\n const runtimeContext = _internalApiGetRuntimeContext();\n\n return {\n app: runtimeContext?.overrideApp ?? runtimeContext?.app,\n location: pick(location, [\"href\", \"origin\", \"hostname\", \"host\"]),\n ...pick(runtimeContext, [\"query\", \"sys\"]),\n match: getMatchedRoute(options?.routeId as string),\n } as RuntimeDataVale;\n}\n\nexport {\n setRealTimeDataInspectRoot,\n addRealTimeDataInspectHook,\n} from \"./data/realTimeDataInspect.js\";\n\nexport {\n legacyDoTransform,\n legacyTransformProperties,\n legacyTransformIntermediateData,\n} from \"./legacy_transform.js\";\n","import { getAllContextValues } from \"../secret_internals.js\";\n\nexport interface RealTimeDataInspectRoot {\n tplStateStoreId?: string;\n}\n\nexport type RealTimeDataInspectHook = (\n detail: RealTimeDataInspectDetail\n) => void;\n\nexport type RealTimeDataInspectDetail =\n | RealTimeDataInspectUpdateDetail\n | RealTimeDataInspectInitializeDetail;\n\nexport interface RealTimeDataInspectUpdateDetail {\n changeType: \"update\";\n tplStateStoreId?: string;\n detail: {\n name: string;\n value: unknown;\n };\n}\n\nexport interface RealTimeDataInspectInitializeDetail {\n changeType: \"initialize\";\n tplStateStoreId?: string;\n detail: {\n data: Record<string, unknown>;\n };\n}\n\nexport let realTimeDataInspectRoot: RealTimeDataInspectRoot | undefined;\n\nexport const RealTimeDataInspectHooks: RealTimeDataInspectHook[] = [];\n\nexport function setRealTimeDataInspectRoot(root: RealTimeDataInspectRoot) {\n realTimeDataInspectRoot = root;\n\n const data = getAllContextValues({ tplStateStoreId: root.tplStateStoreId });\n callRealTimeDataInspectHooks({\n changeType: \"initialize\",\n tplStateStoreId: root.tplStateStoreId,\n detail: { data },\n });\n}\n\nexport function addRealTimeDataInspectHook(hook: RealTimeDataInspectHook) {\n RealTimeDataInspectHooks.push(hook);\n}\n\nexport function callRealTimeDataInspectHooks(\n detail: RealTimeDataInspectDetail\n) {\n setTimeout(() => {\n for (const hook of RealTimeDataInspectHooks) {\n try {\n hook(detail);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\n `RealTimeDataInspectHook failed (${detail.changeType}):`,\n error\n );\n }\n }\n });\n}\n","import type {\n BatchUpdateContextItem,\n BrickEventHandlerCallback,\n ContextConf,\n ContextResolveTriggerBrickLifeCycle,\n RouteConf,\n} from \"@next-core/types\";\nimport { hasOwnProperty, isObject } from \"@next-core/utils/general\";\nimport { strictCollectMemberUsage } from \"@next-core/utils/storyboard\";\nimport EventTarget from \"@ungap/event-target\";\nimport { pull } from \"lodash\";\nimport { eventCallbackFactory, listenerFactory } from \"../bindListeners.js\";\nimport { asyncCheckIf, checkIf } from \"../compute/checkIf.js\";\nimport {\n asyncComputeRealValue,\n computeRealValue,\n} from \"../compute/computeRealValue.js\";\nimport { ResolveOptions, resolveData } from \"./resolveData.js\";\nimport { resolveDataStore } from \"./resolveDataStore.js\";\nimport type {\n AsyncPropertyEntry,\n RuntimeBrick,\n RuntimeContext,\n} from \"../interfaces.js\";\nimport { handleHttpError } from \"../../handleHttpError.js\";\nimport type { RendererContext } from \"../RendererContext.js\";\nimport { computePropertyValue } from \"../compute/computeRealProperties.js\";\nimport { _internalApiGetRenderId } from \"../Runtime.js\";\nimport {\n callRealTimeDataInspectHooks,\n realTimeDataInspectRoot,\n} from \"./realTimeDataInspect.js\";\nimport { isStrictMode } from \"../../isStrictMode.js\";\n\nconst supportContextResolveTriggerBrickLifeCycle = [\n \"onBeforePageLoad\",\n \"onPageLoad\",\n \"onBeforePageLeave\",\n \"onPageLeave\",\n \"onAnchorLoad\",\n \"onAnchorUnload\",\n] as ContextResolveTriggerBrickLifeCycle[];\n\nexport type DataStoreType = \"CTX\" | \"STATE\" | \"FORM_STATE\";\n\nexport interface DataStoreItem {\n name: string;\n value: unknown;\n eventTarget: EventTarget;\n useResolve?: boolean;\n loaded?: boolean;\n loading?: Promise<unknown>;\n load?: (options?: ResolveOptions) => Promise<unknown>;\n async?: boolean;\n asyncMounted?: boolean;\n deps: string[];\n}\n\ntype PendingStackItem = ReturnType<typeof resolveDataStore>;\n\nexport class DataStore<T extends DataStoreType = \"CTX\"> {\n private readonly type: T;\n private readonly data = new Map<string, DataStoreItem>();\n private readonly changeEventType: string;\n private readonly pendingStack: Array<PendingStackItem> = [];\n public readonly hostBrick?: RuntimeBrick;\n private readonly stateStoreId?: string;\n private batchUpdate = false;\n private batchUpdateContextsNames: string[] = [];\n private readonly rendererContext?: RendererContext;\n private routeMap = new WeakMap<RouteConf, Set<string>>();\n private routeStackMap = new WeakMap<RouteConf, Set<PendingStackItem>>();\n\n // 把 `rendererContext` 放在参数列表的最后,并作为可选,以减少测试文件的调整\n constructor(\n type: T,\n hostBrick?: RuntimeBrick,\n rendererContext?: RendererContext,\n stateStoreId?: string\n ) {\n this.type = type;\n this.changeEventType =\n this.type === \"FORM_STATE\"\n ? \"formstate.change\"\n : this.type === \"STATE\"\n ? \"state.change\"\n : \"context.change\";\n this.hostBrick = hostBrick;\n this.rendererContext = rendererContext;\n this.stateStoreId = stateStoreId;\n }\n\n has(name: string) {\n return this.data.has(name);\n }\n\n getAllValues(): Record<string, unknown> {\n return Object.fromEntries(\n [...this.data.entries()].map(([name, { value }]) => [name, value])\n );\n }\n\n getValue(name: string): unknown {\n return this.data.get(name)?.value;\n }\n\n private notifyRealTimeDataChange(name: string, value: unknown) {\n if (realTimeDataInspectRoot) {\n const { tplStateStoreId } = realTimeDataInspectRoot;\n if (\n tplStateStoreId\n ? this.type === \"STATE\" && this.stateStoreId === tplStateStoreId\n : this.type === \"CTX\"\n ) {\n callRealTimeDataInspectHooks({\n changeType: \"update\",\n tplStateStoreId,\n detail: {\n name,\n value,\n },\n });\n }\n }\n }\n\n private getAffectListByContext(name: string): string[] {\n const affectNames = [name];\n this.data.forEach((value, key) => {\n if (value.deps) {\n const isInDeps = value.deps.some((item) => affectNames.includes(item));\n isInDeps &&\n affectNames.push(key) &&\n affectNames.push(...this.getAffectListByContext(key));\n }\n });\n affectNames.shift();\n return [...new Set(affectNames)];\n }\n\n updateValues(\n values: BatchUpdateContextItem[],\n method: \"assign\" | \"replace\",\n argsFactory: (arg: unknown[]) => BatchUpdateContextItem\n ): void {\n this.batchUpdate = true;\n this.batchUpdateContextsNames = values.map((item) => item.name);\n if (\n [...new Set(this.batchUpdateContextsNames)].length !==\n this.batchUpdateContextsNames.length\n ) {\n throw new Error(`Batch update not allow to update same item`);\n }\n\n const updateContexts: Record<string, DataStoreItem> = {};\n const affectContexts: Record<string, DataStoreItem> = {};\n const affectDepsContextNames: string[] = [];\n\n values.forEach((arg) => {\n const { name, value } = argsFactory([arg]);\n const updateContextItem = this.data.get(name);\n affectDepsContextNames.push(...this.getAffectListByContext(name));\n updateContextItem && (updateContexts[name] = updateContextItem);\n this.updateValue(name as string, value, method);\n });\n\n affectDepsContextNames\n .filter((item) => !updateContexts[item])\n .forEach((name) => {\n const affectContextItem = this.data.get(name);\n affectContextItem && (affectContexts[name] = affectContextItem);\n });\n\n const triggerEvent = (contexts: Record<string, DataStoreItem>): void => {\n for (const key in contexts) {\n const context = contexts[key];\n context.eventTarget?.dispatchEvent(\n new CustomEvent(this.changeEventType, {\n detail: context.value,\n })\n );\n }\n };\n\n triggerEvent(updateContexts);\n triggerEvent(affectContexts);\n\n this.batchUpdate = false;\n\n return;\n }\n\n updateValue(\n name: string,\n value: unknown,\n method: \"assign\" | \"replace\" | \"refresh\" | \"load\" | \"set\",\n callback?: BrickEventHandlerCallback,\n callbackRuntimeContext?: RuntimeContext\n ): void {\n const item = this.data.get(name);\n if (!item) {\n throw new Error(`${this.type} '${name}' is not defined`);\n }\n\n if (method === \"refresh\" || method === \"load\") {\n if (!item.useResolve) {\n throw new Error(\n `You can not ${method} \"${this.type}.${name}\" which is not using resolve`\n );\n }\n\n let promise: Promise<unknown> | undefined;\n if (method === \"load\") {\n // Try to reuse previous request when calling `load`.\n if (item.loaded) {\n promise = Promise.resolve(item.value);\n } else if (item.loading) {\n promise = item.loading;\n }\n }\n\n const shouldDismiss = (error: unknown) => {\n // If render twice immediately, flow API contracts maybe cleared before\n // the second rendering, while the page load handlers of the first\n // rendering can't be cancelled, which throws `FlowApiNotFoundError`.\n // So we ignore error reporting for this case.\n let renderId: string | undefined;\n return (\n (error as Error)?.name === \"FlowApiNotFoundError\" &&\n !!(renderId = this.rendererContext?.renderId) &&\n renderId !== _internalApiGetRenderId()\n );\n };\n\n if (!promise) {\n promise = item.loading = item.load!({\n cache: method === \"load\" ? \"default\" : \"reload\",\n ...(value as ResolveOptions),\n });\n // Do not use the chained promise, since the callbacks need the original promise.\n promise.then(\n (val) => {\n this.finishLoad(item, val);\n },\n (err) => {\n // Let users override error handling.\n if (item.useResolve && !shouldDismiss(err) && !callback?.error) {\n handleHttpError(err);\n }\n }\n );\n }\n\n if (callback) {\n const callbackFactory = eventCallbackFactory(\n callback,\n callbackRuntimeContext!\n );\n\n promise.then(\n (val) => {\n callbackFactory(\"success\")({ value: val });\n callbackFactory(\"finally\")();\n },\n (err) => {\n if (!shouldDismiss(err) && callback.error) {\n callbackFactory(\"error\")(err);\n }\n callbackFactory(\"finally\")();\n }\n );\n }\n\n return;\n }\n\n if (method === \"replace\") {\n item.value = value;\n } else if (method === \"assign\") {\n if (isObject(item.value)) {\n Object.assign(item.value, value);\n } else {\n // eslint-disable-next-line no-console\n console.warn(\n `Non-object current value of \"${this.type}.${name}\" for \"context.assign\", try \"context.replace\" instead.`\n );\n item.value = value;\n }\n } else {\n // method === \"set\"\n // `context.set` and `state.set` is similar to React's setState,\n // which accepts either a value or an updater function.\n // And if the new value is the same as the current one, do nothing.\n let nextValue = value;\n if (typeof value === \"function\") {\n nextValue = (value as (prevState: unknown) => unknown)(item.value);\n }\n if (Object.is(item.value, nextValue)) {\n return;\n }\n item.value = nextValue;\n }\n\n if (this.batchUpdate) return;\n\n item.eventTarget.dispatchEvent(\n new CustomEvent(this.changeEventType, {\n detail: item.value,\n })\n );\n }\n\n private finishLoad(item: DataStoreItem, value: unknown) {\n if (!item.useResolve) {\n // This happens when a tracked conditional resolve switches from\n // resolve to fallback after an dep update triggered refresh but\n // before it's been resolved.\n return;\n }\n item.loaded = true;\n item.value = value;\n item.eventTarget.dispatchEvent(\n new CustomEvent(this.changeEventType, {\n detail: value,\n })\n );\n }\n\n define(\n dataConfs: ContextConf[] | undefined,\n runtimeContext: RuntimeContext,\n asyncHostPropertyEntries?: AsyncPropertyEntry[],\n routePath?: RouteConf[]\n ): void {\n if (Array.isArray(dataConfs) && dataConfs.length > 0) {\n const pending = resolveDataStore(\n dataConfs,\n (dataConf: ContextConf) =>\n this.resolve(\n dataConf,\n runtimeContext,\n asyncHostPropertyEntries,\n routePath\n ),\n this.type,\n isStrictMode(runtimeContext)\n );\n if (Array.isArray(routePath)) {\n for (const route of routePath) {\n const stack = this.routeStackMap.get(route);\n if (stack) {\n stack.add(pending);\n } else {\n this.routeStackMap.set(route, new Set([pending]));\n }\n }\n }\n this.pendingStack.push(pending);\n }\n }\n\n onChange(dataName: string, listener: EventListener): () => void {\n const eventTarget = this.data.get(dataName)?.eventTarget;\n eventTarget?.addEventListener(this.changeEventType, listener);\n return () => {\n eventTarget?.removeEventListener(this.changeEventType, listener);\n };\n }\n\n async waitFor(dataNames: string[] | Set<string>): Promise<void> {\n for (const { pendingContexts } of this.pendingStack) {\n await Promise.all(\n [...dataNames].map((ctx) => {\n const p = pendingContexts.get(ctx);\n return p;\n })\n );\n }\n }\n\n async waitForAll(): Promise<void> {\n for (const { pendingResult } of this.pendingStack) {\n await pendingResult;\n }\n }\n\n /**\n * After mount, dispatch the change event when an async data is loaded.\n *\n * If param `route` is present, handle data defined in that route (or its descendants) only.\n */\n mountAsyncData(route?: RouteConf) {\n this.data.forEach((item) => {\n if (item.async && (!route || this.routeMap.get(route)?.has(item.name))) {\n // istanbul ignore next\n if (item.asyncMounted) {\n // eslint-disable-next-line no-console\n console.error(\n `Async data \"${item.name}\" already mounted. This is a bug of Brick Next, please report it.`\n );\n return;\n }\n item.asyncMounted = true;\n // An async data always has `loading`\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n item.loading!.then((value) => {\n this.finishLoad(item, value);\n });\n }\n });\n }\n\n private async resolve(\n dataConf: ContextConf,\n runtimeContext: RuntimeContext,\n asyncHostPropertyEntries?: AsyncPropertyEntry[],\n routePath?: RouteConf[]\n ): Promise<boolean> {\n if (!(await asyncCheckIf(dataConf, runtimeContext))) {\n return false;\n }\n let value: unknown;\n if (\n asyncHostPropertyEntries &&\n (this.type === \"STATE\" ? dataConf.expose : this.type === \"FORM_STATE\")\n ) {\n value = await computePropertyValue(\n asyncHostPropertyEntries,\n dataConf.name\n );\n }\n let load: DataStoreItem[\"load\"];\n let loading: Promise<unknown> | undefined;\n let useResolve: boolean | undefined;\n let trackConditionalResolve: boolean | undefined;\n let resolvePolicy: \"eager\" | \"lazy\" | \"async\" | undefined;\n if (value === undefined) {\n if (dataConf.resolve) {\n const hasFallbackValue = hasOwnProperty(dataConf, \"value\");\n // Track conditional resolve only if all matches:\n // - Track enabled\n // - Has fallback value\n // - Referencing other data in `resolve.if`\n trackConditionalResolve =\n dataConf.track &&\n hasFallbackValue &&\n hasOwnProperty(dataConf.resolve, \"if\") &&\n strictCollectMemberUsage(dataConf.resolve.if, this.type).size > 0;\n const resolveConf = {\n transform: \"value\",\n ...dataConf.resolve,\n };\n useResolve = await asyncCheckIf(dataConf.resolve, runtimeContext);\n if (useResolve || trackConditionalResolve) {\n load = async (options) =>\n (\n (await resolveData(resolveConf, runtimeContext, {\n ...options,\n renderId: this.rendererContext?.renderId,\n })) as {\n value: unknown;\n }\n ).value;\n }\n if (useResolve) {\n // `async` take precedence over `lazy`\n resolvePolicy = dataConf.resolve.async\n ? \"async\"\n : dataConf.resolve.lazy\n ? \"lazy\"\n : \"eager\";\n if (resolvePolicy === \"eager\") {\n value = await load!();\n } else if (resolvePolicy === \"async\") {\n loading = load!();\n }\n } else if (!hasFallbackValue) {\n return false;\n }\n }\n if (\n (!useResolve || resolvePolicy !== \"eager\") &&\n dataConf.value !== undefined\n ) {\n // If the context has no resolve, just use its `value`.\n // Or if the resolve is ignored or lazy, use its `value` as a fallback.\n value = await asyncComputeRealValue(dataConf.value, runtimeContext);\n }\n }\n\n if (this.data.has(dataConf.name)) {\n throw new Error(\n `${this.type} '${dataConf.name}' has already been declared`\n );\n }\n\n const newData: DataStoreItem = {\n name: dataConf.name,\n value,\n // This is required for tracking context, even if no `onChange` is specified.\n eventTarget: new EventTarget(),\n useResolve,\n load,\n loaded: resolvePolicy === \"eager\",\n loading,\n async: resolvePolicy === \"async\",\n deps: [],\n };\n\n if (resolvePolicy === \"lazy\") {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const { trigger } = dataConf.resolve!;\n if (\n trigger &&\n supportContextResolveTriggerBrickLifeCycle.includes(trigger)\n ) {\n this.rendererContext?.registerArbitraryLifeCycle(trigger, () => {\n this.updateValue(dataConf.name, undefined, \"load\");\n });\n }\n }\n\n if (dataConf.onChange) {\n newData.eventTarget.addEventListener(\n this.changeEventType,\n listenerFactory(dataConf.onChange, runtimeContext)\n );\n }\n\n if (dataConf.track) {\n const deps = strictCollectMemberUsage(\n trackConditionalResolve\n ? [dataConf.resolve, dataConf.value]\n : load\n ? dataConf.resolve\n : dataConf.value,\n this.type\n );\n !load && (newData.deps = [...deps]);\n for (const dep of deps) {\n this.onChange(\n dep,\n this.batchAddListener(() => {\n newData.useResolve = trackConditionalResolve\n ? checkIf(dataConf.resolve!, runtimeContext)\n : !!load;\n if (newData.useResolve) {\n this.updateValue(dataConf.name, { cache: \"default\" }, \"refresh\");\n } else {\n this.updateValue(\n dataConf.name,\n computeRealValue(dataConf.value, runtimeContext),\n \"replace\"\n );\n }\n }, dataConf)\n );\n }\n }\n\n newData.eventTarget.addEventListener(this.changeEventType, (e) => {\n this.notifyRealTimeDataChange(dataConf.name, (e as CustomEvent).detail);\n });\n\n this.data.set(dataConf.name, newData);\n\n if (Array.isArray(routePath)) {\n for (const route of routePath) {\n const names = this.routeMap.get(route);\n if (names) {\n names.add(dataConf.name);\n } else {\n this.routeMap.set(route, new Set([dataConf.name]));\n }\n }\n }\n\n return true;\n }\n\n /**\n * For sub-routes to be incrementally rendered,\n * dispose their data and pending tasks.\n */\n disposeDataInRoutes(routes: RouteConf[]) {\n for (const route of routes) {\n const names = this.routeMap.get(route);\n if (names !== undefined) {\n for (const name of names) {\n this.data.delete(name);\n }\n this.routeMap.delete(route);\n }\n const stack = this.routeStackMap.get(route);\n if (stack !== undefined) {\n pull(this.pendingStack, ...stack);\n this.routeStackMap.delete(route);\n }\n }\n }\n\n private batchAddListener(\n listener: EventListener,\n contextConf: ContextConf\n ): EventListener {\n return (event: Event | CustomEvent): void => {\n if (\n this.batchUpdate &&\n this.batchUpdateContextsNames.includes(contextConf.name)\n ) {\n return;\n }\n listener(event);\n };\n }\n}\n","import { ContextConf } from \"@next-core/types\";\nimport { collectMemberUsage, MemberUsage } from \"@next-core/utils/storyboard\";\n\nexport interface DeferredContext {\n resolve(): void;\n reject(e: unknown): void;\n}\n\nexport function resolveDataStore(\n contextConfs: ContextConf[],\n resolveContext: (contextConf: ContextConf) => Promise<boolean>,\n keyword = \"CTX\",\n strict?: boolean\n): {\n pendingResult: Promise<void>;\n pendingContexts: Map<string, Promise<void>>;\n} {\n const dependencyMap = getDependencyMapOfContext(\n contextConfs,\n keyword,\n strict\n );\n // There maybe multiple context confs for a specific name, since there are conditional contexts.\n // This is a map of how many pending context confs for each context name.\n const pendingDeps = new Map<string, number>();\n for (const contextName of Array.from(dependencyMap.keys()).map(\n (contextConf) => contextConf.name\n )) {\n pendingDeps.set(contextName, (pendingDeps.get(contextName) ?? 0) + 1);\n }\n const hasNonStaticUsage = Array.from(dependencyMap.values()).some(\n (stats) => stats.hasNonStaticUsage\n );\n const processed = new WeakSet<ContextConf>();\n\n const deferredContexts = new Map<string, DeferredContext>();\n const pendingContexts = new Map(\n [...new Set(contextConfs.map((contextConf) => contextConf.name))].map(\n (contextName) => {\n const promise = new Promise<void>((resolve, reject) => {\n deferredContexts.set(contextName, { resolve, reject });\n });\n // The pending context will be caught by the renderer.\n promise.catch(() => {});\n return [contextName, promise];\n }\n )\n );\n\n const wrapResolve = async (contextConf: ContextConf): Promise<void> => {\n processed.add(contextConf);\n const resolved = await resolveContext(contextConf);\n dependencyMap.delete(contextConf);\n const left = pendingDeps.get(contextConf.name) ?? 0;\n if (resolved) {\n // Assert: contextConf.name exists in deferredContexts\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n deferredContexts.get(contextConf.name)!.resolve();\n pendingDeps.delete(contextConf.name);\n if (left === 0) {\n throw new Error(`Duplicated context defined: ${contextConf.name}`);\n }\n } else {\n // Assert: left >= 1\n if (left === 1) {\n // Assert: contextConf.name exists in deferredContexts\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n deferredContexts.get(contextConf.name)!.resolve();\n pendingDeps.delete(contextConf.name);\n } else {\n pendingDeps.set(contextConf.name, left - 1);\n }\n }\n await scheduleNext();\n };\n\n let scheduleAsSerial = hasNonStaticUsage;\n\n async function scheduleNext(): Promise<void> {\n const readyContexts = Array.from(dependencyMap.entries())\n .filter(predicateNextResolveFactory(pendingDeps, scheduleAsSerial))\n .map((entry) => entry[0])\n .filter((contextConf) => !processed.has(contextConf));\n await Promise.all(readyContexts.map(wrapResolve));\n }\n\n const pendingResult = scheduleNext()\n .then(async () => {\n // If there are still contexts left, it implies one of these situations:\n // - Circular contexts.\n // Such as: a depends on b, while b depends on a.\n // - Related contexts are all ignored.\n // Such as: a depends on b,\n // while both them are ignore by a falsy result of `if`.\n if (dependencyMap.size > 0) {\n // This will throw if circular contexts detected.\n detectCircularContexts(dependencyMap, keyword);\n scheduleAsSerial = true;\n await scheduleNext();\n }\n // There maybe ignored contexts which are still not fulfilled.\n // We treat them as RESOLVED.\n for (const deferred of deferredContexts.values()) {\n deferred.resolve();\n }\n })\n .catch((error) => {\n // There maybe contexts left not fulfilled, when an error occurred.\n // We treat them as REJECTED.\n for (const deferred of deferredContexts.values()) {\n deferred.reject(error);\n }\n throw error;\n });\n // The pending result will be caught by the renderer.\n pendingResult.catch(() => {});\n return { pendingResult, pendingContexts };\n}\n\nfunction predicateNextResolveFactory(\n pendingDeps: Map<string, number>,\n scheduleAsSerial: boolean\n): (entry: [ContextConf, MemberUsage], index: number) => boolean {\n return (entry, index) =>\n // When contexts contain computed CTX accesses, it implies a dynamic dependency map.\n // So make them process sequentially, keep the same behavior as before.\n scheduleAsSerial\n ? index === 0\n : // A context is ready when it has no pending dependencies.\n ![...entry[1].usedProperties].some((dep) => pendingDeps.has(dep));\n}\n\nexport function getDependencyMapOfContext(\n contextConfs: ContextConf[],\n keyword = \"CTX\",\n strict?: boolean\n): Map<ContextConf, MemberUsage> {\n const depsMap = new Map<ContextConf, MemberUsage>();\n for (const contextConf of contextConfs) {\n const data = [contextConf.if, contextConf.value, contextConf.resolve];\n const stats = collectMemberUsage(data, keyword);\n if (!strict && keyword === \"STATE\") {\n const legacyTplStats = collectMemberUsage(data, \"TPL\");\n // Merge stats with legacyTplStats\n for (const prop of legacyTplStats.usedProperties) {\n stats.usedProperties.add(prop);\n }\n if (legacyTplStats.hasNonStaticUsage) {\n stats.hasNonStaticUsage = true;\n }\n }\n depsMap.set(contextConf, stats);\n }\n return depsMap;\n}\n\nfunction detectCircularContexts(\n dependencyMap: Map<ContextConf, MemberUsage>,\n keyword: string\n): void {\n const duplicatedMap = new Map(dependencyMap);\n const pendingDeps = new Set<string>(\n Array.from(duplicatedMap.keys()).map((contextConf) => contextConf.name)\n );\n const next = (): void => {\n let processedAtLeastOne = false;\n for (const [contextConf, stats] of duplicatedMap.entries()) {\n if (![...stats.usedProperties].some((dep) => pendingDeps.has(dep))) {\n duplicatedMap.delete(contextConf);\n pendingDeps.delete(contextConf.name);\n processedAtLeastOne = true;\n }\n }\n if (processedAtLeastOne) {\n next();\n }\n };\n next();\n\n if (duplicatedMap.size > 0) {\n throw new ReferenceError(\n `Circular ${keyword} detected: ${Array.from(duplicatedMap.keys())\n .map((contextConf) => contextConf.name)\n .join(\", \")}`\n );\n }\n}\n","import type { BrickConf, RouteConf, SlotsConfOfBricks } from \"@next-core/types\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { clamp } from \"lodash\";\nimport {\n symbolForAsyncComputedPropsFromHost,\n symbolForTPlExternalForEachIndex,\n symbolForTPlExternalForEachItem,\n symbolForTPlExternalForEachSize,\n symbolForTplStateStoreId,\n type RuntimeBrickConfWithTplSymbols,\n} from \"./constants.js\";\nimport type { AsyncPropertyEntry, TemplateHostContext } from \"../interfaces.js\";\nimport { computePropertyValue } from \"../compute/computeRealProperties.js\";\nimport { childrenToSlots } from \"../Renderer.js\";\n\nexport function setupTemplateProxy(\n hostContext: TemplateHostContext,\n ref: string | undefined,\n slots: SlotsConfOfBricks,\n slotted: boolean\n) {\n const {\n reversedProxies,\n asyncHostPropertyEntries,\n externalSlots,\n tplStateStoreId,\n hostBrick,\n } = hostContext;\n\n let asyncComputedProps: AsyncPropertyEntry[] | undefined;\n\n if (ref && reversedProxies) {\n const propertyProxies = reversedProxies.properties.get(ref);\n if (propertyProxies) {\n const getComputedProps = (\n asyncHostProps: AsyncPropertyEntry[]\n ): AsyncPropertyEntry[] => {\n return propertyProxies!\n .map<AsyncPropertyEntry | undefined>(({ from, to }) => {\n const filtered = asyncHostProps.filter(\n (entry) => entry[0] === from\n );\n if (filtered.length > 0 && to.refProperty) {\n return [\n to.refProperty,\n computePropertyValue(filtered, from),\n true,\n ];\n }\n })\n .filter(Boolean) as AsyncPropertyEntry[];\n };\n\n asyncComputedProps = getComputedProps(asyncHostPropertyEntries);\n }\n\n const slotProxies = reversedProxies.slots.get(ref);\n\n if (slotProxies && slotted) {\n throw new Error(\n `Can not have proxied slot ref when the ref target has a slot element child, check your template \"${hostBrick.type}\" and ref \"${ref}\"`\n );\n }\n\n if (slotProxies && externalSlots) {\n // Use an approach like template-literal's quasis:\n // `quasi0${0}quais1${1}quasi2...`\n // Every quasi (indexed by `refPosition`) can be slotted with multiple bricks.\n const quasisMap = new Map<string, BrickConf[][]>();\n\n for (const { from, to } of slotProxies) {\n const insertBricks = externalSlots[from]?.bricks ?? [];\n if (!insertBricks.length) {\n continue;\n }\n const refToSlot = to.refSlot ?? from;\n let expandableSlot = quasisMap.get(refToSlot);\n if (!expandableSlot) {\n expandableSlot = [];\n // The size of quasis should be the existed slotted bricks' size plus one.\n const size = hasOwnProperty(slots, refToSlot)\n ? slots[refToSlot].bricks.length + 1\n : 1;\n for (let i = 0; i < size; i += 1) {\n expandableSlot.push([]);\n }\n quasisMap.set(refToSlot, expandableSlot);\n }\n const refPosition = to.refPosition ?? -1;\n // External bricks of a template, should not access the template internal forEach `ITEM`.\n // For some existing templates who is *USING* this bug, we keep the old behavior.\n const hostHasForEach = hasOwnProperty(\n hostBrick.runtimeContext,\n \"forEachItem\"\n );\n expandableSlot[\n clamp(\n refPosition < 0 ? expandableSlot.length + refPosition : refPosition,\n 0,\n expandableSlot.length - 1\n )\n ].push(\n ...(!hostHasForEach\n ? insertBricks\n : setupTemplateExternalBricksWithForEach(\n insertBricks,\n hostBrick.runtimeContext.forEachItem,\n hostBrick.runtimeContext.forEachIndex!,\n hostBrick.runtimeContext.forEachSize!\n ))\n );\n }\n\n for (const [slotName, quasis] of quasisMap.entries()) {\n if (!hasOwnProperty(slots, slotName)) {\n slots[slotName] = {\n type: \"bricks\",\n bricks: [],\n };\n }\n const slotConf = slots[slotName];\n slotConf.bricks = quasis.flatMap((bricks, index) =>\n index < slotConf.bricks.length\n ? bricks.concat(slotConf.bricks[index])\n : bricks\n );\n\n if (slotConf.bricks.length === 0) {\n delete slots[slotName];\n }\n }\n }\n }\n\n return {\n [symbolForAsyncComputedPropsFromHost]: asyncComputedProps,\n [symbolForTplStateStoreId]: tplStateStoreId,\n };\n}\n\n// External bricks of a template, have the same forEachItem context as their host.\nexport function setupTemplateExternalBricksWithForEach(\n bricks: BrickConf[],\n forEachItem: unknown,\n forEachIndex: number,\n forEachSize: number\n): BrickConf[] {\n return (bricks as RuntimeBrickConfWithTplSymbols[]).map(\n ({ children, slots, ...brick }) => ({\n ...brick,\n [symbolForTPlExternalForEachItem]: forEachItem,\n [symbolForTPlExternalForEachIndex]: forEachIndex,\n [symbolForTPlExternalForEachSize]: forEachSize,\n // Keep `:forEach` bricks as original, since they have their own forEachItem context.\n slots:\n brick.brick === \":forEach\"\n ? childrenToSlots(children, slots)\n : Object.fromEntries(\n Object.entries(childrenToSlots(children, slots) ?? {}).map(\n ([slotName, slotConf]) => [\n slotName,\n slotConf.type === \"routes\"\n ? {\n type: \"routes\",\n routes: setupTemplateExternalRoutesWithForEach(\n slotConf.routes,\n forEachItem,\n forEachIndex,\n forEachSize\n ),\n }\n : {\n type: \"bricks\",\n bricks: setupTemplateExternalBricksWithForEach(\n slotConf.bricks,\n forEachItem,\n forEachIndex,\n forEachSize\n ),\n },\n ]\n )\n ),\n })\n );\n}\n\nfunction setupTemplateExternalRoutesWithForEach(\n routes: RouteConf[],\n forEachItem: unknown,\n forEachIndex: number,\n forEachSize: number\n): RouteConf[] {\n return routes.map((route) =>\n route.type === \"routes\"\n ? {\n ...route,\n routes: setupTemplateExternalRoutesWithForEach(\n route.routes,\n forEachItem,\n forEachIndex,\n forEachSize\n ),\n }\n : route.type === \"redirect\"\n ? route\n : {\n ...route,\n bricks: setupTemplateExternalBricksWithForEach(\n route.bricks,\n forEachItem,\n forEachIndex,\n forEachSize\n ),\n }\n );\n}\n","import type {\n BrickConf,\n SlotsConfInTemplate,\n UseSingleBrickConf,\n} from \"@next-core/types\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { isEvaluable } from \"@next-core/cook\";\nimport type { TemplateHostContext } from \"../interfaces.js\";\nimport { setupTemplateExternalBricksWithForEach } from \"./setupTemplateProxy.js\";\nimport { childrenToSlots } from \"../Renderer.js\";\n\nexport function replaceSlotWithSlottedBricks<\n T extends BrickConf | UseSingleBrickConf,\n>(\n brickConf: T,\n hostContext: TemplateHostContext,\n expand: (item: T, hostContext: TemplateHostContext) => T | T[]\n): T[] {\n // Currently, no support for `if` in a slot.\n if (\n (brickConf.if != null && !brickConf.if) ||\n typeof brickConf.if === \"string\"\n ) {\n throw new Error(\n `Can not use \"if\" in a slot currently, check your template \"${hostContext.hostBrick.type}\"`\n );\n }\n\n const slot = String(brickConf.properties?.name ?? \"\");\n\n // Currently, no support for expression as slot name.\n if (isEvaluable(slot)) {\n throw new Error(\n `Can not use an expression as slot name \"${slot}\" currently, check your template \"${hostContext.hostBrick.type}\"`\n );\n }\n\n // Do not repeat the same slot name in a template.\n if (hostContext.usedSlots.has(slot)) {\n throw new Error(\n `Can not have multiple slots with the same name \"${slot}\", check your template \"${hostContext.hostBrick.type}\"`\n );\n }\n hostContext.usedSlots.add(slot);\n\n if (\n hostContext.externalSlots &&\n hasOwnProperty(hostContext.externalSlots, slot)\n ) {\n const insertBricks = hostContext.externalSlots[slot].bricks ?? [];\n if (insertBricks.length > 0) {\n const hostCtx = hostContext.hostBrick.runtimeContext;\n // External bricks of a template, should not access the template internal forEach `ITEM`.\n // For some existing templates who is *USING* this bug, we keep the old behavior.\n const hostHasForEach = hasOwnProperty(hostCtx, \"forEachItem\");\n return (\n hostHasForEach\n ? setupTemplateExternalBricksWithForEach(\n insertBricks,\n hostCtx.forEachItem,\n hostCtx.forEachIndex!,\n hostCtx.forEachSize!\n )\n : insertBricks\n ) as T[];\n }\n }\n\n const defaultSlots = childrenToSlots(brickConf.children, brickConf.slots) as\n | SlotsConfInTemplate\n | undefined;\n return (defaultSlots?.[\"\"]?.bricks ?? []).flatMap((item) =>\n expand(item as T, hostContext)\n );\n}\n","import type {\n UseBrickSlotConf,\n UseBrickSlotsConf,\n UseSingleBrickConf,\n} from \"@next-core/types\";\nimport { isObject } from \"@next-core/utils/general\";\nimport type { TemplateHostContext } from \"../interfaces.js\";\nimport { setupTemplateProxy } from \"./setupTemplateProxy.js\";\nimport { childrenToSlots } from \"../Renderer.js\";\nimport { replaceSlotWithSlottedBricks } from \"./replaceSlotWithSlottedBricks.js\";\n\nexport function setupUseBrickInTemplate<T>(\n props: T,\n hostContext: TemplateHostContext\n): T {\n function walk<P>(props: P): P {\n if (!isObject(props) || typeof props === \"function\") {\n return props;\n }\n\n if (Array.isArray(props)) {\n return props.map(walk) as P;\n }\n\n return Object.fromEntries(\n Object.entries(props)\n .map(([key, value]) =>\n isObject(value) && key === \"useBrick\"\n ? Array.isArray(value)\n ? [key, value.flatMap((v) => setup(v))]\n : [key, setup(value as UseSingleBrickConf)]\n : [key, walk(value)]\n )\n .concat(\n Object.getOwnPropertySymbols(props).map((k) => [\n k,\n (props as Record<string | symbol, unknown>)[k],\n ])\n )\n ) as P;\n }\n\n function setup(\n item: UseSingleBrickConf,\n markSlotted?: () => void\n ): UseSingleBrickConf | UseSingleBrickConf[] {\n if (item.brick === \"slot\") {\n markSlotted?.();\n return replaceSlotWithSlottedBricks(item, hostContext, (it) => setup(it));\n }\n\n const { properties, slots: originalSlots, children, ...restConf } = item;\n\n const transpiledSlots = childrenToSlots(children, originalSlots) as\n | UseBrickSlotsConf\n | undefined;\n\n let slotted = false;\n const markChild = () => {\n slotted = true;\n };\n const slots = Object.fromEntries<UseBrickSlotConf>(\n Object.entries(transpiledSlots ?? {}).map(([slotName, slotConf]) => [\n slotName,\n {\n type: \"bricks\",\n bricks: (slotConf.bricks ?? []).flatMap((it) => setup(it, markChild)),\n },\n ])\n );\n\n return {\n ...restConf,\n properties: walk(properties),\n slots,\n ...setupTemplateProxy(hostContext, restConf.ref, slots, slotted),\n };\n }\n\n return walk(props);\n}\n","import type {\n BrickConf,\n BrickConfInTemplate,\n SlotConfOfBricks,\n SlotsConfInTemplate,\n SlotsConfOfBricks,\n UseSingleBrickConf,\n} from \"@next-core/types\";\nimport { uniqueId } from \"lodash\";\nimport { customTemplates } from \"../../CustomTemplates.js\";\nimport { DataStore } from \"../data/DataStore.js\";\nimport { setupTemplateProxy } from \"./setupTemplateProxy.js\";\nimport type {\n AsyncPropertyEntry,\n RuntimeBrick,\n TemplateHostBrick,\n TemplateHostContext,\n} from \"../interfaces.js\";\nimport { setupUseBrickInTemplate } from \"./setupUseBrickInTemplate.js\";\nimport { childrenToSlots } from \"../Renderer.js\";\nimport { hooks } from \"../Runtime.js\";\nimport type { RendererContext } from \"../RendererContext.js\";\nimport { replaceSlotWithSlottedBricks } from \"./replaceSlotWithSlottedBricks.js\";\nimport { isolatedTemplateRegistryMap } from \"../IsolatedTemplates.js\";\n\nexport function expandCustomTemplate<T extends BrickConf | UseSingleBrickConf>(\n tplTagName: string,\n brickConf: T,\n hostBrick: RuntimeBrick,\n asyncHostPropertyEntries: AsyncPropertyEntry[],\n rendererContext: RendererContext\n): T {\n const tplStateStoreId = uniqueId(\"tpl-state-\");\n const runtimeContext = {\n ...hostBrick.runtimeContext,\n tplStateStoreId,\n };\n\n // There is a boundary for `forEach*` and `FORM_STATE` between template internals and externals.\n delete runtimeContext.forEachItem;\n delete runtimeContext.forEachIndex;\n delete runtimeContext.forEachSize;\n delete runtimeContext.formStateStoreId;\n\n const tplStateStore = new DataStore(\n \"STATE\",\n hostBrick,\n rendererContext,\n tplStateStoreId\n );\n runtimeContext.tplStateStoreMap.set(tplStateStoreId, tplStateStore);\n if (runtimeContext.tplStateStoreScope) {\n runtimeContext.tplStateStoreScope.push(tplStateStore);\n }\n\n const { bricks, proxy, state, contracts } = hostBrick.runtimeContext\n .isolatedRoot\n ? isolatedTemplateRegistryMap\n .get(hostBrick.runtimeContext.isolatedRoot)!\n .get(tplTagName)!\n : customTemplates.get(tplTagName)!;\n hooks?.flowApi?.collectWidgetContract(contracts);\n tplStateStore.define(state, runtimeContext, asyncHostPropertyEntries);\n\n const {\n slots: originalExternalSlots,\n children: externalChildren,\n ...restBrickConf\n } = brickConf;\n\n const newBrickConf = {\n ...restBrickConf,\n brick: tplTagName,\n } as T;\n\n hostBrick.tplHostMetadata = {\n internalBricksByRef: new Map(),\n tplStateStoreId,\n proxy,\n };\n\n // Reversed proxies are used for expand storyboard before rendering page.\n const reversedProxies: TemplateHostContext[\"reversedProxies\"] = {\n properties: new Map(),\n slots: new Map(),\n // mergeBases: new Map(),\n };\n\n if (proxy?.properties) {\n for (const [from, to] of Object.entries(proxy.properties)) {\n let proxies = reversedProxies.properties.get(to.ref);\n if (!proxies) {\n proxies = [];\n reversedProxies.properties.set(to.ref, proxies);\n }\n proxies.push({\n from,\n to,\n });\n }\n }\n\n if (proxy?.slots) {\n for (const [from, to] of Object.entries(proxy.slots)) {\n let proxies = reversedProxies.slots.get(to.ref);\n if (!proxies) {\n proxies = [];\n reversedProxies.slots.set(to.ref, proxies);\n }\n proxies.push({\n from,\n to,\n });\n }\n }\n\n const hostContext: TemplateHostContext = {\n reversedProxies,\n asyncHostPropertyEntries,\n externalSlots: childrenToSlots(externalChildren, originalExternalSlots) as\n | SlotsConfOfBricks\n | undefined,\n tplStateStoreId,\n hostBrick: hostBrick as TemplateHostBrick,\n usedSlots: new Set(),\n };\n\n newBrickConf.slots = {\n \"\": {\n type: \"bricks\",\n bricks: bricks.flatMap((item) =>\n expandBrickInTemplate(item, hostContext)\n ),\n },\n };\n\n return newBrickConf;\n}\n\nfunction expandBrickInTemplate(\n brickConfInTemplate: BrickConf,\n hostContext: TemplateHostContext,\n markSlotted?: () => void\n): BrickConf | BrickConf[] {\n // Ignore `if: null` to make `looseCheckIf` working.\n if (brickConfInTemplate.if === null) {\n delete brickConfInTemplate.if;\n }\n\n if (brickConfInTemplate.brick === \"slot\") {\n markSlotted?.();\n return replaceSlotWithSlottedBricks(\n brickConfInTemplate,\n hostContext,\n expandBrickInTemplate\n );\n }\n\n const {\n properties,\n slots: slotsInTemplate,\n children: childrenInTemplate,\n ...restBrickConfInTemplate\n } = brickConfInTemplate as BrickConfInTemplate;\n\n const transpiledSlots = childrenToSlots(\n childrenInTemplate,\n slotsInTemplate\n ) as SlotsConfInTemplate | undefined;\n\n let slotted = false;\n const markChild = () => {\n slotted = true;\n };\n const slots = Object.fromEntries<SlotConfOfBricks>(\n Object.entries(transpiledSlots ?? {}).map(([slotName, slotConf]) => [\n slotName,\n {\n type: \"bricks\",\n bricks: (slotConf.bricks ?? []).flatMap((item) =>\n expandBrickInTemplate(item, hostContext, markChild)\n ),\n },\n ])\n );\n\n return {\n ...restBrickConfInTemplate,\n properties: setupUseBrickInTemplate(properties, hostContext),\n slots,\n ...setupTemplateProxy(\n hostContext,\n restBrickConfInTemplate.ref,\n slots,\n slotted\n ),\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\n\nexport const FORM_RENDERER = \"form-renderer.form-renderer\";\nexport const symbolForFormStateStoreId = Symbol.for(\"form.stateStoreId\");\n\nexport type RuntimeBrickConfWithFormSymbols = BrickConf &\n RuntimeBrickConfOfFormSymbols;\n\nexport interface RuntimeBrickConfOfFormSymbols {\n [symbolForFormStateStoreId]?: string;\n}\n","import type { BrickConf, BrickEventsMap } from \"@next-core/types\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { uniqueId } from \"lodash\";\nimport { DataStore } from \"../data/DataStore.js\";\nimport type { AsyncPropertyEntry, RuntimeBrick } from \"../interfaces.js\";\nimport type {\n FieldProperties,\n FormDataProperties,\n FormSchemaProperties,\n} from \"./interfaces.js\";\nimport { getDefaultProperties } from \"./getDefaultProperties.js\";\nimport { symbolForFormStateStoreId } from \"./constants.js\";\nimport type { RendererContext } from \"../RendererContext.js\";\n\nexport const formContainers = [\n \"forms.general-form\",\n \"form.general-form\",\n \"eo-form\",\n];\n\nexport function expandFormRenderer(\n formData: unknown,\n hostBrickConf: BrickConf,\n hostBrick: RuntimeBrick,\n asyncHostPropertyEntries: AsyncPropertyEntry[],\n rendererContext: RendererContext\n): BrickConf {\n const normalizedFormData = (\n typeof formData === \"string\" ? JSON.parse(formData) : formData\n ) as FormDataProperties;\n\n const formStateStoreId = uniqueId(\"form-state-\");\n const runtimeContext = {\n ...hostBrick.runtimeContext,\n formStateStoreId,\n };\n\n // There is a boundary for `forEach*` and `STATE` between form internals and externals.\n delete runtimeContext.forEachItem;\n delete runtimeContext.forEachIndex;\n delete runtimeContext.forEachSize;\n delete runtimeContext.tplStateStoreId;\n\n const formStateStore = new DataStore(\n \"FORM_STATE\",\n undefined,\n rendererContext,\n formStateStoreId\n );\n runtimeContext.formStateStoreMap.set(formStateStoreId, formStateStore);\n if (runtimeContext.formStateStoreScope) {\n runtimeContext.formStateStoreScope.push(formStateStore);\n }\n\n // Always add a state of `params`.\n const context = normalizedFormData.context ?? [];\n if (!context.some((ctx) => ctx.name === \"params\")) {\n context.push({ name: \"params\" });\n }\n\n formStateStore.define(context, runtimeContext, asyncHostPropertyEntries);\n\n const formConf = formSchemaToBrick(\n normalizedFormData.formSchema,\n normalizedFormData.fields,\n formStateStoreId\n );\n\n if (formContainers.includes(formConf.brick) && hostBrickConf.events) {\n formConf.events = mergeEvents(formConf.events, hostBrickConf.events);\n }\n\n const renderRoot =\n typeof hostBrickConf.properties?.renderRoot !== \"boolean\" ||\n hostBrickConf.properties.renderRoot;\n\n if (renderRoot) {\n return {\n ...hostBrickConf,\n slots: undefined,\n children: [\n {\n brick: \"eo-micro-view\",\n properties: { style: { padding: \"12px\" } },\n children: [formConf],\n },\n ],\n };\n }\n\n return {\n ...hostBrickConf,\n slots: undefined,\n children: [formConf],\n };\n}\n\nfunction formSchemaToBrick(\n schema: FormSchemaProperties,\n fields: FieldProperties[],\n formStateStoreId: string\n): BrickConf {\n const { id, bricks, events, context, mountPoint, instanceId: iid } = schema;\n let { brick, properties } = schema;\n\n // 根据字段类型获取默认配置\n const field = fields.find((item: FieldProperties) => item.fieldId === id);\n if (field) {\n const defaults = getDefaultProperties(field);\n if (!brick) {\n brick = defaults.brick;\n }\n properties = {\n ...defaults.properties,\n ...properties,\n };\n }\n\n const brickConf = {\n brick,\n properties,\n iid,\n slot: mountPoint,\n events,\n context,\n children: formSchemasToBricks(bricks, fields, formStateStoreId),\n [symbolForFormStateStoreId]: formStateStoreId,\n } as BrickConf;\n\n if (hasOwnProperty(schema, \"if\")) {\n brickConf.if = schema.if;\n }\n\n return brickConf;\n}\n\nfunction formSchemasToBricks(\n schemas: FormSchemaProperties[] | undefined,\n fields: FieldProperties[],\n formStateStoreId: string\n): BrickConf[] | undefined {\n if (Array.isArray(schemas)) {\n return schemas.map((schema) =>\n formSchemaToBrick(schema, fields, formStateStoreId)\n );\n }\n}\n\nfunction mergeEvents(\n targetEvents: BrickEventsMap | undefined,\n sourceEvents: BrickEventsMap\n): BrickEventsMap {\n const events = targetEvents ?? {};\n\n for (const [eventType, handlers] of Object.entries(sourceEvents)) {\n events[eventType] = hasOwnProperty(events, eventType)\n ? [events[eventType], handlers].flat()\n : handlers;\n }\n\n return events;\n}\n","import type { DefaultFieldProperties, FieldProperties } from \"./interfaces.js\";\n\nexport function getDefaultProperties(\n field: FieldProperties\n): DefaultFieldProperties {\n let defaultValue: DefaultFieldProperties;\n const commonProps = {\n id: field.fieldId,\n name: field.fieldId,\n label: field.name,\n dataset: {\n testid: field.fieldId,\n },\n };\n const getReadOnlyAndRequired = () => ({\n readOnly: field.limit?.includes(\"READONLY\"),\n required: field.limit?.includes(\"REQUIRED\"),\n });\n switch (field.fieldType) {\n case \"INT\":\n defaultValue = {\n brick: \"forms.general-input-number\",\n properties: {\n ...commonProps,\n ...getReadOnlyAndRequired(),\n placeholder: field.description,\n precision: 0,\n inputBoxStyle: { width: \"100%\" },\n },\n };\n break;\n case \"BOOLEAN\":\n defaultValue = {\n brick: \"forms.general-switch\",\n properties: {\n ...commonProps,\n ...getReadOnlyAndRequired(),\n },\n };\n break;\n case \"FLOAT\":\n defaultValue = {\n brick: \"forms.general-input-number\",\n properties: {\n ...commonProps,\n ...getReadOnlyAndRequired(),\n placeholder: field.description,\n inputBoxStyle: { width: \"100%\" },\n },\n };\n break;\n case \"ENUM\":\n defaultValue = {\n brick: \"forms.general-select\",\n properties: {\n ...commonProps,\n ...getReadOnlyAndRequired(),\n options: [\n { label: \"选项一\", value: 1 },\n { label: \"选项二\", value: 2 },\n ],\n placeholder: field.description,\n inputBoxStyle: { width: \"100%\" },\n },\n };\n break;\n case \"ENUMS\":\n defaultValue = {\n brick: \"forms.general-select\",\n properties: {\n ...commonProps,\n ...getReadOnlyAndRequired(),\n mode: \"multiple\",\n options: [\n { label: \"选项一\", value: 1 },\n { label: \"选项二\", value: 2 },\n ],\n placeholder: field.description,\n inputBoxStyle: { width: \"100%\" },\n },\n };\n break;\n case \"DATE\":\n case \"TIME\":\n defaultValue = {\n brick: \"forms.general-date-picker\",\n properties: {\n ...commonProps,\n ...getReadOnlyAndRequired(),\n placeholder: field.description,\n },\n };\n break;\n case \"IP\":\n defaultValue = {\n brick: \"forms.general-input\",\n properties: {\n ...commonProps,\n ...getReadOnlyAndRequired(),\n placeholder: field.description,\n pattern:\n \"((^s*((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))s*$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*$))\",\n message: {\n pattern: \"输入字符不匹配IP格式\",\n },\n },\n };\n break;\n case \"JSON\":\n defaultValue = {\n brick: \"forms.general-textarea\",\n properties: {\n ...commonProps,\n },\n };\n break;\n case \"ARRAY\":\n defaultValue = {\n brick: \"forms.general-select\",\n properties: {\n ...commonProps,\n },\n };\n break;\n case \"STRUCTURE\":\n case \"STRUCTURE_ARRAY\":\n defaultValue = {\n brick: \"forms.cmdb-instance-select-panel\",\n properties: {\n ...commonProps,\n ...getReadOnlyAndRequired(),\n },\n };\n break;\n default:\n defaultValue = {\n brick: \"forms.general-input\",\n properties: {\n ...commonProps,\n ...getReadOnlyAndRequired(),\n placeholder: field.description,\n },\n };\n }\n return defaultValue;\n}\n","import { FORM_RENDERER } from \"./constants.js\";\nimport { formContainers } from \"./expandFormRenderer.js\";\n\ninterface FormElementProps {\n renderRoot?: boolean;\n}\n\nclass FormElement extends HTMLElement implements FormElementProps {\n get $$typeof(): string {\n return \"formRenderer\";\n }\n\n renderRoot?: boolean | undefined;\n\n #proxyFormMethod(method: string, args: unknown[] = []): any {\n const containerElement =\n this.renderRoot !== false\n ? this.firstElementChild?.firstElementChild\n : this.firstElementChild;\n\n const tagName = containerElement?.tagName?.toLowerCase();\n\n if (formContainers.includes(tagName as string)) {\n return (containerElement as any)[method](...args);\n } else {\n // eslint-disable-next-line no-console\n console.error(`no ${method} method in the container element`, {\n container: tagName,\n });\n }\n }\n\n validate(): void {\n this.#proxyFormMethod(\"validate\");\n }\n\n setInitValue(...args: unknown[]): void {\n this.#proxyFormMethod(\"setInitValue\", args);\n }\n\n resetFields(...args: unknown[]): void {\n this.#proxyFormMethod(\"resetFields\", args);\n }\n\n getFieldsValue(...args: unknown[]): any {\n return this.#proxyFormMethod(\"getFieldsValue\", args);\n }\n}\n\nexport function registerFormRenderer(): void {\n customElements.get(FORM_RENDERER) ||\n customElements.define(FORM_RENDERER, FormElement);\n}\n","import { loadBricksImperatively, BrickLoadError } from \"@next-core/loader\";\nimport { HttpResponseError } from \"@next-core/http\";\nimport { i18n } from \"@next-core/i18n\";\nimport { httpErrorToString } from \"../handleHttpError.js\";\nimport { RenderTag } from \"./enums.js\";\nimport type { RenderChildNode, RenderReturnNode } from \"./interfaces.js\";\nimport { _internalApiGetPresetBricks, getBrickPackages } from \"./Runtime.js\";\nimport { K, NS } from \"./i18n.js\";\nimport { getBasePath } from \"../getBasePath.js\";\n\ntype ErrorMessageVariant =\n | \"internet-disconnected\"\n | \"no-permission\"\n | \"license-expired\"\n | \"not-found\"\n | \"unknown-error\";\n\ninterface ErrorMessageConfig {\n title: string;\n variant: ErrorMessageVariant;\n showLink?: LinkType;\n showDescription?: boolean;\n}\n\ntype LinkType = \"home\" | \"previous\" | \"reload\";\n\nexport class PageError extends Error {\n constructor(message: \"page blocked\" | \"page not found\" | \"app not found\") {\n // Pass remaining arguments (including vendor specific ones) to parent constructor\n super(message);\n\n this.name = \"PageError\";\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, BrickLoadError);\n }\n }\n}\n\n/**\n * Will always resolve\n */\nexport async function ErrorNode(\n error: unknown,\n returnNode: RenderReturnNode,\n pageLevel?: boolean\n): Promise<RenderChildNode> {\n const { title, variant, showLink, showDescription } =\n getRefinedErrorConf(error);\n\n if (pageLevel) {\n const presetBricks = _internalApiGetPresetBricks();\n const errorBrick = presetBricks.error ?? \"illustrations.error-message\";\n if (errorBrick !== false) {\n const linkBrick = \"eo-link\";\n const bricks = (showLink ? [errorBrick, linkBrick] : [errorBrick]).filter(\n (brick) => !customElements.get(brick)\n );\n try {\n await Promise.race([\n loadBricksImperatively(bricks, getBrickPackages()),\n // Timeout after 3 seconds\n new Promise<void>((_resolve, reject) =>\n setTimeout(() => {\n reject(new Error(\"timeout\"));\n }, 3e3)\n ),\n ]);\n const node: RenderChildNode = {\n tag: RenderTag.BRICK,\n type: errorBrick,\n properties: {\n errorTitle: title,\n description: showDescription ? httpErrorToString(error) : undefined,\n variant,\n dataset: {\n errorBoundary: \"\",\n },\n },\n runtimeContext: null!,\n return: returnNode,\n };\n\n if (showLink) {\n node.child = getLinkNode(showLink, linkBrick, node, \"\");\n }\n\n return node;\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"Failed to load brick:\", bricks.join(\", \"), e);\n }\n }\n }\n\n const useDefaultError =\n pageLevel && !!customElements.get(\"easyops-default-error\");\n\n const node: RenderChildNode = {\n tag: RenderTag.BRICK,\n type: useDefaultError ? \"easyops-default-error\" : \"div\",\n properties: {\n errorTitle: title,\n dataset: {\n errorBoundary: \"\",\n },\n style: {\n color: \"var(--color-error)\",\n },\n },\n runtimeContext: null!,\n return: returnNode,\n };\n\n const descriptionNode: RenderChildNode = {\n tag: RenderTag.BRICK,\n type: \"div\",\n properties: {\n textContent: useDefaultError\n ? showDescription\n ? httpErrorToString(error)\n : \"\"\n : showDescription\n ? `${title}: ${httpErrorToString(error)}`\n : title,\n },\n runtimeContext: null!,\n return: node,\n };\n\n node.child = descriptionNode;\n\n if (pageLevel && showLink) {\n descriptionNode.sibling = getLinkNode(\n showLink,\n \"a\",\n node,\n useDefaultError ? \"link\" : \"\"\n );\n }\n\n return node;\n}\n\nfunction getLinkNode(\n showLink: LinkType | undefined,\n brick: string,\n parent: RenderReturnNode,\n slotId: string\n): RenderChildNode {\n return {\n tag: RenderTag.BRICK,\n type: brick,\n slotId,\n properties: {\n textContent:\n showLink === \"home\"\n ? i18n.t(`${NS}:${K.GO_BACK_HOME}`)\n : showLink === \"reload\"\n ? i18n.t(`${NS}:${K.RELOAD}`)\n : i18n.t(`${NS}:${K.GO_BACK_TO_PREVIOUS_PAGE}`),\n href:\n showLink === \"home\"\n ? getBasePath()\n : showLink === \"reload\"\n ? location.href\n : undefined,\n },\n events:\n showLink === \"previous\"\n ? {\n click: {\n action: \"history.goBack\",\n },\n }\n : undefined,\n runtimeContext: null!,\n return: parent,\n };\n}\n\nfunction getRefinedErrorConf(error: unknown): ErrorMessageConfig {\n if (error instanceof PageError) {\n return error.message === \"page blocked\"\n ? {\n showLink: \"home\",\n title: i18n.t(`${NS}:${K.LICENSE_BLOCKED}`),\n variant: \"no-permission\",\n }\n : error.message === \"app not found\"\n ? {\n showLink: \"home\",\n title: i18n.t(`${NS}:${K.APP_NOT_FOUND}`),\n variant: \"no-permission\",\n }\n : {\n showLink: \"home\",\n variant: \"not-found\",\n title: i18n.t(`${NS}:${K.PAGE_NOT_FOUND}`),\n };\n }\n\n if (\n error instanceof BrickLoadError ||\n (error instanceof Error && error.name === \"ChunkLoadError\") ||\n (error instanceof Event &&\n error.type === \"error\" &&\n error.target instanceof HTMLScriptElement)\n ) {\n return {\n showDescription: true,\n title: i18n.t(`${NS}:${K.NETWORK_ERROR}`),\n variant: \"internet-disconnected\",\n showLink: \"reload\",\n };\n }\n\n if (error instanceof HttpResponseError && error.response?.status === 403) {\n return {\n showLink: \"previous\",\n showDescription: true,\n title: i18n.t(`${NS}:${K.NO_PERMISSION}`),\n variant: \"no-permission\",\n };\n }\n\n if (\n error instanceof HttpResponseError &&\n error.responseJson?.code === \"200000\"\n ) {\n return {\n showDescription: true,\n title: i18n.t(`${NS}:${K.LICENSE_EXPIRED}`),\n variant: \"license-expired\",\n };\n }\n\n return {\n showLink: \"previous\",\n showDescription: true,\n title: i18n.t(`${NS}:${K.UNKNOWN_ERROR}`),\n variant: \"unknown-error\",\n };\n}\n","import type {\n BrickConf,\n BrickConfInTemplate,\n ContextConf,\n MenuConf,\n RouteConf,\n RouteConfOfBricks,\n SlotConfOfBricks,\n SlotsConf,\n StaticMenuConf,\n} from \"@next-core/types\";\nimport {\n enqueueStableLoadBricks,\n flushStableLoadBricks,\n loadBricksImperatively,\n loadProcessorsImperatively,\n loadScript,\n loadStyle,\n} from \"@next-core/loader\";\nimport { isTrackAll } from \"@next-core/cook\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { strictCollectMemberUsage } from \"@next-core/utils/storyboard\";\nimport { debounce, isEqual, omitBy } from \"lodash\";\nimport { asyncCheckBrickIf } from \"./compute/checkIf.js\";\nimport {\n asyncComputeRealPropertyEntries,\n constructAsyncProperties,\n} from \"./compute/computeRealProperties.js\";\nimport { clearResolveCache, resolveData } from \"./data/resolveData.js\";\nimport { asyncComputeRealValue } from \"./compute/computeRealValue.js\";\nimport {\n TrackingContextItem,\n listenOnTrackingContext,\n trackAfterInitial,\n type InitialTracker,\n} from \"./compute/listenOnTrackingContext.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport { matchRoute, matchRoutes } from \"./matchRoutes.js\";\nimport {\n symbolForAsyncComputedPropsFromHost,\n symbolForTPlExternalForEachIndex,\n symbolForTPlExternalForEachItem,\n symbolForTPlExternalForEachSize,\n symbolForTplStateStoreId,\n} from \"./CustomTemplates/constants.js\";\nimport { expandCustomTemplate } from \"./CustomTemplates/expandCustomTemplate.js\";\nimport type {\n MenuRequestNode,\n RenderBrick,\n RenderChildNode,\n RenderAbstract,\n RenderReturnNode,\n RuntimeBrickConfWithSymbols,\n RuntimeContext,\n} from \"./interfaces.js\";\nimport {\n getTagNameOfCustomTemplate,\n getTplStateStore,\n} from \"./CustomTemplates/utils.js\";\nimport { customTemplates } from \"../CustomTemplates.js\";\nimport type { NextHistoryState } from \"./historyExtended.js\";\nimport { getBrickPackages, hooks } from \"./Runtime.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { getTracks } from \"./compute/getTracks.js\";\nimport { isStrictMode, warnAboutStrictMode } from \"../isStrictMode.js\";\nimport {\n FORM_RENDERER,\n RuntimeBrickConfOfFormSymbols,\n symbolForFormStateStoreId,\n} from \"./FormRenderer/constants.js\";\nimport { expandFormRenderer } from \"./FormRenderer/expandFormRenderer.js\";\nimport { registerFormRenderer } from \"./FormRenderer/registerFormRenderer.js\";\nimport { isPreEvaluated } from \"./compute/evaluate.js\";\nimport { getPreEvaluatedRaw } from \"./compute/evaluate.js\";\nimport { RuntimeBrickConfOfTplSymbols } from \"./CustomTemplates/constants.js\";\nimport { matchHomepage } from \"./matchStoryboard.js\";\nimport type { DataStore, DataStoreType } from \"./data/DataStore.js\";\nimport { listenerFactory } from \"./bindListeners.js\";\nimport type { MatchResult } from \"./matchPath.js\";\nimport { setupRootRuntimeContext } from \"./setupRootRuntimeContext.js\";\nimport { setMatchedRoute } from \"./routeMatchedMap.js\";\nimport { ErrorNode } from \"./ErrorNode.js\";\n\nexport interface RenderOutput {\n node?: RenderChildNode;\n unauthenticated?: boolean;\n redirect?: {\n path: string;\n state?: NextHistoryState;\n };\n route?: RouteConf;\n path?: string;\n blockingList: (Promise<unknown> | undefined)[];\n menuRequestNode?: MenuRequestNode;\n}\n\nexport async function renderRoutes(\n returnNode: RenderReturnNode,\n routes: RouteConf[],\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId?: string,\n isIncremental?: boolean,\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n const matched = await matchRoutes(routes, _runtimeContext);\n const output = getEmptyRenderOutput();\n const menuRequestNode: MenuRequestNode = (output.menuRequestNode = {\n return: menuRequestReturnNode,\n });\n switch (matched) {\n case \"missed\":\n break;\n case \"unauthenticated\":\n output.unauthenticated = true;\n break;\n default: {\n const route = (output.route = matched.route);\n output.path = matched.match.path;\n const runtimeContext = {\n ..._runtimeContext,\n match: matched.match,\n };\n\n if (route.iid) {\n setMatchedRoute(route.iid, matched.match);\n }\n\n if (isIncremental) {\n runtimeContext.ctxStore.disposeDataInRoutes(routes);\n }\n const routePath = parentRoutes.concat(route);\n runtimeContext.ctxStore.define(\n route.context,\n runtimeContext,\n undefined,\n routePath\n );\n runtimeContext.pendingPermissionsPreCheck.push(\n hooks?.checkPermissions?.preCheckPermissionsForBrickOrRoute(\n route,\n (value) => asyncComputeRealValue(value, runtimeContext)\n )\n );\n\n // Currently, this is only used for brick size-checking: these bricks\n // will be loaded before page rendering, but they will NOT be rendered.\n const { preLoadBricks } = route as { preLoadBricks?: string[] };\n if (Array.isArray(preLoadBricks)) {\n output.blockingList.push(\n loadBricksImperatively(preLoadBricks, getBrickPackages())\n );\n }\n\n if (route.type === \"redirect\") {\n let redirectTo: unknown;\n if (typeof route.redirect === \"string\") {\n redirectTo = await asyncComputeRealValue(\n route.redirect,\n runtimeContext\n );\n } else {\n const resolved = (await resolveData(\n {\n transform: \"redirect\",\n ...route.redirect,\n },\n runtimeContext\n )) as { redirect?: unknown };\n redirectTo = resolved.redirect;\n }\n if (typeof redirectTo !== \"string\") {\n // eslint-disable-next-line no-console\n console.error(\"Unexpected redirect result:\", redirectTo);\n throw new Error(\n `Unexpected type of redirect result: ${typeof redirectTo}`\n );\n }\n output.redirect = { path: redirectTo };\n } else {\n const menuRequest = loadMenu(route.menu, runtimeContext);\n if (menuRequest) {\n menuRequestNode.request = menuRequest;\n }\n\n if (!isIncremental) {\n rendererContext.memoizeMenuRequestNode(routes, menuRequestNode);\n }\n\n const usedProcessors = strictCollectMemberUsage(\n route.context,\n \"PROCESSORS\",\n 2\n );\n if (usedProcessors.size > 0) {\n output.blockingList.push(\n catchLoad(\n loadProcessorsImperatively(usedProcessors, getBrickPackages()),\n \"processors\",\n [...usedProcessors].join(\", \"),\n rendererContext.unknownBricks\n )\n );\n }\n\n let newOutput: RenderOutput;\n if (route.type === \"routes\") {\n newOutput = await renderRoutes(\n returnNode,\n route.routes,\n runtimeContext,\n rendererContext,\n routePath,\n menuRequestNode,\n slotId,\n undefined,\n initialTracker\n );\n } else {\n newOutput = await renderBricks(\n returnNode,\n route.bricks,\n runtimeContext,\n rendererContext,\n routePath,\n menuRequestNode,\n slotId,\n undefined,\n initialTracker\n );\n }\n\n mergeRenderOutput(output, newOutput);\n appendMenuRequestNode(menuRequestNode, newOutput.menuRequestNode);\n }\n }\n }\n\n return output;\n}\n\nexport async function renderBricks(\n returnNode: RenderReturnNode,\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId?: string,\n tplStack?: Map<string, number>,\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n setupRootRuntimeContext(bricks, runtimeContext, true);\n const output = getEmptyRenderOutput();\n // 多个构件并行异步转换,但转换的结果按原顺序串行合并。\n const rendered = await Promise.all(\n bricks.map((brickConf) =>\n renderBrick(\n returnNode,\n brickConf,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n tplStack && new Map(tplStack),\n initialTracker\n )\n )\n );\n\n rendered.forEach((item) => {\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport async function renderBrick(\n returnNode: RenderReturnNode,\n brickConf: RuntimeBrickConfWithSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId?: string,\n tplStack = new Map<string, number>(),\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n try {\n return await legacyRenderBrick(\n returnNode,\n brickConf,\n _runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n tplStack,\n initialTracker\n );\n } catch (error) {\n if (brickConf.errorBoundary) {\n // eslint-disable-next-line no-console\n console.error(\"Error caught by error boundary:\", error);\n return {\n node: await ErrorNode(error, returnNode),\n blockingList: [],\n };\n } else {\n throw error;\n }\n }\n}\n\nasync function legacyRenderBrick(\n returnNode: RenderReturnNode,\n brickConf: RuntimeBrickConfWithSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId: string | undefined,\n tplStack: Map<string, number>,\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n const output = getEmptyRenderOutput();\n\n if (!brickConf.brick) {\n if ((brickConf as { template?: string }).template) {\n // eslint-disable-next-line no-console\n console.error(\"Legacy templates are dropped in v3:\", brickConf);\n } else {\n // eslint-disable-next-line no-console\n console.error(\"Invalid brick:\", brickConf);\n }\n return output;\n }\n\n // Translate `if: \"<%= ... %>\"` to `brick: \":if\", dataSource: \"<%= ... %>\"`.\n // In other words, translate tracking if expressions to tracking control nodes of `:if`.\n const { if: brickIf, permissionsPreCheck, ...restBrickConf } = brickConf;\n if (isGeneralizedTrackAll(brickIf)) {\n return renderBrick(\n returnNode,\n {\n brick: \":if\",\n iid: brickConf.iid,\n dataSource: brickIf,\n // `permissionsPreCheck` maybe required before computing `if`.\n permissionsPreCheck,\n slots: {\n \"\": {\n type: \"bricks\",\n bricks: [restBrickConf],\n },\n },\n // These symbols have to be copied to the new brick conf.\n ...Object.getOwnPropertySymbols(brickConf).reduce(\n (acc, symbol) => ({\n ...acc,\n [symbol]: brickConf[symbol as typeof symbolForTplStateStoreId],\n }),\n {} as RuntimeBrickConfOfTplSymbols & RuntimeBrickConfOfFormSymbols\n ),\n },\n _runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n tplStack,\n initialTracker\n );\n }\n\n const tplStateStoreId = brickConf[symbolForTplStateStoreId];\n const formStateStoreId = brickConf[symbolForFormStateStoreId];\n const runtimeContext = {\n ..._runtimeContext,\n tplStateStoreId,\n formStateStoreId,\n };\n\n if (hasOwnProperty(brickConf, symbolForTPlExternalForEachItem)) {\n // The external bricks of a template should restore their `forEach*` from their host.\n runtimeContext.forEachItem = brickConf[symbolForTPlExternalForEachItem];\n runtimeContext.forEachIndex = brickConf[symbolForTPlExternalForEachIndex];\n runtimeContext.forEachSize = brickConf[symbolForTPlExternalForEachSize];\n }\n\n const strict = isStrictMode(runtimeContext);\n const { context } = brickConf as { context?: ContextConf[] };\n // istanbul ignore next\n if (Array.isArray(context) && context.length > 0) {\n warnAboutStrictMode(\n strict,\n \"Defining context on bricks\",\n \"check your brick:\",\n brickConf\n );\n if (!strict) {\n runtimeContext.ctxStore.define(context, runtimeContext);\n }\n }\n\n runtimeContext.pendingPermissionsPreCheck.push(\n hooks?.checkPermissions?.preCheckPermissionsForBrickOrRoute(\n brickConf,\n (value) => asyncComputeRealValue(value, runtimeContext)\n )\n );\n\n if (!(await asyncCheckBrickIf(brickConf, runtimeContext))) {\n return output;\n }\n\n const brickName = brickConf.brick;\n if (brickName.startsWith(\":\")) {\n ensureValidControlBrick(brickName);\n\n const { dataSource } = brickConf;\n const { contextNames, stateNames } = getTracks(dataSource);\n const tracking = !!(contextNames || stateNames);\n\n const lowerLevelRenderControlNode = async (\n runtimeContext: RuntimeContext,\n tracker: InitialTracker,\n trackDataSource: boolean\n ) => {\n // First, compute the `dataSource`\n const computedDataSource = await asyncComputeRealValue(\n dataSource,\n runtimeContext\n );\n\n if (trackDataSource) {\n trackAfterInitial(\n runtimeContext,\n [{ contextNames, stateNames, propValue: dataSource }],\n tracker\n );\n }\n\n // Then, get the matched slot.\n const slot =\n brickName === \":forEach\"\n ? \"\"\n : brickName === \":switch\"\n ? String(computedDataSource)\n : computedDataSource\n ? \"\"\n : \"else\";\n\n // Don't forget to transpile children to slots.\n const slots = childrenToSlots(brickConf.children, brickConf.slots);\n\n // Then, get the bricks in that matched slot.\n const bricks =\n slots &&\n hasOwnProperty(slots, slot) &&\n (slots[slot] as SlotConfOfBricks)?.bricks;\n\n const output = getEmptyRenderOutput();\n const abstractNode: RenderAbstract = {\n tag: RenderTag.ABSTRACT,\n return: returnNode,\n iid: brickConf.iid,\n };\n output.node = abstractNode;\n\n if (!Array.isArray(bricks)) {\n return output;\n }\n\n let childrenOutput: RenderOutput | undefined;\n\n switch (brickName) {\n case \":forEach\": {\n if (!Array.isArray(computedDataSource)) {\n break;\n }\n childrenOutput = await renderForEach(\n abstractNode,\n computedDataSource,\n bricks,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n tplStack,\n tracker\n );\n break;\n }\n case \":if\":\n case \":switch\": {\n childrenOutput = await renderBricks(\n abstractNode,\n bricks,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n tplStack,\n tracker\n );\n }\n }\n\n if (childrenOutput) {\n abstractNode.child = childrenOutput.node;\n mergeRenderOutput(output, { ...childrenOutput, node: undefined });\n }\n\n return output;\n };\n\n type RenderControlNodeOptions =\n | {\n type: \"initial\";\n runtimeContext: RuntimeContext;\n tplStateStoreScope?: undefined;\n formStateStoreScope?: undefined;\n }\n | {\n type: \"rerender\";\n runtimeContext: RuntimeContext;\n tplStateStoreScope: DataStore<\"STATE\">[];\n formStateStoreScope: DataStore<\"FORM_STATE\">[];\n };\n\n const renderControlNode = async ({\n type,\n runtimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n }: RenderControlNodeOptions) => {\n let changedAfterInitial = false;\n const tracker: InitialTracker = {\n disposes: [],\n listener: () => {\n changedAfterInitial = true;\n },\n };\n let rerenderCount = 0;\n let rawOutput: RenderOutput;\n let uninitialized = true;\n\n // When perform an incremental sub-route render, for control nodes,\n // context maybe changed just after their data source being computed,\n // as well as props of their children bricks being computed, and before\n // bricks being mounted. Thus these changes may not take any effects.\n // So we need to track the context changes after the initial render,\n // and perform re-renders for these control nodes if necessary.\n while (uninitialized || changedAfterInitial) {\n changedAfterInitial = false;\n rawOutput = await lowerLevelRenderControlNode(\n runtimeContext,\n tracker,\n uninitialized && type === \"initial\"\n );\n\n // Changes may happen during `postAsyncRender`.\n if (!changedAfterInitial && type === \"rerender\") {\n const scopedStores = [...tplStateStoreScope, ...formStateStoreScope];\n await postAsyncRender(rawOutput, runtimeContext, [\n runtimeContext.ctxStore,\n ...scopedStores,\n ]);\n }\n\n tracker.disposes.forEach((dispose) => dispose());\n tracker.disposes.length = 0;\n uninitialized = false;\n // istanbul ignore next\n if (++rerenderCount > 10) {\n throw new Error(\n `Maximum rerender stack overflowed (iid: ${brickConf.iid})`\n );\n }\n }\n\n return rawOutput!;\n };\n\n let controlledOutput = await renderControlNode({\n type: \"initial\",\n runtimeContext,\n });\n const { onMount, onUnmount } = brickConf.lifeCycle ?? {};\n\n if (tracking) {\n let renderId = 0;\n const listener = async () => {\n // TODO(steve): start listeners when mounting, and handle changes between rendering and mounting.\n if (!returnNode.mounted || returnNode.disposed) {\n return;\n }\n\n const currentRenderId = ++renderId;\n const [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope] =\n createScopedRuntimeContext(runtimeContext);\n\n const reControlledOutput = await renderControlNode({\n type: \"rerender\",\n runtimeContext: scopedRuntimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n });\n\n // Ignore stale renders\n if (\n renderId === currentRenderId &&\n returnNode.mounted &&\n !returnNode.disposed\n ) {\n if (onUnmount) {\n listenerFactory(\n onUnmount,\n runtimeContext\n )(new CustomEvent(\"unmount\", { detail: { rerender: true } }));\n }\n\n rendererContext.reRender(\n returnNode,\n reControlledOutput.node!,\n controlledOutput.node!\n );\n controlledOutput = reControlledOutput;\n\n if (onMount) {\n listenerFactory(\n onMount,\n scopedRuntimeContext\n )(new CustomEvent(\"mount\", { detail: { rerender: true } }));\n }\n\n for (const store of [...tplStateStoreScope, ...formStateStoreScope]) {\n store.mountAsyncData();\n }\n }\n };\n // Enable leading invocation, to keep tracking orders.\n const debouncedListener = debounce(listener, 0, {\n leading: true,\n trailing: true,\n });\n const runtimeBrick =\n returnNode.tag === RenderTag.ROOT ? null : returnNode;\n const disposes = runtimeBrick ? (runtimeBrick.disposes ??= []) : [];\n if (contextNames) {\n for (const contextName of contextNames) {\n disposes.push(\n runtimeContext.ctxStore.onChange(contextName, debouncedListener)\n );\n }\n }\n if (stateNames) {\n for (const contextName of stateNames) {\n const tplStateStore = getTplStateStore(\n runtimeContext,\n \"STATE\",\n `: \"${dataSource}\"`\n );\n disposes.push(tplStateStore.onChange(contextName, debouncedListener));\n }\n }\n }\n\n if (onMount) {\n rendererContext.registerArbitraryLifeCycle(\"onMount\", () => {\n listenerFactory(\n onMount,\n runtimeContext\n )(new CustomEvent(\"mount\", { detail: { rerender: false } }));\n });\n }\n\n if (onUnmount) {\n rendererContext.registerArbitraryLifeCycle(\"onUnmount\", () => {\n listenerFactory(\n onUnmount,\n runtimeContext\n )(new CustomEvent(\"unmount\", { detail: { rerender: false } }));\n });\n }\n\n return controlledOutput;\n }\n\n // Widgets need to be defined before rendering.\n if (/\\.tpl-/.test(brickName) && !customTemplates.get(brickName)) {\n await catchLoad(\n loadBricksImperatively([brickName], getBrickPackages()),\n \"brick\",\n brickName,\n rendererContext.unknownBricks\n );\n }\n\n const tplTagName = getTagNameOfCustomTemplate(brickName, runtimeContext);\n\n if (tplTagName) {\n const tplCount = tplStack.get(tplTagName) ?? 0;\n if (tplCount >= 10) {\n throw new Error(\n `Maximum custom template stack overflowed: \"${tplTagName}\"`\n );\n }\n tplStack.set(tplTagName, tplCount + 1);\n } else if (brickName.includes(\"-\") && !customElements.get(brickName)) {\n if (brickName === FORM_RENDERER) {\n registerFormRenderer();\n } else {\n output.blockingList.push(\n catchLoad(\n enqueueStableLoadBricks([brickName], getBrickPackages()),\n \"brick\",\n brickName,\n rendererContext.unknownBricks\n )\n );\n }\n }\n\n let formData: unknown;\n let confProps: Record<string, unknown> | undefined;\n if (brickName === FORM_RENDERER) {\n ({ formData, ...confProps } = brickConf.properties ?? {});\n\n if (brickConf.properties?.compute) {\n formData = await asyncComputeRealValue(formData, runtimeContext);\n }\n } else {\n if (runtimeContext.inUseBrick) {\n // Keep v2 behavior for `useBrick`: treat `transform` as `properties`.\n const transform = (brickConf as { transform?: Record<string, unknown> })\n .transform;\n if (transform) {\n warnAboutStrictMode(\n strict,\n \"`useBrick.transform`\",\n 'please use \"properties\" instead, check your useBrick:',\n brickConf\n );\n\n if (!strict) {\n confProps = {\n ...brickConf.properties,\n ...transform,\n };\n }\n }\n }\n confProps ??= brickConf.properties;\n }\n\n const trackingContextList: TrackingContextItem[] = [];\n const asyncPropertyEntries = asyncComputeRealPropertyEntries(\n confProps,\n runtimeContext,\n trackingContextList\n );\n\n const computedPropsFromHost = brickConf[symbolForAsyncComputedPropsFromHost];\n if (computedPropsFromHost) {\n asyncPropertyEntries.push(...computedPropsFromHost);\n }\n\n const isScript = brickName === \"script\";\n if (isScript || brickName === \"link\") {\n const props = await constructAsyncProperties(asyncPropertyEntries);\n if (isScript ? props.src : props.rel === \"stylesheet\" && props.href) {\n const prefix = window.PUBLIC_ROOT ?? \"\";\n if (isScript) {\n const { src, ...attrs } = props;\n await catchLoad(\n loadScript(src as string, prefix, attrs),\n \"script\",\n src as string,\n \"silent\"\n );\n } else {\n const { href, ...attrs } = props;\n await catchLoad(\n loadStyle(href as string, prefix, attrs),\n \"stylesheet\",\n href as string,\n \"silent\"\n );\n }\n return output;\n }\n }\n\n const brick: RenderBrick = {\n tag: RenderTag.BRICK,\n type: tplTagName || brickName,\n return: returnNode,\n slotId,\n events: brickConf.events,\n runtimeContext,\n portal: brickConf.portal,\n iid: brickConf.iid,\n ref: (brickConf as BrickConfInTemplate).ref,\n };\n\n output.node = brick;\n\n // 在最终挂载前,先加载所有可能用到的 processors。\n const usedProcessors = strictCollectMemberUsage(\n [brickConf.events, brickConf.lifeCycle],\n \"PROCESSORS\",\n 2\n );\n if (usedProcessors.size > 0) {\n output.blockingList.push(\n catchLoad(\n loadProcessorsImperatively(usedProcessors, getBrickPackages()),\n \"processors\",\n [...usedProcessors].join(\", \"),\n rendererContext.unknownBricks\n )\n );\n }\n\n // 加载构件属性和加载子构件等任务,可以并行。\n const blockingList: Promise<unknown>[] = [];\n\n // Note: properties here has already been initialized.\n trackAfterInitial(runtimeContext, trackingContextList, initialTracker);\n\n const loadProperties = async () => {\n brick.properties = await constructAsyncProperties(asyncPropertyEntries);\n listenOnTrackingContext(brick, trackingContextList);\n };\n blockingList.push(loadProperties());\n\n rendererContext.registerBrickLifeCycle(brick, brickConf.lifeCycle);\n\n let expandedBrickConf = brickConf;\n if (tplTagName) {\n expandedBrickConf = expandCustomTemplate(\n tplTagName,\n brickConf,\n brick,\n asyncPropertyEntries,\n rendererContext\n );\n } else if (brickName === FORM_RENDERER) {\n expandedBrickConf = expandFormRenderer(\n formData,\n brickConf,\n brick,\n asyncPropertyEntries,\n rendererContext\n );\n }\n\n if (expandedBrickConf.portal) {\n // A portal brick has no slotId.\n brick.slotId = undefined;\n }\n\n let childRuntimeContext: RuntimeContext;\n if (tplTagName) {\n // There is a boundary for `forEachItem` between template internals and externals.\n childRuntimeContext = {\n ...runtimeContext,\n };\n delete childRuntimeContext.forEachItem;\n delete childRuntimeContext.forEachIndex;\n delete childRuntimeContext.forEachSize;\n } else {\n childRuntimeContext = runtimeContext;\n }\n\n const loadChildren = async () => {\n const slots = childrenToSlots(\n expandedBrickConf.children,\n expandedBrickConf.slots\n );\n if (!slots) {\n return;\n }\n const routeSlotFromIndexToSlotId = new Map<number, string>();\n const rendered = await Promise.all(\n Object.entries(slots).map(async ([childSlotId, slotConf], index) => {\n if (slotConf.type !== \"routes\") {\n return renderBricks(\n brick,\n (slotConf as SlotConfOfBricks).bricks,\n childRuntimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n childSlotId,\n tplStack,\n initialTracker\n );\n }\n\n let lastOutput = getEmptyRenderOutput();\n const abstractNode: RenderAbstract = {\n tag: RenderTag.ABSTRACT,\n return: brick,\n };\n lastOutput.node = abstractNode;\n\n const parentRoute = parentRoutes[parentRoutes.length - 1] as\n | RouteConfOfBricks\n | undefined;\n if (parentRoute?.incrementalSubRoutes) {\n routeSlotFromIndexToSlotId.set(index, childSlotId);\n rendererContext.performIncrementalRender(\n slotConf,\n parentRoutes,\n async (location, prevLocation) => {\n const { homepage } = childRuntimeContext.app;\n const { pathname } = location;\n // Ignore if any one of homepage and parent routes not matched.\n if (\n !matchHomepage(homepage, pathname) ||\n !parentRoutes.every((route) => {\n let prevMatch: MatchResult | null;\n let newMatch: MatchResult | null;\n return (\n (prevMatch = matchRoute(\n route,\n homepage,\n prevLocation.pathname\n )) &&\n (newMatch = matchRoute(route, homepage, pathname)) &&\n (route !== parentRoute ||\n isRouteParamsEqual(prevMatch.params, newMatch.params))\n );\n })\n ) {\n return false;\n }\n\n clearResolveCache();\n\n const [\n scopedRuntimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n ] = createScopedRuntimeContext({\n ...childRuntimeContext,\n location,\n query: new URLSearchParams(location.search),\n });\n\n let failed = false;\n let incrementalOutput: RenderOutput;\n let scopedStores: DataStore<\"STATE\" | \"FORM_STATE\">[] = [];\n\n const newOutput = getEmptyRenderOutput();\n const newControlNode: RenderAbstract = {\n tag: RenderTag.ABSTRACT,\n return: brick,\n };\n newOutput.node = newControlNode;\n\n try {\n incrementalOutput = await renderRoutes(\n newControlNode,\n slotConf.routes,\n scopedRuntimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n childSlotId,\n true\n );\n\n // Do not ignore incremental rendering even if all sub-routes are missed.\n // Since parent route is matched.\n if (incrementalOutput.route) {\n // Bailout if redirect or unauthenticated is set\n if (rendererContext.reBailout(incrementalOutput)) {\n return true;\n }\n\n scopedStores = [\n ...tplStateStoreScope,\n ...formStateStoreScope,\n ];\n await postAsyncRender(\n incrementalOutput,\n scopedRuntimeContext,\n [scopedRuntimeContext.ctxStore, ...scopedStores]\n );\n }\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Incremental sub-router failed:\", error);\n\n const result = await rendererContext.reCatch(\n error,\n newControlNode\n );\n if (!result) {\n return true;\n }\n ({ failed, output: incrementalOutput } = result);\n }\n\n // istanbul ignore next: covered by e2e tests\n if (brick.disposed) {\n return true;\n }\n\n newControlNode.child = incrementalOutput.node;\n mergeRenderOutput(newOutput, {\n ...incrementalOutput,\n node: undefined,\n });\n // Assert: no errors will be throw\n await rendererContext.reMergeMenuRequestNodes(\n menuRequestReturnNode,\n slotConf.routes,\n incrementalOutput.menuRequestNode\n );\n\n rendererContext.reRender(brick, newControlNode, lastOutput.node!);\n\n lastOutput = newOutput;\n\n if (!failed) {\n scopedRuntimeContext.ctxStore.mountAsyncData(\n incrementalOutput.route\n );\n for (const store of scopedStores) {\n store.mountAsyncData();\n }\n }\n\n // Even if all sub-routes missed, treat the incremental rendering as performed.\n return true;\n }\n );\n }\n\n const routesOutput = await renderRoutes(\n abstractNode,\n slotConf.routes,\n childRuntimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n childSlotId,\n undefined,\n initialTracker\n );\n\n abstractNode.child = routesOutput.node;\n mergeRenderOutput(output, { ...routesOutput, node: undefined });\n appendMenuRequestNode(\n menuRequestReturnNode,\n (output.menuRequestNode = routesOutput.menuRequestNode)\n );\n\n return lastOutput;\n })\n );\n\n const childrenOutput: RenderOutput = {\n ...output,\n node: undefined,\n blockingList: [],\n menuRequestNode: undefined,\n };\n rendered.forEach((item) => {\n mergeRenderOutput(childrenOutput, item);\n mergeSiblingRenderMenuRequest(childrenOutput, item);\n });\n if (childrenOutput.node) {\n brick.child = childrenOutput.node;\n }\n mergeRenderOutput(output, {\n ...childrenOutput,\n node: undefined,\n });\n\n appendMenuRequestNode(\n menuRequestReturnNode,\n (output.menuRequestNode = childrenOutput.menuRequestNode)\n );\n };\n blockingList.push(loadChildren());\n\n await Promise.all(blockingList);\n\n return output;\n}\n\nfunction isGeneralizedTrackAll(brickIf: unknown): boolean {\n return typeof brickIf === \"string\"\n ? isTrackAll(brickIf)\n : isPreEvaluated(brickIf) &&\n // istanbul ignore next: covered by e2e tests\n isTrackAll(getPreEvaluatedRaw(brickIf));\n}\n\ntype ValidControlBrick = \":forEach\" | \":if\" | \":switch\";\n\nfunction ensureValidControlBrick(\n brick: string\n): asserts brick is ValidControlBrick {\n if (brick !== \":forEach\" && brick !== \":if\" && brick !== \":switch\") {\n throw new Error(`Unknown storyboard control node: \"${brick}\"`);\n }\n}\n\nasync function renderForEach(\n returnNode: RenderReturnNode,\n dataSource: unknown[],\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId: string | undefined,\n tplStack: Map<string, number>,\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n const output = getEmptyRenderOutput();\n\n const size = dataSource.length;\n const rendered = await Promise.all(\n dataSource.map((item, i) =>\n Promise.all(\n bricks.map((brickConf) =>\n renderBrick(\n returnNode,\n brickConf,\n {\n ...runtimeContext,\n forEachItem: item,\n forEachIndex: i,\n forEachSize: size,\n },\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n tplStack && new Map(tplStack),\n initialTracker\n )\n )\n )\n )\n );\n\n // 多层构件并行异步转换,但转换的结果按原顺序串行合并。\n rendered.flat().forEach((item) => {\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport function getDataStores(runtimeContext: RuntimeContext) {\n return [\n runtimeContext.ctxStore,\n ...runtimeContext.tplStateStoreMap.values(),\n ...runtimeContext.formStateStoreMap.values(),\n ];\n}\n\nexport function postAsyncRender(\n output: RenderOutput,\n runtimeContext: RuntimeContext,\n stores: DataStore<DataStoreType>[]\n) {\n flushStableLoadBricks();\n\n return Promise.all([\n ...output.blockingList,\n ...stores.map((store) => store.waitForAll()),\n ...runtimeContext.pendingPermissionsPreCheck,\n ]);\n}\n\nexport function createScopedRuntimeContext(\n runtimeContext: RuntimeContext\n): [\n scopedRuntimeContext: RuntimeContext,\n tplStateStoreScope: DataStore<\"STATE\">[],\n formStateStoreScope: DataStore<\"FORM_STATE\">[],\n] {\n const tplStateStoreScope: DataStore<\"STATE\">[] = [];\n const formStateStoreScope: DataStore<\"FORM_STATE\">[] = [];\n const scopedRuntimeContext: RuntimeContext = {\n ...runtimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n };\n return [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope];\n}\n\nfunction loadMenu(\n menuConf: MenuConf | undefined,\n runtimeContext: RuntimeContext\n) {\n if (!menuConf) {\n return;\n }\n\n // istanbul ignore next\n if ((menuConf as { type?: \"brick\" }).type === \"brick\") {\n // eslint-disable-next-line no-console\n console.error(\"Set menu with brick is dropped in v3:\", menuConf);\n throw new Error(\"Set menu with brick is dropped in v3\");\n }\n\n // istanbul ignore next\n if (menuConf.type === \"resolve\") {\n // eslint-disable-next-line no-console\n console.warn(\"Set menu with resolve is not supported in v3 yet:\", menuConf);\n return;\n }\n\n return asyncComputeRealValue(\n menuConf,\n runtimeContext\n ) as Promise<StaticMenuConf>;\n}\n\nfunction mergeRenderOutput(\n output: RenderOutput,\n newOutput: RenderOutput\n): void {\n const { blockingList, node, menuRequestNode, ...rest } = newOutput;\n output.blockingList.push(...blockingList);\n\n if (node) {\n if (output.node) {\n let last = output.node;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = node;\n } else {\n output.node = node;\n }\n }\n\n Object.assign(output, rest);\n}\n\nfunction mergeSiblingRenderMenuRequest(\n output: RenderOutput,\n newOutput: RenderOutput\n) {\n const menuRequestNode = newOutput.menuRequestNode;\n if (menuRequestNode) {\n if (output.menuRequestNode) {\n let last = output.menuRequestNode;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = menuRequestNode;\n } else {\n output.menuRequestNode = menuRequestNode;\n }\n }\n}\n\nfunction appendMenuRequestNode(\n menuRequestReturnNode: MenuRequestNode,\n menuRequestNode: MenuRequestNode | undefined\n) {\n if (!menuRequestNode) {\n return;\n }\n if (menuRequestReturnNode.child) {\n let last = menuRequestReturnNode.child;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = menuRequestNode;\n } else {\n menuRequestReturnNode.child = menuRequestNode;\n }\n}\n\nfunction getEmptyRenderOutput(): RenderOutput {\n return { blockingList: [] };\n}\n\nexport function childrenToSlots(\n children: (BrickConf | RouteConf)[] | undefined,\n originalSlots: SlotsConf | undefined\n) {\n let newSlots = originalSlots;\n // istanbul ignore next\n if (\n process.env.NODE_ENV === \"development\" &&\n children &&\n !Array.isArray(children)\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Specified brick children but not array:\",\n `<${typeof children}>`,\n children\n );\n }\n if (Array.isArray(children) && !newSlots) {\n newSlots = {};\n for (const { slot: sl, ...child } of children) {\n const slot = sl ?? \"\";\n const type = isRouteConf(child) ? \"routes\" : \"bricks\";\n if (hasOwnProperty(newSlots, slot)) {\n const slotConf = newSlots[slot];\n if (slotConf.type !== type) {\n throw new Error(`Slot \"${slot}\" conflict between bricks and routes.`);\n }\n (slotConf as SlotConfOfBricks)[type as \"bricks\"].push(\n child as BrickConf\n );\n } else {\n newSlots[slot] = {\n type: type as \"bricks\",\n [type as \"bricks\"]: [child as BrickConf],\n };\n }\n }\n }\n return newSlots;\n}\n\nfunction catchLoad(\n promise: Promise<unknown>,\n type: \"brick\" | \"processors\" | \"script\" | \"stylesheet\",\n name: string,\n unknownPolicy: RendererContext[\"unknownBricks\"]\n) {\n return unknownPolicy === \"silent\"\n ? promise.catch((e) => {\n // eslint-disable-next-line no-console\n console.error(`Load %s \"%s\" failed:`, type, name, e);\n })\n : promise;\n}\n\nfunction isRouteParamsEqual(\n a: Record<string, string>,\n b: Record<string, string>\n) {\n if (isEqual(a, b)) {\n return true;\n }\n const omitNumericKeys = (v: unknown, k: string) => {\n return String(Number(k)) === k;\n };\n const c = omitBy(a, omitNumericKeys);\n const d = omitBy(b, omitNumericKeys);\n return isEqual(c, d);\n}\n\nfunction isRouteConf(child: BrickConf | RouteConf): child is RouteConf {\n return !!(child as RouteConf).path && !(child as BrickConf).brick;\n}\n","import { isObject } from \"@next-core/utils/general\";\nimport type {\n BrickConf,\n UseBrickSlotsConf,\n UseSingleBrickConf,\n} from \"@next-core/types\";\nimport {\n RuntimeContext,\n RuntimeUseBrickConfWithRootSymbols,\n symbolForRootRuntimeContext,\n} from \"./secret_internals.js\";\nimport { childrenToSlots } from \"./Renderer.js\";\n\nexport function setupRootRuntimeContext(\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n shallow?: boolean\n) {\n function walk(props: unknown) {\n if (!isObject(props) || typeof props === \"function\") {\n return;\n }\n\n if (Array.isArray(props)) {\n props.map(walk);\n return;\n }\n\n for (const [key, value] of Object.entries(props)) {\n if (isObject(value) && key === \"useBrick\") {\n if (Array.isArray(value)) {\n value.forEach((v) => setupBrick(v, true));\n } else {\n setupBrick(\n value as UseSingleBrickConf as RuntimeUseBrickConfWithRootSymbols,\n true,\n // For inside useBrick, we always need to setup recursively.\n true\n );\n }\n } else {\n walk(value);\n }\n }\n }\n\n function setupBrick(\n brick: BrickConf,\n inUseBrick?: boolean,\n forceRecursive?: boolean\n ) {\n if (inUseBrick) {\n (brick as RuntimeUseBrickConfWithRootSymbols)[\n symbolForRootRuntimeContext\n ] = runtimeContext;\n }\n\n walk(brick.properties);\n\n if (shallow && !forceRecursive) {\n return;\n }\n\n const transpiledSlots = childrenToSlots(brick.children, brick.slots) as\n | UseBrickSlotsConf\n | undefined;\n\n for (const slotConf of Object.values(transpiledSlots ?? {})) {\n for (const brick of slotConf.bricks ?? []) {\n setupBrick(brick, inUseBrick);\n }\n }\n }\n\n for (const brick of bricks) {\n setupBrick(brick);\n }\n}\n","import { getBasePath } from \"./getBasePath.js\";\n\nlet misc: PageInfo;\n\n/** 运行时页面信息。*/\nexport interface PageInfo {\n /** 当前是否处于 iframe 模式。 */\n isInIframe: boolean;\n\n /** 当前是否处于同域的 iframe 模式。 */\n isInIframeOfSameSite: boolean;\n\n /** 当前是否处于新框架下的 iframe 模式。 */\n isInIframeOfNext: boolean;\n\n /** 当前是否处于 Visual Builder 预览的 iframe 模式。 */\n isInIframeOfVisualBuilder: boolean;\n\n /** 当前是否处于老 console 下的 iframe 模式。 */\n isInIframeOfLegacyConsole: boolean;\n}\n\nexport function getPageInfo(): PageInfo {\n if (!misc) {\n misc = {\n isInIframe: false,\n isInIframeOfSameSite: false,\n isInIframeOfNext: false,\n isInIframeOfVisualBuilder: false,\n isInIframeOfLegacyConsole: false,\n };\n\n if (window !== window.parent) {\n misc.isInIframe = true;\n try {\n // Handle:\n // - Previewing in visual builder by iframe.\n // - Nesting next in next.\n // - Nesting console in next.\n if (window.origin === window.parent.origin) {\n misc.isInIframeOfSameSite = true;\n const selfIsNext = getBasePath() === \"/next/\";\n const parentPathname = window.parent.location.pathname;\n const parentIsNext = parentPathname.startsWith(\"/next/\");\n misc.isInIframeOfNext =\n (Number(selfIsNext) ^ Number(parentIsNext)) === 0;\n const prefix = parentIsNext ? \"/next\" : \"\";\n // Allow visual-builder-* extension apps.\n misc.isInIframeOfVisualBuilder =\n parentPathname.startsWith(`${prefix}/visual-builder/`) ||\n parentPathname.startsWith(`${prefix}/visual-builder-`);\n misc.isInIframeOfLegacyConsole = selfIsNext && !parentIsNext;\n }\n } catch {\n // do nothing\n }\n }\n\n Object.freeze(misc);\n }\n\n return misc;\n}\n","import { http } from \"@next-core/http\";\n\nlet nativeController: AbortController;\n\nexport function initAbortController() {\n if (!window.AbortController) {\n return;\n }\n\n nativeController = new AbortController();\n\n http.interceptors.request.use((config) => {\n return {\n ...config,\n options: {\n // Allow user config to override the default abort signal\n signal: config.options?.noAbortOnRouteChange\n ? null\n : nativeController.signal,\n ...config.options,\n },\n };\n });\n}\n\nexport function abortPendingRequest() {\n if (nativeController) {\n nativeController.abort();\n nativeController = new AbortController();\n }\n}\n","import { loadBricksImperatively } from \"@next-core/loader\";\nimport { getBrickPackages, getRuntime, hooks } from \"./internal/Runtime.js\";\nimport { omit } from \"lodash\";\n\ninterface WaterMarkProps {\n container?: HTMLElement;\n content?: string | string[];\n zIndex?: number;\n rotate?: number;\n width?: number;\n height?: number;\n image?: string;\n font?: {\n color?: CanvasFillStrokeStyles[\"fillStyle\"];\n fontSize?: number | string;\n fontWeight?: \"normal\" | \"light\" | \"weight\" | number;\n fontStyle?: \"none\" | \"normal\" | \"italic\" | \"oblique\";\n fontFamily?: string;\n textAlign?: CanvasTextAlign;\n };\n style?: React.CSSProperties;\n gap?: [number, number];\n offset?: [number, number];\n}\n\nlet brick: {\n resolve(options: WaterMarkProps): void;\n};\n\nexport const WATEMARK_BRICKNAME = \"basic.show-watermark\";\n\nexport function setWatermark() {\n const flags = getRuntime().getFeatureFlags();\n const settings = getRuntime().getMiscSettings();\n if (!flags[\"show-watermark\"]) {\n return;\n }\n const isDeveloper =\n window.APP_ROOT?.match(/versions\\/([^/]+)\\//)?.[1] === \"0.0.0\" ||\n window.APP_ROOT?.match(/micro-apps\\/(?:v2|v3)\\/[^/]+\\/([^/]+)/)?.[1] ===\n \"0.0.0\";\n const username =\n (hooks?.auth?.getAuth() as Record<string, any>)?.username ?? \"\";\n const watermarkConfig = (settings.watermarkConfig ?? {\n flags: {},\n }) as WaterMarkProps & {\n flags: {\n \"show-development\"?: boolean;\n \"show-user\"?: boolean;\n };\n };\n\n const content = [\n ...(typeof watermarkConfig.content === \"string\"\n ? [watermarkConfig.content]\n : watermarkConfig.content ?? []),\n watermarkConfig.flags?.[\"show-development\"] && isDeveloper\n ? \"Development\"\n : \"\",\n watermarkConfig.flags?.[\"show-user\"] ? username : \"\",\n ].filter(Boolean);\n\n // Do not call showWatermark if there is no content\n if (content.length === 0) {\n return;\n }\n\n const defaultProps: WaterMarkProps = {\n content,\n zIndex: 1001,\n width: 200,\n font: {\n fontSize: 28,\n },\n gap: [190, 190],\n ...omit(watermarkConfig, [\"content\", \"flags\"]),\n };\n if (brick) {\n brick.resolve(defaultProps);\n } else {\n loadBricksImperatively([WATEMARK_BRICKNAME], getBrickPackages()).then(\n () => {\n brick = document.createElement(WATEMARK_BRICKNAME) as any;\n\n brick.resolve(defaultProps);\n },\n // istanbul ignore next\n (error: unknown) => {\n // eslint-disable-next-line no-console\n console.error(\"Load watermark service failed:\", error);\n }\n );\n }\n}\n","import { RuntimeStoryboard } from \"@next-core/types\";\nimport { customTemplates } from \"../CustomTemplates.js\";\n\nexport function registerCustomTemplates(storyboard: RuntimeStoryboard) {\n if (storyboard.$$registerCustomTemplateProcessed) {\n return;\n }\n storyboard.$$registerCustomTemplateProcessed = true;\n const templates = storyboard.meta?.customTemplates;\n if (Array.isArray(templates)) {\n for (const tpl of templates) {\n const tagName = tpl.name.includes(\".\")\n ? tpl.name\n : `${storyboard.app.id}.${tpl.name}`;\n customTemplates.define(tagName, tpl);\n }\n }\n}\n","export function setUIVersion(version: string | undefined | null) {\n // 仅允许特定的 UI 版本\n let ui: string;\n switch (version) {\n case \"8.2\":\n ui = \"v8-2\";\n break;\n default:\n ui = \"v8\";\n }\n document.documentElement.dataset.ui = ui;\n}\n","import { HttpFetchError } from \"@next-core/http\";\nimport { BrickLoadError } from \"@next-core/loader\";\n\nexport function isNetworkError(error: unknown): boolean {\n return (\n !!error &&\n (error instanceof BrickLoadError ||\n error instanceof HttpFetchError ||\n (error instanceof Error && error.name === \"ChunkLoadError\") ||\n (error instanceof Event &&\n error.type === \"error\" &&\n error.target instanceof HTMLScriptElement))\n );\n}\n","import { isNetworkError } from \"./isNetworkError.js\";\n\nconst STORAGE_KEY = \"reload-for-error-count\";\nconst MAX_RELOAD_COUNT = 2;\n\nexport function shouldReloadForError(error: unknown): boolean {\n if (/upchat/i.test(navigator.userAgent) && isNetworkError(error)) {\n const count = +(sessionStorage.getItem(STORAGE_KEY) ?? 0);\n if (count < MAX_RELOAD_COUNT) {\n sessionStorage.setItem(STORAGE_KEY, String(count + 1));\n return true;\n }\n resetReloadForError();\n }\n return false;\n}\n\nexport function resetReloadForError() {\n sessionStorage.removeItem(STORAGE_KEY);\n}\n","import { Action, locationsAreEqual } from \"history\";\nimport type {\n BreadcrumbItemConf,\n MicroApp,\n StaticMenuConf,\n Storyboard,\n} from \"@next-core/types\";\nimport { HttpAbortError } from \"@next-core/http\";\nimport {\n clearExpressionASTCache,\n clearFunctionASTCache,\n} from \"@next-core/cook\";\nimport { uniqueId } from \"lodash\";\nimport { NextHistoryState, NextLocation, getHistory } from \"../history.js\";\nimport {\n RenderOutput,\n getDataStores,\n postAsyncRender,\n renderRoutes,\n} from \"./Renderer.js\";\nimport { DataStore } from \"./data/DataStore.js\";\nimport { clearResolveCache } from \"./data/resolveData.js\";\nimport { mountTree, unmountTree } from \"./mount.js\";\nimport { isOutsideApp, matchStoryboard } from \"./matchStoryboard.js\";\nimport { registerStoryboardFunctions } from \"./compute/StoryboardFunctions.js\";\nimport { RendererContext, RouteHelper } from \"./RendererContext.js\";\nimport {\n applyMode,\n applyTheme,\n getLocalAppsTheme,\n setMode,\n setTheme,\n setThemeVariant,\n} from \"../themeAndMode.js\";\nimport {\n _internalApiGetAppInBootstrapData,\n getRuntime,\n hooks,\n} from \"./Runtime.js\";\nimport { getPageInfo } from \"../getPageInfo.js\";\nimport type {\n MenuRequestNode,\n RenderRoot,\n RuntimeContext,\n} from \"./interfaces.js\";\nimport { resetAllComputedMarks } from \"./compute/markAsComputed.js\";\nimport { handleHttpError, isUnauthenticatedError } from \"../handleHttpError.js\";\nimport { abortPendingRequest, initAbortController } from \"./abortController.js\";\nimport { setLoginStateCookie } from \"../setLoginStateCookie.js\";\nimport { registerCustomTemplates } from \"./registerCustomTemplates.js\";\nimport { fulfilStoryboard } from \"./fulfilStoryboard.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { insertPreviewRoutes } from \"./insertPreviewRoutes.js\";\nimport { devtoolsHookEmit } from \"./devtools.js\";\nimport { setUIVersion } from \"../setUIVersion.js\";\nimport { setAppVariable } from \"../setAppVariable.js\";\nimport { setWatermark } from \"../setWatermark.js\";\nimport { clearMatchedRoutes } from \"./routeMatchedMap.js\";\nimport { ErrorNode, PageError } from \"./ErrorNode.js\";\nimport {\n resetReloadForError,\n shouldReloadForError,\n} from \"../shouldReloadForError.js\";\nimport { computeRealValue } from \"./compute/computeRealValue.js\";\n\ntype RenderTask = InitialRenderTask | SubsequentRenderTask;\n\ninterface InitialRenderTask {\n location: NextLocation;\n prevLocation?: undefined;\n action?: undefined;\n}\n\ninterface SubsequentRenderTask {\n location: NextLocation;\n prevLocation: NextLocation;\n action: Action;\n}\n\nexport class Router {\n readonly #storyboards: Storyboard[];\n #rendering = false;\n #nextRender?: RenderTask;\n #runtimeContext?: RuntimeContext;\n #rendererContext?: RendererContext;\n #rendererContextTrashCan = new Set<RendererContext | undefined>();\n #redirectCount = 0;\n #renderId?: string;\n #currentApp?: MicroApp;\n #previousApp?: MicroApp;\n #navConfig?: { breadcrumb?: BreadcrumbItemConf[] };\n #bootstrapFailed = false;\n\n constructor(storyboards: Storyboard[]) {\n this.#storyboards = storyboards;\n\n const history = getHistory();\n window.addEventListener(\"beforeunload\", (event) => {\n const message = this.#getBlockMessageBeforePageLave({});\n // See examples in https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload\n if (message) {\n // Cancel the event\n // If you prevent default behavior in Mozilla Firefox prompt will always be shown\n event.preventDefault();\n // Chrome requires returnValue to be set\n event.returnValue = \"\";\n } else {\n // the absence of a returnValue property on the event will guarantee the browser unload happens\n delete event.returnValue;\n }\n });\n\n history.block((location, action) =>\n this.#getBlockMessageBeforePageLave({ location, action })\n );\n }\n\n getRenderId() {\n return this.#renderId;\n }\n\n // istanbul ignore next\n getRuntimeContext() {\n return this.#runtimeContext;\n }\n\n getRecentApps() {\n return { currentApp: this.#currentApp, previousApp: this.#previousApp };\n }\n\n getNavConfig() {\n return this.#navConfig;\n }\n\n #getBlockMessageBeforePageLave(detail: {\n location?: NextLocation;\n action?: Action;\n }): string | undefined {\n const history = getHistory();\n const previousMessage = history.getBlockMessage();\n this.#rendererContext?.dispatchBeforePageLeave(detail);\n const message = history.getBlockMessage();\n if (!previousMessage && message) {\n // Auto unblock only if new block was introduced by `onBeforePageLeave`.\n history.unblock();\n }\n return message;\n }\n\n #safeRedirect(\n to: string,\n state: NextHistoryState | undefined,\n from: NextLocation\n ): void {\n if (this.#redirectCount++ > 10) {\n const message = `Infinite redirect detected: from \"${from.pathname}${from.search}${from.hash}\" to \"${to}\"`;\n // istanbul ignore else: error cannot be caught in test\n if (process.env.NODE_ENV === \"test\") {\n // eslint-disable-next-line no-console\n console.error(message);\n return;\n } else {\n throw new Error(message);\n }\n }\n getHistory().replace(to, state);\n }\n\n bootstrap() {\n initAbortController();\n const history = getHistory();\n let nextPrevLocation = history.location;\n history.listen((location, action) => {\n const prevLocation = nextPrevLocation;\n nextPrevLocation = location;\n if (this.#rendering) {\n this.#nextRender = { location, prevLocation, action };\n } else {\n this.#queuedRender({ location, prevLocation, action }).catch(\n handleHttpError\n );\n }\n });\n return this.#queuedRender({ location: history.location });\n }\n\n async #queuedRender(next: RenderTask) {\n this.#rendering = true;\n try {\n await this.#preRender(next);\n } finally {\n this.#rendering = false;\n if (this.#nextRender) {\n const nextRender = this.#nextRender;\n this.#nextRender = undefined;\n await this.#queuedRender(nextRender);\n }\n }\n }\n\n async #preRender({ location, prevLocation, action }: RenderTask) {\n if (prevLocation) {\n let ignoreRendering: boolean | undefined;\n const omittedLocationProps: Partial<NextLocation> = {\n hash: undefined,\n state: undefined,\n };\n // Omit the \"key\" when checking whether locations are equal in certain situations.\n if (\n // When current location is triggered by browser action of hash link.\n location.key === undefined ||\n // When current location is triggered by browser action of non-push-or-replace,\n // such as goBack or goForward,\n (action === \"POP\" &&\n // and the previous location was triggered by hash link,\n (prevLocation.key === undefined ||\n // or the previous location specified notify false.\n prevLocation.state?.notify === false))\n ) {\n omittedLocationProps.key = undefined;\n }\n if (\n locationsAreEqual(\n { ...prevLocation, ...omittedLocationProps },\n { ...location, ...omittedLocationProps }\n ) ||\n (action !== \"POP\" && location.state?.notify === false)\n ) {\n // Ignore rendering if location not changed except hash, state and optional key.\n // Ignore rendering if notify is `false`.\n ignoreRendering = true;\n }\n\n // Note: dot not perform incremental render when bootstrap failed.\n if (\n !ignoreRendering &&\n !location.state?.noIncremental &&\n !this.#bootstrapFailed\n ) {\n ignoreRendering =\n await this.#rendererContext?.didPerformIncrementalRender(\n location,\n prevLocation\n );\n }\n\n if (ignoreRendering) {\n return;\n }\n\n abortPendingRequest();\n this.#rendererContext?.dispatchPageLeave();\n\n if (action === \"POP\") {\n const storyboard = matchStoryboard(\n this.#storyboards,\n location.pathname\n );\n // When a browser action of goBack or goForward is performing,\n // force reload when the target page is a page of an outside app.\n if (isOutsideApp(storyboard)) {\n window.location.reload();\n return;\n }\n }\n\n devtoolsHookEmit(\"locationChange\");\n }\n\n return this.#render(location, !prevLocation);\n }\n\n async #render(location: NextLocation, isBootstrap: boolean): Promise<void> {\n const renderId = (this.#renderId = uniqueId(\"render-id-\"));\n let blocked = hooks?.auth?.isBlockedPath?.(location.pathname);\n\n resetAllComputedMarks();\n clearResolveCache();\n hooks?.flowApi?.clearCollectWidgetContract();\n\n const history = getHistory();\n history.unblock();\n\n // const renderStartTime = performance.now();\n const finishPageView = hooks?.pageView?.create();\n\n const storyboard = blocked\n ? undefined\n : matchStoryboard(this.#storyboards, location.pathname);\n\n const previousApp = this.#runtimeContext?.app;\n const currentAppId = storyboard?.app?.id;\n // dynamically change the value of the APP variable, if it's union app\n if (\n window.BOOTSTRAP_UNION_FILE &&\n currentAppId &&\n currentAppId !== previousApp?.id\n ) {\n setAppVariable({\n appId: currentAppId,\n version: storyboard.app.currentVersion!,\n });\n }\n\n if (storyboard?.app) {\n await fulfilStoryboard(storyboard);\n }\n\n const currentApp = (this.#currentApp = storyboard?.app);\n\n if (currentApp) {\n storyboard?.meta?.blackList?.forEach?.((item) => {\n let path = item && (item.to || item.url);\n\n if (!path || typeof path !== \"string\") return;\n\n path = path\n .split(\"?\")[0]\n .replace(/\\${\\s*(?:(?:PATH|CTX)\\.)?(\\w+)\\s*}/g, \":$1\");\n\n if (item.to) {\n try {\n path = computeRealValue(path, {\n app: currentApp,\n } as RuntimeContext) as string;\n } catch (e) /* istanbul ignore next */ {\n // eslint-disable-next-line no-console\n console.error(e);\n }\n } else {\n path = path.replace(/^\\/next\\//, \"/\");\n }\n\n path && path.startsWith(\"/\") && hooks?.auth?.addPathToBlackList?.(path);\n });\n blocked = hooks?.auth?.isBlockedPath?.(location.pathname);\n }\n\n setWatermark();\n\n // Storyboard maybe re-assigned, e.g. when open launchpad.\n const appChanged =\n previousApp && currentApp\n ? previousApp.id !== currentApp.id\n : previousApp !== currentApp;\n\n clearExpressionASTCache();\n if (appChanged) {\n clearFunctionASTCache();\n }\n\n // TODO: handle favicon\n\n // Set `Router::#currentApp` before calling `getFeatureFlags()`\n const flags = getRuntime().getFeatureFlags();\n const prevRendererContext = this.#rendererContext;\n\n const redirectTo = (to: string, state?: NextHistoryState): void => {\n finishPageView?.({ status: \"redirected\" });\n this.#rendererContextTrashCan.add(prevRendererContext);\n this.#safeRedirect(to, state, location);\n };\n\n const redirectToLogin = (): void => {\n const to = flags[\"sso-enabled\"] ? \"/sso-auth/login\" : \"/auth/login\";\n setLoginStateCookie(location);\n redirectTo(to, { from: location });\n };\n\n const main = document.querySelector(\"#main-mount-point\") as HTMLElement;\n const portal = document.querySelector(\"#portal-mount-point\") as HTMLElement;\n\n const renderRoot: RenderRoot = {\n tag: RenderTag.ROOT,\n container: main,\n createPortal: portal,\n };\n\n const cleanUpPreviousRender = (): void => {\n unmountTree(main);\n unmountTree(portal);\n\n // Note: redirects can lead to multiple trash renderer contexts.\n this.#rendererContextTrashCan.add(prevRendererContext);\n for (const item of this.#rendererContextTrashCan) {\n if (item) {\n item.dispatchOnUnmount();\n item.dispose();\n }\n }\n this.#rendererContextTrashCan.clear();\n hooks?.messageDispatcher?.reset();\n\n if (appChanged) {\n this.#previousApp = previousApp;\n window.dispatchEvent(\n new CustomEvent(\"app.change\", { detail: { previousApp, currentApp } })\n );\n }\n };\n\n setTheme(\n (currentApp &&\n (getLocalAppsTheme()[currentApp.id] || currentApp.theme)) ||\n \"light\"\n );\n setMode(\"default\");\n setThemeVariant(getRuntime().getMiscSettings().globalThemeVariant);\n\n if (currentApp && !blocked) {\n hooks?.checkInstalledApps?.preCheckInstalledApps(\n storyboard,\n (appId) => !!_internalApiGetAppInBootstrapData(appId)\n );\n\n const routeHelper: RouteHelper = {\n bailout: (output) => {\n if (output.unauthenticated) {\n redirectToLogin();\n return true;\n }\n if (output.redirect) {\n redirectTo(output.redirect.path, output.redirect.state);\n return true;\n }\n // Reset redirect count if no redirect is set.\n this.#redirectCount = 0;\n },\n mergeMenus: async (menuRequests) => {\n const menuConfs = await Promise.all(menuRequests);\n this.#navConfig = mergeMenuConfs(menuConfs);\n window.dispatchEvent(\n new CustomEvent(\"navConfig.change\", { detail: this.#navConfig })\n );\n },\n catch: async (error, returnNode, isCurrentBootstrap, isReCatch) => {\n if (isUnauthenticatedError(error) && !window.NO_AUTH_GUARD) {\n redirectToLogin();\n return;\n } else if (error instanceof HttpAbortError) {\n this.#rendererContextTrashCan.add(prevRendererContext);\n return;\n } else {\n const noAuthGuardLoginPath =\n getRuntime().getMiscSettings().noAuthGuardLoginPath;\n if (isUnauthenticatedError(error) && noAuthGuardLoginPath) {\n redirectTo(noAuthGuardLoginPath as string, { from: location });\n return;\n }\n if (isCurrentBootstrap) {\n throw error;\n }\n if (!isReCatch && shouldReloadForError(error)) {\n window.location.reload();\n return;\n }\n return {\n failed: true,\n output: {\n node: await ErrorNode(error, returnNode, !isReCatch),\n blockingList: [],\n },\n };\n }\n },\n };\n\n const rendererContext = (this.#rendererContext = new RendererContext(\n \"page\",\n { routeHelper, renderId }\n ));\n\n const runtimeContext: RuntimeContext = (this.#runtimeContext = {\n app: currentApp,\n location,\n query: new URLSearchParams(location.search),\n flags,\n sys: {\n ...hooks?.auth?.getAuth(),\n ...getPageInfo(),\n settings: { brand: getRuntime().getBrandSettings() },\n },\n ctxStore: new DataStore(\"CTX\", undefined, rendererContext),\n pendingPermissionsPreCheck: [\n hooks?.checkPermissions?.preCheckPermissions(storyboard),\n ],\n tplStateStoreMap: new Map<string, DataStore<\"STATE\">>(),\n formStateStoreMap: new Map<string, DataStore<\"FORM_STATE\">>(),\n });\n\n this.#navConfig = undefined;\n\n registerCustomTemplates(storyboard);\n registerStoryboardFunctions(storyboard.meta?.functions, currentApp);\n hooks?.flowApi?.collectContract(storyboard.meta?.contracts);\n\n let failed = false;\n let output: RenderOutput;\n let stores: DataStore<\"CTX\" | \"STATE\" | \"FORM_STATE\">[] = [];\n\n try {\n clearMatchedRoutes();\n const rootMenuRequestNode: MenuRequestNode = {};\n output = await renderRoutes(\n renderRoot,\n insertPreviewRoutes(storyboard.routes),\n runtimeContext,\n rendererContext,\n [],\n rootMenuRequestNode\n );\n if (routeHelper.bailout(output)) {\n return;\n }\n\n stores = getDataStores(runtimeContext);\n\n await postAsyncRender(output, runtimeContext, stores);\n\n rootMenuRequestNode.child = output.menuRequestNode;\n rendererContext.setInitialMenuRequestNode(rootMenuRequestNode);\n await routeHelper.mergeMenus(rendererContext.getMenuRequests());\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Router failed:\", error);\n if (isBootstrap) {\n this.#bootstrapFailed = true;\n }\n const result = await routeHelper.catch(error, renderRoot, isBootstrap);\n if (!result) {\n return;\n }\n ({ failed, output } = result);\n }\n resetReloadForError();\n renderRoot.child = output.node;\n this.#bootstrapFailed = false;\n\n cleanUpPreviousRender();\n\n if ((output.route && output.route.type !== \"routes\") || failed) {\n if (!failed) {\n // There is a window to set theme and mode by `lifeCycle.onBeforePageLoad`.\n rendererContext.dispatchBeforePageLoad();\n }\n applyTheme();\n applyMode();\n\n setUIVersion(currentApp?.uiVersion);\n mountTree(renderRoot);\n\n // Scroll to top after each rendering.\n // See https://github.com/ReactTraining/react-router/blob/master/packages/react-router-dom/docs/guides/scroll-restoration.md\n window.scrollTo(0, 0);\n\n if (!failed) {\n rendererContext.dispatchPageLoad();\n rendererContext.dispatchAnchorLoad();\n rendererContext.dispatchOnMount();\n rendererContext.initializeScrollIntoView();\n rendererContext.initializeMediaChange();\n rendererContext.initializeMessageDispatcher();\n\n for (const store of stores) {\n store.mountAsyncData();\n }\n\n finishPageView?.({\n status: \"ok\",\n path: output.path,\n pageTitle: document.title,\n });\n } else {\n finishPageView?.({ status: \"failed\" });\n }\n devtoolsHookEmit(\"rendered\");\n\n return;\n }\n } else if (\n !window.NO_AUTH_GUARD &&\n hooks?.auth &&\n !hooks.auth.isLoggedIn()\n ) {\n // Todo(steve): refine after api-gateway supports fetching storyboards before logged in.\n // Redirect to login if no storyboard is matched.\n redirectToLogin();\n return;\n } else {\n cleanUpPreviousRender();\n }\n\n applyTheme();\n applyMode();\n\n const node = await ErrorNode(\n new PageError(\n blocked\n ? \"page blocked\"\n : currentApp\n ? \"page not found\"\n : \"app not found\"\n ),\n renderRoot,\n true\n );\n renderRoot.child = node;\n\n mountTree(renderRoot);\n\n // Scroll to top after each rendering.\n window.scrollTo(0, 0);\n finishPageView?.({ status: blocked ? \"blocked\" : \"not-found\" });\n devtoolsHookEmit(\"rendered\");\n }\n}\n\nfunction mergeMenuConfs(menuConfs: StaticMenuConf[]) {\n const navConfig = { breadcrumb: [] as BreadcrumbItemConf[] };\n for (const menuConf of menuConfs) {\n const { breadcrumb } = menuConf;\n if (breadcrumb) {\n if (breadcrumb.overwrite) {\n navConfig.breadcrumb = breadcrumb.items;\n } else {\n navConfig.breadcrumb.push(...breadcrumb.items);\n }\n }\n }\n return navConfig;\n}\n","interface VariableParams {\n appId: string;\n version: string;\n}\n\nexport function setAppVariable(params: VariableParams) {\n const { appId, version } = params;\n if (window.APP_ROOT_TPL) {\n window.APP_ID = appId;\n window.APP_ROOT = window.APP_ROOT_TPL.replace(\"{id}\", appId).replace(\n \"{version}\",\n version\n );\n }\n}\n","import type { RuntimeStoryboard } from \"@next-core/types\";\nimport { hooks } from \"./Runtime.js\";\nimport { registerAppI18n } from \"./registerAppI18n.js\";\n\nexport async function fulfilStoryboard(storyboard: RuntimeStoryboard) {\n if (storyboard.$$fulfilled) {\n return;\n }\n if (!storyboard.$$fulfilling) {\n storyboard.$$fulfilling = doFulfilStoryboard(storyboard);\n }\n return storyboard.$$fulfilling;\n}\n\nasync function doFulfilStoryboard(storyboard: RuntimeStoryboard) {\n await hooks?.fulfilStoryboard?.(storyboard);\n registerAppI18n(storyboard);\n Object.assign(storyboard, {\n $$fulfilled: true,\n $$fulfilling: null,\n });\n}\n","import { findLastIndex } from \"lodash\";\nimport type { RouteConf } from \"@next-core/types\";\n\nexport function insertPreviewRoutes(routes: RouteConf[]): RouteConf[] {\n // Insert preview routes for iframe only.\n if (window.parent === window) {\n return routes;\n }\n\n let mergedRoutes = routes;\n\n const specificTemplatePreviewIndex = findLastIndex(mergedRoutes, (route) =>\n route.path.startsWith(\"${APP.homepage}/_dev_only_/template-preview/\")\n );\n mergedRoutes = [\n ...mergedRoutes.slice(0, specificTemplatePreviewIndex + 1),\n {\n path: \"${APP.homepage}/_dev_only_/template-preview/:templateId\",\n bricks: [{ brick: \"span\" }],\n menu: false,\n exact: true,\n } as RouteConf,\n ...mergedRoutes.slice(specificTemplatePreviewIndex + 1),\n ];\n\n const specificSnippetPreviewIndex = findLastIndex(mergedRoutes, (route) =>\n route.path.startsWith(\"${APP.homepage}/_dev_only_/snippet-preview/\")\n );\n mergedRoutes = [\n ...mergedRoutes.slice(0, specificSnippetPreviewIndex + 1),\n {\n path: \"${APP.homepage}/_dev_only_/snippet-preview/:snippetId\",\n bricks: [{ brick: \"span\" }],\n menu: false,\n exact: true,\n } as RouteConf,\n ...mergedRoutes.slice(specificSnippetPreviewIndex + 1),\n ];\n\n return mergedRoutes;\n}\n","import type { BrickPackage } from \"@next-core/types\";\n\n// Allow inject brick packages in a runtime other than Brick Next.\nexport const injectedBrickPackages: BrickPackage[] | null =\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n typeof BRICK_PACKAGES !== \"undefined\" ? BRICK_PACKAGES : null;\n","import {\n BaseColors,\n BrandColor,\n getStyleByBaseColors,\n getStyleByBrandColor,\n getStyleByVariables,\n} from \"@next-core/color-theme\";\n\nexport type ColorThemeOptions =\n | ColorThemeOptionsByBrand\n | ColorThemeOptionsByBaseColors\n | ColorThemeOptionsByVariables;\n\nexport interface ColorThemeOptionsByBrand {\n type: \"brandColor\";\n light?: BrandColor;\n dark?: BrandColor;\n}\n\nexport interface ColorThemeOptionsByBaseColors {\n type: \"baseColors\";\n light?: BaseColors;\n dark?: BaseColors;\n backgroundColor?: string;\n}\n\nexport interface ColorThemeOptionsByVariables {\n type: \"variables\";\n light?: Record<string, string>;\n dark?: Record<string, string>;\n}\n\nexport interface ThemeSettings {\n brandColor?: Omit<ColorThemeOptionsByBrand, \"type\">;\n baseColors?: Omit<ColorThemeOptionsByBaseColors, \"type\">;\n variables?: Omit<ColorThemeOptionsByVariables, \"type\">;\n}\n\nexport function customizeColorTheme(theme: ThemeSettings | undefined): void {\n if (!theme) {\n return;\n }\n if (theme.brandColor) {\n applyColorTheme({\n type: \"brandColor\",\n ...theme.brandColor,\n });\n } else if (theme.baseColors) {\n applyColorTheme({\n type: \"baseColors\",\n ...theme.baseColors,\n });\n } else if (theme.variables) {\n applyColorTheme({\n type: \"variables\",\n ...theme.variables,\n });\n }\n}\n\nexport function applyColorTheme(\n options: ColorThemeOptions\n): (() => void) | undefined {\n const style: string[] = [];\n const themes = [\"light\", \"dark\"] as const;\n themes.forEach((theme) => {\n if (options[theme]) {\n switch (options.type) {\n case \"brandColor\":\n style.push(getStyleByBrandColor(theme, options[theme]!));\n break;\n case \"baseColors\":\n style.push(\n getStyleByBaseColors(\n theme,\n options[theme]!,\n options.backgroundColor\n )\n );\n break;\n case \"variables\":\n style.push(getStyleByVariables(theme, options[theme]!));\n break;\n }\n }\n });\n\n if (style.length > 0) {\n const element = document.createElement(\"style\");\n element.textContent = style.join(\"\\n\\n\");\n document.head.appendChild(element);\n return () => {\n element.remove();\n };\n }\n}\n","// istanbul ignore file\n// Todo(steve): This file will be removed in the future.\nimport { hooks } from \"./internal/Runtime.js\";\n\n/** @deprecated import it from \"@next-core/easyops-runtime\" instead */\nexport function authenticate(...args: unknown[]): void {\n hooks?.auth?.authenticate?.(...args);\n}\n\n/** @deprecated import it from \"@next-core/easyops-runtime\" instead */\nexport function getAuth() {\n return hooks?.auth?.getAuth();\n}\n\n/** @deprecated import it from \"@next-core/easyops-runtime\" instead */\nexport function logout() {\n return hooks?.auth?.logout?.();\n}\n\n/** @deprecated import it from \"@next-core/easyops-runtime\" instead */\nexport function isLoggedIn() {\n return hooks?.auth?.isLoggedIn();\n}\n","class CustomEditorRegistry {\n readonly #registry = new Map<string, Function>();\n\n define(editorName: string, editorFunc: Function) {\n if (this.#registry.has(editorName)) {\n // eslint-disable-next-line no-console\n console.error(`Custom editor of \"${editorName}\" already registered`);\n return;\n }\n\n this.#registry.set(editorName, editorFunc);\n }\n\n get(editorName: string) {\n return this.#registry.get(editorName);\n }\n}\n\nexport const customEditors = new CustomEditorRegistry();\n","import { getProviderBrick } from \"./internal/data/getProviderBrick.js\";\nimport {\n ResolveOptions,\n resolveByProvider,\n} from \"./internal/data/resolveData.js\";\n\nexport async function fetchByProvider(\n provider: string,\n args: unknown[],\n options?: ResolveOptions\n) {\n const providerBrick = (await getProviderBrick(provider)) as unknown as Record<\n string,\n Function\n >;\n return resolveByProvider(providerBrick, provider, \"resolve\", args, options);\n}\n","import type {\n BrickConf,\n ContextConf,\n CustomTemplate,\n MetaI18n,\n MicroApp,\n SiteTheme,\n Storyboard,\n StoryboardFunction,\n} from \"@next-core/types\";\nimport { i18n } from \"@next-core/i18n\";\nimport { replaceUseChildren } from \"@next-core/utils/storyboard\";\nimport { uniqueId } from \"lodash\";\nimport {\n RenderOutput,\n getDataStores,\n postAsyncRender,\n renderBricks,\n} from \"./internal/Renderer.js\";\nimport { RendererContext } from \"./internal/RendererContext.js\";\nimport { DataStore } from \"./internal/data/DataStore.js\";\nimport type { RenderRoot, RuntimeContext } from \"./internal/interfaces.js\";\nimport { mountTree, unmountTree } from \"./internal/mount.js\";\nimport { applyMode, applyTheme, setMode, setTheme } from \"./themeAndMode.js\";\nimport { RenderTag } from \"./internal/enums.js\";\nimport { registerStoryboardFunctions } from \"./internal/compute/StoryboardFunctions.js\";\nimport { registerAppI18n } from \"./internal/registerAppI18n.js\";\nimport { registerCustomTemplates } from \"./internal/registerCustomTemplates.js\";\nimport { setUIVersion } from \"./setUIVersion.js\";\nimport { ErrorNode } from \"./internal/ErrorNode.js\";\nimport {\n isolatedFunctionRegistry,\n registerIsolatedFunctions,\n} from \"./internal/compute/IsolatedFunctions.js\";\nimport {\n isolatedTemplateRegistryMap,\n registerIsolatedTemplates,\n} from \"./internal/IsolatedTemplates.js\";\nimport { hooks } from \"./internal/Runtime.js\";\n\nexport interface CreateRootOptions {\n portal?: HTMLElement;\n /**\n * Defaults to \"fragment\", only set it to \"page\" when the root is in a standalone iframe.\n * - page: render as whole page, triggering page life cycles, and enable register of functions/templates/i18n.\n * - fragment: render as fragment, not triggering page life cycles, and disable register of functions/templates/i18n.\n */\n scope?: \"page\" | \"fragment\";\n\n /**\n * Whether to throw error when encountering unknown bricks.\n *\n * Defaults to \"throw\".\n */\n unknownBricks?: \"silent\" | \"throw\";\n\n /**\n * Whether the root supports `useChildren`.\n */\n supportsUseChildren?: boolean;\n\n /**\n * Set unsafe_penetrate to true to allow accessing global variables\n * from an isolated root.\n *\n * It is unsafe, use it at your own risk.\n */\n unsafe_penetrate?: boolean;\n}\n\nexport interface RenderOptions {\n theme?: SiteTheme;\n uiVersion?: string;\n language?: string;\n context?: ContextConf[];\n functions?: StoryboardFunction[];\n templates?: CustomTemplate[];\n i18n?: MetaI18n;\n url?: string;\n app?: MicroApp;\n}\n\nexport function unstable_createRoot(\n container: HTMLElement | DocumentFragment,\n {\n portal: _portal,\n scope = \"fragment\",\n unknownBricks,\n supportsUseChildren,\n unsafe_penetrate,\n }: CreateRootOptions = {}\n) {\n let portal = _portal;\n let createPortal: RenderRoot[\"createPortal\"];\n if (_portal) {\n createPortal = _portal;\n } else {\n // Create portal container when necessary.\n createPortal = () => {\n portal = document.createElement(\"div\");\n portal.style.position = \"absolute\";\n portal.style.width = portal.style.height = \"0\";\n document.body.append(portal);\n return portal;\n };\n }\n let unmounted = false;\n let rendererContext: RendererContext | undefined;\n let clearI18nBundles: Function | undefined;\n const isolatedRoot = scope === \"page\" ? undefined : Symbol(\"IsolatedRoot\");\n\n return {\n async render(\n brick: BrickConf | BrickConf[],\n {\n theme,\n uiVersion,\n language,\n context,\n functions,\n templates,\n i18n: i18nData,\n url,\n app,\n }: RenderOptions = {}\n ) {\n if (unmounted) {\n throw new Error(\n \"The root is unmounted and cannot be rendered any more\"\n );\n }\n const bricks = ([] as BrickConf[]).concat(brick);\n\n if (supportsUseChildren) {\n replaceUseChildren(bricks);\n\n for (const template of templates ?? []) {\n if (Array.isArray(template.bricks)) {\n replaceUseChildren(template.bricks);\n }\n }\n }\n\n const previousRendererContext = rendererContext;\n const renderId = uniqueId(\"render-id-\");\n rendererContext = new RendererContext(scope, { unknownBricks, renderId });\n\n const runtimeContext = {\n ctxStore: new DataStore(\"CTX\", undefined, rendererContext),\n pendingPermissionsPreCheck: [],\n tplStateStoreMap: new Map<string, DataStore<\"STATE\">>(),\n formStateStoreMap: new Map<string, DataStore<\"FORM_STATE\">>(),\n isolatedRoot,\n unsafe_penetrate,\n sys: {\n ...hooks?.auth?.getAuth(),\n },\n } as Partial<RuntimeContext> as RuntimeContext;\n\n if (url) {\n const urlObj = new URL(url);\n runtimeContext.query = urlObj.searchParams;\n runtimeContext.location = {\n pathname: urlObj.pathname,\n search: urlObj.search,\n hash: urlObj.hash,\n state: undefined,\n };\n }\n\n const renderRoot: RenderRoot = {\n tag: RenderTag.ROOT,\n container,\n createPortal,\n };\n\n if (scope === \"page\") {\n setTheme(theme ?? \"light\");\n setMode(\"default\");\n setUIVersion(uiVersion);\n if (language) {\n await i18n.changeLanguage(language);\n }\n\n app ??= {\n id: \"demo\",\n homepage: \"/demo\",\n } as MicroApp;\n runtimeContext.app = app;\n const demoStoryboard = {\n app,\n meta: {\n i18n: i18nData,\n customTemplates: templates,\n },\n } as Storyboard;\n\n // Register i18n.\n clearI18nBundles?.();\n clearI18nBundles = registerAppI18n(demoStoryboard);\n\n // Register custom templates.\n registerCustomTemplates(demoStoryboard);\n\n // Register functions.\n registerStoryboardFunctions(functions, app);\n } else {\n registerIsolatedTemplates(isolatedRoot!, templates);\n registerIsolatedFunctions(isolatedRoot!, functions);\n }\n\n runtimeContext.ctxStore.define(context, runtimeContext);\n\n let failed = false;\n let output: RenderOutput;\n let stores: DataStore<\"CTX\" | \"STATE\" | \"FORM_STATE\">[] = [];\n\n try {\n output = await renderBricks(\n renderRoot,\n bricks,\n runtimeContext,\n rendererContext,\n [],\n {}\n );\n\n stores = getDataStores(runtimeContext);\n await postAsyncRender(output, runtimeContext, stores);\n } catch (error) {\n failed = true;\n output = {\n node: await ErrorNode(error, renderRoot, scope === \"page\"),\n blockingList: [],\n };\n }\n\n renderRoot.child = output.node;\n\n previousRendererContext?.dispatchOnUnmount();\n previousRendererContext?.dispose();\n unmountTree(container);\n if (portal) {\n unmountTree(portal);\n }\n\n if (scope === \"page\") {\n if (!failed) {\n rendererContext.dispatchBeforePageLoad();\n }\n\n applyTheme();\n applyMode();\n }\n\n mountTree(renderRoot);\n\n if (scope === \"page\") {\n window.scrollTo(0, 0);\n }\n\n if (!failed) {\n for (const store of stores) {\n store.mountAsyncData();\n }\n\n if (scope === \"page\") {\n rendererContext.dispatchPageLoad();\n // rendererContext.dispatchAnchorLoad();\n }\n rendererContext.dispatchOnMount();\n rendererContext.initializeScrollIntoView();\n rendererContext.initializeMediaChange();\n rendererContext.initializeMessageDispatcher();\n }\n },\n unmount() {\n if (unmounted) {\n return;\n }\n unmounted = true;\n if (isolatedRoot) {\n isolatedFunctionRegistry.delete(isolatedRoot);\n isolatedTemplateRegistryMap.delete(isolatedRoot);\n }\n unmountTree(container);\n if (portal) {\n unmountTree(portal);\n // Only remove the portal from its parent when it's dynamic created.\n if (!_portal) {\n portal.remove();\n }\n }\n },\n };\n}\n","import { isEvaluable } from \"@next-core/cook\";\nimport { inject } from \"@next-core/inject\";\nimport { isObject } from \"@next-core/utils/general\";\nimport { getHistory } from \"./index.js\";\nimport { _internalApiGetRuntimeContext } from \"./internal/Runtime.js\";\nimport { evaluate } from \"./internal/compute/evaluate.js\";\nimport type { RuntimeContext } from \"./internal/interfaces.js\";\nimport {\n hasBeenComputed,\n markAsComputed,\n} from \"./internal/compute/markAsComputed.js\";\n\n/**\n * An equivalent of `computeRealValue` but for external usages, with no custom\n * context or options.\n *\n * @param value - Any value which may contains evaluations or placeholders.\n * @returns Computed real value.\n */\nexport function getRealValue(\n value: unknown,\n {\n useRealTimeQuery,\n }: {\n useRealTimeQuery?: boolean;\n } = {}\n): unknown {\n const ctx: RuntimeContext = {\n ..._internalApiGetRuntimeContext()!,\n };\n if (useRealTimeQuery) {\n ctx.query = new URLSearchParams(getHistory().location.search);\n }\n\n const compute = (data: unknown): unknown => {\n if (typeof data === \"string\") {\n if (isEvaluable(data)) {\n const result = evaluate(data, ctx);\n markAsComputed(result);\n return result;\n }\n return inject(data, ctx);\n }\n\n if (!isObject(data) || hasBeenComputed(value)) {\n return data;\n }\n\n if (Array.isArray(data)) {\n return data.map((v) => compute(v));\n }\n\n return Object.fromEntries(\n Object.entries(data).map(([k, v]) => [compute(k), compute(v)])\n );\n };\n\n return compute(value);\n}\n","const stack: number[] = [];\n\nexport interface ModalStack {\n push: () => number;\n pull: () => void;\n}\n\nexport function instantiateModalStack(initialIndex = 1000): ModalStack {\n let index = -1;\n const pull = (): void => {\n if (index > -1) {\n const found = stack.indexOf(index);\n // Assert: found should always be greater than -1\n // istanbul ignore else\n if (found > -1) {\n stack.splice(found, 1);\n }\n }\n };\n const push = (): number => {\n // Handle pushes without pull\n pull();\n // Find the next available index\n index = (stack[stack.length - 1] ?? -1) + 1;\n stack.push(index);\n return index + initialIndex;\n };\n return { push, pull };\n}\n","const cache = new Map<string, Promise<string>>();\n\nexport default function loadScriptOrStyle(\n type: \"script\" | \"style\",\n src: string,\n prefix?: string,\n attrs?: Record<string, unknown>\n): Promise<string>;\nexport default function loadScriptOrStyle(\n type: \"script\" | \"style\",\n src: string[],\n prefix?: string,\n attrs?: Record<string, unknown>\n): Promise<string[]>;\nexport default function loadScriptOrStyle(\n type: \"script\" | \"style\",\n src: string | string[],\n prefix?: string,\n attrs?: Record<string, unknown>\n): Promise<string | string[]> {\n if (Array.isArray(src)) {\n return Promise.all(\n src.map<Promise<string>>((item) => loadScriptOrStyle(type, item, prefix))\n );\n }\n const fixedSrc = prefix && !/^https?:/.test(src) ? `${prefix}${src}` : src;\n const cachedPromise = cache.get(fixedSrc);\n if (cachedPromise) {\n return cachedPromise;\n }\n const promise = new Promise<string>((resolve, reject) => {\n const end = (): void => {\n window.dispatchEvent(new Event(\"request.end\"));\n };\n const element = document.createElement(\n type === \"style\" ? \"link\" : \"script\"\n );\n if (type === \"script\") {\n Object.assign(element, {\n type: \"text/javascript\",\n async: true,\n ...attrs,\n src: fixedSrc,\n });\n } else {\n Object.assign(element, {\n rel: \"stylesheet\",\n ...attrs,\n href: fixedSrc,\n });\n }\n element.onload = () => {\n resolve(fixedSrc);\n end();\n };\n element.onerror = (e) => {\n reject(e);\n end();\n };\n const firstScript =\n document.currentScript || document.getElementsByTagName(\"script\")[0];\n (firstScript.parentNode as Node).insertBefore(element, firstScript);\n window.dispatchEvent(new Event(\"request.start\"));\n });\n cache.set(fixedSrc, promise);\n return promise;\n}\n","import loadScriptOrStyle from \"./loadScriptOrStyle.js\";\n\nexport default function loadScript(\n src: string,\n prefix?: string,\n attrs?: Record<string, unknown>\n): Promise<string>;\nexport default function loadScript(\n src: string[],\n prefix?: string,\n attrs?: Record<string, unknown>\n): Promise<string[]>;\nexport default function loadScript(\n src: string | string[],\n prefix?: string,\n attrs?: Record<string, unknown>\n): Promise<string | string[]> {\n return loadScriptOrStyle(\"script\", src as string, prefix, attrs);\n}\n","import loadScriptOrStyle from \"./loadScriptOrStyle.js\";\n\nexport default function loadStyle(\n src: string,\n prefix?: string,\n attrs?: Record<string, unknown>\n): Promise<string>;\nexport default function loadStyle(\n src: string[],\n prefix?: string,\n attrs?: Record<string, unknown>\n): Promise<string[]>;\nexport default function loadStyle(\n src: string | string[],\n prefix?: string,\n attrs?: Record<string, unknown>\n): Promise<string | string[]> {\n return loadScriptOrStyle(\"style\", src as string, prefix, attrs);\n}\n","declare const __webpack_init_sharing__: (scope: string) => Promise<unknown>;\ndeclare const __webpack_share_scopes__: Record<string, unknown>;\n\ninterface WebpackRuntimeContainer {\n init(arg: unknown): Promise<unknown>;\n get(module: string): Promise<Function>;\n}\n\n// https://github.com/module-federation/module-federation-examples/blob/eda9493f3991a423479fd834cfb1d7b241d9d1f0/advanced-api/dynamic-remotes/app1/src/App.js\nexport default async function loadSharedModule(scope: string, module: string) {\n // Initializes the share scope. This fills it with known provided modules from this build and all remotes\n await __webpack_init_sharing__(\"default\");\n const container = (window as unknown as Record<string, unknown>)[\n scope\n ] as WebpackRuntimeContainer; // or get the container somewhere else\n // Initialize the container, it may provide shared modules\n await container.init(__webpack_share_scopes__.default);\n const factory = await container.get(module);\n return factory();\n}\n","import loadScript from \"./loadScript.js\";\nimport loadSharedModule from \"./loadSharedModule.js\";\n\ninterface BrickPackage {\n id: string;\n filePath: string;\n elements?: string[];\n editors?: string[];\n dependencies?: Record<string, string[]>;\n deprecatedElements?: string[];\n\n // Legacy v2 packages\n propertyEditorsJsFilePath?: string;\n propertyEditors?: string[];\n}\n\nlet resolveBasicPkg: () => void;\nlet rejectBasicPkg: (e: unknown) => void;\nlet basicPkgWillBeResolved = false;\nconst waitBasicPkg = new Promise<void>((resolve, reject) => {\n resolveBasicPkg = resolve;\n rejectBasicPkg = reject;\n});\n\nexport function flushStableLoadBricks(): void {\n if (!basicPkgWillBeResolved) {\n resolveBasicPkg();\n }\n}\n\n/**\n * When loading bundles with webpack module federation concurrently, if\n * these bundles share some modules, webpack will load a singleton module\n * if versions are matched. Webpack will use the first bundle who started\n * to init the shared scope. Generally which bundle to use for a specific\n * module, does not matter. However, it may cause flaky result since the\n * shared module may from different bundles which maybe not exactly the\n * same, especially developers declare dependencies incorrectly sometimes.\n * So in order to make it less flaky, we try to make a BASIC package takes\n * precedence over others. We will always load the shared modules from the\n * basic package bundle if it contains the shared modules.\n */\nexport function enqueueStableLoadBricks(\n bricks: string[] | Set<string>,\n brickPackages: BrickPackage[]\n): Promise<void> {\n const promise = enqueueStableLoad(\"bricks\", bricks, brickPackages);\n return dispatchRequestStatus(promise);\n}\n\nexport function enqueueStableLoadProcessors(\n processors: string[] | Set<string>,\n brickPackages: BrickPackage[]\n): Promise<void> {\n const promise = enqueueStableLoad(\"processors\", processors, brickPackages);\n return dispatchRequestStatus(promise);\n}\n\nexport async function loadBricksImperatively(\n bricks: string[] | Set<string>,\n brickPackages: BrickPackage[]\n): Promise<void> {\n const promise = enqueueStableLoad(\"bricks\", bricks, brickPackages);\n flushStableLoadBricks();\n return dispatchRequestStatus(promise);\n}\n\nexport function loadProcessorsImperatively(\n processors: string[] | Set<string>,\n brickPackages: BrickPackage[]\n): Promise<void> {\n const promise = enqueueStableLoad(\"processors\", processors, brickPackages);\n flushStableLoadBricks();\n return dispatchRequestStatus(promise);\n}\n\nexport function loadEditorsImperatively(\n editors: string[] | Set<string>,\n brickPackages: BrickPackage[]\n): Promise<void> {\n const promise = enqueueStableLoad(\"editors\", editors, brickPackages);\n flushStableLoadBricks();\n return dispatchRequestStatus(promise);\n}\n\nexport class BrickLoadError extends Error {\n constructor(message: string) {\n // Pass remaining arguments (including vendor specific ones) to parent constructor\n super(message);\n\n this.name = \"BrickLoadError\";\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, BrickLoadError);\n }\n }\n}\n\ninterface V2AdapterBrick {\n resolve(\n adapterPkgFilePath: string,\n brickPkgFilePath: string,\n bricks: string[],\n dlls: string[] | undefined,\n brickPackages: BrickPackage[]\n ): Promise<void>;\n}\n\nlet v2AdapterPromise: Promise<V2AdapterBrick> | undefined;\nconst V2_ADAPTER_LOAD_BRICKS = \"v2-adapter.load-bricks\";\n\ninterface BrickItem {\n fullName: string;\n lastName: string;\n}\n\n// Get brick/processor items including their dependencies\nfunction getItemsByPkg(\n type: \"bricks\" | \"processors\" | \"editors\",\n list: string[] | Set<string>,\n brickPackagesMap: Map<string, BrickPackage>\n) {\n const itemsByPkg = new Map<BrickPackage, BrickItem[]>();\n const listToLoad = new Set<string>();\n const add = (item: string) => {\n if (listToLoad.has(item)) {\n return;\n }\n listToLoad.add(item);\n let pkg: BrickPackage | undefined;\n let namespace: string;\n let lastName: string | undefined;\n if (type === \"editors\") {\n lastName = item;\n for (const p of brickPackagesMap.values()) {\n if ((p.propertyEditors ?? p.editors)?.some((e) => e === lastName)) {\n pkg = p;\n }\n }\n } else if (type === \"processors\" || item.includes(\".\")) {\n [namespace, lastName] = item.split(\".\");\n const pkgId = `bricks/${\n type === \"processors\" ? getProcessorPackageName(namespace) : namespace\n }`;\n pkg = brickPackagesMap.get(pkgId);\n } else {\n lastName = item;\n let deprecatedBrickInThisPkg;\n for (const p of brickPackagesMap.values()) {\n if (p.elements?.some((e) => e === lastName)) {\n if (p.deprecatedElements?.includes(item)) {\n deprecatedBrickInThisPkg = p;\n } else {\n pkg = p;\n break;\n }\n }\n }\n if (!pkg && deprecatedBrickInThisPkg) {\n pkg = deprecatedBrickInThisPkg;\n }\n }\n\n if (!pkg) {\n // eslint-disable-next-line no-console\n console.error(`Package for ${item} not found.`);\n return;\n }\n\n let groupItems = itemsByPkg.get(pkg);\n if (!groupItems) {\n groupItems = [];\n itemsByPkg.set(pkg, groupItems);\n }\n groupItems.push({ fullName: item, lastName });\n\n // Load their dependencies too\n const deps = pkg.dependencies?.[item];\n if (deps) {\n for (const dep of deps) {\n add(dep);\n }\n }\n };\n for (const item of list) {\n add(item);\n }\n return itemsByPkg;\n}\n\nasync function loadBrickModule(\n type: \"bricks\" | \"processors\" | \"editors\",\n pkgId: string,\n item: BrickItem\n) {\n const moduleName = `${type === \"processors\" || type === \"editors\" ? `./${type}/` : \"./\"}${\n type === \"editors\" ? item.fullName : item.lastName\n }`;\n const start = performance.now();\n try {\n await loadSharedModule(pkgId, moduleName);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n const cost = Math.round(performance.now() - start);\n throw new BrickLoadError(\n `Load ${type} of \"${item.fullName}\" failed${\n // istanbul ignore next\n process.env.NODE_ENV === \"test\"\n ? \"\"\n : ` (${cost > 1000 ? `${+(cost / 1000).toFixed(2)}s` : `${cost}ms`})`\n }: ${(error as Error)?.message}`\n );\n }\n}\n\nfunction loadRestBricks(\n type: \"bricks\" | \"processors\" | \"editors\",\n pkgs: BrickPackage[],\n itemsMap: Map<BrickPackage, BrickItem[]>\n) {\n return pkgs.map(async (pkg) => {\n await loadScript(pkg.filePath, window.PUBLIC_ROOT ?? \"\");\n await waitBasicPkg;\n return Promise.all(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n itemsMap.get(pkg)!.map((item) => loadBrickModule(type, pkg.id, item))\n );\n });\n}\n\nasync function enqueueStableLoad(\n type: \"bricks\" | \"processors\" | \"editors\",\n list: string[] | Set<string>,\n brickPackages: BrickPackage[]\n): Promise<void> {\n const brickPackagesMap = new Map<string, BrickPackage>();\n for (const pkg of brickPackages) {\n const pkgId = pkg.id || getPkgIdByFilePath(pkg.filePath);\n brickPackagesMap.set(pkgId, pkg);\n }\n\n const itemsByPkg = getItemsByPkg(type, list, brickPackagesMap);\n\n let foundBasicPkg: BrickPackage | undefined;\n const v2Packages: BrickPackage[] = [];\n const v3PackagesOtherThanBasic: BrickPackage[] = [];\n let maybeV2Adapter: BrickPackage | undefined;\n for (const pkg of itemsByPkg.keys()) {\n if (pkg.id) {\n if (pkg.id === \"bricks/basic\") {\n foundBasicPkg = pkg;\n } else {\n v3PackagesOtherThanBasic.push(pkg);\n }\n } else {\n // Brick packages of v2 has no `id`\n v2Packages.push(pkg);\n maybeV2Adapter = brickPackagesMap.get(\"bricks/v2-adapter\");\n if (!maybeV2Adapter) {\n throw new Error(\"Using v2 bricks, but v2-adapter not found\");\n }\n }\n }\n const v2Adapter = maybeV2Adapter;\n\n let basicPkgPromise: Promise<unknown> | undefined;\n const basicPkg = foundBasicPkg;\n if (basicPkg) {\n const tempPromise = loadScript(basicPkg.filePath, window.PUBLIC_ROOT ?? \"\");\n // Packages other than BASIC will wait for an extra micro-task tick.\n if (!basicPkgWillBeResolved) {\n basicPkgWillBeResolved = true;\n tempPromise\n .then(() => Promise.resolve())\n .then(resolveBasicPkg, rejectBasicPkg);\n }\n basicPkgPromise = tempPromise.then(() =>\n Promise.all(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n itemsByPkg\n .get(basicPkg)!\n .map((item) => loadBrickModule(type, basicPkg.id, item))\n )\n );\n }\n\n const pkgPromises = [basicPkgPromise].concat(\n loadRestBricks(type, v3PackagesOtherThanBasic, itemsByPkg)\n );\n\n if (v2Adapter && v2Packages.length > 0) {\n if (!v2AdapterPromise) {\n // Load `v2-adapter.load-bricks` and its dependencies\n const v2AdapterItemsByPkg = getItemsByPkg(\n \"bricks\",\n [V2_ADAPTER_LOAD_BRICKS],\n brickPackagesMap\n );\n const v2AdapterPackages = [...v2AdapterItemsByPkg.keys()];\n\n const loadV2Adapter = async () => {\n await Promise.all(\n loadRestBricks(\"bricks\", v2AdapterPackages, v2AdapterItemsByPkg)\n );\n return document.createElement(\n V2_ADAPTER_LOAD_BRICKS\n ) as unknown as V2AdapterBrick;\n };\n v2AdapterPromise = loadV2Adapter();\n }\n\n pkgPromises.push(\n v2AdapterPromise.then((adapter) =>\n Promise.all(\n v2Packages.map((pkg) => {\n const pkgId = getPkgIdByFilePath(pkg.filePath);\n const pkgNamespace = pkgId.split(\"/\")[1];\n return adapter.resolve(\n v2Adapter.filePath,\n type === \"editors\"\n ? (pkg.propertyEditorsJsFilePath ?? pkg.filePath)\n : pkg.filePath,\n type === \"bricks\"\n ? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n itemsByPkg\n .get(pkg)!\n .map((item) => `${pkgNamespace}.${item.lastName}`)\n : [],\n (pkg as { dll?: string[] }).dll,\n // Todo: remove `brickPackages` as an argument\n brickPackages\n );\n })\n )\n )\n );\n }\n\n await Promise.all(pkgPromises);\n}\n\nasync function dispatchRequestStatus(promise: Promise<unknown>) {\n window.dispatchEvent(new Event(\"request.start\"));\n try {\n await promise;\n } finally {\n window.dispatchEvent(new Event(\"request.end\"));\n }\n}\n\nfunction getProcessorPackageName(camelPackageName: string): string {\n return camelPackageName\n .replace(/[A-Z]/g, (match) => `-${match[0].toLocaleLowerCase()}`)\n .replace(/_[0-9]/g, (match) => `-${match[1]}`);\n}\n\nfunction getPkgIdByFilePath(filePath: string) {\n return filePath.split(\"/\").slice(0, 2).join(\"/\");\n}\n"],"names":["dispatchRequestEventByConfig","type","config","_config$options","options","interceptorParams","ignoreLoadingBar","window","dispatchEvent","Event","http","interceptors","request","use","response","error","Promise","reject","loadingBar","document","querySelector","classList","add","loading","count","updateLoadingStatus","hasRemainingRequests","addEventListener","requestStart","requestEnd","runtime","createRuntime","container","portal","root","unstable_createRoot","scope","unknownBricks","supportsUseChildren","bootstrap","get","BOOTSTRAP_FILE","responseType","then","data","initialize","BOOTSTRAP_FILE_FIELD","nextRequest","rendering","async","queuedRender","sources","_ref","yaml","html","theme","uiVersion","language","context","functions","templates","i18n","i18nData","url","app","styleText","templatesAreArrayOfYaml","arguments","length","undefined","initialized","body","applyTheme","remove","setUIVersion","changeLanguage","dom","DOMParser","parseFromString","bricks","Set","node","querySelectorAll","tagName","includes","lowerTagName","toLowerCase","bricksInScript","text","matchAll","match","loadBricks","replaceChildren","scripts","scriptTags","scriptTag","newScriptTag","createElement","push","append","head","childNodes","parsed","safeLoad","schema","JSON_SCHEMA","json","concat","brick","properties","textContent","parsedContext","loadYaml","parsedFunctions","parsedTemplates","parsedI18n","render","e","console","String","req","_preview_only_render","_preview_only_inject","pkg","noResolve","loadBricksImperatively","element","resolve","content","map","item","name","fetch","input","init","Request","Object","assign","credentials","self","HttpFetchError","Error","constructor","message","super","this","captureStackTrace","HttpResponseError","responseJson","statusText","_defineProperty","HttpParseError","HttpAbortError","InterceptorManager","onFulfilled","onRejected","handlers","fulfilled","rejected","eject","id","forEach","fn","handler","isNil","value","base","fullBaseHref","href","location","origin","isHttpAbortError","DOMException","code","toString","ok","status","headers","getUrlWithParams","params","parsedUrl","URL","URLSearchParams","key","searchParams","entries","Array","isArray","v","startsWith","substr","getBodyAndHeaders","parsedHeaders","Headers","contentTypeHeader","has","set","FormData","JSON","stringify","defaultAdapter","method","simpleRequest","observe","noAbortOnRouteChange","useCache","requestInit","requestWithBody","_adapter","WeakMap","_Http_brand","WeakSet","Http","_config","_this","_classPrivateMethodInitSpec","_classPrivateFieldInitSpec","_assertClassBrand","_fetch","call","adapter","_classPrivateFieldSet","delete","post","put","patch","chain","promise","interceptor","_classPrivateFieldGet","res","_interceptor$fulfille","_interceptor$rejected","shift","createHttpInstance","HttpModule","HttpModuleV2","dll","_window$BRICK_NEXT_VE","BRICK_NEXT_VERSIONS","HttpModuleV3","beforeVisitGlobalMember","usage","objectName","level","rememberObjectName","parent","segments","i","memberParent","memberNode","computed","property","hasNonStaticUsage","usedProperties","join","collectMemberCallUsageFactory","object","callParent","args","firstArg","usedArgs","collectAppGetMenuUsage","collectInstalledAppsHasUsage","traverseStoryboardExpressions","beforeVisitGlobal","memo","matchExpressionString","visitNotMatchedExpressionString","visitNonExpressionString","visitObject","traverse","isEvaluable","preevaluate","cache","withParent","hooks","isObject","values","strictCollectMemberUsage","nonStaticUsage","collectMemberUsage","expr","TRACK_NAMES","track","raw","trackText","variableName","expression","trackCtxExp","expressions","size","warn","trackAll","some","result","state","formState","keyMap","CTX","STATE","FORM_STATE","split","traverseStoryboardFunctions","matchSource","source","traverseStoryboardFunction","silentErrors","precookFunction","typescript","cacheKey","collectMemberUsageInFunction","PERMISSIONS","check","scanPermissionActionsInStoryboard","storyboard","_storyboard$meta","collection","beforeVisitPermissions","beforeVisitPermissionsFactory","customTemplates","meta","routes","from","scanPermissionActionsInAny","arg","pull","lodash","USE_CHILDREN_SLOT_REGEXP","replaceUseChildren","replaceInBrick","slots","useChildrenMap","Map","children","removeBricks","child","_child$slot","slot","test","slotConf","replaceInProperties","k","useBrick","createProviderClass","api","HTMLElement","$$typeof","saveAs","filename","_len","_key","blob","fileSaver","createSSEStream","pushQueue","pullQueue","disposed","closed","converter","fetchOptions","earlyDone","_ref2","done","dispose","fetchEventSource","openWhenHidden","onopen","_json","parse","onmessage","msg","reason","defaultConverter","event","onclose","onerror","err","catch","_resolve","bailout","next","return","throw","Symbol","asyncIterator","_value","deepFreeze","propNames","getOwnPropertyNames","freeze","hasOwnProperty","prototype","JsonStorage","storage","prefix","setItem","getItem","_this$storage$getItem","removeItem","clear","pool","unwrapProvider","provider","getProviderBrick","supply","attemptToVisitGlobals","providedGlobalVariables","mock","globalVariables","variable","supplyIndividual","shouldOmitInLodash","shouldOmitInMoment","allowedGlobalObjects","target","methods","fromEntries","apply","filter","entry","moment","pipes","tagUrlFactory","ignoreSlashes","strings","_len2","partials","_key2","str","index","replace","p","encodeURIComponent","LexicalStatus","TokenType","JsonValueType","getRegExpOfPlaceholder","symbols","RegExp","symbol","escapeRegExp","eatOptionalRawAndOptionalPlaceholderBegin","_subRaw$match","subRaw","getSubRaw","matchedPlaceholder","beginPlaceholder","subCursor","indexOf","charAt","nextCursor","cursor","tokens","Raw","substring","BeginPlaceHolder","loc","start","end","ExpectField","eatWhitespace","eatField","Field","ExpectOptionalBeginDefault","eatOptionalDefault","BeginDefault","ExpectDefaultValue","ExpectOptionalBeginPipe","eatDefaultValue","eatJsonValueOrLiteralString","eatOptionalBeginPipe","BeginPipe","ExpectPipeIdentifier","ExpectPlaceholderEnd","eatPipeIdentifier","matches","PipeIdentifier","ExpectOptionalBeginPipeParameter","eatOptionalBeginPipeParameter","BeginPipeParameter","ExpectPipeParameter","eatPipeParameter","eatPlaceholderEnd","EndPlaceHolder","Initial","jsonLiteralMap","nextStatus","firstChar","valueType","Others","objectBracesToMatch","arrayBracketsToMatch","stringQuotesToClose","stringBackslashToEscape","matched","char","JsonValue","eatJsonValue","LiteralString","transform","compile","inject","transformAndInject","isInjectable","transformNode","field","defaultValue","processPipes","injectNode","_context$overrideApp","_context$overrideApp2","namespace","subField","SimpleContextMap","SYS","FLAGS","query","getAll","overrideApp","hash","anchor","original","injectNodeFactory","tree","elements","token","optionalToken","acceptToken","placeholder","pipe","identifier","parameters","parseTokens","tokenize","parseInjectableString","initializedNamespaces","initializeI18n","NS","locales","LanguageDetector","fallbackLng","debug","process","supportedLngs","nonExplicitSupportedLngs","interpolation","escapeValue","react","useSuspense","compatibilityJSON","resources","lang","addResourceBundle","i18nText","_i18n$language","primaryLanguage","keys","i18next","Element","lastChild","removeChild","DocumentFragment","Mode","SourceNode","for","FormalParameters","ECMAScriptCode","Environment","IsConstructor","ThisMode","DebuggerCall","DebuggerScope","DebuggerNode","DebuggerReturn","ExecutionContext","BindingStatus","EnvironmentRecord","outer","OuterEnv","HasBinding","bindingMap","CreateMutableBinding","deletable","mutable","NormalCompletion","CreateImmutableBinding","strict","InitializeBinding","binding","SetMutableBinding","_strict","ReferenceError","TypeError","GetBindingValue","HasThisBinding","DeclarativeEnvironment","FunctionEnvironment","F","LEXICAL","ThisBindingStatus","UNINITIALIZED","BindThisValue","INITIALIZED","ThisValue","GetThisBinding","ReferenceRecord","referenceName","Base","ReferenceName","Strict","CompletionRecord","Type","Value","Empty","collectBoundNames","names","collect","n","declarations","left","argument","containsExpression","collectScopedDeclarations","nextOptions","var","Number","topLevel","kind","consequent","alternate","cases","block","finalizer","IsPropertyReference","V","InitializeReferencedBinding","W","CopyDataProperties","excludedItems","getOwnPropertySymbols","nextKey","desc","getOwnPropertyDescriptor","enumerable","ForDeclarationBindingInstantiation","forDeclaration","env","isConst","LoopContinues","completion","UpdateEmpty","GetValue","ToPropertyKey","GetV","P","PutValue","CreateListIteratorRecord","cooked","iterator","RequireObjectCoercible","GetIdentifierReference","ApplyStringOrNumericBinaryOperator","leftValue","operator","rightValue","SyntaxError","reservedObjects","Function","global","getGlobal","allowedConstructors","globalExecutionContextStack","__dev_only_clearGlobalExecutionContextStack","__dev_only_getGlobalExecutionContextStack","cook","rootAst","codeSource","_hooks$beforeEvaluate4","rules","externalSourceForDebug","ArrayConstructor","expressionOnly","doSanitize","sanitize","rootEnv","rootContext","VariableEnvironment","LexicalEnvironment","executionContextStack","TemplateMap","currentNode","Evaluate","optionalChainRef","forceYield","_hooks$beforeEvaluate","_hooks$beforeBranch2","beforeEvaluate","endsWith","array","spreadValues","ThrowIfFunctionIsInvalid","InstantiateArrowFunctionExpression","rightRef","right","funcName","thisValue","ref","callee","func","optional","skipped","EvaluateCall","ResolveBinding","regex","flags","pattern","baseValue","propertyKey","EvaluatePropertyAccessWithExpressionKey","propertyNameString","EvaluatePropertyAccessWithIdentifierKey","constructExpr","argList","ArgumentListEvaluation","constructorName","Date","isAllowedConstructor","EvaluateNew","prop","propName","EvaluateComputedPropertyName","propValue","SetFunctionName","chunks","quasis","val","tagRef","tag","tagFunc","quasi","ApplyUnaryOperator","lref","rval","IsAnonymousFunctionDefinition","NamedEvaluation","DestructuringAssignmentEvaluation","lval","r","ApplyStringOrNumericAssignment","oldEnv","getRunningContext","blockEnv","BlockDeclarationInstantiation","blockValue","EvaluateStatementList","EvaluateBreakableStatement","stmtResult","DoWhileLoopEvaluation","lhs","lhsKind","uninitializedBoundNames","iterationKind","keyResult","runningContext","newEnv","exprRef","exprValue","EnumerateObjectProperties","ForInOfHeadEvaluation","stmt","iteratorRecord","destructuring","nextValue","lhsRef","iterationEnv","lhsName","BindingInitialization","innerResult","ForInOfBodyEvaluation","ForInOfLoopEvaluation","_node$init","ForBodyEvaluation","update","loopEnv","boundNames","dn","perIterationLets","bodyResult","ForLoopEvaluation","InstantiateOrdinaryFunctionExpression","_hooks$beforeBranch","beforeBranch","GetThisEnvironment","oldValue","newValue","switchValue","discriminant","R","defaultCaseIndex","findIndex","switchCase","hasDefaultCase","A","slice","found","C","CaseClauseIsSelected","foundInB","B","CaseBlockEvaluation","_hooks$beforeEvaluate2","thrownValue","param","catchEnv","argName","CatchClauseEvaluation","declarator","bindingId","WhileLoopEvaluation","increment","perIterationBindings","CreatePerIterationEnvironment","lastIterationEnv","thisIterationEnv","bn","lastValue","excludedNames","valueTarget","KeyedDestructuringAssignmentEvaluation","RestDestructuringAssignmentEvaluation","PropertyDestructuringAssignmentEvaluation","assignmentTarget","isObjectOrArray","IteratorDestructuringAssignmentEvaluation","propertyName","rhsValue","restProperty","d","IsConstantDeclaration","fo","InstantiateFunctionObject","debuggerCall","templateLiteral","rawObj","template","defineProperty","writable","configurable","GetTemplateObject","CallFunction","closure","thisArgument","_hooks$beforeCall","beforeCall","calleeContext","localEnv","OrdinaryCallBindThis","PrepareForOrdinaryCall","formals","parameterNames","hasParameterExpressions","varDeclarations","varNames","functionNames","functionsToInitialize","unshift","noVar","argumentsObjectNeeded","paramName","parameterBindings","ao","argumentObject","ThrowTypeError","CreateUnmappedArgumentsObject","varEnv","IteratorBindingInitialization","instantiatedVarNames","initialValue","lexEnv","lexDeclarations","f","FunctionDeclarationInstantiation","EvaluateFunctionBody","OrdinaryCallEvaluateBody","pop","statements","s","_hooks$beforeEvaluate3","OrdinaryFunctionCreate","functionExpression","funcEnv","arrowFunction","sourceNode","isConstructor","lexicalThis","unwind","defineProperties","STRICT","len","ExpectedArgumentCount","environment","InitializeBoundName","RestBindingInitialization","KeyedBindingInitialization","PropertyBindingInitialization","restObj","bindingElement","generator","AnalysisContext","AnalysisEnvironment","bindingSet","CreateBinding","precook","visitors","analysisContextStack","EvaluateChildren","_hooks$beforeVisit","_hooks$beforeVisitUnk","beforeVisit","visit","_hooks$beforeVisitGlo","BoundNamesInstantiation","lexicalBinding","beforeVisitUnknown","PrepareOrdinaryCall","ASTCache","restOptions","plugins","Boolean","strictMode","attachComment","program","jsNodes","parseAsEstree","function","clearFunctionASTCache","fixes","m","parseExpression","proposal","parseAsEstreeExpression","suffix","shouldAllowRecursiveEvaluations","isTrackAll","clearExpressionASTCache","PipeRegistry","registeredPipe","getBasePath","getAttribute","matchStoryboard","storyboards","pathname","sortedStoryboards","orderBy","_storyboard$app$homep","_storyboard$app$homep2","homepage","matchHomepage","isOutsideApp","_getRuntime$getCurren","getRuntime","getCurrentApp","STANDALONE_MICRO_APPS","standaloneMode","history","blocked","getUserConfirmation","callback","confirm","historyOverridden","browserHistory","originalPush","originalReplace","updateFactory","path","pathIsString","parsePath","_bootstrapData$storyb","_bootstrapData9","bootstrapData","_internalApiMatchStoryboard","createHref","getV2RuntimeFromDll","createHistory","createBrowserHistory","basename","updateQueryFactory","extraQuery","keepHash","urlSearchParams","search","blockMessage","pushQuery","replaceQuery","pushAnchor","notify","reload","noIncremental","setBlockMessage","getBlockMessage","unblock","historyExtended","getHistory","v2Kit","getHistoryV2Factory","_registry","customProcessors","define","processorFullName","processorFunc","registerCustomProcessor","getCustomProcessorsV2","processorName","registerAppI18n","i18nNamespace","getI18nNamespace","languages","removeResourceBundle","widgetI18nFactory","widgetId","getFixedT","registerWidgetI18n","registerWidgetI18nV2Factory","ns","MESSAGE_SOURCE_PANEL","FRAME_ACTIVE_CHANGE","PANEL_CHANGE","selectedPanel","frameIsActive","devtoolsHookEmit","payload","devtools","getDevHook","emit","_devtools$emit","requestIdleCallback","setTimeout","__BRICK_NEXT_DEVTOOLS_HOOK__","THROW","readOnlyHandler","deleteProperty","setPrototypeOf","getReadOnlyProxy","Proxy","getDynamicReadOnlyProxy","ownKeys","localStorage","LOCAL_STORAGE_APPS_THEME_KEY","setTheme","getTheme","getCurrentTheme","documentElement","dataset","CustomEvent","detail","batchSetAppsLocalTheme","appsTheme","getLocalAppsTheme","mode","setMode","getCurrentMode","applyMode","getCssPropertyValue","_window$getComputedSt","el","getComputedStyle","getPropertyValue","variant","setThemeVariant","getThemeVariant","isolatedFunctionRegistry","getGeneralGlobals","getIndividualGlobal","_hooks$images","_hooks$images2","_hooks$checkPermissio","collectCoverage","widgetVersion","isolatedRoot","appendI18nNamespace","storyboardFunctions","isStoryboardFunction","images","widgetImagesFactory","imagesFactory","isBuildPush","currentVersion","identity","fakeI18nText","fakeCheckPermissions","checkPermissions","host","hostname","en","StoryboardFunctionRegistryFactory","debuggerOverrides","registeredFunctions","overrides","_target","processed","collector","createCollector","transformed","getGlobalVariables","globals","precooked","LodashWithStaticFields","_","ObjectWithStaticFields","getStoryboardFunction","currentApp","registerStoryboardFunctions","_fn$perm","deps","hasPermissionsCheck","perm","updateStoryboardFunction","newFn","checkPermissionsUsage","checkedFunctions","clearGlobalExecutionContextStack","getGlobalExecutionContextStack","MediaBreakpoint","mediaBreakpointMinWidthMap","xLarge","large","medium","small","xSmall","mediaEventTarget","EventTarget","breakpointMatchesMap","MEDIA","handleMatchesChange","breakpoint","changed","minWidth","mediaQueryList","matchMedia","addListener","getMedia","getStorageItem","storageType","_storage$getItem","sessionStorage","isStrictMode","runtimeContext","_getRuntime","getFeatureFlags","warnAboutStrictMode","extraLogs","punctuation","allowedNativeProps","_isolated","CustomTemplateRegistry","isolated","_constructor$proxy$pr","_constructor$proxy","_compatibleConstructo","_compatibleConstructo2","registered","customElements","proxyProperties","proxy","validProxyProps","legacyTplVariables","asVariable","mergeProperty","refTransform","compatibleConstructor","expose","tpl","exposedStates","uniq","_state$filter$map","proxyMethods","props","nativeProps","TplElement","_dev_only_definedProperties","_dev_only_definedMethods","$$getElementByRef","_this$$$tplStateStore","$$tplStateStore","hostBrick","tplHostMetadata","internalBricksByRef","connectedCallback","shadowRoot","attachShadow","fragment","createDocumentFragment","style","appendChild","disconnectedCallback","getValue","_this$$$tplStateStore2","updateValue","to","_to$refProperty","refProperty","_this$$$getElementByR","_to$refProperty2","_to$refMethod","refMethod","clearIsolatedRegistry","registerCustomTemplate","getCustomTemplatesV2","isolatedTemplateRegistryMap","getTplStateStore","using","extraInfo","tplStateStoreId","tplStateStoreMap","store","getTplHostElement","hostElement","widgetFunctionRegistry","widgetFunctions","registerWidgetFunctions","registerWidgetFunctionsV2Factory","hasInstalledApp","appId","matchVersion","_internalApiGetAppInBootstrapData","checkInstalledApps","getCheckedApp","installStatus","compare","getFormStateStore","formStateStoreId","formStateStoreMap","_hooks$flowApi","isFlowApi","flowApi","isFlowApiProvider","FLOW_API_PROVIDER","registerFlowApiProvider","getBrickPackages","markAsComputed","hasBeenComputed","proto","getPrototypeOf","resolveData","resolveConf","resolveOptions","useProvider","onReject","legacyProvider","legacyField","hasLegacyField","contractConf","providerBrick","actualArgs","actualContractConf","all","asyncComputeRealValue","renderId","resolveByProvider","isStale","_internalApiGetRenderId","isHandleRejectByTransform","clearResolveCache","originalArgs","finalArgs","_hooks$flowApi2","getArgsOfFlowApi","symbolForRaw","symbolForContext","isPreEvaluated","getPreEvaluatedRaw","pre","shouldDismissMarkingComputed","possibleErrorConstructs","getCookErrorConstructor","evaluate","run","lowLevelEvaluate","isAsync","blockingList","passByRuntimeContext","omit","menuUsage","hasAppUsage","lazy","usedCtx","usedProcessors","usedStates","tplStateStore","usedFormStates","formStateStore","devHook","ctxStore","waitFor","usedTpls","loadProcessorsImperatively","attemptToCheckPermissions","usedFunctions","pendingPermissionsPreCheck","menu","usedMenuIds","menuId","fetchMenuById","getStoryboardByAppId","_internalApiGetStoryboardInBootstrapData","_hooks$checkInstalled","waitForCheckingApps","_penetrableCtx$overri","_hooks$menu","_match$params","eventMap","unsafe_penetrate","penetrableCtx","_internalApiGetRuntimeContext","sys","cloneDeep","getMenu","getMenuById","_internalApiGetRuntim","internalCtxStore","_eventMap$keys","getMiscSettings","_t","processor","constants","StateOfUseBrick","isLazyContentInUseBrick","USE_BRICK_PROPERTIES","USE_BRICK_TRANSFORM","USE_BRICK_EVENTS","USE_BRICK_IF","USE_BRICK_LIFECYCLE","USE_BRICK_DATA_SOURCE","getNextStateOfUseBrick","USE_BRICK","USE_BRICK_ITEM","USE_BRICK_SLOTS_ITEM_BRICKS","USE_BRICK_SLOTS_ITEM_BRICKS_ITEM","INITIAL","USE_BRICK_SLOTS","USE_BRICK_SLOTS_ITEM","penetrableCtxNames","internalOptions","preEvaluated","_runtimeContext$app","$$lazyForUseBrick","$$stateOfUseBrick","dismissMarkingComputed","asyncEvaluate","noPlaceholders","pick","noInject","getNextComputeOptions","ignoreSymbols","computeRealValue","_runtimeContext$app2","asyncCheckIf","ifContainer","if","checkIf","checkIfOfComputed","checkIfByTransform","looseCheckIfByTransform","checkIfByTransformV2Factory","getTracks","contextNames","stateNames","formStateNames","computePropertyValue","asyncPropertyEntries","asyncValue","ignoreUndefined","constructAsyncProperties","setRealProperties","realProps","setProperty","cssFloat","setAttribute","setProperties","realValue","computeRealProperties","trackAfterInitial","trackingContextList","initialTracker","contextName","disposes","onChange","listener","stateName","cacheLimit","cacheCount","matchPath","exact","sensitive","reduce","regexp","pathCache","cacheResult","pathToRegexp","compilePath","exec","isExact","matchRoute","route","symbolForAsyncComputedPropsFromHost","symbolForTplStateStoreId","symbolForTPlExternalForEachItem","symbolForTPlExternalForEachIndex","symbolForTPlExternalForEachSize","timeoutIdList","K","REQUEST_FAILED","SOMETHING_WENT_WRONG","LOGIN_TIMEOUT_MESSAGE","NETWORK_ERROR","LICENSE_EXPIRED","LICENSE_BLOCKED","NO_PERMISSION","PAGE_NOT_FOUND","APP_NOT_FOUND","UNKNOWN_ERROR","GO_BACK_TO_PREVIOUS_PAGE","GO_BACK_HOME","RELOAD","zh","Dialog","show","confirmed","alert","setLoginStateCookie","pathValue","btoa","searchValue","cookie","httpErrorToString","HTMLScriptElement","src","t","isUnauthenticatedError","lastErrorMessage","unauthenticatedConfirming","handleHttpError","NO_AUTH_GUARD","ssoEnabled","redirectToLogin","title","contentStyle","whiteSpace","wordBreak","Notification","DebugManager","getInstance","instance","initDebugMode","setupWindowAPI","debugMode","debugType","log","activateSessionDebug","debugConsole","enable","enablePersistent","disable","toggle","togglePersistent","description","getStatusDescription","help","isDebugMode","getDebugType","shouldLog","debugManager","bindListeners","eventsMap","eventType","listenerFactory","$$listeners","$$eventListeners","isBuiltinHandler","action","isUseProviderHandler","isCustomHandler","targetRef","isConditionalEventHandler","_runtimeContext","runtimeBrick","_handler$batch","_handler$batch2","handleHistoryAction","handleWindowOpenAction","handleWindowPostMessageAction","handleParentPostMessageAction","handleLocationAction","handleStorageAction","preventDefault","stopPropagation","handleConsoleAction","handleMessageAction","handleContextAction","batch","handleTplStateAction","argsFactory","handleFormStateAction","handleMessageDispatcher","handleUseProviderAction","handleCustomAction","else","brickCallback","targets","rawTarget","rawTargetRef","computedTarget","multiple","computedTargetRef","targetRefs","tplHostElement","_tplHostElement$$$get","isExecuteCustomHandler","useEventAsDefault","isSetPropsCustomHandler","targetOrProvider","isProvider","task","realTarget","isUseProvider","computedArgs","argsOrContractConf","computeArgs","_handler$sse","sse","stream","callbackFactory","eventCallbackFactory","pollableCallback","progress","success","finally","_handler$sse2","_handler$poll","pollRuntimeContext","finallyCallback","currentRenderId","startSSEStream","poll","enabled","pollOptions","expectPollStopImmediately","expectPollEnd","interval","leadingRequestDelay","continueOnError","delegateLoadingBar","currentTimeoutId","shouldStop","_computeRealValue","_computeRealValue2","expectPollStopImmediatelyResult","_computeRealValue3","delayedPoll","_computeRealValue4","delay","startPoll","baseArgsLength","hasCallback","overrideMethod","useEventDetailAsDefault","features","open","postMessage","batchUpdate","updateValues","every","_hooks$messageDispatc","messageDispatcher","bindTemplateProxy","_tplHostMetadata$prox","events","_to$refEvent","_ref$$$proxyListeners","bubbles","cancelable","composed","refEvent","$$proxyListeners","unbindTemplateProxy","_$$proxyListeners","removeEventListener","RenderTag","unmountTree","mountPoint","mountTree","initializedElement","mounted","DISABLE_REACT_FLUSH_SYNC","current","portalElements","BRICK","_current$tplHostMetad","slotId","iid","currentReturn","ABSTRACT","childElements","sibling","_currentReturn","_currentReturn$contai","ROOT","createPortal","commonLifeCycles","pageOnlyLifeCycles","_routeHelper","_memoizedLifeCycle","_observers","_mediaListener","_arbitraryLifeCycle","_initialMenuRequestNode","_memoizedMenuRequestNodeMap","_incrementalRenderStates","_RendererContext_brand","RendererContext","_options$unknownBrick","onBeforePageLoad","onPageLoad","onPageLeave","onBeforePageLeave","onAnchorLoad","onAnchorUnload","onMediaChange","onScrollIntoView","onMount","onUnmount","onMessage","onMessageClose","routeHelper","setInitialMenuRequestNode","menuRequestNode","memoizeMenuRequestNode","getMenuRequests","menuRequests","_current","reMergeMenuRequestNodes","parentMenuRequestNode","previousSibling","mergeMenus","reBailout","output","reCatch","returnNode","didPerformIncrementalRender","prevLocation","finalResult","shouldIgnoreRoutes","parentRoutes","reverse","parentRoute","performIncrementalRender","registerBrickLifeCycle","lifeCycle","lifeCycleTypes","isEmpty","useResolves","registerArbitraryLifeCycle","arbitraryCallbacks","reRender","oldNode","_prevLastNormal$eleme","_findNextSiblingNode","_prevLastPortal$eleme","_findNextSiblingNode2","prevLastNormal","prevLastPortal","lastNormal","lastPortal","findLastChildNodes","insertBeforeChild","nextSibling","findNextSiblingNode","insertPortalBeforeChildCandidates","prevSibling","portalFragment","renderRoot","removeAbstracts","getContainedBrickAndAbstractNodes","_unmountBricks","_unmountAbstracts","_cleanUpNodes","hasChildNodes","entityReturnNode","getEntityReturnNode","_entityReturnNode$con","_entityReturnNode$ele","insertBefore","_root","insertPortalBeforeChild","candidate","contains","newBricks","_initializeRerenderBricks","list","observer","disconnect","dispatchBeforePageLoad","_dispatchGeneralLifeCycle","dispatchPageLoad","dispatchBeforePageLeave","dispatchPageLeave","dispatchAnchorLoad","initializeScrollIntoView","conf","_addObserver","initializeMediaChange","initializeMessageDispatcher","_hooks$messageDispatc2","confList","channel","onClose","dispatchOnMount","dispatchOnUnmount","unmountList","removed","_brick$element","_brick$element2","_brick$disposes","observers","unmountEvent","abstracts","_item$disposes","nodes","mountEvent","_conf$threshold","threshold","IntersectionObserver","isIntersecting","intersectionRatio","_currentReturn2","_currentReturn3","routeMatchedMap","getMatchedRoute","legacyDoTransform","doTransform","legacyTransformProperties","mapArray","transformProperties","processedData","pipeableTransform","preprocessTransformProperties","legacyTransformIntermediateData","intermediateData","fromData","transformedPropName","transformTo","symbolForRootRuntimeContext","renderUseBrick","errorBoundary","_useBrick$symbolForRo","_scopedRuntimeContext","_scopedRuntimeContext2","_brickNode","scopedRuntimeContext","tplStateStoreScope","formStateStoreScope","createScopedRuntimeContext","inUseBrick","rendererContext","renderBrick","scopedStores","brickNode","postAsyncRender","mountUseBrick","portalRoot","mountAsyncData","unmountUseBrick","mountResult","updateStoryboard","storyboardPatch","$$fulfilling","$$fulfilled","$$registerCustomTemplateProcessed","updateStoryboardByRoute","newRoute","replaceRoutes","replaceBricks","updateStoryboardByTemplate","newTemplate","settings","tplName","updateTemplatePreviewSettings","templateId","_updatePreviewSettings","getSnippetPreviewPath","snippetId","updateStoryboardBySnippet","snippetData","_snippetData$bricks","updateSnippetPreviewSettings","previewRouteIndex","newPreviewRoute","splice","getContextValue","_ref3","getAllContextValues","_ref4","getAllValues","getBrickPackagesById","find","filePath","loadEditors","editors","brickPackages","loadEditorsImperatively","getRenderId","getAddedContracts","_ref5","updateStoryboardType","collectUsedContracts","updatedStoryboard","_storyboard$routes","snippetPreviewPath","addedContracts","namespaceId","contracts","contract","debugDataValue","debugData","_ref6","routeId","getLegalRuntimeValue","_runtimeContext$overr","realTimeDataInspectRoot","RealTimeDataInspectHooks","setRealTimeDataInspectRoot","callRealTimeDataInspectHooks","changeType","addRealTimeDataInspectHook","hook","supportContextResolveTriggerBrickLifeCycle","DataStore","stateStoreId","changeEventType","_this$data$get","notifyRealTimeDataChange","getAffectListByContext","affectNames","batchUpdateContextsNames","updateContexts","affectContexts","affectDepsContextNames","updateContextItem","affectContextItem","triggerEvent","contexts","_context$eventTarget","eventTarget","callbackRuntimeContext","is","useResolve","loaded","shouldDismiss","_this$rendererContext","load","finishLoad","dataConfs","asyncHostPropertyEntries","routePath","pending","contextConfs","resolveContext","keyword","dependencyMap","depsMap","contextConf","stats","legacyTplStats","getDependencyMapOfContext","pendingDeps","_pendingDeps$get","deferredContexts","pendingContexts","wrapResolve","_pendingDeps$get2","resolved","scheduleNext","scheduleAsSerial","readyContexts","dep","predicateNextResolveFactory","pendingResult","duplicatedMap","processedAtLeastOne","detectCircularContexts","deferred","resolveDataStore","dataConf","stack","routeStackMap","pendingStack","dataName","_this$data$get2","dataNames","ctx","waitForAll","_this$routeMap$get","routeMap","asyncMounted","trackConditionalResolve","resolvePolicy","hasFallbackValue","_this$rendererContext2","newData","trigger","_this$rendererContext3","batchAddListener","disposeDataInRoutes","setupTemplateProxy","hostContext","slotted","reversedProxies","externalSlots","asyncComputedProps","propertyProxies","asyncHostProps","filtered","slotProxies","quasisMap","_externalSlots$from$b","_externalSlots$from","_to$refSlot","_to$refPosition","insertBricks","refToSlot","refSlot","expandableSlot","refPosition","hostHasForEach","clamp","setupTemplateExternalBricksWithForEach","forEachItem","forEachIndex","forEachSize","slotName","flatMap","_childrenToSlots","childrenToSlots","setupTemplateExternalRoutesWithForEach","replaceSlotWithSlottedBricks","brickConf","expand","_brickConf$properties","_brickConf$properties2","_defaultSlots$$bricks","_defaultSlots$","usedSlots","_hostContext$external","hostCtx","defaultSlots","setupUseBrickInTemplate","walk","setup","markSlotted","it","originalSlots","restConf","transpiledSlots","markChild","_slotConf$bricks","expandBrickInTemplate","brickConfInTemplate","slotsInTemplate","childrenInTemplate","restBrickConfInTemplate","FORM_RENDERER","symbolForFormStateStoreId","formContainers","formSchemaToBrick","fields","instanceId","fieldId","defaults","commonProps","label","testid","getReadOnlyAndRequired","_field$limit","_field$limit2","readOnly","limit","required","fieldType","precision","inputBoxStyle","width","getDefaultProperties","formSchemasToBricks","schemas","_FormElement_brand","FormElement","validate","_proxyFormMethod","setInitValue","resetFields","getFieldsValue","_len3","_key3","_this$firstElementChi","_containerElement$tag","containerElement","firstElementChild","PageError","BrickLoadError","ErrorNode","pageLevel","showLink","showDescription","_error$response","_error$responseJson","getRefinedErrorConf","_presetBricks$error","errorBrick","_internalApiGetPresetBricks","linkBrick","race","errorTitle","getLinkNode","useDefaultError","color","descriptionNode","click","renderRoutes","menuRequestReturnNode","isIncremental","noAuthGuard","public","auth","isLoggedIn","matchRoutes","unauthenticated","preCheckPermissionsForBrickOrRoute","preLoadBricks","redirectTo","redirect","menuRequest","menuConf","loadMenu","newOutput","catchLoad","renderBricks","mergeRenderOutput","appendMenuRequestNode","tplStack","setupBrick","forceRecursive","setupRootRuntimeContext","_hooks$checkPermissio2","brickIf","permissionsPreCheck","restBrickConf","isGeneralizedTrackAll","dataSource","acc","asyncCheckBrickIf","brickName","_brickConf$lifeCycle","ensureValidControlBrick","tracking","lowerLevelRenderControlNode","tracker","trackDataSource","_slots$slot","computedDataSource","abstractNode","childrenOutput","rendered","flat","renderForEach","renderControlNode","changedAfterInitial","rawOutput","rerenderCount","uninitialized","controlledOutput","_runtimeBrick$dispose","reControlledOutput","rerender","debouncedListener","debounce","leading","trailing","tplTagName","registry","getTagNameOfCustomTemplate","_tplStack$get","tplCount","enqueueStableLoadBricks","formData","confProps","compute","asyncComputeRealPropertyEntries","computedPropsFromHost","isScript","rel","_window$PUBLIC_ROOT","PUBLIC_ROOT","attrs","loadScript","loadStyle","listenOnTrackingContext","loadProperties","childRuntimeContext","expandedBrickConf","uniqueId","collectWidgetContract","originalExternalSlots","externalChildren","newBrickConf","proxies","expandCustomTemplate","hostBrickConf","_normalizedFormData$c","_hostBrickConf$proper","normalizedFormData","formConf","formSchema","targetEvents","sourceEvents","mergeEvents","padding","expandFormRenderer","routeSlotFromIndexToSlotId","childSlotId","lastOutput","incrementalSubRoutes","prevMatch","newMatch","a","b","isEqual","omitNumericKeys","c","omitBy","isRouteParamsEqual","incrementalOutput","failed","newControlNode","routesOutput","last","mergeSiblingRenderMenuRequest","loadChildren","legacyRenderBrick","getDataStores","stores","flushStableLoadBricks","rest","newSlots","sl","isRouteConf","unknownPolicy","misc","nativeController","getPageInfo","isInIframe","isInIframeOfSameSite","isInIframeOfNext","isInIframeOfVisualBuilder","isInIframeOfLegacyConsole","selfIsNext","parentPathname","parentIsNext","registerCustomTemplates","version","ui","WATEMARK_BRICKNAME","isNetworkError","STORAGE_KEY","MAX_RELOAD_COUNT","shouldReloadForError","navigator","userAgent","_sessionStorage$getIt","resetReloadForError","_storyboards","_rendering","_nextRender","_rendererContext","_rendererContextTrashCan","_redirectCount","_renderId","_currentApp","_previousApp","_navConfig","_bootstrapFailed","_Router_brand","Router","_history","_getBlockMessageBeforePageLave","returnValue","getRuntimeContext","getRecentApps","previousApp","getNavConfig","AbortController","signal","nextPrevLocation","listen","_queuedRender","_classPrivateFieldGet2","previousMessage","_safeRedirect","_this$redirectCount","_this$redirectCount2","_preRender","nextRender","_prevLocation$state","_location$state","_location$state2","_classPrivateFieldGet4","ignoreRendering","omittedLocationProps","_classPrivateFieldGet3","locationsAreEqual","abort","_render","isBootstrap","_hooks$auth","_hooks$auth$isBlocked","_hooks$pageView","_classPrivateFieldGet5","_storyboard$app","isBlockedPath","clearCollectWidgetContract","finishPageView","pageView","create","currentAppId","BOOTSTRAP_UNION_FILE","APP_ROOT_TPL","APP_ID","APP_ROOT","setAppVariable","_hooks$fulfilStoryboa","fulfilStoryboard","doFulfilStoryboard","_storyboard$meta$forE","_hooks$auth3","_hooks$auth3$isBlocke","blackList","_hooks$auth2","_hooks$auth2$addPathT","addPathToBlackList","_window$APP_ROOT","_window$APP_ROOT2","_username","_settings$watermarkCo","_watermarkConfig$cont","_watermarkConfig$flag","_watermarkConfig$flag2","isDeveloper","username","getAuth","watermarkConfig","defaultProps","zIndex","font","fontSize","gap","setWatermark","appChanged","prevRendererContext","main","cleanUpPreviousRender","reset","globalThemeVariant","_hooks$auth4","_storyboard$meta2","_storyboard$meta3","preCheckInstalledApps","menuConfs","navConfig","breadcrumb","overwrite","items","mergeMenuConfs","isCurrentBootstrap","isReCatch","noAuthGuardLoginPath","brand","getBrandSettings","preCheckPermissions","collectContract","rootMenuRequestNode","mergedRoutes","specificTemplatePreviewIndex","findLastIndex","specificSnippetPreviewIndex","insertPreviewRoutes","scrollTo","pageTitle","injectedBrickPackages","BRICK_PACKAGES","applyColorTheme","getStyleByBrandColor","getStyleByBaseColors","backgroundColor","getStyleByVariables","router","processedBrickPackages","active","panel","on","Runtime","Reflect","getRuntimeV2Factory","_initialized","_bootstrapped","_data$settings","normalizeBootstrapData","notification","dialog","loadNotificationService","loader","loadDialogService","brandColor","baseColors","variables","customizeColorTheme","_router$getRecentApps","_router","_router2","_bootstrapData","_router3","featureFlags","_bootstrapData2","_router4","_bootstrapData3","base_title","getLaunchpadSettings","_bootstrapData4","columns","rows","launchpad","getDesktops","_bootstrapData$deskto","_bootstrapData5","desktops","getLaunchpadSiteMap","_bootstrapData$siteSo","_bootstrapData6","siteSort","toggleLaunchpadEffect","applyPageTitle","_router5","baseTitle","localeTitle","_router6","_bootstrapData$brickP","_bootstrapData7","pubDeps","bricksMap","pkgName","processPublicDepsPackages","STANDALONE_BRICK_PACKAGES","PUBLIC_DEPS","_bootstrapData$settin","_bootstrapData8","presetBricks","_router7","_router8","_bootstrapData0","_internalApiGetStoryb","authenticate","_hooks$auth$authentic","logout","_hooks$auth3$logout","customEditors","editorName","editorFunc","fetchByProvider","_portal","position","height","clearI18nBundles","unmounted","previousRendererContext","urlObj","_clearI18nBundles","demoStoryboard","registerIsolatedTemplates","registerIsolatedFunctions","unmount","getRealValue","useRealTimeQuery","instantiateModalStack","initialIndex","_stack","loadScriptOrStyle","fixedSrc","cachedPromise","onload","firstScript","currentScript","getElementsByTagName","parentNode","loadSharedModule","module","__webpack_init_sharing__","__webpack_share_scopes__","default","resolveBasicPkg","rejectBasicPkg","basicPkgWillBeResolved","waitBasicPkg","dispatchRequestStatus","enqueueStableLoad","enqueueStableLoadProcessors","processors","v2AdapterPromise","V2_ADAPTER_LOAD_BRICKS","getItemsByPkg","brickPackagesMap","itemsByPkg","listToLoad","_pkg$dependencies","lastName","_p$propertyEditors","propertyEditors","pkgId","camelPackageName","toLocaleLowerCase","deprecatedBrickInThisPkg","_p$elements","_p$deprecatedElements","deprecatedElements","groupItems","fullName","dependencies","loadBrickModule","moduleName","performance","now","cost","Math","round","toFixed","loadRestBricks","pkgs","itemsMap","getPkgIdByFilePath","foundBasicPkg","v2Packages","v3PackagesOtherThanBasic","maybeV2Adapter","v2Adapter","basicPkgPromise","basicPkg","_window$PUBLIC_ROOT2","tempPromise","pkgPromises","v2AdapterItemsByPkg","v2AdapterPackages","loadV2Adapter","_pkg$propertyEditorsJ","pkgNamespace","propertyEditorsJsFilePath"],"sourceRoot":""}
|