@next-core/runtime 1.21.0 → 1.21.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/cjs/createRoot.js +4 -6
  2. package/dist/cjs/createRoot.js.map +1 -1
  3. package/dist/cjs/internal/CustomTemplates/bindTemplateProxy.js +1 -1
  4. package/dist/cjs/internal/CustomTemplates/bindTemplateProxy.js.map +1 -1
  5. package/dist/cjs/internal/Renderer.js +159 -59
  6. package/dist/cjs/internal/Renderer.js.map +1 -1
  7. package/dist/cjs/internal/RendererContext.js +87 -11
  8. package/dist/cjs/internal/RendererContext.js.map +1 -1
  9. package/dist/cjs/internal/Router.js +109 -77
  10. package/dist/cjs/internal/Router.js.map +1 -1
  11. package/dist/cjs/internal/data/DataStore.js +53 -7
  12. package/dist/cjs/internal/data/DataStore.js.map +1 -1
  13. package/dist/cjs/internal/matchRoutes.js +9 -5
  14. package/dist/cjs/internal/matchRoutes.js.map +1 -1
  15. package/dist/cjs/internal/matchStoryboard.js +8 -3
  16. package/dist/cjs/internal/matchStoryboard.js.map +1 -1
  17. package/dist/cjs/internal/secret_internals.js +11 -18
  18. package/dist/cjs/internal/secret_internals.js.map +1 -1
  19. package/dist/esm/createRoot.js +5 -7
  20. package/dist/esm/createRoot.js.map +1 -1
  21. package/dist/esm/internal/CustomTemplates/bindTemplateProxy.js +1 -1
  22. package/dist/esm/internal/CustomTemplates/bindTemplateProxy.js.map +1 -1
  23. package/dist/esm/internal/Renderer.js +167 -69
  24. package/dist/esm/internal/Renderer.js.map +1 -1
  25. package/dist/esm/internal/RendererContext.js +94 -11
  26. package/dist/esm/internal/RendererContext.js.map +1 -1
  27. package/dist/esm/internal/Router.js +148 -103
  28. package/dist/esm/internal/Router.js.map +1 -1
  29. package/dist/esm/internal/data/DataStore.js +51 -6
  30. package/dist/esm/internal/data/DataStore.js.map +1 -1
  31. package/dist/esm/internal/matchRoutes.js +8 -5
  32. package/dist/esm/internal/matchRoutes.js.map +1 -1
  33. package/dist/esm/internal/matchStoryboard.js +7 -3
  34. package/dist/esm/internal/matchStoryboard.js.map +1 -1
  35. package/dist/esm/internal/secret_internals.js +13 -20
  36. package/dist/esm/internal/secret_internals.js.map +1 -1
  37. package/dist/types/internal/Renderer.d.ts +12 -4
  38. package/dist/types/internal/RendererContext.d.ts +31 -5
  39. package/dist/types/internal/data/DataStore.d.ts +13 -4
  40. package/dist/types/internal/matchRoutes.d.ts +6 -0
  41. package/dist/types/internal/matchStoryboard.d.ts +1 -0
  42. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"DataStore.js","names":["_general","require","_storyboard","_bindListeners","_checkIf","_computeRealValue","_resolveData","_resolveDataStore","_handleHttpError","_computeRealProperties","supportContextResolveTriggerBrickLifeCycle","DataStore","type","data","Map","changeEventType","pendingStack","hostBrick","batchUpdate","batchUpdateContextsNames","rendererContext","constructor","getAllValues","Object","fromEntries","entries","map","name","value","getValue","_this$data$get","get","getAffectListByContext","affectNames","forEach","key","deps","isInDeps","some","item","includes","push","shift","Set","updateValues","values","method","argsFactory","length","Error","updateContexts","affectContexts","affectDepsContextNames","arg","updateContextItem","updateValue","filter","affectContextItem","triggerEvent","contexts","_context$eventTarget","context","eventTarget","dispatchEvent","CustomEvent","detail","callback","callbackRuntimeContext","load","promise","loaded","Promise","resolve","loading","cache","then","val","err","error","handleHttpError","callbackFactory","eventCallbackFactory","isObject","assign","console","warn","define","dataConfs","runtimeContext","asyncHostPropertyEntries","Array","isArray","pending","resolveDataStore","dataConf","onChange","dataName","listener","_this$data$get2","addEventListener","waitFor","dataNames","pendingContexts","all","ctx","p","waitForAll","pendingResult","handleAsyncAfterMount","async","asyncCheckIf","expose","computePropertyValue","resolvePolicy","undefined","resolveConf","transform","options","resolveData","lazy","hasOwnProperty","asyncComputeRealValue","newData","EventTarget","trigger","_this$rendererContext","registerArbitraryLifeCycle","listenerFactory","track","strictCollectMemberUsage","dep","batchAddListener","computeRealValue","has","set","contextConf","event","exports"],"sources":["../../../../src/internal/data/DataStore.ts"],"sourcesContent":["import type {\n BatchUpdateContextItem,\n BrickEventHandlerCallback,\n ContextConf,\n ContextResolveTriggerBrickLifeCycle,\n} from \"@next-core/types\";\nimport { hasOwnProperty, isObject } from \"@next-core/utils/general\";\nimport { strictCollectMemberUsage } from \"@next-core/utils/storyboard\";\nimport { eventCallbackFactory, listenerFactory } from \"../bindListeners.js\";\nimport { asyncCheckIf } 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\";\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 value: unknown;\n eventTarget: EventTarget;\n loaded?: boolean;\n loading?: Promise<unknown>;\n load?: (options?: ResolveOptions) => Promise<unknown>;\n async?: boolean;\n deps: string[];\n}\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<ReturnType<typeof resolveDataStore>> =\n [];\n public readonly hostBrick?: RuntimeBrick;\n public batchUpdate = false;\n public batchUpdateContextsNames: string[] = [];\n private readonly rendererContext?: RendererContext;\n\n // 把 `rendererContext` 放在参数列表的最后,并作为可选,以减少测试文件的调整\n constructor(\n type: T,\n hostBrick?: RuntimeBrick,\n rendererContext?: RendererContext\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 }\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 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\",\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.load) {\n throw new Error(\n `You can not ${method} \"${this.type}.${name}\" which has no 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 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 item.loaded = true;\n item.value = val;\n item.eventTarget.dispatchEvent(\n new CustomEvent(this.changeEventType, {\n detail: item.value,\n })\n );\n },\n (err) => {\n // Let users override error handling.\n if (!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 callbackFactory(\"error\")(err);\n callbackFactory(\"finally\")();\n }\n );\n }\n\n return;\n }\n\n if (method === \"replace\") {\n item.value = value;\n } else {\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 }\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 define(\n dataConfs: ContextConf[] | undefined,\n runtimeContext: RuntimeContext,\n asyncHostPropertyEntries?: AsyncPropertyEntry[]\n ): void {\n if (Array.isArray(dataConfs) && dataConfs.length > 0) {\n const pending = resolveDataStore(\n dataConfs,\n (dataConf: ContextConf) =>\n this.resolve(dataConf, runtimeContext, asyncHostPropertyEntries),\n this.type\n );\n this.pendingStack.push(pending);\n }\n }\n\n onChange(dataName: string, listener: EventListener): void {\n this.data\n .get(dataName)\n ?.eventTarget.addEventListener(this.changeEventType, listener);\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 /** After mount, dispatch the change event when an async data is loaded */\n handleAsyncAfterMount() {\n this.data.forEach((item) => {\n if (item.async) {\n // An async data always has `loading`\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n item.loading!.then((value) => {\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 });\n }\n\n private async resolve(\n dataConf: ContextConf,\n runtimeContext: RuntimeContext,\n asyncHostPropertyEntries?: AsyncPropertyEntry[]\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 resolvePolicy: \"eager\" | \"lazy\" | \"async\" = \"eager\";\n if (value === undefined) {\n if (dataConf.resolve) {\n const resolveConf = {\n transform: \"value\",\n ...dataConf.resolve,\n };\n if (await asyncCheckIf(dataConf.resolve, runtimeContext)) {\n load = async (options) =>\n (\n (await resolveData(resolveConf, runtimeContext, options)) as {\n value: unknown;\n }\n ).value;\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 (!hasOwnProperty(dataConf, \"value\")) {\n return false;\n }\n }\n if (\n (!load || 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 const newData: DataStoreItem = {\n value,\n // This is required for tracking context, even if no `onChange` is specified.\n eventTarget: new EventTarget(),\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 load ? dataConf.resolve : 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 if (load) {\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 if (this.data.has(dataConf.name)) {\n throw new Error(\n `${this.type} '${dataConf.name}' has already been declared`\n );\n }\n this.data.set(dataConf.name, newData);\n\n return true;\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"],"mappings":"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"}
1
+ {"version":3,"file":"DataStore.js","names":["_general","require","_storyboard","_eventTarget","_interopRequireDefault","_bindListeners","_checkIf","_computeRealValue","_resolveData","_resolveDataStore","_handleHttpError","_computeRealProperties","supportContextResolveTriggerBrickLifeCycle","DataStore","type","data","Map","changeEventType","pendingStack","hostBrick","batchUpdate","batchUpdateContextsNames","rendererContext","routeMap","WeakMap","constructor","getAllValues","Object","fromEntries","entries","map","name","value","getValue","_this$data$get","get","getAffectListByContext","affectNames","forEach","key","deps","isInDeps","some","item","includes","push","shift","Set","updateValues","values","method","argsFactory","length","Error","updateContexts","affectContexts","affectDepsContextNames","arg","updateContextItem","updateValue","filter","affectContextItem","triggerEvent","contexts","_context$eventTarget","context","eventTarget","dispatchEvent","CustomEvent","detail","callback","callbackRuntimeContext","load","promise","loaded","Promise","resolve","loading","cache","then","val","err","error","handleHttpError","callbackFactory","eventCallbackFactory","isObject","assign","console","warn","define","dataConfs","runtimeContext","asyncHostPropertyEntries","routePath","Array","isArray","pending","resolveDataStore","dataConf","onChange","dataName","listener","_this$data$get2","addEventListener","waitFor","dataNames","pendingContexts","all","ctx","p","waitForAll","catch","pendingResult","mountAsyncData","route","_this$routeMap$get","async","has","asyncMounted","asyncCheckIf","expose","computePropertyValue","resolvePolicy","undefined","resolveConf","transform","options","resolveData","lazy","hasOwnProperty","asyncComputeRealValue","newData","EventTarget","trigger","_this$rendererContext","registerArbitraryLifeCycle","listenerFactory","track","strictCollectMemberUsage","dep","batchAddListener","computeRealValue","set","names","add","disposeDataInRoutes","routes","delete","contextConf","event","exports"],"sources":["../../../../src/internal/data/DataStore.ts"],"sourcesContent":["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 { eventCallbackFactory, listenerFactory } from \"../bindListeners.js\";\nimport { asyncCheckIf } 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\";\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 loaded?: boolean;\n loading?: Promise<unknown>;\n load?: (options?: ResolveOptions) => Promise<unknown>;\n async?: boolean;\n asyncMounted?: boolean;\n deps: string[];\n}\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<ReturnType<typeof resolveDataStore>> =\n [];\n public readonly hostBrick?: RuntimeBrick;\n public batchUpdate = false;\n public batchUpdateContextsNames: string[] = [];\n private readonly rendererContext?: RendererContext;\n private routeMap = new WeakMap<RouteConf, Set<string>>();\n\n // 把 `rendererContext` 放在参数列表的最后,并作为可选,以减少测试文件的调整\n constructor(\n type: T,\n hostBrick?: RuntimeBrick,\n rendererContext?: RendererContext\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 }\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 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\",\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.load) {\n throw new Error(\n `You can not ${method} \"${this.type}.${name}\" which has no 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 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 item.loaded = true;\n item.value = val;\n item.eventTarget.dispatchEvent(\n new CustomEvent(this.changeEventType, {\n detail: item.value,\n })\n );\n },\n (err) => {\n // Let users override error handling.\n if (!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 callbackFactory(\"error\")(err);\n callbackFactory(\"finally\")();\n }\n );\n }\n\n return;\n }\n\n if (method === \"replace\") {\n item.value = value;\n } else {\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 }\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 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 );\n this.pendingStack.push(pending);\n }\n }\n\n onChange(dataName: string, listener: EventListener): void {\n this.data\n .get(dataName)\n ?.eventTarget.addEventListener(this.changeEventType, listener);\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 // Silent each pending contexts, since the error is handled by batched `pendingResult`\n for (const { pendingContexts } of this.pendingStack) {\n for (const p of pendingContexts.values()) {\n p.catch(() => {\n /* No-op */\n });\n }\n }\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 item.loaded = true;\n item.value = value;\n item.eventTarget.dispatchEvent(\n new CustomEvent(this.changeEventType, {\n detail: value,\n })\n );\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 resolvePolicy: \"eager\" | \"lazy\" | \"async\" = \"eager\";\n if (value === undefined) {\n if (dataConf.resolve) {\n const resolveConf = {\n transform: \"value\",\n ...dataConf.resolve,\n };\n if (await asyncCheckIf(dataConf.resolve, runtimeContext)) {\n load = async (options) =>\n (\n (await resolveData(resolveConf, runtimeContext, options)) as {\n value: unknown;\n }\n ).value;\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 (!hasOwnProperty(dataConf, \"value\")) {\n return false;\n }\n }\n if (\n (!load || 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 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 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 load ? dataConf.resolve : 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 if (load) {\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 if (this.data.has(dataConf.name)) {\n throw new Error(\n `${this.type} '${dataConf.name}' has already been declared`\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 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 }\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"],"mappings":";;;;;;;AAOA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,cAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAL,OAAA;AACA,IAAAM,iBAAA,GAAAN,OAAA;AAIA,IAAAO,YAAA,GAAAP,OAAA;AACA,IAAAQ,iBAAA,GAAAR,OAAA;AAMA,IAAAS,gBAAA,GAAAT,OAAA;AAEA,IAAAU,sBAAA,GAAAV,OAAA;AAEA,MAAMW,0CAA0C,GAAG,CACjD,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,gBAAgB,CACwB;AAgBnC,MAAMC,SAAS,CAAkC;EACrCC,IAAI;EACJC,IAAI,GAAG,IAAIC,GAAG,CAAwB,CAAC;EACvCC,eAAe;EACfC,YAAY,GAC3B,EAAE;EACYC,SAAS;EAClBC,WAAW,GAAG,KAAK;EACnBC,wBAAwB,GAAa,EAAE;EAC7BC,eAAe;EACxBC,QAAQ,GAAG,IAAIC,OAAO,CAAyB,CAAC;;EAExD;EACAC,WAAWA,CACTX,IAAO,EACPK,SAAwB,EACxBG,eAAiC,EACjC;IACA,IAAI,CAACR,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACG,eAAe,GAClB,IAAI,CAACH,IAAI,KAAK,YAAY,GACtB,kBAAkB,GAClB,IAAI,CAACA,IAAI,KAAK,OAAO,GACrB,cAAc,GACd,gBAAgB;IACtB,IAAI,CAACK,SAAS,GAAGA,SAAS;IAC1B,IAAI,CAACG,eAAe,GAAGA,eAAe;EACxC;EAEAI,YAAYA,CAAA,EAA4B;IACtC,OAAOC,MAAM,CAACC,WAAW,CACvB,CAAC,GAAG,IAAI,CAACb,IAAI,CAACc,OAAO,CAAC,CAAC,CAAC,CAACC,GAAG,CAAC,CAAC,CAACC,IAAI,EAAE;MAAEC;IAAM,CAAC,CAAC,KAAK,CAACD,IAAI,EAAEC,KAAK,CAAC,CACnE,CAAC;EACH;EAEAC,QAAQA,CAACF,IAAY,EAAW;IAAA,IAAAG,cAAA;IAC9B,QAAAA,cAAA,GAAO,IAAI,CAACnB,IAAI,CAACoB,GAAG,CAACJ,IAAI,CAAC,cAAAG,cAAA,uBAAnBA,cAAA,CAAqBF,KAAK;EACnC;EAEQI,sBAAsBA,CAACL,IAAY,EAAY;IACrD,MAAMM,WAAW,GAAG,CAACN,IAAI,CAAC;IAC1B,IAAI,CAAChB,IAAI,CAACuB,OAAO,CAAC,CAACN,KAAK,EAAEO,GAAG,KAAK;MAChC,IAAIP,KAAK,CAACQ,IAAI,EAAE;QACd,MAAMC,QAAQ,GAAGT,KAAK,CAACQ,IAAI,CAACE,IAAI,CAAEC,IAAI,IAAKN,WAAW,CAACO,QAAQ,CAACD,IAAI,CAAC,CAAC;QACtEF,QAAQ,IACNJ,WAAW,CAACQ,IAAI,CAACN,GAAG,CAAC,IACrBF,WAAW,CAACQ,IAAI,CAAC,GAAG,IAAI,CAACT,sBAAsB,CAACG,GAAG,CAAC,CAAC;MACzD;IACF,CAAC,CAAC;IACFF,WAAW,CAACS,KAAK,CAAC,CAAC;IACnB,OAAO,CAAC,GAAG,IAAIC,GAAG,CAACV,WAAW,CAAC,CAAC;EAClC;EAEAW,YAAYA,CACVC,MAAgC,EAChCC,MAA4B,EAC5BC,WAAuD,EACjD;IACN,IAAI,CAAC/B,WAAW,GAAG,IAAI;IACvB,IAAI,CAACC,wBAAwB,GAAG4B,MAAM,CAACnB,GAAG,CAAEa,IAAI,IAAKA,IAAI,CAACZ,IAAI,CAAC;IAC/D,IACE,CAAC,GAAG,IAAIgB,GAAG,CAAC,IAAI,CAAC1B,wBAAwB,CAAC,CAAC,CAAC+B,MAAM,KAClD,IAAI,CAAC/B,wBAAwB,CAAC+B,MAAM,EACpC;MACA,MAAM,IAAIC,KAAK,CAAE,4CAA2C,CAAC;IAC/D;IAEA,MAAMC,cAA6C,GAAG,CAAC,CAAC;IACxD,MAAMC,cAA6C,GAAG,CAAC,CAAC;IACxD,MAAMC,sBAAgC,GAAG,EAAE;IAE3CP,MAAM,CAACX,OAAO,CAAEmB,GAAG,IAAK;MACtB,MAAM;QAAE1B,IAAI;QAAEC;MAAM,CAAC,GAAGmB,WAAW,CAAC,CAACM,GAAG,CAAC,CAAC;MAC1C,MAAMC,iBAAiB,GAAG,IAAI,CAAC3C,IAAI,CAACoB,GAAG,CAACJ,IAAI,CAAC;MAC7CyB,sBAAsB,CAACX,IAAI,CAAC,GAAG,IAAI,CAACT,sBAAsB,CAACL,IAAI,CAAC,CAAC;MACjE2B,iBAAiB,KAAKJ,cAAc,CAACvB,IAAI,CAAC,GAAG2B,iBAAiB,CAAC;MAC/D,IAAI,CAACC,WAAW,CAAC5B,IAAI,EAAYC,KAAK,EAAEkB,MAAM,CAAC;IACjD,CAAC,CAAC;IAEFM,sBAAsB,CACnBI,MAAM,CAAEjB,IAAI,IAAK,CAACW,cAAc,CAACX,IAAI,CAAC,CAAC,CACvCL,OAAO,CAAEP,IAAI,IAAK;MACjB,MAAM8B,iBAAiB,GAAG,IAAI,CAAC9C,IAAI,CAACoB,GAAG,CAACJ,IAAI,CAAC;MAC7C8B,iBAAiB,KAAKN,cAAc,CAACxB,IAAI,CAAC,GAAG8B,iBAAiB,CAAC;IACjE,CAAC,CAAC;IAEJ,MAAMC,YAAY,GAAIC,QAAuC,IAAW;MACtE,KAAK,MAAMxB,GAAG,IAAIwB,QAAQ,EAAE;QAAA,IAAAC,oBAAA;QAC1B,MAAMC,OAAO,GAAGF,QAAQ,CAACxB,GAAG,CAAC;QAC7B,CAAAyB,oBAAA,GAAAC,OAAO,CAACC,WAAW,cAAAF,oBAAA,uBAAnBA,oBAAA,CAAqBG,aAAa,CAChC,IAAIC,WAAW,CAAC,IAAI,CAACnD,eAAe,EAAE;UACpCoD,MAAM,EAAEJ,OAAO,CAACjC;QAClB,CAAC,CACH,CAAC;MACH;IACF,CAAC;IAED8B,YAAY,CAACR,cAAc,CAAC;IAC5BQ,YAAY,CAACP,cAAc,CAAC;IAE5B,IAAI,CAACnC,WAAW,GAAG,KAAK;IAExB;EACF;EAEAuC,WAAWA,CACT5B,IAAY,EACZC,KAAc,EACdkB,MAAiD,EACjDoB,QAAoC,EACpCC,sBAAuC,EACjC;IACN,MAAM5B,IAAI,GAAG,IAAI,CAAC5B,IAAI,CAACoB,GAAG,CAACJ,IAAI,CAAC;IAChC,IAAI,CAACY,IAAI,EAAE;MACT,MAAM,IAAIU,KAAK,CAAE,GAAE,IAAI,CAACvC,IAAK,KAAIiB,IAAK,kBAAiB,CAAC;IAC1D;IAEA,IAAImB,MAAM,KAAK,SAAS,IAAIA,MAAM,KAAK,MAAM,EAAE;MAC7C,IAAI,CAACP,IAAI,CAAC6B,IAAI,EAAE;QACd,MAAM,IAAInB,KAAK,CACZ,eAAcH,MAAO,KAAI,IAAI,CAACpC,IAAK,IAAGiB,IAAK,wBAC9C,CAAC;MACH;MAEA,IAAI0C,OAAqC;MACzC,IAAIvB,MAAM,KAAK,MAAM,EAAE;QACrB;QACA,IAAIP,IAAI,CAAC+B,MAAM,EAAE;UACfD,OAAO,GAAGE,OAAO,CAACC,OAAO,CAACjC,IAAI,CAACX,KAAK,CAAC;QACvC,CAAC,MAAM,IAAIW,IAAI,CAACkC,OAAO,EAAE;UACvBJ,OAAO,GAAG9B,IAAI,CAACkC,OAAO;QACxB;MACF;MAEA,IAAI,CAACJ,OAAO,EAAE;QACZA,OAAO,GAAG9B,IAAI,CAACkC,OAAO,GAAGlC,IAAI,CAAC6B,IAAI,CAAC;UACjCM,KAAK,EAAE5B,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,QAAQ;UAC/C,GAAIlB;QACN,CAAC,CAAC;QACF;QACAyC,OAAO,CAACM,IAAI,CACTC,GAAG,IAAK;UACPrC,IAAI,CAAC+B,MAAM,GAAG,IAAI;UAClB/B,IAAI,CAACX,KAAK,GAAGgD,GAAG;UAChBrC,IAAI,CAACuB,WAAW,CAACC,aAAa,CAC5B,IAAIC,WAAW,CAAC,IAAI,CAACnD,eAAe,EAAE;YACpCoD,MAAM,EAAE1B,IAAI,CAACX;UACf,CAAC,CACH,CAAC;QACH,CAAC,EACAiD,GAAG,IAAK;UACP;UACA,IAAI,EAACX,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAEY,KAAK,GAAE;YACpB,IAAAC,gCAAe,EAACF,GAAG,CAAC;UACtB;QACF,CACF,CAAC;MACH;MAEA,IAAIX,QAAQ,EAAE;QACZ,MAAMc,eAAe,GAAG,IAAAC,mCAAoB,EAC1Cf,QAAQ,EACRC,sBACF,CAAC;QAEDE,OAAO,CAACM,IAAI,CACTC,GAAG,IAAK;UACPI,eAAe,CAAC,SAAS,CAAC,CAAC;YAAEpD,KAAK,EAAEgD;UAAI,CAAC,CAAC;UAC1CI,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9B,CAAC,EACAH,GAAG,IAAK;UACPG,eAAe,CAAC,OAAO,CAAC,CAACH,GAAG,CAAC;UAC7BG,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9B,CACF,CAAC;MACH;MAEA;IACF;IAEA,IAAIlC,MAAM,KAAK,SAAS,EAAE;MACxBP,IAAI,CAACX,KAAK,GAAGA,KAAK;IACpB,CAAC,MAAM;MACL,IAAI,IAAAsD,iBAAQ,EAAC3C,IAAI,CAACX,KAAK,CAAC,EAAE;QACxBL,MAAM,CAAC4D,MAAM,CAAC5C,IAAI,CAACX,KAAK,EAAEA,KAAK,CAAC;MAClC,CAAC,MAAM;QACL;QACAwD,OAAO,CAACC,IAAI,CACT,gCAA+B,IAAI,CAAC3E,IAAK,IAAGiB,IAAK,wDACpD,CAAC;QACDY,IAAI,CAACX,KAAK,GAAGA,KAAK;MACpB;IACF;IAEA,IAAI,IAAI,CAACZ,WAAW,EAAE;IAEtBuB,IAAI,CAACuB,WAAW,CAACC,aAAa,CAC5B,IAAIC,WAAW,CAAC,IAAI,CAACnD,eAAe,EAAE;MACpCoD,MAAM,EAAE1B,IAAI,CAACX;IACf,CAAC,CACH,CAAC;EACH;EAEA0D,MAAMA,CACJC,SAAoC,EACpCC,cAA8B,EAC9BC,wBAA+C,EAC/CC,SAAuB,EACjB;IACN,IAAIC,KAAK,CAACC,OAAO,CAACL,SAAS,CAAC,IAAIA,SAAS,CAACvC,MAAM,GAAG,CAAC,EAAE;MACpD,MAAM6C,OAAO,GAAG,IAAAC,kCAAgB,EAC9BP,SAAS,EACRQ,QAAqB,IACpB,IAAI,CAACvB,OAAO,CACVuB,QAAQ,EACRP,cAAc,EACdC,wBAAwB,EACxBC,SACF,CAAC,EACH,IAAI,CAAChF,IACP,CAAC;MACD,IAAI,CAACI,YAAY,CAAC2B,IAAI,CAACoD,OAAO,CAAC;IACjC;EACF;EAEAG,QAAQA,CAACC,QAAgB,EAAEC,QAAuB,EAAQ;IAAA,IAAAC,eAAA;IACxD,CAAAA,eAAA,OAAI,CAACxF,IAAI,CACNoB,GAAG,CAACkE,QAAQ,CAAC,cAAAE,eAAA,uBADhBA,eAAA,CAEIrC,WAAW,CAACsC,gBAAgB,CAAC,IAAI,CAACvF,eAAe,EAAEqF,QAAQ,CAAC;EAClE;EAEA,MAAMG,OAAOA,CAACC,SAAiC,EAAiB;IAC9D,KAAK,MAAM;MAAEC;IAAgB,CAAC,IAAI,IAAI,CAACzF,YAAY,EAAE;MACnD,MAAMyD,OAAO,CAACiC,GAAG,CACf,CAAC,GAAGF,SAAS,CAAC,CAAC5E,GAAG,CAAE+E,GAAG,IAAK;QAC1B,MAAMC,CAAC,GAAGH,eAAe,CAACxE,GAAG,CAAC0E,GAAG,CAAC;QAClC,OAAOC,CAAC;MACV,CAAC,CACH,CAAC;IACH;EACF;EAEA,MAAMC,UAAUA,CAAA,EAAkB;IAChC;IACA,KAAK,MAAM;MAAEJ;IAAgB,CAAC,IAAI,IAAI,CAACzF,YAAY,EAAE;MACnD,KAAK,MAAM4F,CAAC,IAAIH,eAAe,CAAC1D,MAAM,CAAC,CAAC,EAAE;QACxC6D,CAAC,CAACE,KAAK,CAAC,MAAM;UACZ;QAAA,CACD,CAAC;MACJ;IACF;IACA,KAAK,MAAM;MAAEC;IAAc,CAAC,IAAI,IAAI,CAAC/F,YAAY,EAAE;MACjD,MAAM+F,aAAa;IACrB;EACF;;EAEA;AACF;AACA;AACA;AACA;EACEC,cAAcA,CAACC,KAAiB,EAAE;IAChC,IAAI,CAACpG,IAAI,CAACuB,OAAO,CAAEK,IAAI,IAAK;MAAA,IAAAyE,kBAAA;MAC1B,IAAIzE,IAAI,CAAC0E,KAAK,KAAK,CAACF,KAAK,KAAAC,kBAAA,GAAI,IAAI,CAAC7F,QAAQ,CAACY,GAAG,CAACgF,KAAK,CAAC,cAAAC,kBAAA,eAAxBA,kBAAA,CAA0BE,GAAG,CAAC3E,IAAI,CAACZ,IAAI,CAAC,CAAC,EAAE;QACtE;QACA,IAAIY,IAAI,CAAC4E,YAAY,EAAE;UACrB;UACA/B,OAAO,CAACN,KAAK,CACV,eAAcvC,IAAI,CAACZ,IAAK,mEAC3B,CAAC;UACD;QACF;QACAY,IAAI,CAAC4E,YAAY,GAAG,IAAI;QACxB;QACA;QACA5E,IAAI,CAACkC,OAAO,CAAEE,IAAI,CAAE/C,KAAK,IAAK;UAC5BW,IAAI,CAAC+B,MAAM,GAAG,IAAI;UAClB/B,IAAI,CAACX,KAAK,GAAGA,KAAK;UAClBW,IAAI,CAACuB,WAAW,CAACC,aAAa,CAC5B,IAAIC,WAAW,CAAC,IAAI,CAACnD,eAAe,EAAE;YACpCoD,MAAM,EAAErC;UACV,CAAC,CACH,CAAC;QACH,CAAC,CAAC;MACJ;IACF,CAAC,CAAC;EACJ;EAEA,MAAc4C,OAAOA,CACnBuB,QAAqB,EACrBP,cAA8B,EAC9BC,wBAA+C,EAC/CC,SAAuB,EACL;IAClB,IAAI,EAAE,MAAM,IAAA0B,qBAAY,EAACrB,QAAQ,EAAEP,cAAc,CAAC,CAAC,EAAE;MACnD,OAAO,KAAK;IACd;IACA,IAAI5D,KAAc;IAClB,IACE6D,wBAAwB,KACvB,IAAI,CAAC/E,IAAI,KAAK,OAAO,GAAGqF,QAAQ,CAACsB,MAAM,GAAG,IAAI,CAAC3G,IAAI,KAAK,YAAY,CAAC,EACtE;MACAkB,KAAK,GAAG,MAAM,IAAA0F,2CAAoB,EAChC7B,wBAAwB,EACxBM,QAAQ,CAACpE,IACX,CAAC;IACH;IACA,IAAIyC,IAA2B;IAC/B,IAAIK,OAAqC;IACzC,IAAI8C,aAAyC,GAAG,OAAO;IACvD,IAAI3F,KAAK,KAAK4F,SAAS,EAAE;MACvB,IAAIzB,QAAQ,CAACvB,OAAO,EAAE;QACpB,MAAMiD,WAAW,GAAG;UAClBC,SAAS,EAAE,OAAO;UAClB,GAAG3B,QAAQ,CAACvB;QACd,CAAC;QACD,IAAI,MAAM,IAAA4C,qBAAY,EAACrB,QAAQ,CAACvB,OAAO,EAAEgB,cAAc,CAAC,EAAE;UACxDpB,IAAI,GAAG,MAAOuD,OAAO,IACnB,CACG,MAAM,IAAAC,wBAAW,EAACH,WAAW,EAAEjC,cAAc,EAAEmC,OAAO,CAAC,EAGxD/F,KAAK;UACT;UACA2F,aAAa,GAAGxB,QAAQ,CAACvB,OAAO,CAACyC,KAAK,GAClC,OAAO,GACPlB,QAAQ,CAACvB,OAAO,CAACqD,IAAI,GACrB,MAAM,GACN,OAAO;UACX,IAAIN,aAAa,KAAK,OAAO,EAAE;YAC7B3F,KAAK,GAAG,MAAMwC,IAAI,CAAC,CAAC;UACtB,CAAC,MAAM,IAAImD,aAAa,KAAK,OAAO,EAAE;YACpC9C,OAAO,GAAGL,IAAI,CAAC,CAAC;UAClB;QACF,CAAC,MAAM,IAAI,CAAC,IAAA0D,uBAAc,EAAC/B,QAAQ,EAAE,OAAO,CAAC,EAAE;UAC7C,OAAO,KAAK;QACd;MACF;MACA,IACE,CAAC,CAAC3B,IAAI,IAAImD,aAAa,KAAK,OAAO,KACnCxB,QAAQ,CAACnE,KAAK,KAAK4F,SAAS,EAC5B;QACA;QACA;QACA5F,KAAK,GAAG,MAAM,IAAAmG,uCAAqB,EAAChC,QAAQ,CAACnE,KAAK,EAAE4D,cAAc,CAAC;MACrE;IACF;IAEA,MAAMwC,OAAsB,GAAG;MAC7BrG,IAAI,EAAEoE,QAAQ,CAACpE,IAAI;MACnBC,KAAK;MACL;MACAkC,WAAW,EAAE,IAAImE,oBAAW,CAAC,CAAC;MAC9B7D,IAAI;MACJE,MAAM,EAAEiD,aAAa,KAAK,OAAO;MACjC9C,OAAO;MACPwC,KAAK,EAAEM,aAAa,KAAK,OAAO;MAChCnF,IAAI,EAAE;IACR,CAAC;IAED,IAAImF,aAAa,KAAK,MAAM,EAAE;MAC5B;MACA,MAAM;QAAEW;MAAQ,CAAC,GAAGnC,QAAQ,CAACvB,OAAQ;MACrC,IACE0D,OAAO,IACP1H,0CAA0C,CAACgC,QAAQ,CAAC0F,OAAO,CAAC,EAC5D;QAAA,IAAAC,qBAAA;QACA,CAAAA,qBAAA,OAAI,CAACjH,eAAe,cAAAiH,qBAAA,uBAApBA,qBAAA,CAAsBC,0BAA0B,CAACF,OAAO,EAAE,MAAM;UAC9D,IAAI,CAAC3E,WAAW,CAACwC,QAAQ,CAACpE,IAAI,EAAE6F,SAAS,EAAE,MAAM,CAAC;QACpD,CAAC,CAAC;MACJ;IACF;IAEA,IAAIzB,QAAQ,CAACC,QAAQ,EAAE;MACrBgC,OAAO,CAAClE,WAAW,CAACsC,gBAAgB,CAClC,IAAI,CAACvF,eAAe,EACpB,IAAAwH,8BAAe,EAACtC,QAAQ,CAACC,QAAQ,EAAER,cAAc,CACnD,CAAC;IACH;IAEA,IAAIO,QAAQ,CAACuC,KAAK,EAAE;MAClB,MAAMlG,IAAI,GAAG,IAAAmG,oCAAwB,EACnCnE,IAAI,GAAG2B,QAAQ,CAACvB,OAAO,GAAGuB,QAAQ,CAACnE,KAAK,EACxC,IAAI,CAAClB,IACP,CAAC;MACD,CAAC0D,IAAI,KAAK4D,OAAO,CAAC5F,IAAI,GAAG,CAAC,GAAGA,IAAI,CAAC,CAAC;MACnC,KAAK,MAAMoG,GAAG,IAAIpG,IAAI,EAAE;QACtB,IAAI,CAAC4D,QAAQ,CACXwC,GAAG,EACH,IAAI,CAACC,gBAAgB,CAAC,MAAM;UAC1B,IAAIrE,IAAI,EAAE;YACR,IAAI,CAACb,WAAW,CAACwC,QAAQ,CAACpE,IAAI,EAAE;cAAE+C,KAAK,EAAE;YAAU,CAAC,EAAE,SAAS,CAAC;UAClE,CAAC,MAAM;YACL,IAAI,CAACnB,WAAW,CACdwC,QAAQ,CAACpE,IAAI,EACb,IAAA+G,kCAAgB,EAAC3C,QAAQ,CAACnE,KAAK,EAAE4D,cAAc,CAAC,EAChD,SACF,CAAC;UACH;QACF,CAAC,EAAEO,QAAQ,CACb,CAAC;MACH;IACF;IAEA,IAAI,IAAI,CAACpF,IAAI,CAACuG,GAAG,CAACnB,QAAQ,CAACpE,IAAI,CAAC,EAAE;MAChC,MAAM,IAAIsB,KAAK,CACZ,GAAE,IAAI,CAACvC,IAAK,KAAIqF,QAAQ,CAACpE,IAAK,6BACjC,CAAC;IACH;IACA,IAAI,CAAChB,IAAI,CAACgI,GAAG,CAAC5C,QAAQ,CAACpE,IAAI,EAAEqG,OAAO,CAAC;IAErC,IAAIrC,KAAK,CAACC,OAAO,CAACF,SAAS,CAAC,EAAE;MAC5B,KAAK,MAAMqB,KAAK,IAAIrB,SAAS,EAAE;QAC7B,MAAMkD,KAAK,GAAG,IAAI,CAACzH,QAAQ,CAACY,GAAG,CAACgF,KAAK,CAAC;QACtC,IAAI6B,KAAK,EAAE;UACTA,KAAK,CAACC,GAAG,CAAC9C,QAAQ,CAACpE,IAAI,CAAC;QAC1B,CAAC,MAAM;UACL,IAAI,CAACR,QAAQ,CAACwH,GAAG,CAAC5B,KAAK,EAAE,IAAIpE,GAAG,CAAC,CAACoD,QAAQ,CAACpE,IAAI,CAAC,CAAC,CAAC;QACpD;MACF;IACF;IAEA,OAAO,IAAI;EACb;EAEAmH,mBAAmBA,CAACC,MAAmB,EAAE;IACvC,KAAK,MAAMhC,KAAK,IAAIgC,MAAM,EAAE;MAC1B,MAAMH,KAAK,GAAG,IAAI,CAACzH,QAAQ,CAACY,GAAG,CAACgF,KAAK,CAAC;MACtC,IAAI6B,KAAK,KAAKpB,SAAS,EAAE;QACvB,KAAK,MAAM7F,IAAI,IAAIiH,KAAK,EAAE;UACxB,IAAI,CAACjI,IAAI,CAACqI,MAAM,CAACrH,IAAI,CAAC;QACxB;MACF;IACF;EACF;EAEQ8G,gBAAgBA,CACtBvC,QAAuB,EACvB+C,WAAwB,EACT;IACf,OAAQC,KAA0B,IAAW;MAC3C,IACE,IAAI,CAAClI,WAAW,IAChB,IAAI,CAACC,wBAAwB,CAACuB,QAAQ,CAACyG,WAAW,CAACtH,IAAI,CAAC,EACxD;QACA;MACF;MACAuE,QAAQ,CAACgD,KAAK,CAAC;IACjB,CAAC;EACH;AACF;AAACC,OAAA,CAAA1I,SAAA,GAAAA,SAAA"}
@@ -3,6 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.matchRoute = matchRoute;
6
7
  exports.matchRoutes = matchRoutes;
7
8
  var _matchPath = require("./matchPath.js");
8
9
  var _checkIf = require("./compute/checkIf.js");
@@ -14,11 +15,7 @@ async function matchRoutes(routes, runtimeContext) {
14
15
  console.error("Invalid route with invalid path:", route);
15
16
  throw new Error(`Invalid route with invalid type of path: ${typeof route.path}`);
16
17
  }
17
- const routePath = route.path.replace(/^\$\{APP.homepage\}/, runtimeContext.app.homepage);
18
- const match = (0, _matchPath.matchPath)(runtimeContext.location.pathname, {
19
- path: routePath,
20
- exact: route.exact
21
- });
18
+ const match = matchRoute(route, runtimeContext.app.homepage, runtimeContext.location.pathname);
22
19
  if (match && (await (0, _checkIf.asyncCheckIf)(route, runtimeContext))) {
23
20
  if (runtimeContext.app.noAuthGuard || route.public || !(_Runtime.hooks !== null && _Runtime.hooks !== void 0 && _Runtime.hooks.auth) || _Runtime.hooks.auth.isLoggedIn()) {
24
21
  return {
@@ -31,4 +28,11 @@ async function matchRoutes(routes, runtimeContext) {
31
28
  }
32
29
  return "missed";
33
30
  }
31
+ function matchRoute(route, homepage, pathname) {
32
+ const routePath = route.path.replace(/^\$\{APP.homepage\}/, homepage);
33
+ return (0, _matchPath.matchPath)(pathname, {
34
+ path: routePath,
35
+ exact: route.exact
36
+ });
37
+ }
34
38
  //# sourceMappingURL=matchRoutes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"matchRoutes.js","names":["_matchPath","require","_checkIf","_Runtime","matchRoutes","routes","runtimeContext","route","path","console","error","Error","routePath","replace","app","homepage","match","matchPath","location","pathname","exact","asyncCheckIf","noAuthGuard","public","hooks","auth","isLoggedIn"],"sources":["../../../src/internal/matchRoutes.ts"],"sourcesContent":["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 routePath = route.path.replace(\n /^\\$\\{APP.homepage\\}/,\n runtimeContext.app.homepage\n );\n const match = matchPath(runtimeContext.location.pathname, {\n path: routePath,\n exact: route.exact,\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"],"mappings":";;;;;;AACA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAEA,IAAAE,QAAA,GAAAF,OAAA;AAUO,eAAeG,WAAWA,CAC/BC,MAAmB,EACnBC,cAA8B,EACF;EAC5B,KAAK,MAAMC,KAAK,IAAIF,MAAM,EAAE;IAC1B,IAAI,OAAOE,KAAK,CAACC,IAAI,KAAK,QAAQ,EAAE;MAClC;MACAC,OAAO,CAACC,KAAK,CAAC,kCAAkC,EAAEH,KAAK,CAAC;MACxD,MAAM,IAAII,KAAK,CACZ,4CAA2C,OAAOJ,KAAK,CAACC,IAAK,EAChE,CAAC;IACH;IACA,MAAMI,SAAS,GAAGL,KAAK,CAACC,IAAI,CAACK,OAAO,CAClC,qBAAqB,EACrBP,cAAc,CAACQ,GAAG,CAACC,QACrB,CAAC;IACD,MAAMC,KAAK,GAAG,IAAAC,oBAAS,EAACX,cAAc,CAACY,QAAQ,CAACC,QAAQ,EAAE;MACxDX,IAAI,EAAEI,SAAS;MACfQ,KAAK,EAAEb,KAAK,CAACa;IACf,CAAC,CAAC;IACF,IAAIJ,KAAK,KAAK,MAAM,IAAAK,qBAAY,EAACd,KAAK,EAAED,cAAc,CAAC,CAAC,EAAE;MACxD,IACEA,cAAc,CAACQ,GAAG,CAACQ,WAAW,IAC9Bf,KAAK,CAACgB,MAAM,IACZ,EAACC,cAAK,aAALA,cAAK,eAALA,cAAK,CAAEC,IAAI,KACZD,cAAK,CAACC,IAAI,CAACC,UAAU,CAAC,CAAC,EACvB;QACA,OAAO;UAAEV,KAAK;UAAET;QAAM,CAAC;MACzB;MACA,OAAO,iBAAiB;IAC1B;EACF;EACA,OAAO,QAAQ;AACjB"}
1
+ {"version":3,"file":"matchRoutes.js","names":["_matchPath","require","_checkIf","_Runtime","matchRoutes","routes","runtimeContext","route","path","console","error","Error","match","matchRoute","app","homepage","location","pathname","asyncCheckIf","noAuthGuard","public","hooks","auth","isLoggedIn","routePath","replace","matchPath","exact"],"sources":["../../../src/internal/matchRoutes.ts"],"sourcesContent":["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"],"mappings":";;;;;;;AACA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAEA,IAAAE,QAAA,GAAAF,OAAA;AAUO,eAAeG,WAAWA,CAC/BC,MAAmB,EACnBC,cAA8B,EACF;EAC5B,KAAK,MAAMC,KAAK,IAAIF,MAAM,EAAE;IAC1B,IAAI,OAAOE,KAAK,CAACC,IAAI,KAAK,QAAQ,EAAE;MAClC;MACAC,OAAO,CAACC,KAAK,CAAC,kCAAkC,EAAEH,KAAK,CAAC;MACxD,MAAM,IAAII,KAAK,CACZ,4CAA2C,OAAOJ,KAAK,CAACC,IAAK,EAChE,CAAC;IACH;IACA,MAAMI,KAAK,GAAGC,UAAU,CACtBN,KAAK,EACLD,cAAc,CAACQ,GAAG,CAACC,QAAQ,EAC3BT,cAAc,CAACU,QAAQ,CAACC,QAC1B,CAAC;IACD,IAAIL,KAAK,KAAK,MAAM,IAAAM,qBAAY,EAACX,KAAK,EAAED,cAAc,CAAC,CAAC,EAAE;MACxD,IACEA,cAAc,CAACQ,GAAG,CAACK,WAAW,IAC9BZ,KAAK,CAACa,MAAM,IACZ,EAACC,cAAK,aAALA,cAAK,eAALA,cAAK,CAAEC,IAAI,KACZD,cAAK,CAACC,IAAI,CAACC,UAAU,CAAC,CAAC,EACvB;QACA,OAAO;UAAEX,KAAK;UAAEL;QAAM,CAAC;MACzB;MACA,OAAO,iBAAiB;IAC1B;EACF;EACA,OAAO,QAAQ;AACjB;AAEO,SAASM,UAAUA,CACxBN,KAAgB,EAChBQ,QAAgB,EAChBE,QAAgB,EAChB;EACA,MAAMO,SAAS,GAAGjB,KAAK,CAACC,IAAI,CAACiB,OAAO,CAAC,qBAAqB,EAAEV,QAAQ,CAAC;EACrE,OAAO,IAAAW,oBAAS,EAACT,QAAQ,EAAE;IACzBT,IAAI,EAAEgB,SAAS;IACfG,KAAK,EAAEpB,KAAK,CAACoB;EACf,CAAC,CAAC;AACJ"}
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.isOutsideApp = isOutsideApp;
7
+ exports.matchHomepage = matchHomepage;
7
8
  exports.matchStoryboard = matchStoryboard;
8
9
  var _lodash = require("lodash");
9
10
  var _Runtime = require("./Runtime.js");
@@ -12,19 +13,23 @@ function matchStoryboard(storyboards, pathname) {
12
13
  // E.g., `/legacy/tool` will match first before `/legacy`.
13
14
  // This enables two apps with relationship of parent-child of homepage.
14
15
  const sortedStoryboards = (0, _lodash.orderBy)(storyboards, storyboard => {
15
- var _storyboard$app$homep, _storyboard$app;
16
- return (_storyboard$app$homep = (_storyboard$app = storyboard.app) === null || _storyboard$app === void 0 || (_storyboard$app = _storyboard$app.homepage) === null || _storyboard$app === void 0 ? void 0 : _storyboard$app.length) !== null && _storyboard$app$homep !== void 0 ? _storyboard$app$homep : 0;
16
+ var _storyboard$app$homep, _storyboard$app$homep2;
17
+ return (_storyboard$app$homep = (_storyboard$app$homep2 = storyboard.app.homepage) === null || _storyboard$app$homep2 === void 0 ? void 0 : _storyboard$app$homep2.length) !== null && _storyboard$app$homep !== void 0 ? _storyboard$app$homep : 0;
17
18
  }, "desc");
18
19
  for (const storyboard of sortedStoryboards) {
19
20
  const homepage = storyboard.app.homepage;
20
21
  if (typeof homepage === "string" && homepage[0] === "/") {
21
- if (homepage === "/" ? pathname === homepage : `${pathname.replace(/\/+$/, "")}/`.startsWith(`${homepage.replace(/\/+$/, "")}/`)) {
22
+ if (matchHomepage(homepage, pathname)) {
22
23
  return storyboard;
23
24
  }
24
25
  }
25
26
  }
26
27
  }
28
+ function matchHomepage(homepage, pathname) {
29
+ return homepage === "/" ? pathname === homepage : `${pathname.replace(/\/+$/, "")}/`.startsWith(`${homepage.replace(/\/+$/, "")}/`);
30
+ }
27
31
 
32
+ // istanbul ignore next
28
33
  /**
29
34
  * We say it's an outside app when at least one of the below conditions are true:
30
35
  * - target app is not found.
@@ -1 +1 @@
1
- {"version":3,"file":"matchStoryboard.js","names":["_lodash","require","_Runtime","matchStoryboard","storyboards","pathname","sortedStoryboards","orderBy","storyboard","_storyboard$app$homep","_storyboard$app","app","homepage","length","replace","startsWith","isOutsideApp","_getRuntime$getCurren","process","env","NODE_ENV","getRuntime","getCurrentApp","id","window","STANDALONE_MICRO_APPS","standaloneMode"],"sources":["../../../src/internal/matchStoryboard.ts"],"sourcesContent":["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 (\n homepage === \"/\"\n ? pathname === homepage\n : `${pathname.replace(/\\/+$/, \"\")}/`.startsWith(\n `${homepage.replace(/\\/+$/, \"\")}/`\n )\n ) {\n return storyboard;\n }\n }\n }\n}\n\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"],"mappings":";;;;;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAEO,SAASE,eAAeA,CAC7BC,WAAgC,EAChCC,QAAgB,EACe;EAC/B;EACA;EACA;EACA,MAAMC,iBAAiB,GAAG,IAAAC,eAAO,EAC/BH,WAAW,EACVI,UAAU;IAAA,IAAAC,qBAAA,EAAAC,eAAA;IAAA,QAAAD,qBAAA,IAAAC,eAAA,GAAKF,UAAU,CAACG,GAAG,cAAAD,eAAA,gBAAAA,eAAA,GAAdA,eAAA,CAAgBE,QAAQ,cAAAF,eAAA,uBAAxBA,eAAA,CAA0BG,MAAM,cAAAJ,qBAAA,cAAAA,qBAAA,GAAI,CAAC;EAAA,GACrD,MACF,CAAC;EACD,KAAK,MAAMD,UAAU,IAAIF,iBAAiB,EAAE;IAC1C,MAAMM,QAAQ,GAAGJ,UAAU,CAACG,GAAG,CAACC,QAAQ;IACxC,IAAI,OAAOA,QAAQ,KAAK,QAAQ,IAAIA,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;MACvD,IACEA,QAAQ,KAAK,GAAG,GACZP,QAAQ,KAAKO,QAAQ,GACpB,GAAEP,QAAQ,CAACS,OAAO,CAAC,MAAM,EAAE,EAAE,CAAE,GAAE,CAACC,UAAU,CAC1C,GAAEH,QAAQ,CAACE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAE,GAClC,CAAC,EACL;QACA,OAAON,UAAU;MACnB;IACF;EACF;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASQ,YAAYA,CAC1BR,UAAyC,EACpB;EAAA,IAAAS,qBAAA;EACrB,IAAIC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,MAAM,EAAE;IACnC,OAAO,KAAK;EACd;EACA,OACE,CAACZ,UAAU;EACX;EACC,EAAAS,qBAAA,OAAAI,mBAAU,EAAC,CAAC,CAACC,aAAa,CAAC,CAAC,cAAAL,qBAAA,uBAA5BA,qBAAA,CAA8BM,EAAE,MAAKf,UAAU,CAACG,GAAG,CAACY,EAAE,IACrD,CAACC,MAAM,CAACC,qBAAqB,IAC7BjB,UAAU,CAACG,GAAG,CAACe,cAAe;AAEpC"}
1
+ {"version":3,"file":"matchStoryboard.js","names":["_lodash","require","_Runtime","matchStoryboard","storyboards","pathname","sortedStoryboards","orderBy","storyboard","_storyboard$app$homep","_storyboard$app$homep2","app","homepage","length","matchHomepage","replace","startsWith","isOutsideApp","_getRuntime$getCurren","process","env","NODE_ENV","getRuntime","getCurrentApp","id","window","STANDALONE_MICRO_APPS","standaloneMode"],"sources":["../../../src/internal/matchStoryboard.ts"],"sourcesContent":["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"],"mappings":";;;;;;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAEO,SAASE,eAAeA,CAC7BC,WAAgC,EAChCC,QAAgB,EACe;EAC/B;EACA;EACA;EACA,MAAMC,iBAAiB,GAAG,IAAAC,eAAO,EAC/BH,WAAW,EACVI,UAAU;IAAA,IAAAC,qBAAA,EAAAC,sBAAA;IAAA,QAAAD,qBAAA,IAAAC,sBAAA,GAAKF,UAAU,CAACG,GAAG,CAACC,QAAQ,cAAAF,sBAAA,uBAAvBA,sBAAA,CAAyBG,MAAM,cAAAJ,qBAAA,cAAAA,qBAAA,GAAI,CAAC;EAAA,GACpD,MACF,CAAC;EACD,KAAK,MAAMD,UAAU,IAAIF,iBAAiB,EAAE;IAC1C,MAAMM,QAAQ,GAAGJ,UAAU,CAACG,GAAG,CAACC,QAAQ;IACxC,IAAI,OAAOA,QAAQ,KAAK,QAAQ,IAAIA,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;MACvD,IAAIE,aAAa,CAACF,QAAQ,EAAEP,QAAQ,CAAC,EAAE;QACrC,OAAOG,UAAU;MACnB;IACF;EACF;AACF;AAEO,SAASM,aAAaA,CAACF,QAAgB,EAAEP,QAAgB,EAAE;EAChE,OAAOO,QAAQ,KAAK,GAAG,GACnBP,QAAQ,KAAKO,QAAQ,GACpB,GAAEP,QAAQ,CAACU,OAAO,CAAC,MAAM,EAAE,EAAE,CAAE,GAAE,CAACC,UAAU,CAC1C,GAAEJ,QAAQ,CAACG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAE,GAClC,CAAC;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,YAAYA,CAC1BT,UAAyC,EACpB;EAAA,IAAAU,qBAAA;EACrB,IAAIC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,MAAM,EAAE;IACnC,OAAO,KAAK;EACd;EACA,OACE,CAACb,UAAU;EACX;EACC,EAAAU,qBAAA,OAAAI,mBAAU,EAAC,CAAC,CAACC,aAAa,CAAC,CAAC,cAAAL,qBAAA,uBAA5BA,qBAAA,CAA8BM,EAAE,MAAKhB,UAAU,CAACG,GAAG,CAACa,EAAE,IACrD,CAACC,MAAM,CAACC,qBAAqB,IAC7BlB,UAAU,CAACG,GAAG,CAACgB,cAAe;AAEpC"}
@@ -31,18 +31,14 @@ var _CustomTemplates = require("../CustomTemplates.js");
31
31
  var _registerAppI18n = require("./registerAppI18n.js");
32
32
  var _utils = require("./CustomTemplates/utils.js");
33
33
  async function renderUseBrick(useBrick, data) {
34
- var _runtimeContext$tplSt, _runtimeContext$formS, _output$node;
35
- const tplStateStoreScope = [];
36
- const formStateStoreScope = [];
37
- const runtimeContext = {
34
+ var _scopedRuntimeContext, _scopedRuntimeContext2, _output$node;
35
+ const [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope] = (0, _Renderer.createScopedRuntimeContext)({
38
36
  ...(0, _Runtime._internalApiGetRuntimeContext)(),
39
37
  data,
40
- pendingPermissionsPreCheck: [],
41
- tplStateStoreScope,
42
- formStateStoreScope
43
- };
44
- (_runtimeContext$tplSt = runtimeContext.tplStateStoreMap) !== null && _runtimeContext$tplSt !== void 0 ? _runtimeContext$tplSt : runtimeContext.tplStateStoreMap = new Map();
45
- (_runtimeContext$formS = runtimeContext.formStateStoreMap) !== null && _runtimeContext$formS !== void 0 ? _runtimeContext$formS : runtimeContext.formStateStoreMap = new Map();
38
+ pendingPermissionsPreCheck: []
39
+ });
40
+ (_scopedRuntimeContext = scopedRuntimeContext.tplStateStoreMap) !== null && _scopedRuntimeContext !== void 0 ? _scopedRuntimeContext : scopedRuntimeContext.tplStateStoreMap = new Map();
41
+ (_scopedRuntimeContext2 = scopedRuntimeContext.formStateStoreMap) !== null && _scopedRuntimeContext2 !== void 0 ? _scopedRuntimeContext2 : scopedRuntimeContext.formStateStoreMap = new Map();
46
42
  const rendererContext = new _RendererContext.RendererContext("fragment");
47
43
  const renderRoot = {
48
44
  tag: _enums.RenderTag.ROOT,
@@ -60,12 +56,9 @@ async function renderUseBrick(useBrick, data) {
60
56
  ...useBrick.properties,
61
57
  ...transform
62
58
  }
63
- }, runtimeContext, rendererContext);
64
- (0, _loader.flushStableLoadBricks)();
59
+ }, scopedRuntimeContext, rendererContext, []);
65
60
  const scopedStores = [...tplStateStoreScope, ...formStateStoreScope];
66
- await Promise.all([...output.blockingList,
67
- // Wait for local tpl state stores belong to current `useBrick` only.
68
- ...scopedStores.map(store => store.waitForAll()), ...runtimeContext.pendingPermissionsPreCheck]);
61
+ await (0, _Renderer.postAsyncRender)(output, scopedRuntimeContext, scopedStores);
69
62
  if ((_output$node = output.node) !== null && _output$node !== void 0 && _output$node.portal) {
70
63
  throw new Error("The root brick of useBrick cannot be a portal brick");
71
64
  }
@@ -91,13 +84,13 @@ function mountUseBrick({
91
84
  return portal;
92
85
  };
93
86
  (0, _mount.mountTree)(renderRoot, element);
94
- for (const store of scopedStores) {
95
- store.handleAsyncAfterMount();
96
- }
97
87
  rendererContext.dispatchOnMount();
98
88
  rendererContext.initializeScrollIntoView();
99
89
  rendererContext.initializeMediaChange();
100
90
  rendererContext.initializeMessageDispatcher();
91
+ for (const store of scopedStores) {
92
+ store.mountAsyncData();
93
+ }
101
94
  return {
102
95
  portal
103
96
  };
@@ -1 +1 @@
1
- {"version":3,"file":"secret_internals.js","names":["_loader","require","_lodash","_Runtime","_Renderer","_RendererContext","_mount","_enums","_computeRealValue","_isStrictMode","_CustomTemplates","_registerAppI18n","_utils","renderUseBrick","useBrick","data","_runtimeContext$tplSt","_runtimeContext$formS","_output$node","tplStateStoreScope","formStateStoreScope","runtimeContext","_internalApiGetRuntimeContext","pendingPermissionsPreCheck","tplStateStoreMap","Map","formStateStoreMap","rendererContext","RendererContext","renderRoot","tag","RenderTag","ROOT","createPortal","transform","strict","isStrictMode","warnAboutStrictMode","output","renderBrick","properties","flushStableLoadBricks","scopedStores","Promise","all","blockingList","map","store","waitForAll","node","portal","Error","child","tagName","type","mountUseBrick","element","portalRoot","document","querySelector","createElement","appendChild","mountTree","handleAsyncAfterMount","dispatchOnMount","initializeScrollIntoView","initializeMediaChange","initializeMessageDispatcher","unmountUseBrick","mountResult","unmountTree","remove","dispatchOnUnmount","dispose","legacyDoTransform","to","options","computeRealValue","noInject","updateStoryboard","appId","storyboardPatch","storyboard","_internalApiGetStoryboardInBootstrapData","Object","assign","$$fulfilling","$$fulfilled","$$registerCustomTemplateProcessed","registerAppI18n","updateStoryboardByRoute","newRoute","match","getKey","route","path","exact","replaceRoute","routes","key","routeKey","unshift","updateStoryboardByTemplate","newTemplate","settings","tplName","name","customTemplates","define","bricks","proxy","state","updateTemplatePreviewSettings","templateId","_updatePreviewSettings","brick","pick","getSnippetPreviewPath","snippetId","updateStoryboardBySnippet","snippetData","_snippetData$bricks","length","context","updateSnippetPreviewSettings","exports","previewRouteIndex","findIndex","newPreviewRoute","menu","splice","getContextValue","tplStateStoreId","tplStateStore","getTplStateStore","getValue","ctxStore","getAllContextValues","getAllValues","getBrickPackagesById","id","getBrickPackages","find","pkg","filePath","startsWith","getRenderId","_internalApiGetRenderId","getAddedContracts","updateStoryboardType","provider","collectContractProvider","updatedStoryboard","meta","_storyboard$routes","snippetPreviewPath","currentRoute","addedContracts","loadBricksImperatively","contractApis","resolve","forEach","api","_storyboard$meta","_","namespaceId","contracts","some","contract","push"],"sources":["../../../src/internal/secret_internals.ts"],"sourcesContent":["import type {\n BrickConf,\n CustomTemplate,\n RouteConf,\n Storyboard,\n UseSingleBrickConf,\n RuntimeSnippet,\n ContextConf,\n} from \"@next-core/types\";\nimport {\n flushStableLoadBricks,\n loadBricksImperatively,\n} from \"@next-core/loader\";\nimport { pick } from \"lodash\";\nimport {\n _internalApiGetRenderId,\n _internalApiGetRuntimeContext,\n _internalApiGetStoryboardInBootstrapData,\n getBrickPackages,\n} from \"./Runtime.js\";\nimport { renderBrick } from \"./Renderer.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport type { DataStore } from \"./data/DataStore.js\";\nimport type {\n DataValueOption,\n PreviewOption,\n PreviewStoryboardPatch,\n RenderRoot,\n RuntimeContext,\n} from \"./interfaces.js\";\nimport { mountTree, unmountTree } from \"./mount.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { computeRealValue } from \"./compute/computeRealValue.js\";\nimport { isStrictMode, warnAboutStrictMode } from \"../isStrictMode.js\";\nimport { customTemplates } from \"../CustomTemplates.js\";\nimport { registerAppI18n } from \"./registerAppI18n.js\";\nimport { getTplStateStore } from \"./CustomTemplates/utils.js\";\n\nexport type { DataValueOption, RuntimeContext } from \"./interfaces.js\";\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: UseSingleBrickConf,\n data: unknown\n): Promise<RenderUseBrickResult> {\n const tplStateStoreScope: DataStore<\"STATE\">[] = [];\n const formStateStoreScope: DataStore<\"FORM_STATE\">[] = [];\n const runtimeContext: RuntimeContext = {\n ..._internalApiGetRuntimeContext()!,\n data,\n pendingPermissionsPreCheck: [],\n tplStateStoreScope,\n formStateStoreScope,\n };\n\n runtimeContext.tplStateStoreMap ??= new Map();\n runtimeContext.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 transform = (useBrick as { transform?: Record<string, unknown> })\n .transform;\n const strict = isStrictMode();\n if (transform) {\n warnAboutStrictMode(\n strict,\n \"`useBrick.transform`\",\n 'please use \"properties\" instead, check your useBrick:',\n useBrick\n );\n }\n\n const output = await renderBrick(\n renderRoot,\n strict\n ? useBrick\n : {\n ...useBrick,\n properties: {\n ...useBrick.properties,\n ...transform,\n },\n },\n runtimeContext,\n rendererContext\n );\n\n flushStableLoadBricks();\n\n const scopedStores: DataStore<\"STATE\" | \"FORM_STATE\">[] = [\n ...tplStateStoreScope,\n ...formStateStoreScope,\n ];\n\n await Promise.all([\n ...output.blockingList,\n // Wait for local tpl state stores belong to current `useBrick` only.\n ...scopedStores.map((store) => store.waitForAll()),\n ...runtimeContext.pendingPermissionsPreCheck,\n ]);\n\n if (output.node?.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 = output.node ? output.node.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 for (const store of scopedStores) {\n store.handleAsyncAfterMount();\n }\n\n rendererContext.dispatchOnMount();\n rendererContext.initializeScrollIntoView();\n rendererContext.initializeMediaChange();\n rendererContext.initializeMessageDispatcher();\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\n/** For v2 compatibility of `doTransform` from brick-kit. */\nexport function legacyDoTransform(\n data: unknown,\n to: unknown,\n options?: unknown\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\nexport function updateStoryboard(\n appId: string,\n storyboardPatch: Partial<Storyboard>\n): void {\n const storyboard = _internalApiGetStoryboardInBootstrapData(appId)!;\n Object.assign(storyboard, {\n ...storyboardPatch,\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 match = false;\n const getKey = (route: RouteConf): string => `${route.path}.${route.exact}`;\n const replaceRoute = (routes: RouteConf[], key: string): RouteConf[] => {\n return routes.map((route) => {\n const routeKey = getKey(route);\n if (route.type === \"routes\") {\n route.routes = replaceRoute(route.routes, key);\n return route;\n } else if (routeKey === key) {\n match = true;\n return newRoute;\n } else {\n return route;\n }\n });\n };\n storyboard.routes = replaceRoute(storyboard.routes, getKey(newRoute));\n if (!match) {\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(settings, \"properties\", \"events\", \"lifeCycle\", \"context\"),\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 function getBrickPackagesById(id: string) {\n return getBrickPackages().find((pkg) =>\n pkg.id ? pkg.id === id : pkg.filePath.startsWith(id)\n );\n}\n\nexport function getRenderId() {\n return _internalApiGetRenderId();\n}\n\nexport async function getAddedContracts(\n storyboardPatch: PreviewStoryboardPatch,\n {\n appId,\n updateStoryboardType,\n provider: collectContractProvider,\n }: 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 && collectContractProvider) {\n await loadBricksImperatively([collectContractProvider], getBrickPackages());\n\n const provider = document.createElement(collectContractProvider) as any;\n const contractApis = await provider.resolve(updatedStoryboard);\n\n contractApis.forEach((api: string) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\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"],"mappings":"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"}
1
+ {"version":3,"file":"secret_internals.js","names":["_loader","require","_lodash","_Runtime","_Renderer","_RendererContext","_mount","_enums","_computeRealValue","_isStrictMode","_CustomTemplates","_registerAppI18n","_utils","renderUseBrick","useBrick","data","_scopedRuntimeContext","_scopedRuntimeContext2","_output$node","scopedRuntimeContext","tplStateStoreScope","formStateStoreScope","createScopedRuntimeContext","_internalApiGetRuntimeContext","pendingPermissionsPreCheck","tplStateStoreMap","Map","formStateStoreMap","rendererContext","RendererContext","renderRoot","tag","RenderTag","ROOT","createPortal","transform","strict","isStrictMode","warnAboutStrictMode","output","renderBrick","properties","scopedStores","postAsyncRender","node","portal","Error","child","tagName","type","mountUseBrick","element","portalRoot","document","querySelector","createElement","appendChild","mountTree","dispatchOnMount","initializeScrollIntoView","initializeMediaChange","initializeMessageDispatcher","store","mountAsyncData","unmountUseBrick","mountResult","unmountTree","remove","dispatchOnUnmount","dispose","legacyDoTransform","to","options","computeRealValue","noInject","updateStoryboard","appId","storyboardPatch","storyboard","_internalApiGetStoryboardInBootstrapData","Object","assign","$$fulfilling","$$fulfilled","$$registerCustomTemplateProcessed","registerAppI18n","updateStoryboardByRoute","newRoute","match","getKey","route","path","exact","replaceRoute","routes","key","map","routeKey","unshift","updateStoryboardByTemplate","newTemplate","settings","tplName","name","customTemplates","define","bricks","proxy","state","updateTemplatePreviewSettings","templateId","_updatePreviewSettings","brick","pick","getSnippetPreviewPath","snippetId","updateStoryboardBySnippet","snippetData","_snippetData$bricks","length","context","updateSnippetPreviewSettings","exports","previewRouteIndex","findIndex","newPreviewRoute","menu","splice","getContextValue","tplStateStoreId","runtimeContext","tplStateStore","getTplStateStore","getValue","ctxStore","getAllContextValues","getAllValues","getBrickPackagesById","id","getBrickPackages","find","pkg","filePath","startsWith","getRenderId","_internalApiGetRenderId","getAddedContracts","updateStoryboardType","provider","collectContractProvider","updatedStoryboard","meta","_storyboard$routes","snippetPreviewPath","currentRoute","addedContracts","loadBricksImperatively","contractApis","resolve","forEach","api","_storyboard$meta","_","namespaceId","contracts","some","contract","push"],"sources":["../../../src/internal/secret_internals.ts"],"sourcesContent":["import type {\n BrickConf,\n CustomTemplate,\n RouteConf,\n Storyboard,\n UseSingleBrickConf,\n RuntimeSnippet,\n ContextConf,\n} from \"@next-core/types\";\nimport { loadBricksImperatively } from \"@next-core/loader\";\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 type {\n DataValueOption,\n PreviewOption,\n PreviewStoryboardPatch,\n RenderRoot,\n} from \"./interfaces.js\";\nimport { mountTree, unmountTree } from \"./mount.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { computeRealValue } from \"./compute/computeRealValue.js\";\nimport { isStrictMode, warnAboutStrictMode } from \"../isStrictMode.js\";\nimport { customTemplates } from \"../CustomTemplates.js\";\nimport { registerAppI18n } from \"./registerAppI18n.js\";\nimport { getTplStateStore } from \"./CustomTemplates/utils.js\";\n\nexport type { DataValueOption, RuntimeContext } from \"./interfaces.js\";\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: UseSingleBrickConf,\n data: unknown\n): Promise<RenderUseBrickResult> {\n const [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope] =\n createScopedRuntimeContext({\n ..._internalApiGetRuntimeContext()!,\n data,\n pendingPermissionsPreCheck: [],\n });\n\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 transform = (useBrick as { transform?: Record<string, unknown> })\n .transform;\n const strict = isStrictMode();\n if (transform) {\n warnAboutStrictMode(\n strict,\n \"`useBrick.transform`\",\n 'please use \"properties\" instead, check your useBrick:',\n useBrick\n );\n }\n\n const output = await renderBrick(\n renderRoot,\n strict\n ? useBrick\n : {\n ...useBrick,\n properties: {\n ...useBrick.properties,\n ...transform,\n },\n },\n scopedRuntimeContext,\n rendererContext,\n []\n );\n\n const scopedStores = [...tplStateStoreScope, ...formStateStoreScope];\n\n await postAsyncRender(output, scopedRuntimeContext, scopedStores);\n\n if (output.node?.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 = output.node ? output.node.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\n/** For v2 compatibility of `doTransform` from brick-kit. */\nexport function legacyDoTransform(\n data: unknown,\n to: unknown,\n options?: unknown\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\nexport function updateStoryboard(\n appId: string,\n storyboardPatch: Partial<Storyboard>\n): void {\n const storyboard = _internalApiGetStoryboardInBootstrapData(appId)!;\n Object.assign(storyboard, {\n ...storyboardPatch,\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 match = false;\n const getKey = (route: RouteConf): string => `${route.path}.${route.exact}`;\n const replaceRoute = (routes: RouteConf[], key: string): RouteConf[] => {\n return routes.map((route) => {\n const routeKey = getKey(route);\n if (route.type === \"routes\") {\n route.routes = replaceRoute(route.routes, key);\n return route;\n } else if (routeKey === key) {\n match = true;\n return newRoute;\n } else {\n return route;\n }\n });\n };\n storyboard.routes = replaceRoute(storyboard.routes, getKey(newRoute));\n if (!match) {\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(settings, \"properties\", \"events\", \"lifeCycle\", \"context\"),\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 function getBrickPackagesById(id: string) {\n return getBrickPackages().find((pkg) =>\n pkg.id ? pkg.id === id : pkg.filePath.startsWith(id)\n );\n}\n\nexport function getRenderId() {\n return _internalApiGetRenderId();\n}\n\nexport async function getAddedContracts(\n storyboardPatch: PreviewStoryboardPatch,\n {\n appId,\n updateStoryboardType,\n provider: collectContractProvider,\n }: 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 && collectContractProvider) {\n await loadBricksImperatively([collectContractProvider], getBrickPackages());\n\n const provider = document.createElement(collectContractProvider) as any;\n const contractApis = await provider.resolve(updatedStoryboard);\n\n contractApis.forEach((api: string) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\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"],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
- import { flushStableLoadBricks } from "@next-core/loader";
3
- import { renderBricks } from "./internal/Renderer.js";
2
+ import { getDataStores, postAsyncRender, renderBricks } from "./internal/Renderer.js";
4
3
  import { RendererContext } from "./internal/RendererContext.js";
5
4
  import { DataStore } from "./internal/data/DataStore.js";
6
5
  import { mountTree, unmountTree } from "./internal/mount.js";
@@ -95,10 +94,9 @@ export function unstable_createRoot(container) {
95
94
  var output;
96
95
  var stores = [];
97
96
  try {
98
- output = yield renderBricks(renderRoot, bricks, runtimeContext, rendererContext);
99
- flushStableLoadBricks();
100
- stores = [runtimeContext.ctxStore, ...runtimeContext.tplStateStoreMap.values(), ...runtimeContext.formStateStoreMap.values()];
101
- yield Promise.all([...output.blockingList, ...stores.map(store => store.waitForAll()), ...runtimeContext.pendingPermissionsPreCheck]);
97
+ output = yield renderBricks(renderRoot, bricks, runtimeContext, rendererContext, []);
98
+ stores = getDataStores(runtimeContext);
99
+ yield postAsyncRender(output, runtimeContext, stores);
102
100
  } catch (error) {
103
101
  failed = true;
104
102
  output = {
@@ -135,7 +133,7 @@ export function unstable_createRoot(container) {
135
133
  }
136
134
  if (!failed) {
137
135
  for (var store of stores) {
138
- store.handleAsyncAfterMount();
136
+ store.mountAsyncData();
139
137
  }
140
138
  if (scope === "page") {
141
139
  rendererContext.dispatchPageLoad();
@@ -1 +1 @@
1
- {"version":3,"file":"createRoot.js","names":["flushStableLoadBricks","renderBricks","RendererContext","DataStore","mountTree","unmountTree","httpErrorToString","applyMode","applyTheme","setMode","setTheme","RenderTag","registerStoryboardFunctions","registerAppI18n","registerCustomTemplates","unstable_createRoot","container","portal","_portal","scope","unknownBricks","arguments","length","undefined","createPortal","document","createElement","style","position","width","height","body","append","unmounted","rendererContext","clearI18nBundles","render","brick","_arguments","_asyncToGenerator","theme","context","functions","templates","i18n","i18nData","Error","bricks","concat","previousRendererContext","runtimeContext","ctxStore","pendingPermissionsPreCheck","tplStateStoreMap","Map","formStateStoreMap","renderRoot","tag","ROOT","_clearI18nBundles","demoApp","id","homepage","app","demoStoryboard","meta","customTemplates","define","failed","output","stores","values","Promise","all","blockingList","map","store","waitForAll","error","node","BRICK","type","properties","textContent","return","menuRequests","child","dispatchOnUnmount","dispose","dispatchBeforePageLoad","window","scrollTo","handleAsyncAfterMount","dispatchPageLoad","dispatchOnMount","initializeScrollIntoView","initializeMediaChange","initializeMessageDispatcher","unmount","remove"],"sources":["../../src/createRoot.ts"],"sourcesContent":["import type {\n BrickConf,\n ContextConf,\n CustomTemplate,\n MetaI18n,\n MicroApp,\n SiteTheme,\n Storyboard,\n StoryboardFunction,\n} from \"@next-core/types\";\nimport { flushStableLoadBricks } from \"@next-core/loader\";\nimport { RenderOutput, renderBricks } 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 { httpErrorToString } from \"./handleHttpError.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\";\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\nexport interface RenderOptions {\n theme?: SiteTheme;\n context?: ContextConf[];\n functions?: StoryboardFunction[];\n templates?: CustomTemplate[];\n i18n?: MetaI18n;\n}\n\nexport function unstable_createRoot(\n container: HTMLElement | DocumentFragment,\n { portal: _portal, scope = \"fragment\", unknownBricks }: 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\n return {\n async render(\n brick: BrickConf | BrickConf[],\n {\n theme,\n context,\n functions,\n templates,\n i18n: i18nData,\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 const previousRendererContext = rendererContext;\n rendererContext = new RendererContext(scope, { unknownBricks });\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 } as Partial<RuntimeContext> as RuntimeContext;\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\n const demoApp = {\n id: \"demo\",\n homepage: \"/demo\",\n } as MicroApp;\n runtimeContext.app = demoApp;\n const demoStoryboard = {\n app: demoApp,\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, demoApp);\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 flushStableLoadBricks();\n\n stores = [\n runtimeContext.ctxStore,\n ...runtimeContext.tplStateStoreMap.values(),\n ...runtimeContext.formStateStoreMap.values(),\n ];\n\n await Promise.all([\n ...output.blockingList,\n ...stores.map((store) => store.waitForAll()),\n ...runtimeContext.pendingPermissionsPreCheck,\n ]);\n } catch (error) {\n failed = true;\n output = {\n node: {\n tag: RenderTag.BRICK,\n type: \"div\",\n properties: {\n textContent: httpErrorToString(error),\n },\n return: renderRoot,\n runtimeContext: null!,\n },\n blockingList: [],\n menuRequests: [],\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.handleAsyncAfterMount();\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 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"],"mappings":"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"}
1
+ {"version":3,"file":"createRoot.js","names":["getDataStores","postAsyncRender","renderBricks","RendererContext","DataStore","mountTree","unmountTree","httpErrorToString","applyMode","applyTheme","setMode","setTheme","RenderTag","registerStoryboardFunctions","registerAppI18n","registerCustomTemplates","unstable_createRoot","container","portal","_portal","scope","unknownBricks","arguments","length","undefined","createPortal","document","createElement","style","position","width","height","body","append","unmounted","rendererContext","clearI18nBundles","render","brick","_arguments","_asyncToGenerator","theme","context","functions","templates","i18n","i18nData","Error","bricks","concat","previousRendererContext","runtimeContext","ctxStore","pendingPermissionsPreCheck","tplStateStoreMap","Map","formStateStoreMap","renderRoot","tag","ROOT","_clearI18nBundles","demoApp","id","homepage","app","demoStoryboard","meta","customTemplates","define","failed","output","stores","error","node","BRICK","type","properties","textContent","return","blockingList","menuRequests","child","dispatchOnUnmount","dispose","dispatchBeforePageLoad","window","scrollTo","store","mountAsyncData","dispatchPageLoad","dispatchOnMount","initializeScrollIntoView","initializeMediaChange","initializeMessageDispatcher","unmount","remove"],"sources":["../../src/createRoot.ts"],"sourcesContent":["import type {\n BrickConf,\n ContextConf,\n CustomTemplate,\n MetaI18n,\n MicroApp,\n SiteTheme,\n Storyboard,\n StoryboardFunction,\n} from \"@next-core/types\";\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 { httpErrorToString } from \"./handleHttpError.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\";\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\nexport interface RenderOptions {\n theme?: SiteTheme;\n context?: ContextConf[];\n functions?: StoryboardFunction[];\n templates?: CustomTemplate[];\n i18n?: MetaI18n;\n}\n\nexport function unstable_createRoot(\n container: HTMLElement | DocumentFragment,\n { portal: _portal, scope = \"fragment\", unknownBricks }: 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\n return {\n async render(\n brick: BrickConf | BrickConf[],\n {\n theme,\n context,\n functions,\n templates,\n i18n: i18nData,\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 const previousRendererContext = rendererContext;\n rendererContext = new RendererContext(scope, { unknownBricks });\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 } as Partial<RuntimeContext> as RuntimeContext;\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\n const demoApp = {\n id: \"demo\",\n homepage: \"/demo\",\n } as MicroApp;\n runtimeContext.app = demoApp;\n const demoStoryboard = {\n app: demoApp,\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, demoApp);\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 stores = getDataStores(runtimeContext);\n await postAsyncRender(output, runtimeContext, stores);\n } catch (error) {\n failed = true;\n output = {\n node: {\n tag: RenderTag.BRICK,\n type: \"div\",\n properties: {\n textContent: httpErrorToString(error),\n },\n return: renderRoot,\n runtimeContext: null!,\n },\n blockingList: [],\n menuRequests: [],\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 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"],"mappings":"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"}
@@ -50,7 +50,7 @@ export function unbindTemplateProxy(brick) {
50
50
  runtimeContext,
51
51
  element
52
52
  } = brick;
53
- if (!runtimeContext.tplStateStoreId || !ref) {
53
+ if (!(runtimeContext !== null && runtimeContext !== void 0 && runtimeContext.tplStateStoreId) || !ref) {
54
54
  return;
55
55
  }
56
56
  var {
@@ -1 +1 @@
1
- {"version":3,"file":"bindTemplateProxy.js","names":["getTplStateStore","bindTemplateProxy","brick","_tplHostMetadata$prox","ref","runtimeContext","element","tplStateStoreId","hostBrick","tplHostMetadata","internalBricksByRef","set","events","proxy","_loop","from","to","_to$refEvent","_ref","_ref$$$proxyListeners","listener","e","bubbles","stopPropagation","dispatchEvent","CustomEvent","detail","cancelable","composed","eventType","refEvent","addEventListener","$$proxyListeners","push","Object","entries","unbindTemplateProxy","delete","type","fn","_$$proxyListeners","removeEventListener"],"sources":["../../../../src/internal/CustomTemplates/bindTemplateProxy.ts"],"sourcesContent":["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"],"mappings":"AACA,SAASA,gBAAgB,QAAQ,YAAY;AAE7C,OAAO,SAASC,iBAAiBA,CAACC,KAAmB,EAAE;EAAA,IAAAC,qBAAA;EACrD,IAAM;IAAEC,GAAG;IAAEC,cAAc;IAAEC;EAAQ,CAAC,GAAGJ,KAAK;;EAE9C;EACA,IAAI,CAACE,GAAG,IAAI,CAACC,cAAc,CAACE,eAAe,EAAE;IAC3C;EACF;EAEA,IAAM;IAAEC;EAAU,CAAC,GAAGR,gBAAgB,CAACK,cAAc,EAAE,mBAAmB,CAAC;EAC3E;EACA,IAAMI,eAAe,GAAGD,SAAS,CAAEC,eAAgB;EAEnDA,eAAe,CAACC,mBAAmB,CAACC,GAAG,CAACP,GAAG,EAAEF,KAAK,CAAC;EAEnD,IAAMU,MAAM,IAAAT,qBAAA,GAAGM,eAAe,CAACI,KAAK,cAAAV,qBAAA,uBAArBA,qBAAA,CAAuBS,MAAM;EAC5C,IAAIA,MAAM,EAAE;IAAA,IAAAE,KAAA,YAAAA,CAAAC,IAAA,EACuC;MAC/C,IAAIC,EAAE,CAACZ,GAAG,KAAKA,GAAG,EAAE;QAAA,IAAAa,YAAA,EAAAC,IAAA,EAAAC,qBAAA;QAClB,IAAMC,QAAQ,GAAIC,CAAQ,IAAK;UAC7B,IAAIA,CAAC,CAACC,OAAO,EAAE;YACbD,CAAC,CAACE,eAAe,CAAC,CAAC;UACrB;UACAf,SAAS,CAAEF,OAAO,CAAEkB,aAAa,CAC/B,IAAIC,WAAW,CAACV,IAAI,EAAE;YACpBW,MAAM,EAAGL,CAAC,CAAiBK,MAAM;YACjCJ,OAAO,EAAED,CAAC,CAACC,OAAO;YAClBK,UAAU,EAAEN,CAAC,CAACM,UAAU;YACxBC,QAAQ,EAAEP,CAAC,CAACO;UACd,CAAC,CACH,CAAC;QACH,CAAC;QACD,IAAMC,SAAS,IAAAZ,YAAA,GAAGD,EAAE,CAACc,QAAQ,cAAAb,YAAA,cAAAA,YAAA,GAAIF,IAAI;QACrCT,OAAO,CAAEyB,gBAAgB,CAACF,SAAS,EAAET,QAAQ,CAAC;QAC9C,CAAAD,qBAAA,IAAAD,IAAA,GAAAZ,OAAO,EAAE0B,gBAAgB,cAAAb,qBAAA,cAAAA,qBAAA,GAAzBD,IAAA,CAASc,gBAAgB,GAAK,EAAE;QAChC1B,OAAO,CAAE0B,gBAAgB,CAACC,IAAI,CAAC,CAACJ,SAAS,EAAET,QAAQ,CAAC,CAAC;MACvD;IACF,CAAC;IApBD,KAAK,IAAM,CAACL,IAAI,EAAEC,EAAE,CAAC,IAAIkB,MAAM,CAACC,OAAO,CAACvB,MAAM,CAAC;MAAAE,KAAA,CAAAC,IAAA;IAAA;EAqBjD;AACF;AAEA,OAAO,SAASqB,mBAAmBA,CAAClC,KAAmB,EAAE;EACvD,IAAM;IAAEE,GAAG;IAAEC,cAAc;IAAEC;EAAQ,CAAC,GAAGJ,KAAK;EAE9C,IAAI,CAACG,cAAc,CAACE,eAAe,IAAI,CAACH,GAAG,EAAE;IAC3C;EACF;EAEA,IAAM;IAAEI;EAAU,CAAC,GAAGR,gBAAgB,CAACK,cAAc,EAAE,qBAAqB,CAAC;EAC7E;EACA,IAAMI,eAAe,GAAGD,SAAS,CAAEC,eAAgB;EAEnDA,eAAe,CAACC,mBAAmB,CAAC2B,MAAM,CAACjC,GAAG,CAAC;EAE/C,KAAK,IAAM,CAACkC,IAAI,EAAEC,EAAE,CAAC,KAAAC,iBAAA,GAAIlC,OAAO,CAAE0B,gBAAgB,cAAAQ,iBAAA,cAAAA,iBAAA,GAAI,EAAE,EAAE;IAAA,IAAAA,iBAAA;IACxDlC,OAAO,CAAEmC,mBAAmB,CAACH,IAAI,EAAEC,EAAE,CAAC;EACxC;EACA,OAAOjC,OAAO,CAAE0B,gBAAgB;AAClC"}
1
+ {"version":3,"file":"bindTemplateProxy.js","names":["getTplStateStore","bindTemplateProxy","brick","_tplHostMetadata$prox","ref","runtimeContext","element","tplStateStoreId","hostBrick","tplHostMetadata","internalBricksByRef","set","events","proxy","_loop","from","to","_to$refEvent","_ref","_ref$$$proxyListeners","listener","e","bubbles","stopPropagation","dispatchEvent","CustomEvent","detail","cancelable","composed","eventType","refEvent","addEventListener","$$proxyListeners","push","Object","entries","unbindTemplateProxy","delete","type","fn","_$$proxyListeners","removeEventListener"],"sources":["../../../../src/internal/CustomTemplates/bindTemplateProxy.ts"],"sourcesContent":["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"],"mappings":"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"}