@autostorejs/plugins 4.3.0 → 4.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/installPlugin.ts","../../../node_modules/.bun/flex-tools@1.6.6/node_modules/flex-tools/src/async/delay.ts","../../../node_modules/.bun/flex-tools@1.6.6/node_modules/flex-tools/dist/chunk-R42SWOGE.mjs","../src/utils/updateObjectVal.ts","../src/asyncpro/async.ts","../src/asyncpro/asyncComputed.ts","../src/asyncpro/index.ts"],"names":["installPlugin","plugin","globalThis","__AUTOSTORE_PLUGINS__","push","delay","ms","resolve","reject","a","__require","__name","b","c","updateObjectVal","obj","keyPath","val","parent","lastIdx","length","forEach","key","idx","isMapObj","isMap","oldVal","get","Object","assign","has","set","AsyncProComputedObject","ComputedObject","_isRunning","_defaultAbortController","_userAbortController","_firstRun","lite","async","value","running","onInitOptions","options","reentry","undefined","store","onInitial","initial","createAsyncComputedValue","attach","setTimeout","immediate","run","first","onDestroy","getAbortController","abort","loading","timeout","retry","error","progress","markRaw","args","computedObjects","id","cancel","updateComputedValue","values","batchEvent","strPath","updatedCount","keys","associated","update","state","path","batch","isBatch","ops","entries","op","type","reply","operates","emit","isDisable","enable","logger","warn","toString","hadError","info","finalComputedOptions","scope","getValueScope","context","emitStoreEvent","reason","observer","executeGetter","getValue","createComputeProgressbar","opts","max","min","num","end","abortController","AbortController","signal","aborted","setTimeoutControl","ctx","initValue","timeoutValue","countdown","Array","isArray","countdownId","tmId","hasTimeout","hasError","timeoutCallback","clearInterval","setInterval","clear","clearTimeout","retryCount","retryInterval","Number","getterArgs","onTimeout","cb","getProgressbar","bind","getSnap","extras","operate","abortSignal","hasAbort","abortHandler","addEventListener","computedResult","updateCtx","i","afterUpdated","AbortError","getter","call","raw","e","getError","message","isFunction","onError","errValue","onDoneCallback","removeEventListener","onDone","onDependsChange","params","debug","join","getValueWatchPath","spath","delimiter","getDepends","map","dep","isPathEq","asyncComputed","depends","Error","getDefaultComputedOptions","normalizeDeps","descriptorBuilder","OBSERVER_DESCRIPTOR_FLAG","OBSERVER_TYPE_FLAG","asyncpro","observers","descriptor","computedObj","sandbox"],"mappings":"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","file":"asyncpro.cjs","sourcesContent":["import type { IAutoStorePlugin } from \"autostore\";\r\n\r\nexport function installPlugin(plugin: IAutoStorePlugin) {\r\n // @ts-ignore\r\n if (!globalThis.__AUTOSTORE_PLUGINS__) {\r\n // @ts-ignore\r\n globalThis.__AUTOSTORE_PLUGINS__ = [];\r\n }\r\n globalThis.__AUTOSTORE_PLUGINS__.push(plugin);\r\n}\r\n\r\ndeclare global {\r\n // @ts-ignore\r\n var __AUTOSTORE_PLUGINS__: IAutoStorePlugin[];\r\n}\r\n","export async function delay(ms: number){\n return new Promise((resolve, reject) =>setTimeout(resolve, ms))\n}\n","/**\n* ---=== FlexTools ===---\n* https://zhangfisher.github.com/flex-tools \n*/\nvar i=Object.create;var f=Object.defineProperty;var j=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var l=Object.getPrototypeOf,m=Object.prototype.hasOwnProperty;var g=a=>{throw TypeError(a)};var o=(a=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(a,{get:(b,c)=>(typeof require<\"u\"?require:b)[c]}):a)(function(a){if(typeof require<\"u\")return require.apply(this,arguments);throw Error('Dynamic require of \"'+a+'\" is not supported')});var p=(a,b)=>()=>(b||a((b={exports:{}}).exports,b),b.exports);var n=(a,b,c,d)=>{if(b&&typeof b==\"object\"||typeof b==\"function\")for(let e of k(b))!m.call(a,e)&&e!==c&&f(a,e,{get:()=>b[e],enumerable:!(d=j(b,e))||d.enumerable});return a};var q=(a,b,c)=>(c=a!=null?i(l(a)):{},n(b||!a||!a.__esModule?f(c,\"default\",{value:a,enumerable:true}):c,a));var h=(a,b,c)=>b.has(a)||g(\"Cannot \"+c);var r=(a,b,c)=>(h(a,b,\"read from private field\"),c?c.call(a):b.get(a)),s=(a,b,c)=>b.has(a)?g(\"Cannot add the same private member more than once\"):b instanceof WeakSet?b.add(a):b.set(a,c),t=(a,b,c,d)=>(h(a,b,\"write to private field\"),d?d.call(a,c):b.set(a,c),c);export{o as a,p as b,q as c,r as d,s as e,t as f};//# sourceMappingURL=chunk-R42SWOGE.mjs.map\n//# sourceMappingURL=chunk-R42SWOGE.mjs.map","import { isMap } from \"autostore\";\r\n\r\n/**\r\n *\r\n * 用于更新对象的值\r\n * 采用Object.assign()的方式更新对象的值\r\n *\r\n *\r\n * @param obj\r\n * @param keyPath\r\n * @param val\r\n */\r\nexport function updateObjectVal(obj: any, keyPath: string[], val: object) {\r\n let parent = obj;\r\n const lastIdx = keyPath.length - 1;\r\n keyPath.forEach((key, idx) => {\r\n const isMapObj = isMap(parent);\r\n if (idx === lastIdx) {\r\n const oldVal: any = isMapObj ? parent.get(key) : parent[key];\r\n if (typeof oldVal === \"object\") {\r\n Object.assign(oldVal, val);\r\n }\r\n return;\r\n }\r\n if (isMapObj) {\r\n if (!parent.has(key)) {\r\n parent.set(key, {});\r\n }\r\n parent = parent.get(key);\r\n } else {\r\n if (!(key in parent)) {\r\n parent[key] = {};\r\n }\r\n parent = parent[key];\r\n }\r\n });\r\n}\r\n","/**\r\n *\r\n * 异步计算\r\n *\r\n */\r\nimport {\r\n isFunction,\r\n isPathEq,\r\n markRaw,\r\n getSnap,\r\n AbortError,\r\n emitStoreEvent,\r\n ASYNC_COMPUTED_VALUE,\r\n ComputedObject,\r\n getValueScope,\r\n getError,\r\n AsyncComputedValue,\r\n} from \"autostore\";\r\nimport type { Dict, RuntimeComputedOptions, StateOperate } from \"autostore\";\r\nimport { delay } from \"flex-tools/async/delay\";\r\nimport type {\r\n AsyncComputedProgressbar,\r\n AsyncProComputedGetterArgs,\r\n AsyncProRuntimeComputedOptions,\r\n} from \"./types\";\r\nimport { updateObjectVal } from \"../utils/updateObjectVal\";\r\n\r\ntype GetterRunContext = {\r\n error: any;\r\n hasError: boolean;\r\n hasTimeout: boolean;\r\n hasAbort: boolean;\r\n timeoutCallback: (() => void) | undefined;\r\n};\r\n\r\nexport class AsyncProComputedObject<Value = any, Scope = any> extends ComputedObject<\r\n AsyncComputedValue<Value>\r\n> {\r\n private _isRunning: boolean = false;\r\n private _defaultAbortController: AbortController | null = null;\r\n private _userAbortController?: AbortController;\r\n private _firstRun: boolean = false; // 是否已经第一次运行过\r\n /**\r\n * 用于标识这是一个简单计算对象\r\n *\r\n * 不同于全功能异步计算对象\r\n *\r\n */\r\n lite: boolean = false;\r\n override get async() {\r\n return true;\r\n }\r\n override get value() {\r\n return super.value as AsyncComputedValue<Value>;\r\n }\r\n override set value(value: AsyncComputedValue<Value>) {\r\n super.value = value;\r\n }\r\n get running() {\r\n return this._isRunning;\r\n }\r\n /**\r\n * 本方法用来处理配置参数\r\n * 主要\r\n * @param options\r\n */\r\n protected override onInitOptions(options: Required<RuntimeComputedOptions>) {\r\n if (options.reentry === undefined) options.reentry = this.store.options.reentry!;\r\n }\r\n\r\n protected onInitial() {\r\n this.initial = this.createAsyncComputedValue();\r\n this.attach();\r\n // 为什么要延迟执行?\r\n // 因为onInitial函数是在第一次读取时执行的同步操作,此时的依赖项还没有收集完毕,原始的计算函数还没有初始化\r\n // 比如{ total:computed(async()=>{ return 1+2 }) },在第一次读取total时,此时的computed函数还没有初始化\r\n // 如果这时候执行run,则total的值还是一个function,而run执行时会将运行的数据更新到total.value,total.loading 等值,\r\n // 由于total还没有初始化为{loading,value,....}对象,所以会出错\r\n setTimeout(() => {\r\n if (\r\n this.options.immediate === true ||\r\n (this.options.immediate === \"auto\" && this.options.initial === undefined)\r\n ) {\r\n this.run({ first: true });\r\n }\r\n }, 0);\r\n }\r\n /**\r\n * 销毁时取消正在进行的异步计算(复用 AbortController)\r\n */\r\n protected onDestroy() {\r\n try {\r\n if (this._isRunning) this.getAbortController().abort();\r\n } catch {}\r\n }\r\n\r\n private createAsyncComputedValue() {\r\n return Object.assign({\r\n // [ASYNC_COMPUTED_VALUE]: true,\r\n loading: false,\r\n timeout: 0,\r\n retry: 0,\r\n error: null,\r\n value: this.options.initial,\r\n progress: 0,\r\n run: markRaw((args: Dict) => {\r\n return this.store.computedObjects.run(this.id, Object.assign({}, args));\r\n }),\r\n cancel: markRaw(() => {\r\n this.getAbortController().abort();\r\n }),\r\n });\r\n }\r\n\r\n /**\r\n *\r\n * 局部更新计算属性的值\r\n *\r\n */\r\n private updateComputedValue(values: Partial<AsyncComputedValue>) {\r\n const batchEvent = this.strPath;\r\n const updatedCount = Object.keys(values).length;\r\n if (this.associated) {\r\n this.store.update(\r\n (state) => {\r\n updateObjectVal(state, this.path!, values);\r\n },\r\n { batch: updatedCount > 1 ? batchEvent : false },\r\n );\r\n } else {\r\n Object.assign(this.value as object, values);\r\n const isBatch = updatedCount > 1;\r\n const ops: StateOperate[] = [];\r\n Object.entries(values).forEach(([key, value]) => {\r\n const op: StateOperate = {\r\n type: \"set\",\r\n path: [...this.path, key],\r\n value: value,\r\n parent: this.value,\r\n };\r\n if (isBatch) op.reply = true;\r\n this.store.operates.emit(`${this.strPath}.${key}`, op);\r\n ops.push(op);\r\n });\r\n if (isBatch) {\r\n this.store.operates.emit(this.strPath, {\r\n type: \"batch\",\r\n path: this.path,\r\n value: ops,\r\n });\r\n }\r\n }\r\n }\r\n /**\r\n *\r\n * 运行计算函数\r\n *\r\n */\r\n async run(options?: AsyncProRuntimeComputedOptions) {\r\n const { first } = options ?? {};\r\n\r\n // 1. 检查是否计算被禁用, 注意,仅点非初始化时才检查计算开关,因为第一次运行需要收集依赖,这样才能在后续运行时,随时启用/禁用计算属性\r\n if (this.isDisable(options?.enable)) {\r\n this.store.logger.warn(() => `Async computed <${this.toString()}> is disabled`);\r\n return;\r\n }\r\n // 先记录上一次运行是否出错,再清除错误记录\r\n // 用于在重新计算开始时清除状态中残留的旧error(ctx是本次新建的,读不到上次的错误)\r\n const hadError = this.error !== undefined;\r\n this.error = undefined;\r\n this._firstRun = true;\r\n if (!first) {\r\n this.store.logger.info(() => `Run async computed for : ${this.toString()}`);\r\n }\r\n\r\n // 2. 合成最终的配置参数\r\n const finalComputedOptions = (\r\n options ? Object.assign({ first }, this.options, options) : this.options\r\n ) as Required<AsyncProRuntimeComputedOptions>;\r\n\r\n // 3. 根据配置参数获取计算函数的上下文对象\r\n const scope = getValueScope<AsyncComputedValue<Value>, Scope>(\r\n this as any,\r\n \"sync\",\r\n this.context,\r\n finalComputedOptions,\r\n );\r\n // 4. 检查是否有重入\r\n const { reentry } = finalComputedOptions;\r\n if (this._isRunning && !reentry) {\r\n this.store.logger.warn(\r\n () => `Async computed: ${this.toString()} is running, can't reentry`,\r\n );\r\n emitStoreEvent(this.store, `observer/${this.id}/cancel`, {\r\n reason: \"reentry\",\r\n observer: this,\r\n });\r\n return;\r\n }\r\n this._isRunning = true; // 即所依赖项的值\r\n try {\r\n return await this.executeGetter(scope, finalComputedOptions, hadError);\r\n } finally {\r\n this._isRunning = false;\r\n }\r\n }\r\n getValue() {\r\n return this.value.value as any;\r\n }\r\n /**\r\n * computed(async (scope,{getProgressbar})=>{\r\n * const pbar = getProgressbar({max:100,min:0}) // 初始值\r\n * pbar.value(12) // 修改进度值\r\n * pbar.end() // 结束进度条\r\n * })\r\n *\r\n * @param init\r\n * @returns\r\n */\r\n private createComputeProgressbar(opts?: {\r\n max?: number;\r\n min?: number;\r\n value?: number;\r\n }): AsyncComputedProgressbar {\r\n const { max = 100, min = 0, value = 0 } = Object.assign({}, opts);\r\n this.updateComputedValue({ progress: value });\r\n return {\r\n value: (num: number) => {\r\n if (num > max) num = max;\r\n if (num < min) num = min;\r\n this.updateComputedValue({ progress: num });\r\n },\r\n end() {\r\n this.value(max);\r\n },\r\n };\r\n }\r\n /**\r\n *\r\n * AbortController是一个用于控制一个或多个请求的AbortSignal对象的生命周期的对象\r\n *\r\n *\r\n * - 整个异步对象只有一个默认的AbortController对象,仅当用户调用cancel方法时才会使用\r\n *\r\n * ,当用户指定了abortController选项时,会使用用户指定的AbortController对象\r\n *\r\n *\r\n *\r\n * @param options\r\n * @returns\r\n */\r\n private getAbortController(options?: Required<AsyncProRuntimeComputedOptions>) {\r\n if (options && typeof options.abortController === \"function\") {\r\n const abortController = options.abortController();\r\n if (abortController && abortController instanceof AbortController) {\r\n this._userAbortController = abortController;\r\n }\r\n }\r\n if (this._userAbortController) return this._userAbortController;\r\n if (!this._defaultAbortController) this._defaultAbortController = new AbortController();\r\n if (this._defaultAbortController.signal.aborted)\r\n this._defaultAbortController = new AbortController();\r\n return this._defaultAbortController;\r\n }\r\n\r\n /**\r\n * 处理超时\r\n * @param timeoutCallback\r\n * @param options\r\n * @returns\r\n */\r\n private setTimeoutControl(\r\n ctx: GetterRunContext,\r\n initValue: Partial<AsyncComputedValue>,\r\n options: Required<AsyncProRuntimeComputedOptions>,\r\n ) {\r\n const { timeout } = options;\r\n let [timeoutValue, countdown] = Array.isArray(timeout) ? timeout : [timeout, 0];\r\n\r\n let countdownId: any;\r\n let tmId: any;\r\n if (timeoutValue > 0) {\r\n initValue.timeout = countdown > 1 ? countdown : timeoutValue;\r\n tmId = setTimeout(() => {\r\n ctx.hasTimeout = true;\r\n ctx.hasError = true;\r\n ctx.error = \"TIMEOUT\";\r\n if (typeof ctx.timeoutCallback === \"function\") ctx.timeoutCallback();\r\n clearInterval(countdownId);\r\n this.updateComputedValue({\r\n loading: false,\r\n error: \"TIMEOUT\",\r\n timeout: 0,\r\n });\r\n }, timeoutValue);\r\n // 启用设置倒计时: 比如timeout= 6*1000, countdown= 6\r\n if (countdown > 1) {\r\n countdownId = setInterval(\r\n () => {\r\n this.updateComputedValue({\r\n timeout: countdown--,\r\n });\r\n if (countdown === 0) clearInterval(countdownId);\r\n },\r\n timeoutValue / (countdown + 1),\r\n );\r\n }\r\n }\r\n\r\n return {\r\n clear: () => {\r\n clearTimeout(tmId);\r\n clearInterval(countdownId);\r\n },\r\n enable: timeoutValue > 0,\r\n };\r\n }\r\n /**\r\n * 执行计算函数\r\n *\r\n */\r\n private async executeGetter(\r\n scope: any,\r\n options: Required<AsyncProRuntimeComputedOptions>,\r\n hadError = false,\r\n ) {\r\n const { retry } = options;\r\n const [retryCount, retryInterval] = retry\r\n ? Array.isArray(retry)\r\n ? retry\r\n : [Number(retry), 0]\r\n : [0, 0];\r\n\r\n let timeoutCallback: (() => void) | undefined; // 异步计算函数可以在超时时执行的回调函数\r\n\r\n const abortController = this.getAbortController(options);\r\n\r\n const getterArgs: Required<AsyncProComputedGetterArgs> = {\r\n onTimeout: (cb: () => void) => {\r\n timeoutCallback = cb;\r\n },\r\n getProgressbar: this.createComputeProgressbar.bind(this),\r\n getSnap: (scope: any) => getSnap(scope),\r\n cancel: abortController.abort.bind(abortController),\r\n extras: options.extras,\r\n operate: options.operate,\r\n first: options.first,\r\n abortSignal: abortController.signal,\r\n } as any;\r\n\r\n const ctx: GetterRunContext = {\r\n error: null,\r\n hasError: false,\r\n hasTimeout: false,\r\n hasAbort: false,\r\n timeoutCallback,\r\n };\r\n\r\n // 侦听中止信号,以便在中止时能停止\r\n const abortHandler = () => {\r\n ctx.hasAbort = true;\r\n };\r\n abortController.signal.addEventListener(\"abort\", abortHandler);\r\n this.error = undefined;\r\n let timeout = { clear: () => {}, enable: false };\r\n let computedResult: any;\r\n\r\n try {\r\n const updateCtx = (values: Partial<GetterRunContext>) => Object.assign(ctx, values);\r\n for (let i = 0; i < retryCount + 1; i++) {\r\n const afterUpdated: Partial<AsyncComputedValue> = {}; // 保存执行完成后需要更新的内容,以便在最后一次执行后更新状态\r\n try {\r\n // 1. 初始化数据\r\n const initValue: Partial<AsyncComputedValue> = {\r\n loading: true,\r\n };\r\n // 上一次运行出错时,在开始计算前清除状态中残留的旧error\r\n // (ctx是本次新建的读不到上次错误,hadError由run()在清除this.error前捕获)\r\n if (hadError) initValue.error = null;\r\n\r\n if (retryCount > 0) initValue.retry = i > 0 ? retryCount - i + 1 : 0;\r\n\r\n if (i > 0) {\r\n updateCtx({\r\n error: null,\r\n hasError: false,\r\n hasTimeout: false,\r\n });\r\n }\r\n\r\n timeout = this.setTimeoutControl(ctx, initValue, options);\r\n\r\n this.updateComputedValue(initValue);\r\n\r\n // 如果有中止信号,则取消计算\r\n if (ctx.hasAbort) throw new AbortError();\r\n // 执行回调\r\n emitStoreEvent(this.store, `observer/${this.id}/run`, {\r\n args: getterArgs,\r\n observer: this,\r\n scope,\r\n });\r\n // 执行计算函数\r\n computedResult = await this.getter.call(this, scope, getterArgs);\r\n if (ctx.hasAbort) throw new AbortError();\r\n if (!ctx.hasTimeout) {\r\n if (options.raw) markRaw(computedResult);\r\n afterUpdated.value = computedResult;\r\n // 计算成功时必须清除上一次的错误,否则旧的error会一直残留在状态中\r\n if (hadError) afterUpdated.error = null;\r\n if (timeout.enable) afterUpdated.timeout = 0;\r\n }\r\n } catch (e: any) {\r\n ctx.hasError = true;\r\n ctx.error = e;\r\n if (!ctx.hasTimeout) afterUpdated.error = getError(e).message;\r\n if (isFunction(options.onError)) {\r\n const errValue = options.onError(e);\r\n if (errValue !== undefined) afterUpdated.value = errValue;\r\n }\r\n } finally {\r\n timeout.clear();\r\n if (i === retryCount) {\r\n // 最后一次执行时\r\n if (ctx.hasTimeout) afterUpdated.error = ctx.error;\r\n if (retryCount > 0) afterUpdated.retry = 0;\r\n }\r\n afterUpdated.loading = false;\r\n this.updateComputedValue(afterUpdated);\r\n }\r\n // 出错时重试延迟, 最后一次不延迟\r\n if (ctx.hasError) {\r\n if (retryCount > 0 && retryInterval > 0 && i < retryCount) {\r\n await delay(retryInterval);\r\n }\r\n }\r\n }\r\n // 计算完成后触发事件\r\n if (ctx.hasAbort) {\r\n emitStoreEvent(this.store, `observer/${this.id}/cancel`, {\r\n reason: \"abort\",\r\n observer: this,\r\n });\r\n } else if (ctx.hasError || ctx.hasTimeout) {\r\n this.error = ctx.error;\r\n emitStoreEvent(this.store, `observer/${this.id}/error`, {\r\n error: ctx.error,\r\n observer: this,\r\n });\r\n } else {\r\n emitStoreEvent(this.store, `observer/${this.id}/done`, {\r\n value: computedResult,\r\n observer: this,\r\n });\r\n }\r\n this.onDoneCallback(\r\n options,\r\n ctx.error,\r\n ctx.hasAbort,\r\n ctx.hasTimeout,\r\n scope,\r\n computedResult,\r\n );\r\n } finally {\r\n // 清理 abort 事件监听器,防止内存泄漏\r\n abortController.signal.removeEventListener(\"abort\", abortHandler);\r\n }\r\n }\r\n\r\n /**\r\n * 当计算属性操作完成时的回调函数\r\n *\r\n * 此函数负责在计算属性操作完成后,根据操作的执行状态调用用户定义的回调函数\r\n * 它会传递操作的结果、错误状态、是否中止以及是否超时等信息给回调函数\r\n *\r\n * @param options - 计算属性的运行时选项,被强制转换为Required类型,确保所有选项都是必需的\r\n * @param error - 如果操作过程中发生错误,该错误对象将被传递\r\n * @param abort - 一个布尔值,表示操作是否被中止\r\n * @param timeout - 一个布尔值,表示操作是否因超时而结束\r\n * @param scope - 操作执行的上下文或范围\r\n * @param value - 操作的结果,如果操作成功完成\r\n */\r\n private onDoneCallback(\r\n options: Required<RuntimeComputedOptions>,\r\n error: Error,\r\n abort: boolean,\r\n timeout: boolean,\r\n scope: any,\r\n value: any,\r\n ) {\r\n if (typeof options.onDone !== \"function\") return;\r\n options.onDone.call(this, {\r\n id: this.id,\r\n path: this.path,\r\n value,\r\n error,\r\n abort,\r\n timeout,\r\n scope,\r\n });\r\n }\r\n protected onDependsChange(params: StateOperate) {\r\n this.store.logger.debug(\r\n () =>\r\n `AsyncComputed<${this.id}> is running by depends ${params.type}/${params.path.join(\r\n \".\",\r\n )} operate `,\r\n );\r\n this.run({\r\n operate: params,\r\n first: !this._firstRun,\r\n });\r\n }\r\n /**\r\n *\r\n * 由于异步计算是一个对象,所以我们需要侦听的是对象的变化,而不仅是对象的值\r\n *\r\n */\r\n protected getValueWatchPath() {\r\n const spath = this.path!.join(this.store.options.delimiter);\r\n return [`${spath}.*`, spath];\r\n }\r\n /**\r\n * 由于所有异步计算属性均会被转换为一个AsyncComputedValue<{value,timeout,....}>的形式\r\n * 这样,当我们在指定一个依赖是异步属性时,就需要指定为xxxx.value才可以个侦听到变化\r\n *\r\n * @example\r\n * const store = new AutoStore({\r\n * a0: 1,\r\n * a1: computed(async (scope:any)=>{\r\n * return scope.a0 + 1\r\n * },[\"a0\"],{initial:2}),\r\n * a2: computed(async (scope:any)=>{\r\n * return scope.a1.value + 1\r\n * },[\"a1.value\"],{initial:3})\r\n * });\r\n *\r\n * 以上a2依赖于a1,由于a1是一个异步对象,所以在写依赖时就必须写上[\"a1.value\"]\r\n * 这就有点反直觉了。\r\n *\r\n * 本函数在异步计算对象订阅变更事件时调用,用来返回字符串形式的依赖数组\r\n *\r\n * 本函数的功能就是对所有依赖进行判断如果其是一个异步计算依赖,则自动添加.value,这样就可以如下方式来写依赖了\r\n *\r\n * \tconst store = new AutoStore({\r\n * a0: 1,\r\n * a1: computed(async (scope:any)=>{\r\n * return scope.a0 + 1\r\n * },[\"a0\"],{initial:2}),\r\n * a2: computed(async (scope:any)=>{\r\n * return scope.a1.value + 1\r\n * },[\"a1\"],{initial:3})\r\n * });\r\n *\r\n */\r\n protected getDepends() {\r\n const depends = super.getDepends();\r\n return depends.map((dep) => {\r\n if (dep.length === 0) return dep;\r\n for (const obj of this.store.computedObjects.values()) {\r\n if (isPathEq(obj.path, dep) && obj.async) {\r\n return [`${dep.join(this.store.options.delimiter)}.value`];\r\n }\r\n }\r\n return dep;\r\n }) as unknown as string[][];\r\n }\r\n}\r\n","import {\r\n OBSERVER_DESCRIPTOR_FLAG,\r\n OBSERVER_TYPE_FLAG,\r\n normalizeDeps,\r\n AsyncComputedValue,\r\n getDefaultComputedOptions,\r\n} from \"autostore\";\r\nimport type { ComputedDepends } from \"autostore\";\r\nimport type {\r\n AsyncProComputedGetter,\r\n AsyncProComputedOptions,\r\n AsyncProComputedDescriptorBuilder,\r\n AsyncProComputedDescriptor,\r\n} from \"./types\";\r\n\r\n/**\r\n * 用来封装状态的计算函数,使用计算函数的传入的是当前对象\r\n *\r\n *\r\n * @param getter\r\n * @param depends\r\n * @param options\r\n * @returns\r\n *\r\n */\r\nexport function asyncComputed<Value = any, Scope = any>(\r\n getter: AsyncProComputedGetter<Value, Scope>,\r\n depends: ComputedDepends,\r\n options?: AsyncProComputedOptions<Value, Scope>,\r\n): AsyncProComputedDescriptorBuilder<AsyncComputedValue<Value>, Scope> {\r\n if (typeof getter !== \"function\") throw new Error(\"computed getter must be a function\");\r\n // 解析参数:同时支持同步和异步计算函数两种方式声明\r\n const opts: AsyncProComputedOptions = Object.assign({}, getDefaultComputedOptions(), options, {\r\n async: true,\r\n });\r\n opts.depends = normalizeDeps(depends);\r\n\r\n const descriptorBuilder = () => {\r\n return {\r\n type: \"asyncpro\",\r\n getter,\r\n options: opts,\r\n [OBSERVER_DESCRIPTOR_FLAG]: true,\r\n } as unknown as AsyncProComputedDescriptor<Value, Scope>;\r\n };\r\n descriptorBuilder[OBSERVER_TYPE_FLAG] = \"asyncpro\";\r\n return descriptorBuilder as unknown as AsyncProComputedDescriptorBuilder<\r\n AsyncComputedValue<Value>,\r\n Scope\r\n >;\r\n}\r\n","/**\r\n * shadow 插件\r\n *\r\n * 为 AutoStore 注入影子 store(shadowStore)能力:\r\n * - 调用 shadow(store) 后,store 获得 store.shadow(state) 方法\r\n * - shadowStore 基于原 store 派生,自身不持有业务状态,其计算属性/watch 的作用域指向原 store 的 state\r\n * - 原 store 的写操作会转发到 shadowStore,触发其计算属性重新计算\r\n * - 适用于在不污染原 store 的前提下,派生额外的计算视图(如多维聚合、派生展示字段)\r\n *\r\n * shadowStore 的 id 为 `${原store.id}_shadow`,且 options.shadow = true。\r\n * 由于 shadowStore 中的 observer 是动态创建的,其 scope 会被强制设为 ROOT\r\n * (不能是 CURRENT 或相对路径)。\r\n *\r\n * @example\r\n *\r\n * import { AutoStore, computed } from \"autostore\";\r\n * import { shadow } from \"@autostorejs/plugins\";\r\n *\r\n * const store = new AutoStore({ price: 10, count: 3 });\r\n * shadow(store); // 安装插件,挂载 store.shadow 方法\r\n *\r\n * const shadowStore = store.shadow({\r\n * total: computed((scope) => scope.price * scope.count),\r\n * });\r\n *\r\n * shadowStore.state.total; // 30\r\n * store.state.count = 4;\r\n * shadowStore.state.total; // 40\r\n */\r\n\r\nimport { AutoStore } from \"autostore\";\r\nimport type { AnyAutoStore, Dict, AnyObserverDescriptor, ObserverContext } from \"autostore\";\r\nimport { installPlugin } from \"../utils/installPlugin\";\r\nimport { AsyncProComputedObject } from \"./async\";\r\nimport { asyncComputed } from \"./asyncComputed\";\r\n\r\n/**\r\n * shadow 插件入口\r\n *\r\n * 给目标 store 挂载 shadow 方法,调用后即可通过 store.shadow(state) 创建影子 store。\r\n *\r\n * @param store 目标 AutoStore 实例\r\n * @returns 无返回值,副作用是给 store 挂载 shadow 方法\r\n */\r\nexport function asyncpro(store: AnyAutoStore) {\r\n const observers = (store.constructor as typeof AutoStore).observers;\r\n observers[\"asyncpro\"] = (\r\n store: AnyAutoStore,\r\n descriptor: AnyObserverDescriptor,\r\n context?: ObserverContext,\r\n ) => {\r\n const computedObj = new AsyncProComputedObject(store, descriptor, context);\r\n store.computedObjects.set(computedObj.id, computedObj);\r\n return computedObj;\r\n };\r\n\r\n if (!store.options.sandbox) store.options.sandbox = {};\r\n if (!store.options.sandbox.context) store.options.sandbox.context = {};\r\n // 注意:必须追加而非整体覆盖 context\r\n // 否则会丢失用户在 sandbox.context 中自定义注入的变量(如测试中的 data 等)\r\n store.options.sandbox.context.asyncComputed = asyncComputed;\r\n}\r\n\r\ninstallPlugin(asyncpro);\r\n\r\ndeclare module \"autostore\" {\r\n interface AutoStore<State extends Dict, Options = unknown> {}\r\n interface ObserverObjects {\r\n asyncpro: AsyncProComputedObject;\r\n }\r\n interface AsyncComputedObjects {\r\n asyncpro: AsyncProComputedObject;\r\n }\r\n}\r\n\r\nexport * from \"./asyncComputed\";\r\nexport * from \"./async\";\r\nexport * from \"./types\";\r\n"]}
1
+ {"version":3,"sources":["../src/utils/installPlugin.ts","../../../node_modules/.bun/flex-tools@1.6.6/node_modules/flex-tools/src/async/delay.ts","../../../node_modules/.bun/flex-tools@1.6.6/node_modules/flex-tools/dist/chunk-R42SWOGE.mjs","../src/utils/updateObjectVal.ts","../src/asyncpro/async.ts","../src/asyncpro/asyncComputed.ts","../src/asyncpro/index.ts"],"names":["installPlugin","plugin","globalThis","__AUTOSTORE_PLUGINS__","push","delay","ms","resolve","reject","a","__require","__name","b","c","updateObjectVal","obj","keyPath","val","parent","lastIdx","length","forEach","key","idx","isMapObj","isMap","oldVal","get","Object","assign","has","set","AsyncProComputedObject","ComputedObject","_isRunning","_defaultAbortController","_userAbortController","_firstRun","lite","async","value","running","onInitOptions","options","reentry","undefined","store","onInitial","initial","createAsyncComputedValue","attach","setTimeout","immediate","run","first","onDestroy","getAbortController","abort","loading","timeout","retry","error","progress","markRaw","args","computedObjects","id","cancel","updateComputedValue","values","batchEvent","strPath","updatedCount","keys","associated","update","state","path","batch","isBatch","ops","entries","op","type","reply","operates","emit","isDisable","enable","logger","warn","toString","hadError","info","finalComputedOptions","scope","getValueScope","context","emitStoreEvent","reason","observer","executeGetter","getValue","createComputeProgressbar","opts","max","min","num","end","abortController","AbortController","signal","aborted","setTimeoutControl","ctx","initValue","timeoutValue","countdown","Array","isArray","countdownId","tmId","hasTimeout","hasError","timeoutCallback","clearInterval","setInterval","clear","clearTimeout","retryCount","retryInterval","Number","getterArgs","onTimeout","cb","getProgressbar","bind","getSnap","extras","operate","abortSignal","hasAbort","abortHandler","addEventListener","computedResult","updateCtx","i","afterUpdated","AbortError","getter","call","raw","e","getError","message","isFunction","onError","errValue","onDoneCallback","removeEventListener","onDone","onDependsChange","params","debug","join","getValueWatchPath","spath","delimiter","getDepends","map","dep","isPathEq","asyncComputed","depends","Error","getDefaultComputedOptions","normalizeDeps","descriptorBuilder","OBSERVER_DESCRIPTOR_FLAG","OBSERVER_TYPE_FLAG","asyncpro","observers","descriptor","computedObj","sandbox"],"mappings":"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","file":"asyncpro.cjs","sourcesContent":["import type { IAutoStorePlugin } from \"autostore\";\n\nexport function installPlugin(plugin: IAutoStorePlugin) {\n // @ts-ignore\n if (!globalThis.__AUTOSTORE_PLUGINS__) {\n // @ts-ignore\n globalThis.__AUTOSTORE_PLUGINS__ = [];\n }\n globalThis.__AUTOSTORE_PLUGINS__.push(plugin);\n}\n\ndeclare global {\n // @ts-ignore\n var __AUTOSTORE_PLUGINS__: IAutoStorePlugin[];\n}\n","export async function delay(ms: number){\n return new Promise((resolve, reject) =>setTimeout(resolve, ms))\n}\n","/**\n* ---=== FlexTools ===---\n* https://zhangfisher.github.com/flex-tools \n*/\nvar i=Object.create;var f=Object.defineProperty;var j=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var l=Object.getPrototypeOf,m=Object.prototype.hasOwnProperty;var g=a=>{throw TypeError(a)};var o=(a=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(a,{get:(b,c)=>(typeof require<\"u\"?require:b)[c]}):a)(function(a){if(typeof require<\"u\")return require.apply(this,arguments);throw Error('Dynamic require of \"'+a+'\" is not supported')});var p=(a,b)=>()=>(b||a((b={exports:{}}).exports,b),b.exports);var n=(a,b,c,d)=>{if(b&&typeof b==\"object\"||typeof b==\"function\")for(let e of k(b))!m.call(a,e)&&e!==c&&f(a,e,{get:()=>b[e],enumerable:!(d=j(b,e))||d.enumerable});return a};var q=(a,b,c)=>(c=a!=null?i(l(a)):{},n(b||!a||!a.__esModule?f(c,\"default\",{value:a,enumerable:true}):c,a));var h=(a,b,c)=>b.has(a)||g(\"Cannot \"+c);var r=(a,b,c)=>(h(a,b,\"read from private field\"),c?c.call(a):b.get(a)),s=(a,b,c)=>b.has(a)?g(\"Cannot add the same private member more than once\"):b instanceof WeakSet?b.add(a):b.set(a,c),t=(a,b,c,d)=>(h(a,b,\"write to private field\"),d?d.call(a,c):b.set(a,c),c);export{o as a,p as b,q as c,r as d,s as e,t as f};//# sourceMappingURL=chunk-R42SWOGE.mjs.map\n//# sourceMappingURL=chunk-R42SWOGE.mjs.map","import { isMap } from \"autostore\";\n\n/**\n *\n * 用于更新对象的值\n * 采用Object.assign()的方式更新对象的值\n *\n *\n * @param obj\n * @param keyPath\n * @param val\n */\nexport function updateObjectVal(obj: any, keyPath: string[], val: object) {\n let parent = obj;\n const lastIdx = keyPath.length - 1;\n keyPath.forEach((key, idx) => {\n const isMapObj = isMap(parent);\n if (idx === lastIdx) {\n const oldVal: any = isMapObj ? parent.get(key) : parent[key];\n if (typeof oldVal === \"object\") {\n Object.assign(oldVal, val);\n }\n return;\n }\n if (isMapObj) {\n if (!parent.has(key)) {\n parent.set(key, {});\n }\n parent = parent.get(key);\n } else {\n if (!(key in parent)) {\n parent[key] = {};\n }\n parent = parent[key];\n }\n });\n}\n","/**\n *\n * 异步计算\n *\n */\nimport {\n isFunction,\n isPathEq,\n markRaw,\n getSnap,\n AbortError,\n emitStoreEvent,\n ASYNC_COMPUTED_VALUE,\n ComputedObject,\n getValueScope,\n getError,\n AsyncComputedValue,\n} from \"autostore\";\nimport type { Dict, RuntimeComputedOptions, StateOperate } from \"autostore\";\nimport { delay } from \"flex-tools/async/delay\";\nimport type {\n AsyncComputedProgressbar,\n AsyncProComputedGetterArgs,\n AsyncProRuntimeComputedOptions,\n} from \"./types\";\nimport { updateObjectVal } from \"../utils/updateObjectVal\";\n\ntype GetterRunContext = {\n error: any;\n hasError: boolean;\n hasTimeout: boolean;\n hasAbort: boolean;\n timeoutCallback: (() => void) | undefined;\n};\n\nexport class AsyncProComputedObject<Value = any, Scope = any> extends ComputedObject<\n AsyncComputedValue<Value>\n> {\n private _isRunning: boolean = false;\n private _defaultAbortController: AbortController | null = null;\n private _userAbortController?: AbortController;\n private _firstRun: boolean = false; // 是否已经第一次运行过\n /**\n * 用于标识这是一个简单计算对象\n *\n * 不同于全功能异步计算对象\n *\n */\n lite: boolean = false;\n override get async() {\n return true;\n }\n override get value() {\n return super.value as AsyncComputedValue<Value>;\n }\n override set value(value: AsyncComputedValue<Value>) {\n super.value = value;\n }\n get running() {\n return this._isRunning;\n }\n /**\n * 本方法用来处理配置参数\n * 主要\n * @param options\n */\n protected override onInitOptions(options: Required<RuntimeComputedOptions>) {\n if (options.reentry === undefined) options.reentry = this.store.options.reentry!;\n }\n\n protected onInitial() {\n this.initial = this.createAsyncComputedValue();\n this.attach();\n // 为什么要延迟执行?\n // 因为onInitial函数是在第一次读取时执行的同步操作,此时的依赖项还没有收集完毕,原始的计算函数还没有初始化\n // 比如{ total:computed(async()=>{ return 1+2 }) },在第一次读取total时,此时的computed函数还没有初始化\n // 如果这时候执行run,则total的值还是一个function,而run执行时会将运行的数据更新到total.value,total.loading 等值,\n // 由于total还没有初始化为{loading,value,....}对象,所以会出错\n setTimeout(() => {\n if (\n this.options.immediate === true ||\n (this.options.immediate === \"auto\" && this.options.initial === undefined)\n ) {\n this.run({ first: true });\n }\n }, 0);\n }\n /**\n * 销毁时取消正在进行的异步计算(复用 AbortController)\n */\n protected onDestroy() {\n try {\n if (this._isRunning) this.getAbortController().abort();\n } catch {}\n }\n\n private createAsyncComputedValue() {\n return Object.assign({\n // [ASYNC_COMPUTED_VALUE]: true,\n loading: false,\n timeout: 0,\n retry: 0,\n error: null,\n value: this.options.initial,\n progress: 0,\n run: markRaw((args: Dict) => {\n return this.store.computedObjects.run(this.id, Object.assign({}, args));\n }),\n cancel: markRaw(() => {\n this.getAbortController().abort();\n }),\n });\n }\n\n /**\n *\n * 局部更新计算属性的值\n *\n */\n private updateComputedValue(values: Partial<AsyncComputedValue>) {\n const batchEvent = this.strPath;\n const updatedCount = Object.keys(values).length;\n if (this.associated) {\n this.store.update(\n (state) => {\n updateObjectVal(state, this.path!, values);\n },\n { batch: updatedCount > 1 ? batchEvent : false },\n );\n } else {\n Object.assign(this.value as object, values);\n const isBatch = updatedCount > 1;\n const ops: StateOperate[] = [];\n Object.entries(values).forEach(([key, value]) => {\n const op: StateOperate = {\n type: \"set\",\n path: [...this.path, key],\n value: value,\n parent: this.value,\n };\n if (isBatch) op.reply = true;\n this.store.operates.emit(`${this.strPath}.${key}`, op);\n ops.push(op);\n });\n if (isBatch) {\n this.store.operates.emit(this.strPath, {\n type: \"batch\",\n path: this.path,\n value: ops,\n });\n }\n }\n }\n /**\n *\n * 运行计算函数\n *\n */\n async run(options?: AsyncProRuntimeComputedOptions) {\n const { first } = options ?? {};\n\n // 1. 检查是否计算被禁用, 注意,仅点非初始化时才检查计算开关,因为第一次运行需要收集依赖,这样才能在后续运行时,随时启用/禁用计算属性\n if (this.isDisable(options?.enable)) {\n this.store.logger.warn(() => `Async computed <${this.toString()}> is disabled`);\n return;\n }\n // 先记录上一次运行是否出错,再清除错误记录\n // 用于在重新计算开始时清除状态中残留的旧error(ctx是本次新建的,读不到上次的错误)\n const hadError = this.error !== undefined;\n this.error = undefined;\n this._firstRun = true;\n if (!first) {\n this.store.logger.info(() => `Run async computed for : ${this.toString()}`);\n }\n\n // 2. 合成最终的配置参数\n const finalComputedOptions = (\n options ? Object.assign({ first }, this.options, options) : this.options\n ) as Required<AsyncProRuntimeComputedOptions>;\n\n // 3. 根据配置参数获取计算函数的上下文对象\n const scope = getValueScope<AsyncComputedValue<Value>, Scope>(\n this as any,\n \"sync\",\n this.context,\n finalComputedOptions,\n );\n // 4. 检查是否有重入\n const { reentry } = finalComputedOptions;\n if (this._isRunning && !reentry) {\n this.store.logger.warn(\n () => `Async computed: ${this.toString()} is running, can't reentry`,\n );\n emitStoreEvent(this.store, `observer/${this.id}/cancel`, {\n reason: \"reentry\",\n observer: this,\n });\n return;\n }\n this._isRunning = true; // 即所依赖项的值\n try {\n return await this.executeGetter(scope, finalComputedOptions, hadError);\n } finally {\n this._isRunning = false;\n }\n }\n getValue() {\n return this.value.value as any;\n }\n /**\n * computed(async (scope,{getProgressbar})=>{\n * const pbar = getProgressbar({max:100,min:0}) // 初始值\n * pbar.value(12) // 修改进度值\n * pbar.end() // 结束进度条\n * })\n *\n * @param init\n * @returns\n */\n private createComputeProgressbar(opts?: {\n max?: number;\n min?: number;\n value?: number;\n }): AsyncComputedProgressbar {\n const { max = 100, min = 0, value = 0 } = Object.assign({}, opts);\n this.updateComputedValue({ progress: value });\n return {\n value: (num: number) => {\n if (num > max) num = max;\n if (num < min) num = min;\n this.updateComputedValue({ progress: num });\n },\n end() {\n this.value(max);\n },\n };\n }\n /**\n *\n * AbortController是一个用于控制一个或多个请求的AbortSignal对象的生命周期的对象\n *\n *\n * - 整个异步对象只有一个默认的AbortController对象,仅当用户调用cancel方法时才会使用\n *\n * ,当用户指定了abortController选项时,会使用用户指定的AbortController对象\n *\n *\n *\n * @param options\n * @returns\n */\n private getAbortController(options?: Required<AsyncProRuntimeComputedOptions>) {\n if (options && typeof options.abortController === \"function\") {\n const abortController = options.abortController();\n if (abortController && abortController instanceof AbortController) {\n this._userAbortController = abortController;\n }\n }\n if (this._userAbortController) return this._userAbortController;\n if (!this._defaultAbortController) this._defaultAbortController = new AbortController();\n if (this._defaultAbortController.signal.aborted)\n this._defaultAbortController = new AbortController();\n return this._defaultAbortController;\n }\n\n /**\n * 处理超时\n * @param timeoutCallback\n * @param options\n * @returns\n */\n private setTimeoutControl(\n ctx: GetterRunContext,\n initValue: Partial<AsyncComputedValue>,\n options: Required<AsyncProRuntimeComputedOptions>,\n ) {\n const { timeout } = options;\n let [timeoutValue, countdown] = Array.isArray(timeout) ? timeout : [timeout, 0];\n\n let countdownId: any;\n let tmId: any;\n if (timeoutValue > 0) {\n initValue.timeout = countdown > 1 ? countdown : timeoutValue;\n tmId = setTimeout(() => {\n ctx.hasTimeout = true;\n ctx.hasError = true;\n ctx.error = \"TIMEOUT\";\n if (typeof ctx.timeoutCallback === \"function\") ctx.timeoutCallback();\n clearInterval(countdownId);\n this.updateComputedValue({\n loading: false,\n error: \"TIMEOUT\",\n timeout: 0,\n });\n }, timeoutValue);\n // 启用设置倒计时: 比如timeout= 6*1000, countdown= 6\n if (countdown > 1) {\n countdownId = setInterval(\n () => {\n this.updateComputedValue({\n timeout: countdown--,\n });\n if (countdown === 0) clearInterval(countdownId);\n },\n timeoutValue / (countdown + 1),\n );\n }\n }\n\n return {\n clear: () => {\n clearTimeout(tmId);\n clearInterval(countdownId);\n },\n enable: timeoutValue > 0,\n };\n }\n /**\n * 执行计算函数\n *\n */\n private async executeGetter(\n scope: any,\n options: Required<AsyncProRuntimeComputedOptions>,\n hadError = false,\n ) {\n const { retry } = options;\n const [retryCount, retryInterval] = retry\n ? Array.isArray(retry)\n ? retry\n : [Number(retry), 0]\n : [0, 0];\n\n let timeoutCallback: (() => void) | undefined; // 异步计算函数可以在超时时执行的回调函数\n\n const abortController = this.getAbortController(options);\n\n const getterArgs: Required<AsyncProComputedGetterArgs> = {\n onTimeout: (cb: () => void) => {\n timeoutCallback = cb;\n },\n getProgressbar: this.createComputeProgressbar.bind(this),\n getSnap: (scope: any) => getSnap(scope),\n cancel: abortController.abort.bind(abortController),\n extras: options.extras,\n operate: options.operate,\n first: options.first,\n abortSignal: abortController.signal,\n } as any;\n\n const ctx: GetterRunContext = {\n error: null,\n hasError: false,\n hasTimeout: false,\n hasAbort: false,\n timeoutCallback,\n };\n\n // 侦听中止信号,以便在中止时能停止\n const abortHandler = () => {\n ctx.hasAbort = true;\n };\n abortController.signal.addEventListener(\"abort\", abortHandler);\n this.error = undefined;\n let timeout = { clear: () => {}, enable: false };\n let computedResult: any;\n\n try {\n const updateCtx = (values: Partial<GetterRunContext>) => Object.assign(ctx, values);\n for (let i = 0; i < retryCount + 1; i++) {\n const afterUpdated: Partial<AsyncComputedValue> = {}; // 保存执行完成后需要更新的内容,以便在最后一次执行后更新状态\n try {\n // 1. 初始化数据\n const initValue: Partial<AsyncComputedValue> = {\n loading: true,\n };\n // 上一次运行出错时,在开始计算前清除状态中残留的旧error\n // (ctx是本次新建的读不到上次错误,hadError由run()在清除this.error前捕获)\n if (hadError) initValue.error = null;\n\n if (retryCount > 0) initValue.retry = i > 0 ? retryCount - i + 1 : 0;\n\n if (i > 0) {\n updateCtx({\n error: null,\n hasError: false,\n hasTimeout: false,\n });\n }\n\n timeout = this.setTimeoutControl(ctx, initValue, options);\n\n this.updateComputedValue(initValue);\n\n // 如果有中止信号,则取消计算\n if (ctx.hasAbort) throw new AbortError();\n // 执行回调\n emitStoreEvent(this.store, `observer/${this.id}/run`, {\n args: getterArgs,\n observer: this,\n scope,\n });\n // 执行计算函数\n computedResult = await this.getter.call(this, scope, getterArgs);\n if (ctx.hasAbort) throw new AbortError();\n if (!ctx.hasTimeout) {\n if (options.raw) markRaw(computedResult);\n afterUpdated.value = computedResult;\n // 计算成功时必须清除上一次的错误,否则旧的error会一直残留在状态中\n if (hadError) afterUpdated.error = null;\n if (timeout.enable) afterUpdated.timeout = 0;\n }\n } catch (e: any) {\n ctx.hasError = true;\n ctx.error = e;\n if (!ctx.hasTimeout) afterUpdated.error = getError(e).message;\n if (isFunction(options.onError)) {\n const errValue = options.onError(e);\n if (errValue !== undefined) afterUpdated.value = errValue;\n }\n } finally {\n timeout.clear();\n if (i === retryCount) {\n // 最后一次执行时\n if (ctx.hasTimeout) afterUpdated.error = ctx.error;\n if (retryCount > 0) afterUpdated.retry = 0;\n }\n afterUpdated.loading = false;\n this.updateComputedValue(afterUpdated);\n }\n // 出错时重试延迟, 最后一次不延迟\n if (ctx.hasError) {\n if (retryCount > 0 && retryInterval > 0 && i < retryCount) {\n await delay(retryInterval);\n }\n }\n }\n // 计算完成后触发事件\n if (ctx.hasAbort) {\n emitStoreEvent(this.store, `observer/${this.id}/cancel`, {\n reason: \"abort\",\n observer: this,\n });\n } else if (ctx.hasError || ctx.hasTimeout) {\n this.error = ctx.error;\n emitStoreEvent(this.store, `observer/${this.id}/error`, {\n error: ctx.error,\n observer: this,\n });\n } else {\n emitStoreEvent(this.store, `observer/${this.id}/done`, {\n value: computedResult,\n observer: this,\n });\n }\n this.onDoneCallback(\n options,\n ctx.error,\n ctx.hasAbort,\n ctx.hasTimeout,\n scope,\n computedResult,\n );\n } finally {\n // 清理 abort 事件监听器,防止内存泄漏\n abortController.signal.removeEventListener(\"abort\", abortHandler);\n }\n }\n\n /**\n * 当计算属性操作完成时的回调函数\n *\n * 此函数负责在计算属性操作完成后,根据操作的执行状态调用用户定义的回调函数\n * 它会传递操作的结果、错误状态、是否中止以及是否超时等信息给回调函数\n *\n * @param options - 计算属性的运行时选项,被强制转换为Required类型,确保所有选项都是必需的\n * @param error - 如果操作过程中发生错误,该错误对象将被传递\n * @param abort - 一个布尔值,表示操作是否被中止\n * @param timeout - 一个布尔值,表示操作是否因超时而结束\n * @param scope - 操作执行的上下文或范围\n * @param value - 操作的结果,如果操作成功完成\n */\n private onDoneCallback(\n options: Required<RuntimeComputedOptions>,\n error: Error,\n abort: boolean,\n timeout: boolean,\n scope: any,\n value: any,\n ) {\n if (typeof options.onDone !== \"function\") return;\n options.onDone.call(this, {\n id: this.id,\n path: this.path,\n value,\n error,\n abort,\n timeout,\n scope,\n });\n }\n protected onDependsChange(params: StateOperate) {\n this.store.logger.debug(\n () =>\n `AsyncComputed<${this.id}> is running by depends ${params.type}/${params.path.join(\n \".\",\n )} operate `,\n );\n this.run({\n operate: params,\n first: !this._firstRun,\n });\n }\n /**\n *\n * 由于异步计算是一个对象,所以我们需要侦听的是对象的变化,而不仅是对象的值\n *\n */\n protected getValueWatchPath() {\n const spath = this.path!.join(this.store.options.delimiter);\n return [`${spath}.*`, spath];\n }\n /**\n * 由于所有异步计算属性均会被转换为一个AsyncComputedValue<{value,timeout,....}>的形式\n * 这样,当我们在指定一个依赖是异步属性时,就需要指定为xxxx.value才可以个侦听到变化\n *\n * @example\n * const store = new AutoStore({\n * a0: 1,\n * a1: computed(async (scope:any)=>{\n * return scope.a0 + 1\n * },[\"a0\"],{initial:2}),\n * a2: computed(async (scope:any)=>{\n * return scope.a1.value + 1\n * },[\"a1.value\"],{initial:3})\n * });\n *\n * 以上a2依赖于a1,由于a1是一个异步对象,所以在写依赖时就必须写上[\"a1.value\"]\n * 这就有点反直觉了。\n *\n * 本函数在异步计算对象订阅变更事件时调用,用来返回字符串形式的依赖数组\n *\n * 本函数的功能就是对所有依赖进行判断如果其是一个异步计算依赖,则自动添加.value,这样就可以如下方式来写依赖了\n *\n * \tconst store = new AutoStore({\n * a0: 1,\n * a1: computed(async (scope:any)=>{\n * return scope.a0 + 1\n * },[\"a0\"],{initial:2}),\n * a2: computed(async (scope:any)=>{\n * return scope.a1.value + 1\n * },[\"a1\"],{initial:3})\n * });\n *\n */\n protected getDepends() {\n const depends = super.getDepends();\n return depends.map((dep) => {\n if (dep.length === 0) return dep;\n for (const obj of this.store.computedObjects.values()) {\n if (isPathEq(obj.path, dep) && obj.async) {\n return [`${dep.join(this.store.options.delimiter)}.value`];\n }\n }\n return dep;\n }) as unknown as string[][];\n }\n}\n","import {\n OBSERVER_DESCRIPTOR_FLAG,\n OBSERVER_TYPE_FLAG,\n normalizeDeps,\n AsyncComputedValue,\n getDefaultComputedOptions,\n} from \"autostore\";\nimport type { ComputedDepends } from \"autostore\";\nimport type {\n AsyncProComputedGetter,\n AsyncProComputedOptions,\n AsyncProComputedDescriptorBuilder,\n AsyncProComputedDescriptor,\n} from \"./types\";\n\n/**\n * 用来封装状态的计算函数,使用计算函数的传入的是当前对象\n *\n *\n * @param getter\n * @param depends\n * @param options\n * @returns\n *\n */\nexport function asyncComputed<Value = any, Scope = any>(\n getter: AsyncProComputedGetter<Value, Scope>,\n depends: ComputedDepends,\n options?: AsyncProComputedOptions<Value, Scope>,\n): AsyncProComputedDescriptorBuilder<AsyncComputedValue<Value>, Scope> {\n if (typeof getter !== \"function\") throw new Error(\"computed getter must be a function\");\n // 解析参数:同时支持同步和异步计算函数两种方式声明\n const opts: AsyncProComputedOptions = Object.assign({}, getDefaultComputedOptions(), options, {\n async: true,\n });\n opts.depends = normalizeDeps(depends);\n\n const descriptorBuilder = () => {\n return {\n type: \"asyncpro\",\n getter,\n options: opts,\n [OBSERVER_DESCRIPTOR_FLAG]: true,\n } as unknown as AsyncProComputedDescriptor<Value, Scope>;\n };\n descriptorBuilder[OBSERVER_TYPE_FLAG] = \"asyncpro\";\n return descriptorBuilder as unknown as AsyncProComputedDescriptorBuilder<\n AsyncComputedValue<Value>,\n Scope\n >;\n}\n","/**\n * shadow 插件\n *\n * 为 AutoStore 注入影子 store(shadowStore)能力:\n * - 调用 shadow(store) 后,store 获得 store.shadow(state) 方法\n * - shadowStore 基于原 store 派生,自身不持有业务状态,其计算属性/watch 的作用域指向原 store 的 state\n * - 原 store 的写操作会转发到 shadowStore,触发其计算属性重新计算\n * - 适用于在不污染原 store 的前提下,派生额外的计算视图(如多维聚合、派生展示字段)\n *\n * shadowStore 的 id 为 `${原store.id}_shadow`,且 options.shadow = true。\n * 由于 shadowStore 中的 observer 是动态创建的,其 scope 会被强制设为 ROOT\n * (不能是 CURRENT 或相对路径)。\n *\n * @example\n *\n * import { AutoStore, computed } from \"autostore\";\n * import { shadow } from \"@autostorejs/plugins\";\n *\n * const store = new AutoStore({ price: 10, count: 3 });\n * shadow(store); // 安装插件,挂载 store.shadow 方法\n *\n * const shadowStore = store.shadow({\n * total: computed((scope) => scope.price * scope.count),\n * });\n *\n * shadowStore.state.total; // 30\n * store.state.count = 4;\n * shadowStore.state.total; // 40\n */\n\nimport { AutoStore } from \"autostore\";\nimport type { AnyAutoStore, Dict, AnyObserverDescriptor, ObserverContext } from \"autostore\";\nimport { installPlugin } from \"../utils/installPlugin\";\nimport { AsyncProComputedObject } from \"./async\";\nimport { asyncComputed } from \"./asyncComputed\";\n\n/**\n * shadow 插件入口\n *\n * 给目标 store 挂载 shadow 方法,调用后即可通过 store.shadow(state) 创建影子 store。\n *\n * @param store 目标 AutoStore 实例\n * @returns 无返回值,副作用是给 store 挂载 shadow 方法\n */\nexport function asyncpro(store: AnyAutoStore) {\n const observers = (store.constructor as typeof AutoStore).observers;\n observers[\"asyncpro\"] = (\n store: AnyAutoStore,\n descriptor: AnyObserverDescriptor,\n context?: ObserverContext,\n ) => {\n const computedObj = new AsyncProComputedObject(store, descriptor, context);\n store.computedObjects.set(computedObj.id, computedObj);\n return computedObj;\n };\n\n if (!store.options.sandbox) store.options.sandbox = {};\n if (!store.options.sandbox.context) store.options.sandbox.context = {};\n // 注意:必须追加而非整体覆盖 context\n // 否则会丢失用户在 sandbox.context 中自定义注入的变量(如测试中的 data 等)\n store.options.sandbox.context.asyncComputed = asyncComputed;\n}\n\ninstallPlugin(asyncpro);\n\ndeclare module \"autostore\" {\n interface AutoStore<State extends Dict, Options = unknown> {}\n interface ObserverObjects {\n asyncpro: AsyncProComputedObject;\n }\n interface AsyncComputedObjects {\n asyncpro: AsyncProComputedObject;\n }\n}\n\nexport * from \"./asyncComputed\";\nexport * from \"./async\";\nexport * from \"./types\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/installPlugin.ts","../../../node_modules/.bun/flex-tools@1.6.6/node_modules/flex-tools/src/async/delay.ts","../../../node_modules/.bun/flex-tools@1.6.6/node_modules/flex-tools/dist/chunk-R42SWOGE.mjs","../src/utils/updateObjectVal.ts","../src/asyncpro/async.ts","../src/asyncpro/asyncComputed.ts","../src/asyncpro/index.ts"],"names":["installPlugin","plugin","globalThis","__AUTOSTORE_PLUGINS__","push","delay","ms","resolve","reject","a","__require","__name","b","c","updateObjectVal","obj","keyPath","val","parent","lastIdx","length","forEach","key","idx","isMapObj","isMap","oldVal","get","Object","assign","has","set","AsyncProComputedObject","ComputedObject","_isRunning","_defaultAbortController","_userAbortController","_firstRun","lite","async","value","running","onInitOptions","options","reentry","undefined","store","onInitial","initial","createAsyncComputedValue","attach","setTimeout","immediate","run","first","onDestroy","getAbortController","abort","loading","timeout","retry","error","progress","markRaw","args","computedObjects","id","cancel","updateComputedValue","values","batchEvent","strPath","updatedCount","keys","associated","update","state","path","batch","isBatch","ops","entries","op","type","reply","operates","emit","isDisable","enable","logger","warn","toString","hadError","info","finalComputedOptions","scope","getValueScope","context","emitStoreEvent","reason","observer","executeGetter","getValue","createComputeProgressbar","opts","max","min","num","end","abortController","AbortController","signal","aborted","setTimeoutControl","ctx","initValue","timeoutValue","countdown","Array","isArray","countdownId","tmId","hasTimeout","hasError","timeoutCallback","clearInterval","setInterval","clear","clearTimeout","retryCount","retryInterval","Number","getterArgs","onTimeout","cb","getProgressbar","bind","getSnap","extras","operate","abortSignal","hasAbort","abortHandler","addEventListener","computedResult","updateCtx","i","afterUpdated","AbortError","getter","call","raw","e","getError","message","isFunction","onError","errValue","onDoneCallback","removeEventListener","onDone","onDependsChange","params","debug","join","getValueWatchPath","spath","delimiter","getDepends","map","dep","isPathEq","asyncComputed","depends","Error","getDefaultComputedOptions","normalizeDeps","descriptorBuilder","OBSERVER_DESCRIPTOR_FLAG","OBSERVER_TYPE_FLAG","asyncpro","observers","descriptor","computedObj","sandbox"],"mappings":"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","file":"asyncpro.js","sourcesContent":["import type { IAutoStorePlugin } from \"autostore\";\r\n\r\nexport function installPlugin(plugin: IAutoStorePlugin) {\r\n // @ts-ignore\r\n if (!globalThis.__AUTOSTORE_PLUGINS__) {\r\n // @ts-ignore\r\n globalThis.__AUTOSTORE_PLUGINS__ = [];\r\n }\r\n globalThis.__AUTOSTORE_PLUGINS__.push(plugin);\r\n}\r\n\r\ndeclare global {\r\n // @ts-ignore\r\n var __AUTOSTORE_PLUGINS__: IAutoStorePlugin[];\r\n}\r\n","export async function delay(ms: number){\n return new Promise((resolve, reject) =>setTimeout(resolve, ms))\n}\n","/**\n* ---=== FlexTools ===---\n* https://zhangfisher.github.com/flex-tools \n*/\nvar i=Object.create;var f=Object.defineProperty;var j=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var l=Object.getPrototypeOf,m=Object.prototype.hasOwnProperty;var g=a=>{throw TypeError(a)};var o=(a=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(a,{get:(b,c)=>(typeof require<\"u\"?require:b)[c]}):a)(function(a){if(typeof require<\"u\")return require.apply(this,arguments);throw Error('Dynamic require of \"'+a+'\" is not supported')});var p=(a,b)=>()=>(b||a((b={exports:{}}).exports,b),b.exports);var n=(a,b,c,d)=>{if(b&&typeof b==\"object\"||typeof b==\"function\")for(let e of k(b))!m.call(a,e)&&e!==c&&f(a,e,{get:()=>b[e],enumerable:!(d=j(b,e))||d.enumerable});return a};var q=(a,b,c)=>(c=a!=null?i(l(a)):{},n(b||!a||!a.__esModule?f(c,\"default\",{value:a,enumerable:true}):c,a));var h=(a,b,c)=>b.has(a)||g(\"Cannot \"+c);var r=(a,b,c)=>(h(a,b,\"read from private field\"),c?c.call(a):b.get(a)),s=(a,b,c)=>b.has(a)?g(\"Cannot add the same private member more than once\"):b instanceof WeakSet?b.add(a):b.set(a,c),t=(a,b,c,d)=>(h(a,b,\"write to private field\"),d?d.call(a,c):b.set(a,c),c);export{o as a,p as b,q as c,r as d,s as e,t as f};//# sourceMappingURL=chunk-R42SWOGE.mjs.map\n//# sourceMappingURL=chunk-R42SWOGE.mjs.map","import { isMap } from \"autostore\";\r\n\r\n/**\r\n *\r\n * 用于更新对象的值\r\n * 采用Object.assign()的方式更新对象的值\r\n *\r\n *\r\n * @param obj\r\n * @param keyPath\r\n * @param val\r\n */\r\nexport function updateObjectVal(obj: any, keyPath: string[], val: object) {\r\n let parent = obj;\r\n const lastIdx = keyPath.length - 1;\r\n keyPath.forEach((key, idx) => {\r\n const isMapObj = isMap(parent);\r\n if (idx === lastIdx) {\r\n const oldVal: any = isMapObj ? parent.get(key) : parent[key];\r\n if (typeof oldVal === \"object\") {\r\n Object.assign(oldVal, val);\r\n }\r\n return;\r\n }\r\n if (isMapObj) {\r\n if (!parent.has(key)) {\r\n parent.set(key, {});\r\n }\r\n parent = parent.get(key);\r\n } else {\r\n if (!(key in parent)) {\r\n parent[key] = {};\r\n }\r\n parent = parent[key];\r\n }\r\n });\r\n}\r\n","/**\r\n *\r\n * 异步计算\r\n *\r\n */\r\nimport {\r\n isFunction,\r\n isPathEq,\r\n markRaw,\r\n getSnap,\r\n AbortError,\r\n emitStoreEvent,\r\n ASYNC_COMPUTED_VALUE,\r\n ComputedObject,\r\n getValueScope,\r\n getError,\r\n AsyncComputedValue,\r\n} from \"autostore\";\r\nimport type { Dict, RuntimeComputedOptions, StateOperate } from \"autostore\";\r\nimport { delay } from \"flex-tools/async/delay\";\r\nimport type {\r\n AsyncComputedProgressbar,\r\n AsyncProComputedGetterArgs,\r\n AsyncProRuntimeComputedOptions,\r\n} from \"./types\";\r\nimport { updateObjectVal } from \"../utils/updateObjectVal\";\r\n\r\ntype GetterRunContext = {\r\n error: any;\r\n hasError: boolean;\r\n hasTimeout: boolean;\r\n hasAbort: boolean;\r\n timeoutCallback: (() => void) | undefined;\r\n};\r\n\r\nexport class AsyncProComputedObject<Value = any, Scope = any> extends ComputedObject<\r\n AsyncComputedValue<Value>\r\n> {\r\n private _isRunning: boolean = false;\r\n private _defaultAbortController: AbortController | null = null;\r\n private _userAbortController?: AbortController;\r\n private _firstRun: boolean = false; // 是否已经第一次运行过\r\n /**\r\n * 用于标识这是一个简单计算对象\r\n *\r\n * 不同于全功能异步计算对象\r\n *\r\n */\r\n lite: boolean = false;\r\n override get async() {\r\n return true;\r\n }\r\n override get value() {\r\n return super.value as AsyncComputedValue<Value>;\r\n }\r\n override set value(value: AsyncComputedValue<Value>) {\r\n super.value = value;\r\n }\r\n get running() {\r\n return this._isRunning;\r\n }\r\n /**\r\n * 本方法用来处理配置参数\r\n * 主要\r\n * @param options\r\n */\r\n protected override onInitOptions(options: Required<RuntimeComputedOptions>) {\r\n if (options.reentry === undefined) options.reentry = this.store.options.reentry!;\r\n }\r\n\r\n protected onInitial() {\r\n this.initial = this.createAsyncComputedValue();\r\n this.attach();\r\n // 为什么要延迟执行?\r\n // 因为onInitial函数是在第一次读取时执行的同步操作,此时的依赖项还没有收集完毕,原始的计算函数还没有初始化\r\n // 比如{ total:computed(async()=>{ return 1+2 }) },在第一次读取total时,此时的computed函数还没有初始化\r\n // 如果这时候执行run,则total的值还是一个function,而run执行时会将运行的数据更新到total.value,total.loading 等值,\r\n // 由于total还没有初始化为{loading,value,....}对象,所以会出错\r\n setTimeout(() => {\r\n if (\r\n this.options.immediate === true ||\r\n (this.options.immediate === \"auto\" && this.options.initial === undefined)\r\n ) {\r\n this.run({ first: true });\r\n }\r\n }, 0);\r\n }\r\n /**\r\n * 销毁时取消正在进行的异步计算(复用 AbortController)\r\n */\r\n protected onDestroy() {\r\n try {\r\n if (this._isRunning) this.getAbortController().abort();\r\n } catch {}\r\n }\r\n\r\n private createAsyncComputedValue() {\r\n return Object.assign({\r\n // [ASYNC_COMPUTED_VALUE]: true,\r\n loading: false,\r\n timeout: 0,\r\n retry: 0,\r\n error: null,\r\n value: this.options.initial,\r\n progress: 0,\r\n run: markRaw((args: Dict) => {\r\n return this.store.computedObjects.run(this.id, Object.assign({}, args));\r\n }),\r\n cancel: markRaw(() => {\r\n this.getAbortController().abort();\r\n }),\r\n });\r\n }\r\n\r\n /**\r\n *\r\n * 局部更新计算属性的值\r\n *\r\n */\r\n private updateComputedValue(values: Partial<AsyncComputedValue>) {\r\n const batchEvent = this.strPath;\r\n const updatedCount = Object.keys(values).length;\r\n if (this.associated) {\r\n this.store.update(\r\n (state) => {\r\n updateObjectVal(state, this.path!, values);\r\n },\r\n { batch: updatedCount > 1 ? batchEvent : false },\r\n );\r\n } else {\r\n Object.assign(this.value as object, values);\r\n const isBatch = updatedCount > 1;\r\n const ops: StateOperate[] = [];\r\n Object.entries(values).forEach(([key, value]) => {\r\n const op: StateOperate = {\r\n type: \"set\",\r\n path: [...this.path, key],\r\n value: value,\r\n parent: this.value,\r\n };\r\n if (isBatch) op.reply = true;\r\n this.store.operates.emit(`${this.strPath}.${key}`, op);\r\n ops.push(op);\r\n });\r\n if (isBatch) {\r\n this.store.operates.emit(this.strPath, {\r\n type: \"batch\",\r\n path: this.path,\r\n value: ops,\r\n });\r\n }\r\n }\r\n }\r\n /**\r\n *\r\n * 运行计算函数\r\n *\r\n */\r\n async run(options?: AsyncProRuntimeComputedOptions) {\r\n const { first } = options ?? {};\r\n\r\n // 1. 检查是否计算被禁用, 注意,仅点非初始化时才检查计算开关,因为第一次运行需要收集依赖,这样才能在后续运行时,随时启用/禁用计算属性\r\n if (this.isDisable(options?.enable)) {\r\n this.store.logger.warn(() => `Async computed <${this.toString()}> is disabled`);\r\n return;\r\n }\r\n // 先记录上一次运行是否出错,再清除错误记录\r\n // 用于在重新计算开始时清除状态中残留的旧error(ctx是本次新建的,读不到上次的错误)\r\n const hadError = this.error !== undefined;\r\n this.error = undefined;\r\n this._firstRun = true;\r\n if (!first) {\r\n this.store.logger.info(() => `Run async computed for : ${this.toString()}`);\r\n }\r\n\r\n // 2. 合成最终的配置参数\r\n const finalComputedOptions = (\r\n options ? Object.assign({ first }, this.options, options) : this.options\r\n ) as Required<AsyncProRuntimeComputedOptions>;\r\n\r\n // 3. 根据配置参数获取计算函数的上下文对象\r\n const scope = getValueScope<AsyncComputedValue<Value>, Scope>(\r\n this as any,\r\n \"sync\",\r\n this.context,\r\n finalComputedOptions,\r\n );\r\n // 4. 检查是否有重入\r\n const { reentry } = finalComputedOptions;\r\n if (this._isRunning && !reentry) {\r\n this.store.logger.warn(\r\n () => `Async computed: ${this.toString()} is running, can't reentry`,\r\n );\r\n emitStoreEvent(this.store, `observer/${this.id}/cancel`, {\r\n reason: \"reentry\",\r\n observer: this,\r\n });\r\n return;\r\n }\r\n this._isRunning = true; // 即所依赖项的值\r\n try {\r\n return await this.executeGetter(scope, finalComputedOptions, hadError);\r\n } finally {\r\n this._isRunning = false;\r\n }\r\n }\r\n getValue() {\r\n return this.value.value as any;\r\n }\r\n /**\r\n * computed(async (scope,{getProgressbar})=>{\r\n * const pbar = getProgressbar({max:100,min:0}) // 初始值\r\n * pbar.value(12) // 修改进度值\r\n * pbar.end() // 结束进度条\r\n * })\r\n *\r\n * @param init\r\n * @returns\r\n */\r\n private createComputeProgressbar(opts?: {\r\n max?: number;\r\n min?: number;\r\n value?: number;\r\n }): AsyncComputedProgressbar {\r\n const { max = 100, min = 0, value = 0 } = Object.assign({}, opts);\r\n this.updateComputedValue({ progress: value });\r\n return {\r\n value: (num: number) => {\r\n if (num > max) num = max;\r\n if (num < min) num = min;\r\n this.updateComputedValue({ progress: num });\r\n },\r\n end() {\r\n this.value(max);\r\n },\r\n };\r\n }\r\n /**\r\n *\r\n * AbortController是一个用于控制一个或多个请求的AbortSignal对象的生命周期的对象\r\n *\r\n *\r\n * - 整个异步对象只有一个默认的AbortController对象,仅当用户调用cancel方法时才会使用\r\n *\r\n * ,当用户指定了abortController选项时,会使用用户指定的AbortController对象\r\n *\r\n *\r\n *\r\n * @param options\r\n * @returns\r\n */\r\n private getAbortController(options?: Required<AsyncProRuntimeComputedOptions>) {\r\n if (options && typeof options.abortController === \"function\") {\r\n const abortController = options.abortController();\r\n if (abortController && abortController instanceof AbortController) {\r\n this._userAbortController = abortController;\r\n }\r\n }\r\n if (this._userAbortController) return this._userAbortController;\r\n if (!this._defaultAbortController) this._defaultAbortController = new AbortController();\r\n if (this._defaultAbortController.signal.aborted)\r\n this._defaultAbortController = new AbortController();\r\n return this._defaultAbortController;\r\n }\r\n\r\n /**\r\n * 处理超时\r\n * @param timeoutCallback\r\n * @param options\r\n * @returns\r\n */\r\n private setTimeoutControl(\r\n ctx: GetterRunContext,\r\n initValue: Partial<AsyncComputedValue>,\r\n options: Required<AsyncProRuntimeComputedOptions>,\r\n ) {\r\n const { timeout } = options;\r\n let [timeoutValue, countdown] = Array.isArray(timeout) ? timeout : [timeout, 0];\r\n\r\n let countdownId: any;\r\n let tmId: any;\r\n if (timeoutValue > 0) {\r\n initValue.timeout = countdown > 1 ? countdown : timeoutValue;\r\n tmId = setTimeout(() => {\r\n ctx.hasTimeout = true;\r\n ctx.hasError = true;\r\n ctx.error = \"TIMEOUT\";\r\n if (typeof ctx.timeoutCallback === \"function\") ctx.timeoutCallback();\r\n clearInterval(countdownId);\r\n this.updateComputedValue({\r\n loading: false,\r\n error: \"TIMEOUT\",\r\n timeout: 0,\r\n });\r\n }, timeoutValue);\r\n // 启用设置倒计时: 比如timeout= 6*1000, countdown= 6\r\n if (countdown > 1) {\r\n countdownId = setInterval(\r\n () => {\r\n this.updateComputedValue({\r\n timeout: countdown--,\r\n });\r\n if (countdown === 0) clearInterval(countdownId);\r\n },\r\n timeoutValue / (countdown + 1),\r\n );\r\n }\r\n }\r\n\r\n return {\r\n clear: () => {\r\n clearTimeout(tmId);\r\n clearInterval(countdownId);\r\n },\r\n enable: timeoutValue > 0,\r\n };\r\n }\r\n /**\r\n * 执行计算函数\r\n *\r\n */\r\n private async executeGetter(\r\n scope: any,\r\n options: Required<AsyncProRuntimeComputedOptions>,\r\n hadError = false,\r\n ) {\r\n const { retry } = options;\r\n const [retryCount, retryInterval] = retry\r\n ? Array.isArray(retry)\r\n ? retry\r\n : [Number(retry), 0]\r\n : [0, 0];\r\n\r\n let timeoutCallback: (() => void) | undefined; // 异步计算函数可以在超时时执行的回调函数\r\n\r\n const abortController = this.getAbortController(options);\r\n\r\n const getterArgs: Required<AsyncProComputedGetterArgs> = {\r\n onTimeout: (cb: () => void) => {\r\n timeoutCallback = cb;\r\n },\r\n getProgressbar: this.createComputeProgressbar.bind(this),\r\n getSnap: (scope: any) => getSnap(scope),\r\n cancel: abortController.abort.bind(abortController),\r\n extras: options.extras,\r\n operate: options.operate,\r\n first: options.first,\r\n abortSignal: abortController.signal,\r\n } as any;\r\n\r\n const ctx: GetterRunContext = {\r\n error: null,\r\n hasError: false,\r\n hasTimeout: false,\r\n hasAbort: false,\r\n timeoutCallback,\r\n };\r\n\r\n // 侦听中止信号,以便在中止时能停止\r\n const abortHandler = () => {\r\n ctx.hasAbort = true;\r\n };\r\n abortController.signal.addEventListener(\"abort\", abortHandler);\r\n this.error = undefined;\r\n let timeout = { clear: () => {}, enable: false };\r\n let computedResult: any;\r\n\r\n try {\r\n const updateCtx = (values: Partial<GetterRunContext>) => Object.assign(ctx, values);\r\n for (let i = 0; i < retryCount + 1; i++) {\r\n const afterUpdated: Partial<AsyncComputedValue> = {}; // 保存执行完成后需要更新的内容,以便在最后一次执行后更新状态\r\n try {\r\n // 1. 初始化数据\r\n const initValue: Partial<AsyncComputedValue> = {\r\n loading: true,\r\n };\r\n // 上一次运行出错时,在开始计算前清除状态中残留的旧error\r\n // (ctx是本次新建的读不到上次错误,hadError由run()在清除this.error前捕获)\r\n if (hadError) initValue.error = null;\r\n\r\n if (retryCount > 0) initValue.retry = i > 0 ? retryCount - i + 1 : 0;\r\n\r\n if (i > 0) {\r\n updateCtx({\r\n error: null,\r\n hasError: false,\r\n hasTimeout: false,\r\n });\r\n }\r\n\r\n timeout = this.setTimeoutControl(ctx, initValue, options);\r\n\r\n this.updateComputedValue(initValue);\r\n\r\n // 如果有中止信号,则取消计算\r\n if (ctx.hasAbort) throw new AbortError();\r\n // 执行回调\r\n emitStoreEvent(this.store, `observer/${this.id}/run`, {\r\n args: getterArgs,\r\n observer: this,\r\n scope,\r\n });\r\n // 执行计算函数\r\n computedResult = await this.getter.call(this, scope, getterArgs);\r\n if (ctx.hasAbort) throw new AbortError();\r\n if (!ctx.hasTimeout) {\r\n if (options.raw) markRaw(computedResult);\r\n afterUpdated.value = computedResult;\r\n // 计算成功时必须清除上一次的错误,否则旧的error会一直残留在状态中\r\n if (hadError) afterUpdated.error = null;\r\n if (timeout.enable) afterUpdated.timeout = 0;\r\n }\r\n } catch (e: any) {\r\n ctx.hasError = true;\r\n ctx.error = e;\r\n if (!ctx.hasTimeout) afterUpdated.error = getError(e).message;\r\n if (isFunction(options.onError)) {\r\n const errValue = options.onError(e);\r\n if (errValue !== undefined) afterUpdated.value = errValue;\r\n }\r\n } finally {\r\n timeout.clear();\r\n if (i === retryCount) {\r\n // 最后一次执行时\r\n if (ctx.hasTimeout) afterUpdated.error = ctx.error;\r\n if (retryCount > 0) afterUpdated.retry = 0;\r\n }\r\n afterUpdated.loading = false;\r\n this.updateComputedValue(afterUpdated);\r\n }\r\n // 出错时重试延迟, 最后一次不延迟\r\n if (ctx.hasError) {\r\n if (retryCount > 0 && retryInterval > 0 && i < retryCount) {\r\n await delay(retryInterval);\r\n }\r\n }\r\n }\r\n // 计算完成后触发事件\r\n if (ctx.hasAbort) {\r\n emitStoreEvent(this.store, `observer/${this.id}/cancel`, {\r\n reason: \"abort\",\r\n observer: this,\r\n });\r\n } else if (ctx.hasError || ctx.hasTimeout) {\r\n this.error = ctx.error;\r\n emitStoreEvent(this.store, `observer/${this.id}/error`, {\r\n error: ctx.error,\r\n observer: this,\r\n });\r\n } else {\r\n emitStoreEvent(this.store, `observer/${this.id}/done`, {\r\n value: computedResult,\r\n observer: this,\r\n });\r\n }\r\n this.onDoneCallback(\r\n options,\r\n ctx.error,\r\n ctx.hasAbort,\r\n ctx.hasTimeout,\r\n scope,\r\n computedResult,\r\n );\r\n } finally {\r\n // 清理 abort 事件监听器,防止内存泄漏\r\n abortController.signal.removeEventListener(\"abort\", abortHandler);\r\n }\r\n }\r\n\r\n /**\r\n * 当计算属性操作完成时的回调函数\r\n *\r\n * 此函数负责在计算属性操作完成后,根据操作的执行状态调用用户定义的回调函数\r\n * 它会传递操作的结果、错误状态、是否中止以及是否超时等信息给回调函数\r\n *\r\n * @param options - 计算属性的运行时选项,被强制转换为Required类型,确保所有选项都是必需的\r\n * @param error - 如果操作过程中发生错误,该错误对象将被传递\r\n * @param abort - 一个布尔值,表示操作是否被中止\r\n * @param timeout - 一个布尔值,表示操作是否因超时而结束\r\n * @param scope - 操作执行的上下文或范围\r\n * @param value - 操作的结果,如果操作成功完成\r\n */\r\n private onDoneCallback(\r\n options: Required<RuntimeComputedOptions>,\r\n error: Error,\r\n abort: boolean,\r\n timeout: boolean,\r\n scope: any,\r\n value: any,\r\n ) {\r\n if (typeof options.onDone !== \"function\") return;\r\n options.onDone.call(this, {\r\n id: this.id,\r\n path: this.path,\r\n value,\r\n error,\r\n abort,\r\n timeout,\r\n scope,\r\n });\r\n }\r\n protected onDependsChange(params: StateOperate) {\r\n this.store.logger.debug(\r\n () =>\r\n `AsyncComputed<${this.id}> is running by depends ${params.type}/${params.path.join(\r\n \".\",\r\n )} operate `,\r\n );\r\n this.run({\r\n operate: params,\r\n first: !this._firstRun,\r\n });\r\n }\r\n /**\r\n *\r\n * 由于异步计算是一个对象,所以我们需要侦听的是对象的变化,而不仅是对象的值\r\n *\r\n */\r\n protected getValueWatchPath() {\r\n const spath = this.path!.join(this.store.options.delimiter);\r\n return [`${spath}.*`, spath];\r\n }\r\n /**\r\n * 由于所有异步计算属性均会被转换为一个AsyncComputedValue<{value,timeout,....}>的形式\r\n * 这样,当我们在指定一个依赖是异步属性时,就需要指定为xxxx.value才可以个侦听到变化\r\n *\r\n * @example\r\n * const store = new AutoStore({\r\n * a0: 1,\r\n * a1: computed(async (scope:any)=>{\r\n * return scope.a0 + 1\r\n * },[\"a0\"],{initial:2}),\r\n * a2: computed(async (scope:any)=>{\r\n * return scope.a1.value + 1\r\n * },[\"a1.value\"],{initial:3})\r\n * });\r\n *\r\n * 以上a2依赖于a1,由于a1是一个异步对象,所以在写依赖时就必须写上[\"a1.value\"]\r\n * 这就有点反直觉了。\r\n *\r\n * 本函数在异步计算对象订阅变更事件时调用,用来返回字符串形式的依赖数组\r\n *\r\n * 本函数的功能就是对所有依赖进行判断如果其是一个异步计算依赖,则自动添加.value,这样就可以如下方式来写依赖了\r\n *\r\n * \tconst store = new AutoStore({\r\n * a0: 1,\r\n * a1: computed(async (scope:any)=>{\r\n * return scope.a0 + 1\r\n * },[\"a0\"],{initial:2}),\r\n * a2: computed(async (scope:any)=>{\r\n * return scope.a1.value + 1\r\n * },[\"a1\"],{initial:3})\r\n * });\r\n *\r\n */\r\n protected getDepends() {\r\n const depends = super.getDepends();\r\n return depends.map((dep) => {\r\n if (dep.length === 0) return dep;\r\n for (const obj of this.store.computedObjects.values()) {\r\n if (isPathEq(obj.path, dep) && obj.async) {\r\n return [`${dep.join(this.store.options.delimiter)}.value`];\r\n }\r\n }\r\n return dep;\r\n }) as unknown as string[][];\r\n }\r\n}\r\n","import {\r\n OBSERVER_DESCRIPTOR_FLAG,\r\n OBSERVER_TYPE_FLAG,\r\n normalizeDeps,\r\n AsyncComputedValue,\r\n getDefaultComputedOptions,\r\n} from \"autostore\";\r\nimport type { ComputedDepends } from \"autostore\";\r\nimport type {\r\n AsyncProComputedGetter,\r\n AsyncProComputedOptions,\r\n AsyncProComputedDescriptorBuilder,\r\n AsyncProComputedDescriptor,\r\n} from \"./types\";\r\n\r\n/**\r\n * 用来封装状态的计算函数,使用计算函数的传入的是当前对象\r\n *\r\n *\r\n * @param getter\r\n * @param depends\r\n * @param options\r\n * @returns\r\n *\r\n */\r\nexport function asyncComputed<Value = any, Scope = any>(\r\n getter: AsyncProComputedGetter<Value, Scope>,\r\n depends: ComputedDepends,\r\n options?: AsyncProComputedOptions<Value, Scope>,\r\n): AsyncProComputedDescriptorBuilder<AsyncComputedValue<Value>, Scope> {\r\n if (typeof getter !== \"function\") throw new Error(\"computed getter must be a function\");\r\n // 解析参数:同时支持同步和异步计算函数两种方式声明\r\n const opts: AsyncProComputedOptions = Object.assign({}, getDefaultComputedOptions(), options, {\r\n async: true,\r\n });\r\n opts.depends = normalizeDeps(depends);\r\n\r\n const descriptorBuilder = () => {\r\n return {\r\n type: \"asyncpro\",\r\n getter,\r\n options: opts,\r\n [OBSERVER_DESCRIPTOR_FLAG]: true,\r\n } as unknown as AsyncProComputedDescriptor<Value, Scope>;\r\n };\r\n descriptorBuilder[OBSERVER_TYPE_FLAG] = \"asyncpro\";\r\n return descriptorBuilder as unknown as AsyncProComputedDescriptorBuilder<\r\n AsyncComputedValue<Value>,\r\n Scope\r\n >;\r\n}\r\n","/**\r\n * shadow 插件\r\n *\r\n * 为 AutoStore 注入影子 store(shadowStore)能力:\r\n * - 调用 shadow(store) 后,store 获得 store.shadow(state) 方法\r\n * - shadowStore 基于原 store 派生,自身不持有业务状态,其计算属性/watch 的作用域指向原 store 的 state\r\n * - 原 store 的写操作会转发到 shadowStore,触发其计算属性重新计算\r\n * - 适用于在不污染原 store 的前提下,派生额外的计算视图(如多维聚合、派生展示字段)\r\n *\r\n * shadowStore 的 id 为 `${原store.id}_shadow`,且 options.shadow = true。\r\n * 由于 shadowStore 中的 observer 是动态创建的,其 scope 会被强制设为 ROOT\r\n * (不能是 CURRENT 或相对路径)。\r\n *\r\n * @example\r\n *\r\n * import { AutoStore, computed } from \"autostore\";\r\n * import { shadow } from \"@autostorejs/plugins\";\r\n *\r\n * const store = new AutoStore({ price: 10, count: 3 });\r\n * shadow(store); // 安装插件,挂载 store.shadow 方法\r\n *\r\n * const shadowStore = store.shadow({\r\n * total: computed((scope) => scope.price * scope.count),\r\n * });\r\n *\r\n * shadowStore.state.total; // 30\r\n * store.state.count = 4;\r\n * shadowStore.state.total; // 40\r\n */\r\n\r\nimport { AutoStore } from \"autostore\";\r\nimport type { AnyAutoStore, Dict, AnyObserverDescriptor, ObserverContext } from \"autostore\";\r\nimport { installPlugin } from \"../utils/installPlugin\";\r\nimport { AsyncProComputedObject } from \"./async\";\r\nimport { asyncComputed } from \"./asyncComputed\";\r\n\r\n/**\r\n * shadow 插件入口\r\n *\r\n * 给目标 store 挂载 shadow 方法,调用后即可通过 store.shadow(state) 创建影子 store。\r\n *\r\n * @param store 目标 AutoStore 实例\r\n * @returns 无返回值,副作用是给 store 挂载 shadow 方法\r\n */\r\nexport function asyncpro(store: AnyAutoStore) {\r\n const observers = (store.constructor as typeof AutoStore).observers;\r\n observers[\"asyncpro\"] = (\r\n store: AnyAutoStore,\r\n descriptor: AnyObserverDescriptor,\r\n context?: ObserverContext,\r\n ) => {\r\n const computedObj = new AsyncProComputedObject(store, descriptor, context);\r\n store.computedObjects.set(computedObj.id, computedObj);\r\n return computedObj;\r\n };\r\n\r\n if (!store.options.sandbox) store.options.sandbox = {};\r\n if (!store.options.sandbox.context) store.options.sandbox.context = {};\r\n // 注意:必须追加而非整体覆盖 context\r\n // 否则会丢失用户在 sandbox.context 中自定义注入的变量(如测试中的 data 等)\r\n store.options.sandbox.context.asyncComputed = asyncComputed;\r\n}\r\n\r\ninstallPlugin(asyncpro);\r\n\r\ndeclare module \"autostore\" {\r\n interface AutoStore<State extends Dict, Options = unknown> {}\r\n interface ObserverObjects {\r\n asyncpro: AsyncProComputedObject;\r\n }\r\n interface AsyncComputedObjects {\r\n asyncpro: AsyncProComputedObject;\r\n }\r\n}\r\n\r\nexport * from \"./asyncComputed\";\r\nexport * from \"./async\";\r\nexport * from \"./types\";\r\n"]}
1
+ {"version":3,"sources":["../src/utils/installPlugin.ts","../../../node_modules/.bun/flex-tools@1.6.6/node_modules/flex-tools/src/async/delay.ts","../../../node_modules/.bun/flex-tools@1.6.6/node_modules/flex-tools/dist/chunk-R42SWOGE.mjs","../src/utils/updateObjectVal.ts","../src/asyncpro/async.ts","../src/asyncpro/asyncComputed.ts","../src/asyncpro/index.ts"],"names":["installPlugin","plugin","globalThis","__AUTOSTORE_PLUGINS__","push","delay","ms","resolve","reject","a","__require","__name","b","c","updateObjectVal","obj","keyPath","val","parent","lastIdx","length","forEach","key","idx","isMapObj","isMap","oldVal","get","Object","assign","has","set","AsyncProComputedObject","ComputedObject","_isRunning","_defaultAbortController","_userAbortController","_firstRun","lite","async","value","running","onInitOptions","options","reentry","undefined","store","onInitial","initial","createAsyncComputedValue","attach","setTimeout","immediate","run","first","onDestroy","getAbortController","abort","loading","timeout","retry","error","progress","markRaw","args","computedObjects","id","cancel","updateComputedValue","values","batchEvent","strPath","updatedCount","keys","associated","update","state","path","batch","isBatch","ops","entries","op","type","reply","operates","emit","isDisable","enable","logger","warn","toString","hadError","info","finalComputedOptions","scope","getValueScope","context","emitStoreEvent","reason","observer","executeGetter","getValue","createComputeProgressbar","opts","max","min","num","end","abortController","AbortController","signal","aborted","setTimeoutControl","ctx","initValue","timeoutValue","countdown","Array","isArray","countdownId","tmId","hasTimeout","hasError","timeoutCallback","clearInterval","setInterval","clear","clearTimeout","retryCount","retryInterval","Number","getterArgs","onTimeout","cb","getProgressbar","bind","getSnap","extras","operate","abortSignal","hasAbort","abortHandler","addEventListener","computedResult","updateCtx","i","afterUpdated","AbortError","getter","call","raw","e","getError","message","isFunction","onError","errValue","onDoneCallback","removeEventListener","onDone","onDependsChange","params","debug","join","getValueWatchPath","spath","delimiter","getDepends","map","dep","isPathEq","asyncComputed","depends","Error","getDefaultComputedOptions","normalizeDeps","descriptorBuilder","OBSERVER_DESCRIPTOR_FLAG","OBSERVER_TYPE_FLAG","asyncpro","observers","descriptor","computedObj","sandbox"],"mappings":"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","file":"asyncpro.js","sourcesContent":["import type { IAutoStorePlugin } from \"autostore\";\n\nexport function installPlugin(plugin: IAutoStorePlugin) {\n // @ts-ignore\n if (!globalThis.__AUTOSTORE_PLUGINS__) {\n // @ts-ignore\n globalThis.__AUTOSTORE_PLUGINS__ = [];\n }\n globalThis.__AUTOSTORE_PLUGINS__.push(plugin);\n}\n\ndeclare global {\n // @ts-ignore\n var __AUTOSTORE_PLUGINS__: IAutoStorePlugin[];\n}\n","export async function delay(ms: number){\n return new Promise((resolve, reject) =>setTimeout(resolve, ms))\n}\n","/**\n* ---=== FlexTools ===---\n* https://zhangfisher.github.com/flex-tools \n*/\nvar i=Object.create;var f=Object.defineProperty;var j=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var l=Object.getPrototypeOf,m=Object.prototype.hasOwnProperty;var g=a=>{throw TypeError(a)};var o=(a=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(a,{get:(b,c)=>(typeof require<\"u\"?require:b)[c]}):a)(function(a){if(typeof require<\"u\")return require.apply(this,arguments);throw Error('Dynamic require of \"'+a+'\" is not supported')});var p=(a,b)=>()=>(b||a((b={exports:{}}).exports,b),b.exports);var n=(a,b,c,d)=>{if(b&&typeof b==\"object\"||typeof b==\"function\")for(let e of k(b))!m.call(a,e)&&e!==c&&f(a,e,{get:()=>b[e],enumerable:!(d=j(b,e))||d.enumerable});return a};var q=(a,b,c)=>(c=a!=null?i(l(a)):{},n(b||!a||!a.__esModule?f(c,\"default\",{value:a,enumerable:true}):c,a));var h=(a,b,c)=>b.has(a)||g(\"Cannot \"+c);var r=(a,b,c)=>(h(a,b,\"read from private field\"),c?c.call(a):b.get(a)),s=(a,b,c)=>b.has(a)?g(\"Cannot add the same private member more than once\"):b instanceof WeakSet?b.add(a):b.set(a,c),t=(a,b,c,d)=>(h(a,b,\"write to private field\"),d?d.call(a,c):b.set(a,c),c);export{o as a,p as b,q as c,r as d,s as e,t as f};//# sourceMappingURL=chunk-R42SWOGE.mjs.map\n//# sourceMappingURL=chunk-R42SWOGE.mjs.map","import { isMap } from \"autostore\";\n\n/**\n *\n * 用于更新对象的值\n * 采用Object.assign()的方式更新对象的值\n *\n *\n * @param obj\n * @param keyPath\n * @param val\n */\nexport function updateObjectVal(obj: any, keyPath: string[], val: object) {\n let parent = obj;\n const lastIdx = keyPath.length - 1;\n keyPath.forEach((key, idx) => {\n const isMapObj = isMap(parent);\n if (idx === lastIdx) {\n const oldVal: any = isMapObj ? parent.get(key) : parent[key];\n if (typeof oldVal === \"object\") {\n Object.assign(oldVal, val);\n }\n return;\n }\n if (isMapObj) {\n if (!parent.has(key)) {\n parent.set(key, {});\n }\n parent = parent.get(key);\n } else {\n if (!(key in parent)) {\n parent[key] = {};\n }\n parent = parent[key];\n }\n });\n}\n","/**\n *\n * 异步计算\n *\n */\nimport {\n isFunction,\n isPathEq,\n markRaw,\n getSnap,\n AbortError,\n emitStoreEvent,\n ASYNC_COMPUTED_VALUE,\n ComputedObject,\n getValueScope,\n getError,\n AsyncComputedValue,\n} from \"autostore\";\nimport type { Dict, RuntimeComputedOptions, StateOperate } from \"autostore\";\nimport { delay } from \"flex-tools/async/delay\";\nimport type {\n AsyncComputedProgressbar,\n AsyncProComputedGetterArgs,\n AsyncProRuntimeComputedOptions,\n} from \"./types\";\nimport { updateObjectVal } from \"../utils/updateObjectVal\";\n\ntype GetterRunContext = {\n error: any;\n hasError: boolean;\n hasTimeout: boolean;\n hasAbort: boolean;\n timeoutCallback: (() => void) | undefined;\n};\n\nexport class AsyncProComputedObject<Value = any, Scope = any> extends ComputedObject<\n AsyncComputedValue<Value>\n> {\n private _isRunning: boolean = false;\n private _defaultAbortController: AbortController | null = null;\n private _userAbortController?: AbortController;\n private _firstRun: boolean = false; // 是否已经第一次运行过\n /**\n * 用于标识这是一个简单计算对象\n *\n * 不同于全功能异步计算对象\n *\n */\n lite: boolean = false;\n override get async() {\n return true;\n }\n override get value() {\n return super.value as AsyncComputedValue<Value>;\n }\n override set value(value: AsyncComputedValue<Value>) {\n super.value = value;\n }\n get running() {\n return this._isRunning;\n }\n /**\n * 本方法用来处理配置参数\n * 主要\n * @param options\n */\n protected override onInitOptions(options: Required<RuntimeComputedOptions>) {\n if (options.reentry === undefined) options.reentry = this.store.options.reentry!;\n }\n\n protected onInitial() {\n this.initial = this.createAsyncComputedValue();\n this.attach();\n // 为什么要延迟执行?\n // 因为onInitial函数是在第一次读取时执行的同步操作,此时的依赖项还没有收集完毕,原始的计算函数还没有初始化\n // 比如{ total:computed(async()=>{ return 1+2 }) },在第一次读取total时,此时的computed函数还没有初始化\n // 如果这时候执行run,则total的值还是一个function,而run执行时会将运行的数据更新到total.value,total.loading 等值,\n // 由于total还没有初始化为{loading,value,....}对象,所以会出错\n setTimeout(() => {\n if (\n this.options.immediate === true ||\n (this.options.immediate === \"auto\" && this.options.initial === undefined)\n ) {\n this.run({ first: true });\n }\n }, 0);\n }\n /**\n * 销毁时取消正在进行的异步计算(复用 AbortController)\n */\n protected onDestroy() {\n try {\n if (this._isRunning) this.getAbortController().abort();\n } catch {}\n }\n\n private createAsyncComputedValue() {\n return Object.assign({\n // [ASYNC_COMPUTED_VALUE]: true,\n loading: false,\n timeout: 0,\n retry: 0,\n error: null,\n value: this.options.initial,\n progress: 0,\n run: markRaw((args: Dict) => {\n return this.store.computedObjects.run(this.id, Object.assign({}, args));\n }),\n cancel: markRaw(() => {\n this.getAbortController().abort();\n }),\n });\n }\n\n /**\n *\n * 局部更新计算属性的值\n *\n */\n private updateComputedValue(values: Partial<AsyncComputedValue>) {\n const batchEvent = this.strPath;\n const updatedCount = Object.keys(values).length;\n if (this.associated) {\n this.store.update(\n (state) => {\n updateObjectVal(state, this.path!, values);\n },\n { batch: updatedCount > 1 ? batchEvent : false },\n );\n } else {\n Object.assign(this.value as object, values);\n const isBatch = updatedCount > 1;\n const ops: StateOperate[] = [];\n Object.entries(values).forEach(([key, value]) => {\n const op: StateOperate = {\n type: \"set\",\n path: [...this.path, key],\n value: value,\n parent: this.value,\n };\n if (isBatch) op.reply = true;\n this.store.operates.emit(`${this.strPath}.${key}`, op);\n ops.push(op);\n });\n if (isBatch) {\n this.store.operates.emit(this.strPath, {\n type: \"batch\",\n path: this.path,\n value: ops,\n });\n }\n }\n }\n /**\n *\n * 运行计算函数\n *\n */\n async run(options?: AsyncProRuntimeComputedOptions) {\n const { first } = options ?? {};\n\n // 1. 检查是否计算被禁用, 注意,仅点非初始化时才检查计算开关,因为第一次运行需要收集依赖,这样才能在后续运行时,随时启用/禁用计算属性\n if (this.isDisable(options?.enable)) {\n this.store.logger.warn(() => `Async computed <${this.toString()}> is disabled`);\n return;\n }\n // 先记录上一次运行是否出错,再清除错误记录\n // 用于在重新计算开始时清除状态中残留的旧error(ctx是本次新建的,读不到上次的错误)\n const hadError = this.error !== undefined;\n this.error = undefined;\n this._firstRun = true;\n if (!first) {\n this.store.logger.info(() => `Run async computed for : ${this.toString()}`);\n }\n\n // 2. 合成最终的配置参数\n const finalComputedOptions = (\n options ? Object.assign({ first }, this.options, options) : this.options\n ) as Required<AsyncProRuntimeComputedOptions>;\n\n // 3. 根据配置参数获取计算函数的上下文对象\n const scope = getValueScope<AsyncComputedValue<Value>, Scope>(\n this as any,\n \"sync\",\n this.context,\n finalComputedOptions,\n );\n // 4. 检查是否有重入\n const { reentry } = finalComputedOptions;\n if (this._isRunning && !reentry) {\n this.store.logger.warn(\n () => `Async computed: ${this.toString()} is running, can't reentry`,\n );\n emitStoreEvent(this.store, `observer/${this.id}/cancel`, {\n reason: \"reentry\",\n observer: this,\n });\n return;\n }\n this._isRunning = true; // 即所依赖项的值\n try {\n return await this.executeGetter(scope, finalComputedOptions, hadError);\n } finally {\n this._isRunning = false;\n }\n }\n getValue() {\n return this.value.value as any;\n }\n /**\n * computed(async (scope,{getProgressbar})=>{\n * const pbar = getProgressbar({max:100,min:0}) // 初始值\n * pbar.value(12) // 修改进度值\n * pbar.end() // 结束进度条\n * })\n *\n * @param init\n * @returns\n */\n private createComputeProgressbar(opts?: {\n max?: number;\n min?: number;\n value?: number;\n }): AsyncComputedProgressbar {\n const { max = 100, min = 0, value = 0 } = Object.assign({}, opts);\n this.updateComputedValue({ progress: value });\n return {\n value: (num: number) => {\n if (num > max) num = max;\n if (num < min) num = min;\n this.updateComputedValue({ progress: num });\n },\n end() {\n this.value(max);\n },\n };\n }\n /**\n *\n * AbortController是一个用于控制一个或多个请求的AbortSignal对象的生命周期的对象\n *\n *\n * - 整个异步对象只有一个默认的AbortController对象,仅当用户调用cancel方法时才会使用\n *\n * ,当用户指定了abortController选项时,会使用用户指定的AbortController对象\n *\n *\n *\n * @param options\n * @returns\n */\n private getAbortController(options?: Required<AsyncProRuntimeComputedOptions>) {\n if (options && typeof options.abortController === \"function\") {\n const abortController = options.abortController();\n if (abortController && abortController instanceof AbortController) {\n this._userAbortController = abortController;\n }\n }\n if (this._userAbortController) return this._userAbortController;\n if (!this._defaultAbortController) this._defaultAbortController = new AbortController();\n if (this._defaultAbortController.signal.aborted)\n this._defaultAbortController = new AbortController();\n return this._defaultAbortController;\n }\n\n /**\n * 处理超时\n * @param timeoutCallback\n * @param options\n * @returns\n */\n private setTimeoutControl(\n ctx: GetterRunContext,\n initValue: Partial<AsyncComputedValue>,\n options: Required<AsyncProRuntimeComputedOptions>,\n ) {\n const { timeout } = options;\n let [timeoutValue, countdown] = Array.isArray(timeout) ? timeout : [timeout, 0];\n\n let countdownId: any;\n let tmId: any;\n if (timeoutValue > 0) {\n initValue.timeout = countdown > 1 ? countdown : timeoutValue;\n tmId = setTimeout(() => {\n ctx.hasTimeout = true;\n ctx.hasError = true;\n ctx.error = \"TIMEOUT\";\n if (typeof ctx.timeoutCallback === \"function\") ctx.timeoutCallback();\n clearInterval(countdownId);\n this.updateComputedValue({\n loading: false,\n error: \"TIMEOUT\",\n timeout: 0,\n });\n }, timeoutValue);\n // 启用设置倒计时: 比如timeout= 6*1000, countdown= 6\n if (countdown > 1) {\n countdownId = setInterval(\n () => {\n this.updateComputedValue({\n timeout: countdown--,\n });\n if (countdown === 0) clearInterval(countdownId);\n },\n timeoutValue / (countdown + 1),\n );\n }\n }\n\n return {\n clear: () => {\n clearTimeout(tmId);\n clearInterval(countdownId);\n },\n enable: timeoutValue > 0,\n };\n }\n /**\n * 执行计算函数\n *\n */\n private async executeGetter(\n scope: any,\n options: Required<AsyncProRuntimeComputedOptions>,\n hadError = false,\n ) {\n const { retry } = options;\n const [retryCount, retryInterval] = retry\n ? Array.isArray(retry)\n ? retry\n : [Number(retry), 0]\n : [0, 0];\n\n let timeoutCallback: (() => void) | undefined; // 异步计算函数可以在超时时执行的回调函数\n\n const abortController = this.getAbortController(options);\n\n const getterArgs: Required<AsyncProComputedGetterArgs> = {\n onTimeout: (cb: () => void) => {\n timeoutCallback = cb;\n },\n getProgressbar: this.createComputeProgressbar.bind(this),\n getSnap: (scope: any) => getSnap(scope),\n cancel: abortController.abort.bind(abortController),\n extras: options.extras,\n operate: options.operate,\n first: options.first,\n abortSignal: abortController.signal,\n } as any;\n\n const ctx: GetterRunContext = {\n error: null,\n hasError: false,\n hasTimeout: false,\n hasAbort: false,\n timeoutCallback,\n };\n\n // 侦听中止信号,以便在中止时能停止\n const abortHandler = () => {\n ctx.hasAbort = true;\n };\n abortController.signal.addEventListener(\"abort\", abortHandler);\n this.error = undefined;\n let timeout = { clear: () => {}, enable: false };\n let computedResult: any;\n\n try {\n const updateCtx = (values: Partial<GetterRunContext>) => Object.assign(ctx, values);\n for (let i = 0; i < retryCount + 1; i++) {\n const afterUpdated: Partial<AsyncComputedValue> = {}; // 保存执行完成后需要更新的内容,以便在最后一次执行后更新状态\n try {\n // 1. 初始化数据\n const initValue: Partial<AsyncComputedValue> = {\n loading: true,\n };\n // 上一次运行出错时,在开始计算前清除状态中残留的旧error\n // (ctx是本次新建的读不到上次错误,hadError由run()在清除this.error前捕获)\n if (hadError) initValue.error = null;\n\n if (retryCount > 0) initValue.retry = i > 0 ? retryCount - i + 1 : 0;\n\n if (i > 0) {\n updateCtx({\n error: null,\n hasError: false,\n hasTimeout: false,\n });\n }\n\n timeout = this.setTimeoutControl(ctx, initValue, options);\n\n this.updateComputedValue(initValue);\n\n // 如果有中止信号,则取消计算\n if (ctx.hasAbort) throw new AbortError();\n // 执行回调\n emitStoreEvent(this.store, `observer/${this.id}/run`, {\n args: getterArgs,\n observer: this,\n scope,\n });\n // 执行计算函数\n computedResult = await this.getter.call(this, scope, getterArgs);\n if (ctx.hasAbort) throw new AbortError();\n if (!ctx.hasTimeout) {\n if (options.raw) markRaw(computedResult);\n afterUpdated.value = computedResult;\n // 计算成功时必须清除上一次的错误,否则旧的error会一直残留在状态中\n if (hadError) afterUpdated.error = null;\n if (timeout.enable) afterUpdated.timeout = 0;\n }\n } catch (e: any) {\n ctx.hasError = true;\n ctx.error = e;\n if (!ctx.hasTimeout) afterUpdated.error = getError(e).message;\n if (isFunction(options.onError)) {\n const errValue = options.onError(e);\n if (errValue !== undefined) afterUpdated.value = errValue;\n }\n } finally {\n timeout.clear();\n if (i === retryCount) {\n // 最后一次执行时\n if (ctx.hasTimeout) afterUpdated.error = ctx.error;\n if (retryCount > 0) afterUpdated.retry = 0;\n }\n afterUpdated.loading = false;\n this.updateComputedValue(afterUpdated);\n }\n // 出错时重试延迟, 最后一次不延迟\n if (ctx.hasError) {\n if (retryCount > 0 && retryInterval > 0 && i < retryCount) {\n await delay(retryInterval);\n }\n }\n }\n // 计算完成后触发事件\n if (ctx.hasAbort) {\n emitStoreEvent(this.store, `observer/${this.id}/cancel`, {\n reason: \"abort\",\n observer: this,\n });\n } else if (ctx.hasError || ctx.hasTimeout) {\n this.error = ctx.error;\n emitStoreEvent(this.store, `observer/${this.id}/error`, {\n error: ctx.error,\n observer: this,\n });\n } else {\n emitStoreEvent(this.store, `observer/${this.id}/done`, {\n value: computedResult,\n observer: this,\n });\n }\n this.onDoneCallback(\n options,\n ctx.error,\n ctx.hasAbort,\n ctx.hasTimeout,\n scope,\n computedResult,\n );\n } finally {\n // 清理 abort 事件监听器,防止内存泄漏\n abortController.signal.removeEventListener(\"abort\", abortHandler);\n }\n }\n\n /**\n * 当计算属性操作完成时的回调函数\n *\n * 此函数负责在计算属性操作完成后,根据操作的执行状态调用用户定义的回调函数\n * 它会传递操作的结果、错误状态、是否中止以及是否超时等信息给回调函数\n *\n * @param options - 计算属性的运行时选项,被强制转换为Required类型,确保所有选项都是必需的\n * @param error - 如果操作过程中发生错误,该错误对象将被传递\n * @param abort - 一个布尔值,表示操作是否被中止\n * @param timeout - 一个布尔值,表示操作是否因超时而结束\n * @param scope - 操作执行的上下文或范围\n * @param value - 操作的结果,如果操作成功完成\n */\n private onDoneCallback(\n options: Required<RuntimeComputedOptions>,\n error: Error,\n abort: boolean,\n timeout: boolean,\n scope: any,\n value: any,\n ) {\n if (typeof options.onDone !== \"function\") return;\n options.onDone.call(this, {\n id: this.id,\n path: this.path,\n value,\n error,\n abort,\n timeout,\n scope,\n });\n }\n protected onDependsChange(params: StateOperate) {\n this.store.logger.debug(\n () =>\n `AsyncComputed<${this.id}> is running by depends ${params.type}/${params.path.join(\n \".\",\n )} operate `,\n );\n this.run({\n operate: params,\n first: !this._firstRun,\n });\n }\n /**\n *\n * 由于异步计算是一个对象,所以我们需要侦听的是对象的变化,而不仅是对象的值\n *\n */\n protected getValueWatchPath() {\n const spath = this.path!.join(this.store.options.delimiter);\n return [`${spath}.*`, spath];\n }\n /**\n * 由于所有异步计算属性均会被转换为一个AsyncComputedValue<{value,timeout,....}>的形式\n * 这样,当我们在指定一个依赖是异步属性时,就需要指定为xxxx.value才可以个侦听到变化\n *\n * @example\n * const store = new AutoStore({\n * a0: 1,\n * a1: computed(async (scope:any)=>{\n * return scope.a0 + 1\n * },[\"a0\"],{initial:2}),\n * a2: computed(async (scope:any)=>{\n * return scope.a1.value + 1\n * },[\"a1.value\"],{initial:3})\n * });\n *\n * 以上a2依赖于a1,由于a1是一个异步对象,所以在写依赖时就必须写上[\"a1.value\"]\n * 这就有点反直觉了。\n *\n * 本函数在异步计算对象订阅变更事件时调用,用来返回字符串形式的依赖数组\n *\n * 本函数的功能就是对所有依赖进行判断如果其是一个异步计算依赖,则自动添加.value,这样就可以如下方式来写依赖了\n *\n * \tconst store = new AutoStore({\n * a0: 1,\n * a1: computed(async (scope:any)=>{\n * return scope.a0 + 1\n * },[\"a0\"],{initial:2}),\n * a2: computed(async (scope:any)=>{\n * return scope.a1.value + 1\n * },[\"a1\"],{initial:3})\n * });\n *\n */\n protected getDepends() {\n const depends = super.getDepends();\n return depends.map((dep) => {\n if (dep.length === 0) return dep;\n for (const obj of this.store.computedObjects.values()) {\n if (isPathEq(obj.path, dep) && obj.async) {\n return [`${dep.join(this.store.options.delimiter)}.value`];\n }\n }\n return dep;\n }) as unknown as string[][];\n }\n}\n","import {\n OBSERVER_DESCRIPTOR_FLAG,\n OBSERVER_TYPE_FLAG,\n normalizeDeps,\n AsyncComputedValue,\n getDefaultComputedOptions,\n} from \"autostore\";\nimport type { ComputedDepends } from \"autostore\";\nimport type {\n AsyncProComputedGetter,\n AsyncProComputedOptions,\n AsyncProComputedDescriptorBuilder,\n AsyncProComputedDescriptor,\n} from \"./types\";\n\n/**\n * 用来封装状态的计算函数,使用计算函数的传入的是当前对象\n *\n *\n * @param getter\n * @param depends\n * @param options\n * @returns\n *\n */\nexport function asyncComputed<Value = any, Scope = any>(\n getter: AsyncProComputedGetter<Value, Scope>,\n depends: ComputedDepends,\n options?: AsyncProComputedOptions<Value, Scope>,\n): AsyncProComputedDescriptorBuilder<AsyncComputedValue<Value>, Scope> {\n if (typeof getter !== \"function\") throw new Error(\"computed getter must be a function\");\n // 解析参数:同时支持同步和异步计算函数两种方式声明\n const opts: AsyncProComputedOptions = Object.assign({}, getDefaultComputedOptions(), options, {\n async: true,\n });\n opts.depends = normalizeDeps(depends);\n\n const descriptorBuilder = () => {\n return {\n type: \"asyncpro\",\n getter,\n options: opts,\n [OBSERVER_DESCRIPTOR_FLAG]: true,\n } as unknown as AsyncProComputedDescriptor<Value, Scope>;\n };\n descriptorBuilder[OBSERVER_TYPE_FLAG] = \"asyncpro\";\n return descriptorBuilder as unknown as AsyncProComputedDescriptorBuilder<\n AsyncComputedValue<Value>,\n Scope\n >;\n}\n","/**\n * shadow 插件\n *\n * 为 AutoStore 注入影子 store(shadowStore)能力:\n * - 调用 shadow(store) 后,store 获得 store.shadow(state) 方法\n * - shadowStore 基于原 store 派生,自身不持有业务状态,其计算属性/watch 的作用域指向原 store 的 state\n * - 原 store 的写操作会转发到 shadowStore,触发其计算属性重新计算\n * - 适用于在不污染原 store 的前提下,派生额外的计算视图(如多维聚合、派生展示字段)\n *\n * shadowStore 的 id 为 `${原store.id}_shadow`,且 options.shadow = true。\n * 由于 shadowStore 中的 observer 是动态创建的,其 scope 会被强制设为 ROOT\n * (不能是 CURRENT 或相对路径)。\n *\n * @example\n *\n * import { AutoStore, computed } from \"autostore\";\n * import { shadow } from \"@autostorejs/plugins\";\n *\n * const store = new AutoStore({ price: 10, count: 3 });\n * shadow(store); // 安装插件,挂载 store.shadow 方法\n *\n * const shadowStore = store.shadow({\n * total: computed((scope) => scope.price * scope.count),\n * });\n *\n * shadowStore.state.total; // 30\n * store.state.count = 4;\n * shadowStore.state.total; // 40\n */\n\nimport { AutoStore } from \"autostore\";\nimport type { AnyAutoStore, Dict, AnyObserverDescriptor, ObserverContext } from \"autostore\";\nimport { installPlugin } from \"../utils/installPlugin\";\nimport { AsyncProComputedObject } from \"./async\";\nimport { asyncComputed } from \"./asyncComputed\";\n\n/**\n * shadow 插件入口\n *\n * 给目标 store 挂载 shadow 方法,调用后即可通过 store.shadow(state) 创建影子 store。\n *\n * @param store 目标 AutoStore 实例\n * @returns 无返回值,副作用是给 store 挂载 shadow 方法\n */\nexport function asyncpro(store: AnyAutoStore) {\n const observers = (store.constructor as typeof AutoStore).observers;\n observers[\"asyncpro\"] = (\n store: AnyAutoStore,\n descriptor: AnyObserverDescriptor,\n context?: ObserverContext,\n ) => {\n const computedObj = new AsyncProComputedObject(store, descriptor, context);\n store.computedObjects.set(computedObj.id, computedObj);\n return computedObj;\n };\n\n if (!store.options.sandbox) store.options.sandbox = {};\n if (!store.options.sandbox.context) store.options.sandbox.context = {};\n // 注意:必须追加而非整体覆盖 context\n // 否则会丢失用户在 sandbox.context 中自定义注入的变量(如测试中的 data 等)\n store.options.sandbox.context.asyncComputed = asyncComputed;\n}\n\ninstallPlugin(asyncpro);\n\ndeclare module \"autostore\" {\n interface AutoStore<State extends Dict, Options = unknown> {}\n interface ObserverObjects {\n asyncpro: AsyncProComputedObject;\n }\n interface AsyncComputedObjects {\n asyncpro: AsyncProComputedObject;\n }\n}\n\nexport * from \"./asyncComputed\";\nexport * from \"./async\";\nexport * from \"./types\";\n"]}