@next-core/runtime 1.26.2 → 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.
|
|
122
|
-
throw new Error(`You can not ${method} "${this.type}.${name}" which
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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 (!
|
|
307
|
+
} else if (!hasFallbackValue) {
|
|
292
308
|
return false;
|
|
293
309
|
}
|
|
294
310
|
}
|
|
295
|
-
if ((!
|
|
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
|
-
|
|
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":"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"}
|
|
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.
|
|
120
|
-
throw new Error("You can not ".concat(method, " \"").concat(this.type, ".").concat(name, "\" which
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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 (!
|
|
318
|
+
} else if (!hasFallbackValue) {
|
|
303
319
|
return false;
|
|
304
320
|
}
|
|
305
321
|
}
|
|
306
|
-
if ((!
|
|
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
|
-
|
|
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
|
|
27
|
-
batchUpdateContextsNames
|
|
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.
|
|
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": {
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"@next-core/http": "^1.1.6",
|
|
49
49
|
"@next-core/i18n": "^1.0.33",
|
|
50
50
|
"@next-core/inject": "^1.0.23",
|
|
51
|
-
"@next-core/loader": "^1.5.
|
|
51
|
+
"@next-core/loader": "^1.5.1",
|
|
52
52
|
"@next-core/supply": "^2.1.8",
|
|
53
53
|
"@next-core/types": "^1.7.2",
|
|
54
54
|
"@next-core/utils": "^1.6.5",
|
|
@@ -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": "
|
|
69
|
+
"gitHead": "955c6b985d809fb49b6c69c21e9d4c6fa838b31a"
|
|
70
70
|
}
|