@next-core/runtime 1.26.3 → 1.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -118,8 +118,8 @@ class DataStore {
118
118
  throw new Error(`${this.type} '${name}' is not defined`);
119
119
  }
120
120
  if (method === "refresh" || method === "load") {
121
- if (!item.load) {
122
- throw new Error(`You can not ${method} "${this.type}.${name}" which has no resolve`);
121
+ if (!item.useResolve) {
122
+ throw new Error(`You can not ${method} "${this.type}.${name}" which is not using resolve`);
123
123
  }
124
124
  let promise;
125
125
  if (method === "load") {
@@ -146,14 +146,10 @@ class DataStore {
146
146
  });
147
147
  // Do not use the chained promise, since the callbacks need the original promise.
148
148
  promise.then(val => {
149
- item.loaded = true;
150
- item.value = val;
151
- item.eventTarget.dispatchEvent(new CustomEvent(this.changeEventType, {
152
- detail: item.value
153
- }));
149
+ this.finishLoad(item, val);
154
150
  }, err => {
155
151
  // Let users override error handling.
156
- if (!shouldDismiss(err) && !(callback !== null && callback !== void 0 && callback.error)) {
152
+ if (item.useResolve && !shouldDismiss(err) && !(callback !== null && callback !== void 0 && callback.error)) {
157
153
  (0, _handleHttpError.handleHttpError)(err);
158
154
  }
159
155
  });
@@ -190,6 +186,19 @@ class DataStore {
190
186
  detail: item.value
191
187
  }));
192
188
  }
189
+ finishLoad(item, value) {
190
+ if (!item.useResolve) {
191
+ // This happens when a tracked conditional resolve switches from
192
+ // resolve to fallback after an dep update triggered refresh but
193
+ // before it's been resolved.
194
+ return;
195
+ }
196
+ item.loaded = true;
197
+ item.value = value;
198
+ item.eventTarget.dispatchEvent(new CustomEvent(this.changeEventType, {
199
+ detail: value
200
+ }));
201
+ }
193
202
  define(dataConfs, runtimeContext, asyncHostPropertyEntries, routePath) {
194
203
  if (Array.isArray(dataConfs) && dataConfs.length > 0) {
195
204
  const pending = (0, _resolveDataStore.resolveDataStore)(dataConfs, dataConf => this.resolve(dataConf, runtimeContext, asyncHostPropertyEntries, routePath), this.type);
@@ -247,11 +256,7 @@ class DataStore {
247
256
  // An async data always has `loading`
248
257
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
249
258
  item.loading.then(value => {
250
- item.loaded = true;
251
- item.value = value;
252
- item.eventTarget.dispatchEvent(new CustomEvent(this.changeEventType, {
253
- detail: value
254
- }));
259
+ this.finishLoad(item, value);
255
260
  });
256
261
  }
257
262
  });
@@ -266,14 +271,23 @@ class DataStore {
266
271
  }
267
272
  let load;
268
273
  let loading;
269
- let resolvePolicy = "eager";
274
+ let useResolve;
275
+ let trackConditionalResolve;
276
+ let resolvePolicy;
270
277
  if (value === undefined) {
271
278
  if (dataConf.resolve) {
279
+ const hasFallbackValue = (0, _general.hasOwnProperty)(dataConf, "value");
280
+ // Track conditional resolve only if all matches:
281
+ // - Track enabled
282
+ // - Has fallback value
283
+ // - Referencing other data in `resolve.if`
284
+ trackConditionalResolve = dataConf.track && hasFallbackValue && (0, _general.hasOwnProperty)(dataConf.resolve, "if") && (0, _storyboard.strictCollectMemberUsage)(dataConf.resolve.if, this.type).size > 0;
272
285
  const resolveConf = {
273
286
  transform: "value",
274
287
  ...dataConf.resolve
275
288
  };
276
- if (await (0, _checkIf.asyncCheckIf)(dataConf.resolve, runtimeContext)) {
289
+ useResolve = await (0, _checkIf.asyncCheckIf)(dataConf.resolve, runtimeContext);
290
+ if (useResolve || trackConditionalResolve) {
277
291
  load = async options => {
278
292
  var _this$rendererContext2;
279
293
  return (await (0, _resolveData.resolveData)(resolveConf, runtimeContext, {
@@ -281,6 +295,8 @@ class DataStore {
281
295
  renderId: (_this$rendererContext2 = this.rendererContext) === null || _this$rendererContext2 === void 0 ? void 0 : _this$rendererContext2.renderId
282
296
  })).value;
283
297
  };
298
+ }
299
+ if (useResolve) {
284
300
  // `async` take precedence over `lazy`
285
301
  resolvePolicy = dataConf.resolve.async ? "async" : dataConf.resolve.lazy ? "lazy" : "eager";
286
302
  if (resolvePolicy === "eager") {
@@ -288,11 +304,11 @@ class DataStore {
288
304
  } else if (resolvePolicy === "async") {
289
305
  loading = load();
290
306
  }
291
- } else if (!(0, _general.hasOwnProperty)(dataConf, "value")) {
307
+ } else if (!hasFallbackValue) {
292
308
  return false;
293
309
  }
294
310
  }
295
- if ((!load || resolvePolicy !== "eager") && dataConf.value !== undefined) {
311
+ if ((!useResolve || resolvePolicy !== "eager") && dataConf.value !== undefined) {
296
312
  // If the context has no resolve, just use its `value`.
297
313
  // Or if the resolve is ignored or lazy, use its `value` as a fallback.
298
314
  value = await (0, _computeRealValue.asyncComputeRealValue)(dataConf.value, runtimeContext);
@@ -306,6 +322,7 @@ class DataStore {
306
322
  value,
307
323
  // This is required for tracking context, even if no `onChange` is specified.
308
324
  eventTarget: new _eventTarget.default(),
325
+ useResolve,
309
326
  load,
310
327
  loaded: resolvePolicy === "eager",
311
328
  loading,
@@ -328,11 +345,12 @@ class DataStore {
328
345
  newData.eventTarget.addEventListener(this.changeEventType, (0, _bindListeners.listenerFactory)(dataConf.onChange, runtimeContext));
329
346
  }
330
347
  if (dataConf.track) {
331
- const deps = (0, _storyboard.strictCollectMemberUsage)(load ? dataConf.resolve : dataConf.value, this.type);
348
+ const deps = (0, _storyboard.strictCollectMemberUsage)(trackConditionalResolve ? [dataConf.resolve, dataConf.value] : load ? dataConf.resolve : dataConf.value, this.type);
332
349
  !load && (newData.deps = [...deps]);
333
350
  for (const dep of deps) {
334
351
  this.onChange(dep, this.batchAddListener(() => {
335
- if (load) {
352
+ newData.useResolve = trackConditionalResolve ? (0, _checkIf.checkIf)(dataConf.resolve, runtimeContext) : !!load;
353
+ if (newData.useResolve) {
336
354
  this.updateValue(dataConf.name, {
337
355
  cache: "default"
338
356
  }, "refresh");
@@ -1 +1 @@
1
- {"version":3,"file":"DataStore.js","names":["_general","require","_storyboard","_eventTarget","_interopRequireDefault","_bindListeners","_checkIf","_computeRealValue","_resolveData","_resolveDataStore","_handleHttpError","_computeRealProperties","_Runtime","_realTimeDataInspect","supportContextResolveTriggerBrickLifeCycle","DataStore","type","data","Map","changeEventType","pendingStack","hostBrick","stateStoreId","batchUpdate","batchUpdateContextsNames","rendererContext","routeMap","WeakMap","constructor","getAllValues","Object","fromEntries","entries","map","name","value","getValue","_this$data$get","get","notifyRealTimeDataChange","realTimeDataInspectRoot","tplStateStoreId","callRealTimeDataInspectHooks","changeType","detail","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","callback","callbackRuntimeContext","load","promise","loaded","Promise","resolve","loading","shouldDismiss","error","_this$rendererContext","renderId","_internalApiGetRenderId","cache","then","val","err","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","_this$rendererContext2","resolveData","lazy","hasOwnProperty","asyncComputeRealValue","newData","EventTarget","trigger","_this$rendererContext3","registerArbitraryLifeCycle","listenerFactory","track","strictCollectMemberUsage","dep","batchAddListener","computeRealValue","e","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\";\nimport { _internalApiGetRenderId } from \"../Runtime.js\";\nimport {\n callRealTimeDataInspectHooks,\n realTimeDataInspectRoot,\n} from \"./realTimeDataInspect.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 private readonly stateStoreId?: string;\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 stateStoreId?: string\n ) {\n this.type = type;\n this.changeEventType =\n this.type === \"FORM_STATE\"\n ? \"formstate.change\"\n : this.type === \"STATE\"\n ? \"state.change\"\n : \"context.change\";\n this.hostBrick = hostBrick;\n this.rendererContext = rendererContext;\n this.stateStoreId = stateStoreId;\n }\n\n getAllValues(): Record<string, unknown> {\n return Object.fromEntries(\n [...this.data.entries()].map(([name, { value }]) => [name, value])\n );\n }\n\n getValue(name: string): unknown {\n return this.data.get(name)?.value;\n }\n\n private notifyRealTimeDataChange(name: string, value: unknown) {\n if (realTimeDataInspectRoot) {\n const { tplStateStoreId } = realTimeDataInspectRoot;\n if (\n tplStateStoreId\n ? this.type === \"STATE\" && this.stateStoreId === tplStateStoreId\n : this.type === \"CTX\"\n ) {\n callRealTimeDataInspectHooks({\n changeType: \"update\",\n tplStateStoreId,\n detail: {\n name,\n value,\n },\n });\n }\n }\n }\n\n private getAffectListByContext(name: string): string[] {\n const affectNames = [name];\n this.data.forEach((value, key) => {\n if (value.deps) {\n const isInDeps = value.deps.some((item) => affectNames.includes(item));\n isInDeps &&\n affectNames.push(key) &&\n affectNames.push(...this.getAffectListByContext(key));\n }\n });\n affectNames.shift();\n return [...new Set(affectNames)];\n }\n\n updateValues(\n values: BatchUpdateContextItem[],\n method: \"assign\" | \"replace\",\n argsFactory: (arg: unknown[]) => BatchUpdateContextItem\n ): void {\n this.batchUpdate = true;\n this.batchUpdateContextsNames = values.map((item) => item.name);\n if (\n [...new Set(this.batchUpdateContextsNames)].length !==\n this.batchUpdateContextsNames.length\n ) {\n throw new Error(`Batch update not allow to update same item`);\n }\n\n const updateContexts: Record<string, DataStoreItem> = {};\n const affectContexts: Record<string, DataStoreItem> = {};\n const affectDepsContextNames: string[] = [];\n\n values.forEach((arg) => {\n const { name, value } = argsFactory([arg]);\n const updateContextItem = this.data.get(name);\n affectDepsContextNames.push(...this.getAffectListByContext(name));\n updateContextItem && (updateContexts[name] = updateContextItem);\n this.updateValue(name as string, value, method);\n });\n\n affectDepsContextNames\n .filter((item) => !updateContexts[item])\n .forEach((name) => {\n const affectContextItem = this.data.get(name);\n affectContextItem && (affectContexts[name] = affectContextItem);\n });\n\n const triggerEvent = (contexts: Record<string, DataStoreItem>): void => {\n for (const key in contexts) {\n const context = contexts[key];\n context.eventTarget?.dispatchEvent(\n new CustomEvent(this.changeEventType, {\n detail: context.value,\n })\n );\n }\n };\n\n triggerEvent(updateContexts);\n triggerEvent(affectContexts);\n\n this.batchUpdate = false;\n\n return;\n }\n\n updateValue(\n name: string,\n value: unknown,\n method: \"assign\" | \"replace\" | \"refresh\" | \"load\",\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 const shouldDismiss = (error: unknown) => {\n // If render twice immediately, flow API contracts maybe cleared before\n // the second rendering, while the page load handlers of the first\n // rendering can't be cancelled, which throws `FlowApiNotFoundError`.\n // So we ignore error reporting for this case.\n let renderId: string | undefined;\n return (\n (error as Error)?.name === \"FlowApiNotFoundError\" &&\n !!(renderId = this.rendererContext?.renderId) &&\n renderId !== _internalApiGetRenderId()\n );\n };\n\n if (!promise) {\n promise = item.loading = item.load({\n cache: method === \"load\" ? \"default\" : \"reload\",\n ...(value as ResolveOptions),\n });\n // Do not use the chained promise, since the callbacks need the original promise.\n promise.then(\n (val) => {\n 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 (!shouldDismiss(err) && !callback?.error) {\n handleHttpError(err);\n }\n }\n );\n }\n\n if (callback) {\n const callbackFactory = eventCallbackFactory(\n callback,\n callbackRuntimeContext!\n );\n\n promise.then(\n (val) => {\n callbackFactory(\"success\")({ value: val });\n callbackFactory(\"finally\")();\n },\n (err) => {\n if (!shouldDismiss(err) && callback.error) {\n callbackFactory(\"error\")(err);\n }\n callbackFactory(\"finally\")();\n }\n );\n }\n\n return;\n }\n\n if (method === \"replace\") {\n item.value = value;\n } else {\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, {\n ...options,\n renderId: this.rendererContext?.renderId,\n })) 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 if (this.data.has(dataConf.name)) {\n throw new Error(\n `${this.type} '${dataConf.name}' has already been declared`\n );\n }\n\n const newData: DataStoreItem = {\n name: dataConf.name,\n value,\n // This is required for tracking context, even if no `onChange` is specified.\n eventTarget: new EventTarget(),\n 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 newData.eventTarget.addEventListener(this.changeEventType, (e) => {\n this.notifyRealTimeDataChange(dataConf.name, (e as CustomEvent).detail);\n });\n\n this.data.set(dataConf.name, newData);\n\n if (Array.isArray(routePath)) {\n for (const route of routePath) {\n const names = this.routeMap.get(route);\n if (names) {\n names.add(dataConf.name);\n } else {\n this.routeMap.set(route, new Set([dataConf.name]));\n }\n }\n }\n\n return true;\n }\n\n 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;AACA,IAAAW,QAAA,GAAAX,OAAA;AACA,IAAAY,oBAAA,GAAAZ,OAAA;AAKA,MAAMa,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;EACRC,YAAY;EACtBC,WAAW,GAAG,KAAK;EACnBC,wBAAwB,GAAa,EAAE;EAC7BC,eAAe;EACxBC,QAAQ,GAAG,IAAIC,OAAO,CAAyB,CAAC;;EAExD;EACAC,WAAWA,CACTZ,IAAO,EACPK,SAAwB,EACxBI,eAAiC,EACjCH,YAAqB,EACrB;IACA,IAAI,CAACN,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACG,eAAe,GAClB,IAAI,CAACH,IAAI,KAAK,YAAY,GACtB,kBAAkB,GAClB,IAAI,CAACA,IAAI,KAAK,OAAO,GACnB,cAAc,GACd,gBAAgB;IACxB,IAAI,CAACK,SAAS,GAAGA,SAAS;IAC1B,IAAI,CAACI,eAAe,GAAGA,eAAe;IACtC,IAAI,CAACH,YAAY,GAAGA,YAAY;EAClC;EAEAO,YAAYA,CAAA,EAA4B;IACtC,OAAOC,MAAM,CAACC,WAAW,CACvB,CAAC,GAAG,IAAI,CAACd,IAAI,CAACe,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,CAACpB,IAAI,CAACqB,GAAG,CAACJ,IAAI,CAAC,cAAAG,cAAA,uBAAnBA,cAAA,CAAqBF,KAAK;EACnC;EAEQI,wBAAwBA,CAACL,IAAY,EAAEC,KAAc,EAAE;IAC7D,IAAIK,4CAAuB,EAAE;MAC3B,MAAM;QAAEC;MAAgB,CAAC,GAAGD,4CAAuB;MACnD,IACEC,eAAe,GACX,IAAI,CAACzB,IAAI,KAAK,OAAO,IAAI,IAAI,CAACM,YAAY,KAAKmB,eAAe,GAC9D,IAAI,CAACzB,IAAI,KAAK,KAAK,EACvB;QACA,IAAA0B,iDAA4B,EAAC;UAC3BC,UAAU,EAAE,QAAQ;UACpBF,eAAe;UACfG,MAAM,EAAE;YACNV,IAAI;YACJC;UACF;QACF,CAAC,CAAC;MACJ;IACF;EACF;EAEQU,sBAAsBA,CAACX,IAAY,EAAY;IACrD,MAAMY,WAAW,GAAG,CAACZ,IAAI,CAAC;IAC1B,IAAI,CAACjB,IAAI,CAAC8B,OAAO,CAAC,CAACZ,KAAK,EAAEa,GAAG,KAAK;MAChC,IAAIb,KAAK,CAACc,IAAI,EAAE;QACd,MAAMC,QAAQ,GAAGf,KAAK,CAACc,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,CAACrC,WAAW,GAAG,IAAI;IACvB,IAAI,CAACC,wBAAwB,GAAGkC,MAAM,CAACzB,GAAG,CAAEmB,IAAI,IAAKA,IAAI,CAAClB,IAAI,CAAC;IAC/D,IACE,CAAC,GAAG,IAAIsB,GAAG,CAAC,IAAI,CAAChC,wBAAwB,CAAC,CAAC,CAACqC,MAAM,KAClD,IAAI,CAACrC,wBAAwB,CAACqC,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;QAAEhC,IAAI;QAAEC;MAAM,CAAC,GAAGyB,WAAW,CAAC,CAACM,GAAG,CAAC,CAAC;MAC1C,MAAMC,iBAAiB,GAAG,IAAI,CAAClD,IAAI,CAACqB,GAAG,CAACJ,IAAI,CAAC;MAC7C+B,sBAAsB,CAACX,IAAI,CAAC,GAAG,IAAI,CAACT,sBAAsB,CAACX,IAAI,CAAC,CAAC;MACjEiC,iBAAiB,KAAKJ,cAAc,CAAC7B,IAAI,CAAC,GAAGiC,iBAAiB,CAAC;MAC/D,IAAI,CAACC,WAAW,CAAClC,IAAI,EAAYC,KAAK,EAAEwB,MAAM,CAAC;IACjD,CAAC,CAAC;IAEFM,sBAAsB,CACnBI,MAAM,CAAEjB,IAAI,IAAK,CAACW,cAAc,CAACX,IAAI,CAAC,CAAC,CACvCL,OAAO,CAAEb,IAAI,IAAK;MACjB,MAAMoC,iBAAiB,GAAG,IAAI,CAACrD,IAAI,CAACqB,GAAG,CAACJ,IAAI,CAAC;MAC7CoC,iBAAiB,KAAKN,cAAc,CAAC9B,IAAI,CAAC,GAAGoC,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,eAAnBA,oBAAA,CAAqBG,aAAa,CAChC,IAAIC,WAAW,CAAC,IAAI,CAAC1D,eAAe,EAAE;UACpCyB,MAAM,EAAE8B,OAAO,CAACvC;QAClB,CAAC,CACH,CAAC;MACH;IACF,CAAC;IAEDoC,YAAY,CAACR,cAAc,CAAC;IAC5BQ,YAAY,CAACP,cAAc,CAAC;IAE5B,IAAI,CAACzC,WAAW,GAAG,KAAK;IAExB;EACF;EAEA6C,WAAWA,CACTlC,IAAY,EACZC,KAAc,EACdwB,MAAiD,EACjDmB,QAAoC,EACpCC,sBAAuC,EACjC;IACN,MAAM3B,IAAI,GAAG,IAAI,CAACnC,IAAI,CAACqB,GAAG,CAACJ,IAAI,CAAC;IAChC,IAAI,CAACkB,IAAI,EAAE;MACT,MAAM,IAAIU,KAAK,CAAE,GAAE,IAAI,CAAC9C,IAAK,KAAIkB,IAAK,kBAAiB,CAAC;IAC1D;IAEA,IAAIyB,MAAM,KAAK,SAAS,IAAIA,MAAM,KAAK,MAAM,EAAE;MAC7C,IAAI,CAACP,IAAI,CAAC4B,IAAI,EAAE;QACd,MAAM,IAAIlB,KAAK,CACZ,eAAcH,MAAO,KAAI,IAAI,CAAC3C,IAAK,IAAGkB,IAAK,wBAC9C,CAAC;MACH;MAEA,IAAI+C,OAAqC;MACzC,IAAItB,MAAM,KAAK,MAAM,EAAE;QACrB;QACA,IAAIP,IAAI,CAAC8B,MAAM,EAAE;UACfD,OAAO,GAAGE,OAAO,CAACC,OAAO,CAAChC,IAAI,CAACjB,KAAK,CAAC;QACvC,CAAC,MAAM,IAAIiB,IAAI,CAACiC,OAAO,EAAE;UACvBJ,OAAO,GAAG7B,IAAI,CAACiC,OAAO;QACxB;MACF;MAEA,MAAMC,aAAa,GAAIC,KAAc,IAAK;QAAA,IAAAC,qBAAA;QACxC;QACA;QACA;QACA;QACA,IAAIC,QAA4B;QAChC,OACE,CAACF,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAYrD,IAAI,MAAK,sBAAsB,IACjD,CAAC,EAAEuD,QAAQ,IAAAD,qBAAA,GAAG,IAAI,CAAC/D,eAAe,cAAA+D,qBAAA,uBAApBA,qBAAA,CAAsBC,QAAQ,CAAC,IAC7CA,QAAQ,KAAK,IAAAC,gCAAuB,EAAC,CAAC;MAE1C,CAAC;MAED,IAAI,CAACT,OAAO,EAAE;QACZA,OAAO,GAAG7B,IAAI,CAACiC,OAAO,GAAGjC,IAAI,CAAC4B,IAAI,CAAC;UACjCW,KAAK,EAAEhC,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,QAAQ;UAC/C,GAAIxB;QACN,CAAC,CAAC;QACF;QACA8C,OAAO,CAACW,IAAI,CACTC,GAAG,IAAK;UACPzC,IAAI,CAAC8B,MAAM,GAAG,IAAI;UAClB9B,IAAI,CAACjB,KAAK,GAAG0D,GAAG;UAChBzC,IAAI,CAACuB,WAAW,CAACC,aAAa,CAC5B,IAAIC,WAAW,CAAC,IAAI,CAAC1D,eAAe,EAAE;YACpCyB,MAAM,EAAEQ,IAAI,CAACjB;UACf,CAAC,CACH,CAAC;QACH,CAAC,EACA2D,GAAG,IAAK;UACP;UACA,IAAI,CAACR,aAAa,CAACQ,GAAG,CAAC,IAAI,EAAChB,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAES,KAAK,GAAE;YAC3C,IAAAQ,gCAAe,EAACD,GAAG,CAAC;UACtB;QACF,CACF,CAAC;MACH;MAEA,IAAIhB,QAAQ,EAAE;QACZ,MAAMkB,eAAe,GAAG,IAAAC,mCAAoB,EAC1CnB,QAAQ,EACRC,sBACF,CAAC;QAEDE,OAAO,CAACW,IAAI,CACTC,GAAG,IAAK;UACPG,eAAe,CAAC,SAAS,CAAC,CAAC;YAAE7D,KAAK,EAAE0D;UAAI,CAAC,CAAC;UAC1CG,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9B,CAAC,EACAF,GAAG,IAAK;UACP,IAAI,CAACR,aAAa,CAACQ,GAAG,CAAC,IAAIhB,QAAQ,CAACS,KAAK,EAAE;YACzCS,eAAe,CAAC,OAAO,CAAC,CAACF,GAAG,CAAC;UAC/B;UACAE,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9B,CACF,CAAC;MACH;MAEA;IACF;IAEA,IAAIrC,MAAM,KAAK,SAAS,EAAE;MACxBP,IAAI,CAACjB,KAAK,GAAGA,KAAK;IACpB,CAAC,MAAM;MACL,IAAI,IAAA+D,iBAAQ,EAAC9C,IAAI,CAACjB,KAAK,CAAC,EAAE;QACxBL,MAAM,CAACqE,MAAM,CAAC/C,IAAI,CAACjB,KAAK,EAAEA,KAAK,CAAC;MAClC,CAAC,MAAM;QACL;QACAiE,OAAO,CAACC,IAAI,CACT,gCAA+B,IAAI,CAACrF,IAAK,IAAGkB,IAAK,wDACpD,CAAC;QACDkB,IAAI,CAACjB,KAAK,GAAGA,KAAK;MACpB;IACF;IAEA,IAAI,IAAI,CAACZ,WAAW,EAAE;IAEtB6B,IAAI,CAACuB,WAAW,CAACC,aAAa,CAC5B,IAAIC,WAAW,CAAC,IAAI,CAAC1D,eAAe,EAAE;MACpCyB,MAAM,EAAEQ,IAAI,CAACjB;IACf,CAAC,CACH,CAAC;EACH;EAEAmE,MAAMA,CACJC,SAAoC,EACpCC,cAA8B,EAC9BC,wBAA+C,EAC/CC,SAAuB,EACjB;IACN,IAAIC,KAAK,CAACC,OAAO,CAACL,SAAS,CAAC,IAAIA,SAAS,CAAC1C,MAAM,GAAG,CAAC,EAAE;MACpD,MAAMgD,OAAO,GAAG,IAAAC,kCAAgB,EAC9BP,SAAS,EACRQ,QAAqB,IACpB,IAAI,CAAC3B,OAAO,CACV2B,QAAQ,EACRP,cAAc,EACdC,wBAAwB,EACxBC,SACF,CAAC,EACH,IAAI,CAAC1F,IACP,CAAC;MACD,IAAI,CAACI,YAAY,CAACkC,IAAI,CAACuD,OAAO,CAAC;IACjC;EACF;EAEAG,QAAQA,CAACC,QAAgB,EAAEC,QAAuB,EAAQ;IAAA,IAAAC,eAAA;IACxD,CAAAA,eAAA,OAAI,CAAClG,IAAI,CACNqB,GAAG,CAAC2E,QAAQ,CAAC,cAAAE,eAAA,eADhBA,eAAA,CAEIxC,WAAW,CAACyC,gBAAgB,CAAC,IAAI,CAACjG,eAAe,EAAE+F,QAAQ,CAAC;EAClE;EAEA,MAAMG,OAAOA,CAACC,SAAiC,EAAiB;IAC9D,KAAK,MAAM;MAAEC;IAAgB,CAAC,IAAI,IAAI,CAACnG,YAAY,EAAE;MACnD,MAAM+D,OAAO,CAACqC,GAAG,CACf,CAAC,GAAGF,SAAS,CAAC,CAACrF,GAAG,CAAEwF,GAAG,IAAK;QAC1B,MAAMC,CAAC,GAAGH,eAAe,CAACjF,GAAG,CAACmF,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,CAACnG,YAAY,EAAE;MACnD,KAAK,MAAMsG,CAAC,IAAIH,eAAe,CAAC7D,MAAM,CAAC,CAAC,EAAE;QACxCgE,CAAC,CAACE,KAAK,CAAC,MAAM;UACZ;QAAA,CACD,CAAC;MACJ;IACF;IACA,KAAK,MAAM;MAAEC;IAAc,CAAC,IAAI,IAAI,CAACzG,YAAY,EAAE;MACjD,MAAMyG,aAAa;IACrB;EACF;;EAEA;AACF;AACA;AACA;AACA;EACEC,cAAcA,CAACC,KAAiB,EAAE;IAChC,IAAI,CAAC9G,IAAI,CAAC8B,OAAO,CAAEK,IAAI,IAAK;MAAA,IAAA4E,kBAAA;MAC1B,IAAI5E,IAAI,CAAC6E,KAAK,KAAK,CAACF,KAAK,KAAAC,kBAAA,GAAI,IAAI,CAACtG,QAAQ,CAACY,GAAG,CAACyF,KAAK,CAAC,cAAAC,kBAAA,eAAxBA,kBAAA,CAA0BE,GAAG,CAAC9E,IAAI,CAAClB,IAAI,CAAC,CAAC,EAAE;QACtE;QACA,IAAIkB,IAAI,CAAC+E,YAAY,EAAE;UACrB;UACA/B,OAAO,CAACb,KAAK,CACV,eAAcnC,IAAI,CAAClB,IAAK,mEAC3B,CAAC;UACD;QACF;QACAkB,IAAI,CAAC+E,YAAY,GAAG,IAAI;QACxB;QACA;QACA/E,IAAI,CAACiC,OAAO,CAAEO,IAAI,CAAEzD,KAAK,IAAK;UAC5BiB,IAAI,CAAC8B,MAAM,GAAG,IAAI;UAClB9B,IAAI,CAACjB,KAAK,GAAGA,KAAK;UAClBiB,IAAI,CAACuB,WAAW,CAACC,aAAa,CAC5B,IAAIC,WAAW,CAAC,IAAI,CAAC1D,eAAe,EAAE;YACpCyB,MAAM,EAAET;UACV,CAAC,CACH,CAAC;QACH,CAAC,CAAC;MACJ;IACF,CAAC,CAAC;EACJ;EAEA,MAAciD,OAAOA,CACnB2B,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,IAAIrE,KAAc;IAClB,IACEsE,wBAAwB,KACvB,IAAI,CAACzF,IAAI,KAAK,OAAO,GAAG+F,QAAQ,CAACsB,MAAM,GAAG,IAAI,CAACrH,IAAI,KAAK,YAAY,CAAC,EACtE;MACAmB,KAAK,GAAG,MAAM,IAAAmG,2CAAoB,EAChC7B,wBAAwB,EACxBM,QAAQ,CAAC7E,IACX,CAAC;IACH;IACA,IAAI8C,IAA2B;IAC/B,IAAIK,OAAqC;IACzC,IAAIkD,aAAyC,GAAG,OAAO;IACvD,IAAIpG,KAAK,KAAKqG,SAAS,EAAE;MACvB,IAAIzB,QAAQ,CAAC3B,OAAO,EAAE;QACpB,MAAMqD,WAAW,GAAG;UAClBC,SAAS,EAAE,OAAO;UAClB,GAAG3B,QAAQ,CAAC3B;QACd,CAAC;QACD,IAAI,MAAM,IAAAgD,qBAAY,EAACrB,QAAQ,CAAC3B,OAAO,EAAEoB,cAAc,CAAC,EAAE;UACxDxB,IAAI,GAAG,MAAO2D,OAAO;YAAA,IAAAC,sBAAA;YAAA,OACnB,CACG,MAAM,IAAAC,wBAAW,EAACJ,WAAW,EAAEjC,cAAc,EAAE;cAC9C,GAAGmC,OAAO;cACVlD,QAAQ,GAAAmD,sBAAA,GAAE,IAAI,CAACnH,eAAe,cAAAmH,sBAAA,uBAApBA,sBAAA,CAAsBnD;YAClC,CAAC,CAAC,EAGFtD,KAAK;UAAA;UACT;UACAoG,aAAa,GAAGxB,QAAQ,CAAC3B,OAAO,CAAC6C,KAAK,GAClC,OAAO,GACPlB,QAAQ,CAAC3B,OAAO,CAAC0D,IAAI,GACnB,MAAM,GACN,OAAO;UACb,IAAIP,aAAa,KAAK,OAAO,EAAE;YAC7BpG,KAAK,GAAG,MAAM6C,IAAI,CAAC,CAAC;UACtB,CAAC,MAAM,IAAIuD,aAAa,KAAK,OAAO,EAAE;YACpClD,OAAO,GAAGL,IAAI,CAAC,CAAC;UAClB;QACF,CAAC,MAAM,IAAI,CAAC,IAAA+D,uBAAc,EAAChC,QAAQ,EAAE,OAAO,CAAC,EAAE;UAC7C,OAAO,KAAK;QACd;MACF;MACA,IACE,CAAC,CAAC/B,IAAI,IAAIuD,aAAa,KAAK,OAAO,KACnCxB,QAAQ,CAAC5E,KAAK,KAAKqG,SAAS,EAC5B;QACA;QACA;QACArG,KAAK,GAAG,MAAM,IAAA6G,uCAAqB,EAACjC,QAAQ,CAAC5E,KAAK,EAAEqE,cAAc,CAAC;MACrE;IACF;IAEA,IAAI,IAAI,CAACvF,IAAI,CAACiH,GAAG,CAACnB,QAAQ,CAAC7E,IAAI,CAAC,EAAE;MAChC,MAAM,IAAI4B,KAAK,CACZ,GAAE,IAAI,CAAC9C,IAAK,KAAI+F,QAAQ,CAAC7E,IAAK,6BACjC,CAAC;IACH;IAEA,MAAM+G,OAAsB,GAAG;MAC7B/G,IAAI,EAAE6E,QAAQ,CAAC7E,IAAI;MACnBC,KAAK;MACL;MACAwC,WAAW,EAAE,IAAIuE,oBAAW,CAAC,CAAC;MAC9BlE,IAAI;MACJE,MAAM,EAAEqD,aAAa,KAAK,OAAO;MACjClD,OAAO;MACP4C,KAAK,EAAEM,aAAa,KAAK,OAAO;MAChCtF,IAAI,EAAE;IACR,CAAC;IAED,IAAIsF,aAAa,KAAK,MAAM,EAAE;MAC5B;MACA,MAAM;QAAEY;MAAQ,CAAC,GAAGpC,QAAQ,CAAC3B,OAAQ;MACrC,IACE+D,OAAO,IACPrI,0CAA0C,CAACuC,QAAQ,CAAC8F,OAAO,CAAC,EAC5D;QAAA,IAAAC,sBAAA;QACA,CAAAA,sBAAA,OAAI,CAAC3H,eAAe,cAAA2H,sBAAA,eAApBA,sBAAA,CAAsBC,0BAA0B,CAACF,OAAO,EAAE,MAAM;UAC9D,IAAI,CAAC/E,WAAW,CAAC2C,QAAQ,CAAC7E,IAAI,EAAEsG,SAAS,EAAE,MAAM,CAAC;QACpD,CAAC,CAAC;MACJ;IACF;IAEA,IAAIzB,QAAQ,CAACC,QAAQ,EAAE;MACrBiC,OAAO,CAACtE,WAAW,CAACyC,gBAAgB,CAClC,IAAI,CAACjG,eAAe,EACpB,IAAAmI,8BAAe,EAACvC,QAAQ,CAACC,QAAQ,EAAER,cAAc,CACnD,CAAC;IACH;IAEA,IAAIO,QAAQ,CAACwC,KAAK,EAAE;MAClB,MAAMtG,IAAI,GAAG,IAAAuG,oCAAwB,EACnCxE,IAAI,GAAG+B,QAAQ,CAAC3B,OAAO,GAAG2B,QAAQ,CAAC5E,KAAK,EACxC,IAAI,CAACnB,IACP,CAAC;MACD,CAACgE,IAAI,KAAKiE,OAAO,CAAChG,IAAI,GAAG,CAAC,GAAGA,IAAI,CAAC,CAAC;MACnC,KAAK,MAAMwG,GAAG,IAAIxG,IAAI,EAAE;QACtB,IAAI,CAAC+D,QAAQ,CACXyC,GAAG,EACH,IAAI,CAACC,gBAAgB,CAAC,MAAM;UAC1B,IAAI1E,IAAI,EAAE;YACR,IAAI,CAACZ,WAAW,CAAC2C,QAAQ,CAAC7E,IAAI,EAAE;cAAEyD,KAAK,EAAE;YAAU,CAAC,EAAE,SAAS,CAAC;UAClE,CAAC,MAAM;YACL,IAAI,CAACvB,WAAW,CACd2C,QAAQ,CAAC7E,IAAI,EACb,IAAAyH,kCAAgB,EAAC5C,QAAQ,CAAC5E,KAAK,EAAEqE,cAAc,CAAC,EAChD,SACF,CAAC;UACH;QACF,CAAC,EAAEO,QAAQ,CACb,CAAC;MACH;IACF;IAEAkC,OAAO,CAACtE,WAAW,CAACyC,gBAAgB,CAAC,IAAI,CAACjG,eAAe,EAAGyI,CAAC,IAAK;MAChE,IAAI,CAACrH,wBAAwB,CAACwE,QAAQ,CAAC7E,IAAI,EAAG0H,CAAC,CAAiBhH,MAAM,CAAC;IACzE,CAAC,CAAC;IAEF,IAAI,CAAC3B,IAAI,CAAC4I,GAAG,CAAC9C,QAAQ,CAAC7E,IAAI,EAAE+G,OAAO,CAAC;IAErC,IAAItC,KAAK,CAACC,OAAO,CAACF,SAAS,CAAC,EAAE;MAC5B,KAAK,MAAMqB,KAAK,IAAIrB,SAAS,EAAE;QAC7B,MAAMoD,KAAK,GAAG,IAAI,CAACpI,QAAQ,CAACY,GAAG,CAACyF,KAAK,CAAC;QACtC,IAAI+B,KAAK,EAAE;UACTA,KAAK,CAACC,GAAG,CAAChD,QAAQ,CAAC7E,IAAI,CAAC;QAC1B,CAAC,MAAM;UACL,IAAI,CAACR,QAAQ,CAACmI,GAAG,CAAC9B,KAAK,EAAE,IAAIvE,GAAG,CAAC,CAACuD,QAAQ,CAAC7E,IAAI,CAAC,CAAC,CAAC;QACpD;MACF;IACF;IAEA,OAAO,IAAI;EACb;EAEA8H,mBAAmBA,CAACC,MAAmB,EAAE;IACvC,KAAK,MAAMlC,KAAK,IAAIkC,MAAM,EAAE;MAC1B,MAAMH,KAAK,GAAG,IAAI,CAACpI,QAAQ,CAACY,GAAG,CAACyF,KAAK,CAAC;MACtC,IAAI+B,KAAK,KAAKtB,SAAS,EAAE;QACvB,KAAK,MAAMtG,IAAI,IAAI4H,KAAK,EAAE;UACxB,IAAI,CAAC7I,IAAI,CAACiJ,MAAM,CAAChI,IAAI,CAAC;QACxB;MACF;IACF;EACF;EAEQwH,gBAAgBA,CACtBxC,QAAuB,EACvBiD,WAAwB,EACT;IACf,OAAQC,KAA0B,IAAW;MAC3C,IACE,IAAI,CAAC7I,WAAW,IAChB,IAAI,CAACC,wBAAwB,CAAC6B,QAAQ,CAAC8G,WAAW,CAACjI,IAAI,CAAC,EACxD;QACA;MACF;MACAgF,QAAQ,CAACkD,KAAK,CAAC;IACjB,CAAC;EACH;AACF;AAACC,OAAA,CAAAtJ,SAAA,GAAAA,SAAA"}
1
+ {"version":3,"file":"DataStore.js","names":["_general","require","_storyboard","_eventTarget","_interopRequireDefault","_bindListeners","_checkIf","_computeRealValue","_resolveData","_resolveDataStore","_handleHttpError","_computeRealProperties","_Runtime","_realTimeDataInspect","supportContextResolveTriggerBrickLifeCycle","DataStore","type","data","Map","changeEventType","pendingStack","hostBrick","stateStoreId","batchUpdate","batchUpdateContextsNames","rendererContext","routeMap","WeakMap","constructor","getAllValues","Object","fromEntries","entries","map","name","value","getValue","_this$data$get","get","notifyRealTimeDataChange","realTimeDataInspectRoot","tplStateStoreId","callRealTimeDataInspectHooks","changeType","detail","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","callback","callbackRuntimeContext","useResolve","promise","loaded","Promise","resolve","loading","shouldDismiss","error","_this$rendererContext","renderId","_internalApiGetRenderId","load","cache","then","val","finishLoad","err","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","trackConditionalResolve","resolvePolicy","undefined","hasFallbackValue","hasOwnProperty","track","strictCollectMemberUsage","if","size","resolveConf","transform","options","_this$rendererContext2","resolveData","lazy","asyncComputeRealValue","newData","EventTarget","trigger","_this$rendererContext3","registerArbitraryLifeCycle","listenerFactory","dep","batchAddListener","checkIf","computeRealValue","e","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, checkIf } from \"../compute/checkIf.js\";\nimport {\n asyncComputeRealValue,\n computeRealValue,\n} from \"../compute/computeRealValue.js\";\nimport { ResolveOptions, resolveData } from \"./resolveData.js\";\nimport { resolveDataStore } from \"./resolveDataStore.js\";\nimport type {\n AsyncPropertyEntry,\n RuntimeBrick,\n RuntimeContext,\n} from \"../interfaces.js\";\nimport { handleHttpError } from \"../../handleHttpError.js\";\nimport type { RendererContext } from \"../RendererContext.js\";\nimport { computePropertyValue } from \"../compute/computeRealProperties.js\";\nimport { _internalApiGetRenderId } from \"../Runtime.js\";\nimport {\n callRealTimeDataInspectHooks,\n realTimeDataInspectRoot,\n} from \"./realTimeDataInspect.js\";\n\nconst supportContextResolveTriggerBrickLifeCycle = [\n \"onBeforePageLoad\",\n \"onPageLoad\",\n \"onBeforePageLeave\",\n \"onPageLeave\",\n \"onAnchorLoad\",\n \"onAnchorUnload\",\n] as ContextResolveTriggerBrickLifeCycle[];\n\nexport type DataStoreType = \"CTX\" | \"STATE\" | \"FORM_STATE\";\n\nexport interface DataStoreItem {\n name: string;\n value: unknown;\n eventTarget: EventTarget;\n useResolve?: boolean;\n loaded?: boolean;\n loading?: Promise<unknown>;\n load?: (options?: ResolveOptions) => Promise<unknown>;\n async?: boolean;\n asyncMounted?: boolean;\n deps: string[];\n}\n\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 private readonly stateStoreId?: string;\n private batchUpdate = false;\n private batchUpdateContextsNames: string[] = [];\n private readonly rendererContext?: RendererContext;\n private routeMap = new WeakMap<RouteConf, Set<string>>();\n\n // 把 `rendererContext` 放在参数列表的最后,并作为可选,以减少测试文件的调整\n constructor(\n type: T,\n hostBrick?: RuntimeBrick,\n rendererContext?: RendererContext,\n stateStoreId?: string\n ) {\n this.type = type;\n this.changeEventType =\n this.type === \"FORM_STATE\"\n ? \"formstate.change\"\n : this.type === \"STATE\"\n ? \"state.change\"\n : \"context.change\";\n this.hostBrick = hostBrick;\n this.rendererContext = rendererContext;\n this.stateStoreId = stateStoreId;\n }\n\n getAllValues(): Record<string, unknown> {\n return Object.fromEntries(\n [...this.data.entries()].map(([name, { value }]) => [name, value])\n );\n }\n\n getValue(name: string): unknown {\n return this.data.get(name)?.value;\n }\n\n private notifyRealTimeDataChange(name: string, value: unknown) {\n if (realTimeDataInspectRoot) {\n const { tplStateStoreId } = realTimeDataInspectRoot;\n if (\n tplStateStoreId\n ? this.type === \"STATE\" && this.stateStoreId === tplStateStoreId\n : this.type === \"CTX\"\n ) {\n callRealTimeDataInspectHooks({\n changeType: \"update\",\n tplStateStoreId,\n detail: {\n name,\n value,\n },\n });\n }\n }\n }\n\n private getAffectListByContext(name: string): string[] {\n const affectNames = [name];\n this.data.forEach((value, key) => {\n if (value.deps) {\n const isInDeps = value.deps.some((item) => affectNames.includes(item));\n isInDeps &&\n affectNames.push(key) &&\n affectNames.push(...this.getAffectListByContext(key));\n }\n });\n affectNames.shift();\n return [...new Set(affectNames)];\n }\n\n updateValues(\n values: BatchUpdateContextItem[],\n method: \"assign\" | \"replace\",\n argsFactory: (arg: unknown[]) => BatchUpdateContextItem\n ): void {\n this.batchUpdate = true;\n this.batchUpdateContextsNames = values.map((item) => item.name);\n if (\n [...new Set(this.batchUpdateContextsNames)].length !==\n this.batchUpdateContextsNames.length\n ) {\n throw new Error(`Batch update not allow to update same item`);\n }\n\n const updateContexts: Record<string, DataStoreItem> = {};\n const affectContexts: Record<string, DataStoreItem> = {};\n const affectDepsContextNames: string[] = [];\n\n values.forEach((arg) => {\n const { name, value } = argsFactory([arg]);\n const updateContextItem = this.data.get(name);\n affectDepsContextNames.push(...this.getAffectListByContext(name));\n updateContextItem && (updateContexts[name] = updateContextItem);\n this.updateValue(name as string, value, method);\n });\n\n affectDepsContextNames\n .filter((item) => !updateContexts[item])\n .forEach((name) => {\n const affectContextItem = this.data.get(name);\n affectContextItem && (affectContexts[name] = affectContextItem);\n });\n\n const triggerEvent = (contexts: Record<string, DataStoreItem>): void => {\n for (const key in contexts) {\n const context = contexts[key];\n context.eventTarget?.dispatchEvent(\n new CustomEvent(this.changeEventType, {\n detail: context.value,\n })\n );\n }\n };\n\n triggerEvent(updateContexts);\n triggerEvent(affectContexts);\n\n this.batchUpdate = false;\n\n return;\n }\n\n updateValue(\n name: string,\n value: unknown,\n method: \"assign\" | \"replace\" | \"refresh\" | \"load\",\n callback?: BrickEventHandlerCallback,\n callbackRuntimeContext?: RuntimeContext\n ): void {\n const item = this.data.get(name);\n if (!item) {\n throw new Error(`${this.type} '${name}' is not defined`);\n }\n\n if (method === \"refresh\" || method === \"load\") {\n if (!item.useResolve) {\n throw new Error(\n `You can not ${method} \"${this.type}.${name}\" which is not using resolve`\n );\n }\n\n let promise: Promise<unknown> | undefined;\n if (method === \"load\") {\n // Try to reuse previous request when calling `load`.\n if (item.loaded) {\n promise = Promise.resolve(item.value);\n } else if (item.loading) {\n promise = item.loading;\n }\n }\n\n const shouldDismiss = (error: unknown) => {\n // If render twice immediately, flow API contracts maybe cleared before\n // the second rendering, while the page load handlers of the first\n // rendering can't be cancelled, which throws `FlowApiNotFoundError`.\n // So we ignore error reporting for this case.\n let renderId: string | undefined;\n return (\n (error as Error)?.name === \"FlowApiNotFoundError\" &&\n !!(renderId = this.rendererContext?.renderId) &&\n renderId !== _internalApiGetRenderId()\n );\n };\n\n if (!promise) {\n promise = item.loading = item.load!({\n cache: method === \"load\" ? \"default\" : \"reload\",\n ...(value as ResolveOptions),\n });\n // Do not use the chained promise, since the callbacks need the original promise.\n promise.then(\n (val) => {\n this.finishLoad(item, val);\n },\n (err) => {\n // Let users override error handling.\n if (item.useResolve && !shouldDismiss(err) && !callback?.error) {\n handleHttpError(err);\n }\n }\n );\n }\n\n if (callback) {\n const callbackFactory = eventCallbackFactory(\n callback,\n callbackRuntimeContext!\n );\n\n promise.then(\n (val) => {\n callbackFactory(\"success\")({ value: val });\n callbackFactory(\"finally\")();\n },\n (err) => {\n if (!shouldDismiss(err) && callback.error) {\n callbackFactory(\"error\")(err);\n }\n callbackFactory(\"finally\")();\n }\n );\n }\n\n return;\n }\n\n if (method === \"replace\") {\n item.value = value;\n } else {\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 private finishLoad(item: DataStoreItem, value: unknown) {\n if (!item.useResolve) {\n // This happens when a tracked conditional resolve switches from\n // resolve to fallback after an dep update triggered refresh but\n // before it's been resolved.\n return;\n }\n item.loaded = true;\n item.value = value;\n item.eventTarget.dispatchEvent(\n new CustomEvent(this.changeEventType, {\n detail: value,\n })\n );\n }\n\n define(\n dataConfs: ContextConf[] | undefined,\n runtimeContext: RuntimeContext,\n asyncHostPropertyEntries?: AsyncPropertyEntry[],\n routePath?: RouteConf[]\n ): void {\n if (Array.isArray(dataConfs) && dataConfs.length > 0) {\n const pending = resolveDataStore(\n dataConfs,\n (dataConf: ContextConf) =>\n this.resolve(\n dataConf,\n runtimeContext,\n asyncHostPropertyEntries,\n routePath\n ),\n this.type\n );\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 this.finishLoad(item, value);\n });\n }\n });\n }\n\n private async resolve(\n dataConf: ContextConf,\n runtimeContext: RuntimeContext,\n asyncHostPropertyEntries?: AsyncPropertyEntry[],\n routePath?: RouteConf[]\n ): Promise<boolean> {\n if (!(await asyncCheckIf(dataConf, runtimeContext))) {\n return false;\n }\n let value: unknown;\n if (\n asyncHostPropertyEntries &&\n (this.type === \"STATE\" ? dataConf.expose : this.type === \"FORM_STATE\")\n ) {\n value = await computePropertyValue(\n asyncHostPropertyEntries,\n dataConf.name\n );\n }\n let load: DataStoreItem[\"load\"];\n let loading: Promise<unknown> | undefined;\n let useResolve: boolean | undefined;\n let trackConditionalResolve: boolean | undefined;\n let resolvePolicy: \"eager\" | \"lazy\" | \"async\" | undefined;\n if (value === undefined) {\n if (dataConf.resolve) {\n const hasFallbackValue = hasOwnProperty(dataConf, \"value\");\n // Track conditional resolve only if all matches:\n // - Track enabled\n // - Has fallback value\n // - Referencing other data in `resolve.if`\n trackConditionalResolve =\n dataConf.track &&\n hasFallbackValue &&\n hasOwnProperty(dataConf.resolve, \"if\") &&\n strictCollectMemberUsage(dataConf.resolve.if, this.type).size > 0;\n const resolveConf = {\n transform: \"value\",\n ...dataConf.resolve,\n };\n useResolve = await asyncCheckIf(dataConf.resolve, runtimeContext);\n if (useResolve || trackConditionalResolve) {\n load = async (options) =>\n (\n (await resolveData(resolveConf, runtimeContext, {\n ...options,\n renderId: this.rendererContext?.renderId,\n })) as {\n value: unknown;\n }\n ).value;\n }\n if (useResolve) {\n // `async` take precedence over `lazy`\n resolvePolicy = dataConf.resolve.async\n ? \"async\"\n : dataConf.resolve.lazy\n ? \"lazy\"\n : \"eager\";\n if (resolvePolicy === \"eager\") {\n value = await load!();\n } else if (resolvePolicy === \"async\") {\n loading = load!();\n }\n } else if (!hasFallbackValue) {\n return false;\n }\n }\n if (\n (!useResolve || resolvePolicy !== \"eager\") &&\n dataConf.value !== undefined\n ) {\n // If the context has no resolve, just use its `value`.\n // Or if the resolve is ignored or lazy, use its `value` as a fallback.\n value = await asyncComputeRealValue(dataConf.value, runtimeContext);\n }\n }\n\n if (this.data.has(dataConf.name)) {\n throw new Error(\n `${this.type} '${dataConf.name}' has already been declared`\n );\n }\n\n const newData: DataStoreItem = {\n name: dataConf.name,\n value,\n // This is required for tracking context, even if no `onChange` is specified.\n eventTarget: new EventTarget(),\n useResolve,\n load,\n loaded: resolvePolicy === \"eager\",\n loading,\n async: resolvePolicy === \"async\",\n deps: [],\n };\n\n if (resolvePolicy === \"lazy\") {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const { trigger } = dataConf.resolve!;\n if (\n trigger &&\n supportContextResolveTriggerBrickLifeCycle.includes(trigger)\n ) {\n this.rendererContext?.registerArbitraryLifeCycle(trigger, () => {\n this.updateValue(dataConf.name, undefined, \"load\");\n });\n }\n }\n\n if (dataConf.onChange) {\n newData.eventTarget.addEventListener(\n this.changeEventType,\n listenerFactory(dataConf.onChange, runtimeContext)\n );\n }\n\n if (dataConf.track) {\n const deps = strictCollectMemberUsage(\n trackConditionalResolve\n ? [dataConf.resolve, dataConf.value]\n : load\n ? dataConf.resolve\n : dataConf.value,\n this.type\n );\n !load && (newData.deps = [...deps]);\n for (const dep of deps) {\n this.onChange(\n dep,\n this.batchAddListener(() => {\n newData.useResolve = trackConditionalResolve\n ? checkIf(dataConf.resolve!, runtimeContext)\n : !!load;\n if (newData.useResolve) {\n this.updateValue(dataConf.name, { cache: \"default\" }, \"refresh\");\n } else {\n this.updateValue(\n dataConf.name,\n computeRealValue(dataConf.value, runtimeContext),\n \"replace\"\n );\n }\n }, dataConf)\n );\n }\n }\n\n newData.eventTarget.addEventListener(this.changeEventType, (e) => {\n this.notifyRealTimeDataChange(dataConf.name, (e as CustomEvent).detail);\n });\n\n this.data.set(dataConf.name, newData);\n\n if (Array.isArray(routePath)) {\n for (const route of routePath) {\n const names = this.routeMap.get(route);\n if (names) {\n names.add(dataConf.name);\n } else {\n this.routeMap.set(route, new Set([dataConf.name]));\n }\n }\n }\n\n return true;\n }\n\n 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":"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"}
@@ -5,7 +5,7 @@ import { hasOwnProperty, isObject } from "@next-core/utils/general";
5
5
  import { strictCollectMemberUsage } from "@next-core/utils/storyboard";
6
6
  import EventTarget from "@ungap/event-target";
7
7
  import { eventCallbackFactory, listenerFactory } from "../bindListeners.js";
8
- import { asyncCheckIf } from "../compute/checkIf.js";
8
+ import { asyncCheckIf, checkIf } from "../compute/checkIf.js";
9
9
  import { asyncComputeRealValue, computeRealValue } from "../compute/computeRealValue.js";
10
10
  import { resolveData } from "./resolveData.js";
11
11
  import { resolveDataStore } from "./resolveDataStore.js";
@@ -116,8 +116,8 @@ export class DataStore {
116
116
  throw new Error("".concat(this.type, " '").concat(name, "' is not defined"));
117
117
  }
118
118
  if (method === "refresh" || method === "load") {
119
- if (!item.load) {
120
- throw new Error("You can not ".concat(method, " \"").concat(this.type, ".").concat(name, "\" which has no resolve"));
119
+ if (!item.useResolve) {
120
+ throw new Error("You can not ".concat(method, " \"").concat(this.type, ".").concat(name, "\" which is not using resolve"));
121
121
  }
122
122
  var promise;
123
123
  if (method === "load") {
@@ -143,14 +143,10 @@ export class DataStore {
143
143
  }, value));
144
144
  // Do not use the chained promise, since the callbacks need the original promise.
145
145
  promise.then(val => {
146
- item.loaded = true;
147
- item.value = val;
148
- item.eventTarget.dispatchEvent(new CustomEvent(this.changeEventType, {
149
- detail: item.value
150
- }));
146
+ this.finishLoad(item, val);
151
147
  }, err => {
152
148
  // Let users override error handling.
153
- if (!shouldDismiss(err) && !(callback !== null && callback !== void 0 && callback.error)) {
149
+ if (item.useResolve && !shouldDismiss(err) && !(callback !== null && callback !== void 0 && callback.error)) {
154
150
  handleHttpError(err);
155
151
  }
156
152
  });
@@ -187,6 +183,19 @@ export class DataStore {
187
183
  detail: item.value
188
184
  }));
189
185
  }
186
+ finishLoad(item, value) {
187
+ if (!item.useResolve) {
188
+ // This happens when a tracked conditional resolve switches from
189
+ // resolve to fallback after an dep update triggered refresh but
190
+ // before it's been resolved.
191
+ return;
192
+ }
193
+ item.loaded = true;
194
+ item.value = value;
195
+ item.eventTarget.dispatchEvent(new CustomEvent(this.changeEventType, {
196
+ detail: value
197
+ }));
198
+ }
190
199
  define(dataConfs, runtimeContext, asyncHostPropertyEntries, routePath) {
191
200
  if (Array.isArray(dataConfs) && dataConfs.length > 0) {
192
201
  var pending = resolveDataStore(dataConfs, dataConf => this.resolve(dataConf, runtimeContext, asyncHostPropertyEntries, routePath), this.type);
@@ -253,11 +262,7 @@ export class DataStore {
253
262
  // An async data always has `loading`
254
263
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
255
264
  item.loading.then(value => {
256
- item.loaded = true;
257
- item.value = value;
258
- item.eventTarget.dispatchEvent(new CustomEvent(this.changeEventType, {
259
- detail: value
260
- }));
265
+ this.finishLoad(item, value);
261
266
  });
262
267
  }
263
268
  });
@@ -274,13 +279,22 @@ export class DataStore {
274
279
  }
275
280
  var load;
276
281
  var loading;
277
- var resolvePolicy = "eager";
282
+ var useResolve;
283
+ var trackConditionalResolve;
284
+ var resolvePolicy;
278
285
  if (value === undefined) {
279
286
  if (dataConf.resolve) {
287
+ var hasFallbackValue = hasOwnProperty(dataConf, "value");
288
+ // Track conditional resolve only if all matches:
289
+ // - Track enabled
290
+ // - Has fallback value
291
+ // - Referencing other data in `resolve.if`
292
+ trackConditionalResolve = dataConf.track && hasFallbackValue && hasOwnProperty(dataConf.resolve, "if") && strictCollectMemberUsage(dataConf.resolve.if, _this3.type).size > 0;
280
293
  var resolveConf = _objectSpread({
281
294
  transform: "value"
282
295
  }, dataConf.resolve);
283
- if (yield asyncCheckIf(dataConf.resolve, runtimeContext)) {
296
+ useResolve = yield asyncCheckIf(dataConf.resolve, runtimeContext);
297
+ if (useResolve || trackConditionalResolve) {
284
298
  load = /*#__PURE__*/function () {
285
299
  var _ref2 = _asyncToGenerator(function* (options) {
286
300
  var _this3$rendererContex;
@@ -292,6 +306,8 @@ export class DataStore {
292
306
  return _ref2.apply(this, arguments);
293
307
  };
294
308
  }();
309
+ }
310
+ if (useResolve) {
295
311
  // `async` take precedence over `lazy`
296
312
  resolvePolicy = dataConf.resolve.async ? "async" : dataConf.resolve.lazy ? "lazy" : "eager";
297
313
  if (resolvePolicy === "eager") {
@@ -299,11 +315,11 @@ export class DataStore {
299
315
  } else if (resolvePolicy === "async") {
300
316
  loading = load();
301
317
  }
302
- } else if (!hasOwnProperty(dataConf, "value")) {
318
+ } else if (!hasFallbackValue) {
303
319
  return false;
304
320
  }
305
321
  }
306
- if ((!load || resolvePolicy !== "eager") && dataConf.value !== undefined) {
322
+ if ((!useResolve || resolvePolicy !== "eager") && dataConf.value !== undefined) {
307
323
  // If the context has no resolve, just use its `value`.
308
324
  // Or if the resolve is ignored or lazy, use its `value` as a fallback.
309
325
  value = yield asyncComputeRealValue(dataConf.value, runtimeContext);
@@ -317,6 +333,7 @@ export class DataStore {
317
333
  value,
318
334
  // This is required for tracking context, even if no `onChange` is specified.
319
335
  eventTarget: new EventTarget(),
336
+ useResolve,
320
337
  load,
321
338
  loaded: resolvePolicy === "eager",
322
339
  loading,
@@ -339,11 +356,12 @@ export class DataStore {
339
356
  newData.eventTarget.addEventListener(_this3.changeEventType, listenerFactory(dataConf.onChange, runtimeContext));
340
357
  }
341
358
  if (dataConf.track) {
342
- var deps = strictCollectMemberUsage(load ? dataConf.resolve : dataConf.value, _this3.type);
359
+ var deps = strictCollectMemberUsage(trackConditionalResolve ? [dataConf.resolve, dataConf.value] : load ? dataConf.resolve : dataConf.value, _this3.type);
343
360
  !load && (newData.deps = [...deps]);
344
361
  for (var dep of deps) {
345
362
  _this3.onChange(dep, _this3.batchAddListener(() => {
346
- if (load) {
363
+ newData.useResolve = trackConditionalResolve ? checkIf(dataConf.resolve, runtimeContext) : !!load;
364
+ if (newData.useResolve) {
347
365
  _this3.updateValue(dataConf.name, {
348
366
  cache: "default"
349
367
  }, "refresh");
@@ -1 +1 @@
1
- {"version":3,"file":"DataStore.js","names":["hasOwnProperty","isObject","strictCollectMemberUsage","EventTarget","eventCallbackFactory","listenerFactory","asyncCheckIf","asyncComputeRealValue","computeRealValue","resolveData","resolveDataStore","handleHttpError","computePropertyValue","_internalApiGetRenderId","callRealTimeDataInspectHooks","realTimeDataInspectRoot","supportContextResolveTriggerBrickLifeCycle","DataStore","constructor","type","hostBrick","rendererContext","stateStoreId","_defineProperty","Map","WeakMap","changeEventType","getAllValues","Object","fromEntries","data","entries","map","_ref","name","value","getValue","_this$data$get","get","notifyRealTimeDataChange","tplStateStoreId","changeType","detail","getAffectListByContext","affectNames","forEach","key","deps","isInDeps","some","item","includes","push","shift","Set","updateValues","values","method","argsFactory","batchUpdate","batchUpdateContextsNames","length","Error","updateContexts","affectContexts","affectDepsContextNames","arg","updateContextItem","updateValue","filter","affectContextItem","triggerEvent","contexts","_context$eventTarget","context","eventTarget","dispatchEvent","CustomEvent","callback","callbackRuntimeContext","concat","load","promise","loaded","Promise","resolve","loading","shouldDismiss","error","_this$rendererContext","renderId","_objectSpread","cache","then","val","err","callbackFactory","assign","console","warn","define","dataConfs","runtimeContext","asyncHostPropertyEntries","routePath","Array","isArray","pending","dataConf","pendingStack","onChange","dataName","listener","_this$data$get2","addEventListener","waitFor","dataNames","_this","_asyncToGenerator","_loop","pendingContexts","all","ctx","p","waitForAll","_this2","catch","pendingResult","mountAsyncData","route","_this$routeMap$get","async","routeMap","has","asyncMounted","_this3","expose","resolvePolicy","undefined","resolveConf","transform","_ref2","options","_this3$rendererContex","_x","apply","arguments","lazy","newData","trigger","_this3$rendererContex2","registerArbitraryLifeCycle","track","dep","batchAddListener","e","set","names","add","disposeDataInRoutes","routes","delete","contextConf","event"],"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\";\nimport { _internalApiGetRenderId } from \"../Runtime.js\";\nimport {\n callRealTimeDataInspectHooks,\n realTimeDataInspectRoot,\n} from \"./realTimeDataInspect.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 private readonly stateStoreId?: string;\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 stateStoreId?: string\n ) {\n this.type = type;\n this.changeEventType =\n this.type === \"FORM_STATE\"\n ? \"formstate.change\"\n : this.type === \"STATE\"\n ? \"state.change\"\n : \"context.change\";\n this.hostBrick = hostBrick;\n this.rendererContext = rendererContext;\n this.stateStoreId = stateStoreId;\n }\n\n getAllValues(): Record<string, unknown> {\n return Object.fromEntries(\n [...this.data.entries()].map(([name, { value }]) => [name, value])\n );\n }\n\n getValue(name: string): unknown {\n return this.data.get(name)?.value;\n }\n\n private notifyRealTimeDataChange(name: string, value: unknown) {\n if (realTimeDataInspectRoot) {\n const { tplStateStoreId } = realTimeDataInspectRoot;\n if (\n tplStateStoreId\n ? this.type === \"STATE\" && this.stateStoreId === tplStateStoreId\n : this.type === \"CTX\"\n ) {\n callRealTimeDataInspectHooks({\n changeType: \"update\",\n tplStateStoreId,\n detail: {\n name,\n value,\n },\n });\n }\n }\n }\n\n private getAffectListByContext(name: string): string[] {\n const affectNames = [name];\n this.data.forEach((value, key) => {\n if (value.deps) {\n const isInDeps = value.deps.some((item) => affectNames.includes(item));\n isInDeps &&\n affectNames.push(key) &&\n affectNames.push(...this.getAffectListByContext(key));\n }\n });\n affectNames.shift();\n return [...new Set(affectNames)];\n }\n\n updateValues(\n values: BatchUpdateContextItem[],\n method: \"assign\" | \"replace\",\n argsFactory: (arg: unknown[]) => BatchUpdateContextItem\n ): void {\n this.batchUpdate = true;\n this.batchUpdateContextsNames = values.map((item) => item.name);\n if (\n [...new Set(this.batchUpdateContextsNames)].length !==\n this.batchUpdateContextsNames.length\n ) {\n throw new Error(`Batch update not allow to update same item`);\n }\n\n const updateContexts: Record<string, DataStoreItem> = {};\n const affectContexts: Record<string, DataStoreItem> = {};\n const affectDepsContextNames: string[] = [];\n\n values.forEach((arg) => {\n const { name, value } = argsFactory([arg]);\n const updateContextItem = this.data.get(name);\n affectDepsContextNames.push(...this.getAffectListByContext(name));\n updateContextItem && (updateContexts[name] = updateContextItem);\n this.updateValue(name as string, value, method);\n });\n\n affectDepsContextNames\n .filter((item) => !updateContexts[item])\n .forEach((name) => {\n const affectContextItem = this.data.get(name);\n affectContextItem && (affectContexts[name] = affectContextItem);\n });\n\n const triggerEvent = (contexts: Record<string, DataStoreItem>): void => {\n for (const key in contexts) {\n const context = contexts[key];\n context.eventTarget?.dispatchEvent(\n new CustomEvent(this.changeEventType, {\n detail: context.value,\n })\n );\n }\n };\n\n triggerEvent(updateContexts);\n triggerEvent(affectContexts);\n\n this.batchUpdate = false;\n\n return;\n }\n\n updateValue(\n name: string,\n value: unknown,\n method: \"assign\" | \"replace\" | \"refresh\" | \"load\",\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 const shouldDismiss = (error: unknown) => {\n // If render twice immediately, flow API contracts maybe cleared before\n // the second rendering, while the page load handlers of the first\n // rendering can't be cancelled, which throws `FlowApiNotFoundError`.\n // So we ignore error reporting for this case.\n let renderId: string | undefined;\n return (\n (error as Error)?.name === \"FlowApiNotFoundError\" &&\n !!(renderId = this.rendererContext?.renderId) &&\n renderId !== _internalApiGetRenderId()\n );\n };\n\n if (!promise) {\n promise = item.loading = item.load({\n cache: method === \"load\" ? \"default\" : \"reload\",\n ...(value as ResolveOptions),\n });\n // Do not use the chained promise, since the callbacks need the original promise.\n promise.then(\n (val) => {\n 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 (!shouldDismiss(err) && !callback?.error) {\n handleHttpError(err);\n }\n }\n );\n }\n\n if (callback) {\n const callbackFactory = eventCallbackFactory(\n callback,\n callbackRuntimeContext!\n );\n\n promise.then(\n (val) => {\n callbackFactory(\"success\")({ value: val });\n callbackFactory(\"finally\")();\n },\n (err) => {\n if (!shouldDismiss(err) && callback.error) {\n callbackFactory(\"error\")(err);\n }\n callbackFactory(\"finally\")();\n }\n );\n }\n\n return;\n }\n\n if (method === \"replace\") {\n item.value = value;\n } else {\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, {\n ...options,\n renderId: this.rendererContext?.renderId,\n })) 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 if (this.data.has(dataConf.name)) {\n throw new Error(\n `${this.type} '${dataConf.name}' has already been declared`\n );\n }\n\n const newData: DataStoreItem = {\n name: dataConf.name,\n value,\n // This is required for tracking context, even if no `onChange` is specified.\n eventTarget: new EventTarget(),\n 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 newData.eventTarget.addEventListener(this.changeEventType, (e) => {\n this.notifyRealTimeDataChange(dataConf.name, (e as CustomEvent).detail);\n });\n\n this.data.set(dataConf.name, newData);\n\n if (Array.isArray(routePath)) {\n for (const route of routePath) {\n const names = this.routeMap.get(route);\n if (names) {\n names.add(dataConf.name);\n } else {\n this.routeMap.set(route, new Set([dataConf.name]));\n }\n }\n }\n\n return true;\n }\n\n 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":"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"}
1
+ {"version":3,"file":"DataStore.js","names":["hasOwnProperty","isObject","strictCollectMemberUsage","EventTarget","eventCallbackFactory","listenerFactory","asyncCheckIf","checkIf","asyncComputeRealValue","computeRealValue","resolveData","resolveDataStore","handleHttpError","computePropertyValue","_internalApiGetRenderId","callRealTimeDataInspectHooks","realTimeDataInspectRoot","supportContextResolveTriggerBrickLifeCycle","DataStore","constructor","type","hostBrick","rendererContext","stateStoreId","_defineProperty","Map","WeakMap","changeEventType","getAllValues","Object","fromEntries","data","entries","map","_ref","name","value","getValue","_this$data$get","get","notifyRealTimeDataChange","tplStateStoreId","changeType","detail","getAffectListByContext","affectNames","forEach","key","deps","isInDeps","some","item","includes","push","shift","Set","updateValues","values","method","argsFactory","batchUpdate","batchUpdateContextsNames","length","Error","updateContexts","affectContexts","affectDepsContextNames","arg","updateContextItem","updateValue","filter","affectContextItem","triggerEvent","contexts","_context$eventTarget","context","eventTarget","dispatchEvent","CustomEvent","callback","callbackRuntimeContext","concat","useResolve","promise","loaded","Promise","resolve","loading","shouldDismiss","error","_this$rendererContext","renderId","load","_objectSpread","cache","then","val","finishLoad","err","callbackFactory","assign","console","warn","define","dataConfs","runtimeContext","asyncHostPropertyEntries","routePath","Array","isArray","pending","dataConf","pendingStack","onChange","dataName","listener","_this$data$get2","addEventListener","waitFor","dataNames","_this","_asyncToGenerator","_loop","pendingContexts","all","ctx","p","waitForAll","_this2","catch","pendingResult","mountAsyncData","route","_this$routeMap$get","async","routeMap","has","asyncMounted","_this3","expose","trackConditionalResolve","resolvePolicy","undefined","hasFallbackValue","track","if","size","resolveConf","transform","_ref2","options","_this3$rendererContex","_x","apply","arguments","lazy","newData","trigger","_this3$rendererContex2","registerArbitraryLifeCycle","dep","batchAddListener","e","set","names","add","disposeDataInRoutes","routes","delete","contextConf","event"],"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, checkIf } from \"../compute/checkIf.js\";\nimport {\n asyncComputeRealValue,\n computeRealValue,\n} from \"../compute/computeRealValue.js\";\nimport { ResolveOptions, resolveData } from \"./resolveData.js\";\nimport { resolveDataStore } from \"./resolveDataStore.js\";\nimport type {\n AsyncPropertyEntry,\n RuntimeBrick,\n RuntimeContext,\n} from \"../interfaces.js\";\nimport { handleHttpError } from \"../../handleHttpError.js\";\nimport type { RendererContext } from \"../RendererContext.js\";\nimport { computePropertyValue } from \"../compute/computeRealProperties.js\";\nimport { _internalApiGetRenderId } from \"../Runtime.js\";\nimport {\n callRealTimeDataInspectHooks,\n realTimeDataInspectRoot,\n} from \"./realTimeDataInspect.js\";\n\nconst supportContextResolveTriggerBrickLifeCycle = [\n \"onBeforePageLoad\",\n \"onPageLoad\",\n \"onBeforePageLeave\",\n \"onPageLeave\",\n \"onAnchorLoad\",\n \"onAnchorUnload\",\n] as ContextResolveTriggerBrickLifeCycle[];\n\nexport type DataStoreType = \"CTX\" | \"STATE\" | \"FORM_STATE\";\n\nexport interface DataStoreItem {\n name: string;\n value: unknown;\n eventTarget: EventTarget;\n useResolve?: boolean;\n loaded?: boolean;\n loading?: Promise<unknown>;\n load?: (options?: ResolveOptions) => Promise<unknown>;\n async?: boolean;\n asyncMounted?: boolean;\n deps: string[];\n}\n\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 private readonly stateStoreId?: string;\n private batchUpdate = false;\n private batchUpdateContextsNames: string[] = [];\n private readonly rendererContext?: RendererContext;\n private routeMap = new WeakMap<RouteConf, Set<string>>();\n\n // 把 `rendererContext` 放在参数列表的最后,并作为可选,以减少测试文件的调整\n constructor(\n type: T,\n hostBrick?: RuntimeBrick,\n rendererContext?: RendererContext,\n stateStoreId?: string\n ) {\n this.type = type;\n this.changeEventType =\n this.type === \"FORM_STATE\"\n ? \"formstate.change\"\n : this.type === \"STATE\"\n ? \"state.change\"\n : \"context.change\";\n this.hostBrick = hostBrick;\n this.rendererContext = rendererContext;\n this.stateStoreId = stateStoreId;\n }\n\n getAllValues(): Record<string, unknown> {\n return Object.fromEntries(\n [...this.data.entries()].map(([name, { value }]) => [name, value])\n );\n }\n\n getValue(name: string): unknown {\n return this.data.get(name)?.value;\n }\n\n private notifyRealTimeDataChange(name: string, value: unknown) {\n if (realTimeDataInspectRoot) {\n const { tplStateStoreId } = realTimeDataInspectRoot;\n if (\n tplStateStoreId\n ? this.type === \"STATE\" && this.stateStoreId === tplStateStoreId\n : this.type === \"CTX\"\n ) {\n callRealTimeDataInspectHooks({\n changeType: \"update\",\n tplStateStoreId,\n detail: {\n name,\n value,\n },\n });\n }\n }\n }\n\n private getAffectListByContext(name: string): string[] {\n const affectNames = [name];\n this.data.forEach((value, key) => {\n if (value.deps) {\n const isInDeps = value.deps.some((item) => affectNames.includes(item));\n isInDeps &&\n affectNames.push(key) &&\n affectNames.push(...this.getAffectListByContext(key));\n }\n });\n affectNames.shift();\n return [...new Set(affectNames)];\n }\n\n updateValues(\n values: BatchUpdateContextItem[],\n method: \"assign\" | \"replace\",\n argsFactory: (arg: unknown[]) => BatchUpdateContextItem\n ): void {\n this.batchUpdate = true;\n this.batchUpdateContextsNames = values.map((item) => item.name);\n if (\n [...new Set(this.batchUpdateContextsNames)].length !==\n this.batchUpdateContextsNames.length\n ) {\n throw new Error(`Batch update not allow to update same item`);\n }\n\n const updateContexts: Record<string, DataStoreItem> = {};\n const affectContexts: Record<string, DataStoreItem> = {};\n const affectDepsContextNames: string[] = [];\n\n values.forEach((arg) => {\n const { name, value } = argsFactory([arg]);\n const updateContextItem = this.data.get(name);\n affectDepsContextNames.push(...this.getAffectListByContext(name));\n updateContextItem && (updateContexts[name] = updateContextItem);\n this.updateValue(name as string, value, method);\n });\n\n affectDepsContextNames\n .filter((item) => !updateContexts[item])\n .forEach((name) => {\n const affectContextItem = this.data.get(name);\n affectContextItem && (affectContexts[name] = affectContextItem);\n });\n\n const triggerEvent = (contexts: Record<string, DataStoreItem>): void => {\n for (const key in contexts) {\n const context = contexts[key];\n context.eventTarget?.dispatchEvent(\n new CustomEvent(this.changeEventType, {\n detail: context.value,\n })\n );\n }\n };\n\n triggerEvent(updateContexts);\n triggerEvent(affectContexts);\n\n this.batchUpdate = false;\n\n return;\n }\n\n updateValue(\n name: string,\n value: unknown,\n method: \"assign\" | \"replace\" | \"refresh\" | \"load\",\n callback?: BrickEventHandlerCallback,\n callbackRuntimeContext?: RuntimeContext\n ): void {\n const item = this.data.get(name);\n if (!item) {\n throw new Error(`${this.type} '${name}' is not defined`);\n }\n\n if (method === \"refresh\" || method === \"load\") {\n if (!item.useResolve) {\n throw new Error(\n `You can not ${method} \"${this.type}.${name}\" which is not using resolve`\n );\n }\n\n let promise: Promise<unknown> | undefined;\n if (method === \"load\") {\n // Try to reuse previous request when calling `load`.\n if (item.loaded) {\n promise = Promise.resolve(item.value);\n } else if (item.loading) {\n promise = item.loading;\n }\n }\n\n const shouldDismiss = (error: unknown) => {\n // If render twice immediately, flow API contracts maybe cleared before\n // the second rendering, while the page load handlers of the first\n // rendering can't be cancelled, which throws `FlowApiNotFoundError`.\n // So we ignore error reporting for this case.\n let renderId: string | undefined;\n return (\n (error as Error)?.name === \"FlowApiNotFoundError\" &&\n !!(renderId = this.rendererContext?.renderId) &&\n renderId !== _internalApiGetRenderId()\n );\n };\n\n if (!promise) {\n promise = item.loading = item.load!({\n cache: method === \"load\" ? \"default\" : \"reload\",\n ...(value as ResolveOptions),\n });\n // Do not use the chained promise, since the callbacks need the original promise.\n promise.then(\n (val) => {\n this.finishLoad(item, val);\n },\n (err) => {\n // Let users override error handling.\n if (item.useResolve && !shouldDismiss(err) && !callback?.error) {\n handleHttpError(err);\n }\n }\n );\n }\n\n if (callback) {\n const callbackFactory = eventCallbackFactory(\n callback,\n callbackRuntimeContext!\n );\n\n promise.then(\n (val) => {\n callbackFactory(\"success\")({ value: val });\n callbackFactory(\"finally\")();\n },\n (err) => {\n if (!shouldDismiss(err) && callback.error) {\n callbackFactory(\"error\")(err);\n }\n callbackFactory(\"finally\")();\n }\n );\n }\n\n return;\n }\n\n if (method === \"replace\") {\n item.value = value;\n } else {\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 private finishLoad(item: DataStoreItem, value: unknown) {\n if (!item.useResolve) {\n // This happens when a tracked conditional resolve switches from\n // resolve to fallback after an dep update triggered refresh but\n // before it's been resolved.\n return;\n }\n item.loaded = true;\n item.value = value;\n item.eventTarget.dispatchEvent(\n new CustomEvent(this.changeEventType, {\n detail: value,\n })\n );\n }\n\n define(\n dataConfs: ContextConf[] | undefined,\n runtimeContext: RuntimeContext,\n asyncHostPropertyEntries?: AsyncPropertyEntry[],\n routePath?: RouteConf[]\n ): void {\n if (Array.isArray(dataConfs) && dataConfs.length > 0) {\n const pending = resolveDataStore(\n dataConfs,\n (dataConf: ContextConf) =>\n this.resolve(\n dataConf,\n runtimeContext,\n asyncHostPropertyEntries,\n routePath\n ),\n this.type\n );\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 this.finishLoad(item, value);\n });\n }\n });\n }\n\n private async resolve(\n dataConf: ContextConf,\n runtimeContext: RuntimeContext,\n asyncHostPropertyEntries?: AsyncPropertyEntry[],\n routePath?: RouteConf[]\n ): Promise<boolean> {\n if (!(await asyncCheckIf(dataConf, runtimeContext))) {\n return false;\n }\n let value: unknown;\n if (\n asyncHostPropertyEntries &&\n (this.type === \"STATE\" ? dataConf.expose : this.type === \"FORM_STATE\")\n ) {\n value = await computePropertyValue(\n asyncHostPropertyEntries,\n dataConf.name\n );\n }\n let load: DataStoreItem[\"load\"];\n let loading: Promise<unknown> | undefined;\n let useResolve: boolean | undefined;\n let trackConditionalResolve: boolean | undefined;\n let resolvePolicy: \"eager\" | \"lazy\" | \"async\" | undefined;\n if (value === undefined) {\n if (dataConf.resolve) {\n const hasFallbackValue = hasOwnProperty(dataConf, \"value\");\n // Track conditional resolve only if all matches:\n // - Track enabled\n // - Has fallback value\n // - Referencing other data in `resolve.if`\n trackConditionalResolve =\n dataConf.track &&\n hasFallbackValue &&\n hasOwnProperty(dataConf.resolve, \"if\") &&\n strictCollectMemberUsage(dataConf.resolve.if, this.type).size > 0;\n const resolveConf = {\n transform: \"value\",\n ...dataConf.resolve,\n };\n useResolve = await asyncCheckIf(dataConf.resolve, runtimeContext);\n if (useResolve || trackConditionalResolve) {\n load = async (options) =>\n (\n (await resolveData(resolveConf, runtimeContext, {\n ...options,\n renderId: this.rendererContext?.renderId,\n })) as {\n value: unknown;\n }\n ).value;\n }\n if (useResolve) {\n // `async` take precedence over `lazy`\n resolvePolicy = dataConf.resolve.async\n ? \"async\"\n : dataConf.resolve.lazy\n ? \"lazy\"\n : \"eager\";\n if (resolvePolicy === \"eager\") {\n value = await load!();\n } else if (resolvePolicy === \"async\") {\n loading = load!();\n }\n } else if (!hasFallbackValue) {\n return false;\n }\n }\n if (\n (!useResolve || resolvePolicy !== \"eager\") &&\n dataConf.value !== undefined\n ) {\n // If the context has no resolve, just use its `value`.\n // Or if the resolve is ignored or lazy, use its `value` as a fallback.\n value = await asyncComputeRealValue(dataConf.value, runtimeContext);\n }\n }\n\n if (this.data.has(dataConf.name)) {\n throw new Error(\n `${this.type} '${dataConf.name}' has already been declared`\n );\n }\n\n const newData: DataStoreItem = {\n name: dataConf.name,\n value,\n // This is required for tracking context, even if no `onChange` is specified.\n eventTarget: new EventTarget(),\n useResolve,\n load,\n loaded: resolvePolicy === \"eager\",\n loading,\n async: resolvePolicy === \"async\",\n deps: [],\n };\n\n if (resolvePolicy === \"lazy\") {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const { trigger } = dataConf.resolve!;\n if (\n trigger &&\n supportContextResolveTriggerBrickLifeCycle.includes(trigger)\n ) {\n this.rendererContext?.registerArbitraryLifeCycle(trigger, () => {\n this.updateValue(dataConf.name, undefined, \"load\");\n });\n }\n }\n\n if (dataConf.onChange) {\n newData.eventTarget.addEventListener(\n this.changeEventType,\n listenerFactory(dataConf.onChange, runtimeContext)\n );\n }\n\n if (dataConf.track) {\n const deps = strictCollectMemberUsage(\n trackConditionalResolve\n ? [dataConf.resolve, dataConf.value]\n : load\n ? dataConf.resolve\n : dataConf.value,\n this.type\n );\n !load && (newData.deps = [...deps]);\n for (const dep of deps) {\n this.onChange(\n dep,\n this.batchAddListener(() => {\n newData.useResolve = trackConditionalResolve\n ? checkIf(dataConf.resolve!, runtimeContext)\n : !!load;\n if (newData.useResolve) {\n this.updateValue(dataConf.name, { cache: \"default\" }, \"refresh\");\n } else {\n this.updateValue(\n dataConf.name,\n computeRealValue(dataConf.value, runtimeContext),\n \"replace\"\n );\n }\n }, dataConf)\n );\n }\n }\n\n newData.eventTarget.addEventListener(this.changeEventType, (e) => {\n this.notifyRealTimeDataChange(dataConf.name, (e as CustomEvent).detail);\n });\n\n this.data.set(dataConf.name, newData);\n\n if (Array.isArray(routePath)) {\n for (const route of routePath) {\n const names = this.routeMap.get(route);\n if (names) {\n names.add(dataConf.name);\n } else {\n this.routeMap.set(route, new Set([dataConf.name]));\n }\n }\n }\n\n return true;\n }\n\n 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":"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"}
@@ -9,6 +9,7 @@ export interface DataStoreItem {
9
9
  name: string;
10
10
  value: unknown;
11
11
  eventTarget: EventTarget;
12
+ useResolve?: boolean;
12
13
  loaded?: boolean;
13
14
  loading?: Promise<unknown>;
14
15
  load?: (options?: ResolveOptions) => Promise<unknown>;
@@ -23,8 +24,8 @@ export declare class DataStore<T extends DataStoreType = "CTX"> {
23
24
  private readonly pendingStack;
24
25
  readonly hostBrick?: RuntimeBrick;
25
26
  private readonly stateStoreId?;
26
- batchUpdate: boolean;
27
- batchUpdateContextsNames: string[];
27
+ private batchUpdate;
28
+ private batchUpdateContextsNames;
28
29
  private readonly rendererContext?;
29
30
  private routeMap;
30
31
  constructor(type: T, hostBrick?: RuntimeBrick, rendererContext?: RendererContext, stateStoreId?: string);
@@ -34,6 +35,7 @@ export declare class DataStore<T extends DataStoreType = "CTX"> {
34
35
  private getAffectListByContext;
35
36
  updateValues(values: BatchUpdateContextItem[], method: "assign" | "replace", argsFactory: (arg: unknown[]) => BatchUpdateContextItem): void;
36
37
  updateValue(name: string, value: unknown, method: "assign" | "replace" | "refresh" | "load", callback?: BrickEventHandlerCallback, callbackRuntimeContext?: RuntimeContext): void;
38
+ private finishLoad;
37
39
  define(dataConfs: ContextConf[] | undefined, runtimeContext: RuntimeContext, asyncHostPropertyEntries?: AsyncPropertyEntry[], routePath?: RouteConf[]): void;
38
40
  onChange(dataName: string, listener: EventListener): void;
39
41
  waitFor(dataNames: string[] | Set<string>): Promise<void>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@next-core/runtime",
3
- "version": "1.26.3",
3
+ "version": "1.27.0",
4
4
  "homepage": "https://github.com/easyops-cn/next-core/tree/v3/packages/runtime",
5
5
  "license": "GPL-3.0",
6
6
  "repository": {
@@ -66,5 +66,5 @@
66
66
  "@next-core/build-next-libs": "^1.0.9",
67
67
  "@next-core/test-next": "^1.0.12"
68
68
  },
69
- "gitHead": "c2280da32c75a6600e664fd6190e8f80bc9c51b4"
69
+ "gitHead": "955c6b985d809fb49b6c69c21e9d4c6fa838b31a"
70
70
  }