@vobs/resource 1.2.1 → 1.2.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.
- package/dist/boundary.cjs +29 -679
- package/dist/boundary.cjs.map +1 -1
- package/dist/boundary.js +5 -677
- package/dist/boundary.js.map +1 -1
- package/dist/index.cjs +66 -708
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +20 -686
- package/dist/index.js.map +1 -1
- package/dist/plugin.cjs +52 -387
- package/dist/plugin.cjs.map +1 -1
- package/dist/plugin.js +15 -372
- package/dist/plugin.js.map +1 -1
- package/dist/resource.cjs +48 -372
- package/dist/resource.cjs.map +1 -1
- package/dist/resource.js +12 -358
- package/dist/resource.js.map +1 -1
- package/package.json +5 -5
package/dist/resource.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../reactivity/src/debug.ts","../../reactivity/src/owner.ts","../../reactivity/src/signal.ts","../../reactivity/src/scheduler.ts","../../reactivity/src/effect.ts","../src/resource.ts"],"names":["effect","handled","keyId","request","dispose","entries"],"mappings":"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","file":"resource.js","sourcesContent":["import type { Effect } from './effect'\nimport type { Owner } from './owner'\nimport type { Dependency, ReadableSignal, Subscriber } from './signal'\n\nexport interface ReactivityDebugHooks {\n ownerCreated?(owner: Owner): void\n ownerNamed?(owner: Owner, name: string): void\n ownerDisposed?(owner: Owner): void\n signalCreated?(signal: ReadableSignal<unknown>, owner: Owner | null): void\n signalNamed?(signal: ReadableSignal<unknown>, name: string): void\n signalRead?(signal: ReadableSignal<unknown>, subscriber: Subscriber): void\n signalChanged?(signal: ReadableSignal<unknown>, previousValue: unknown, nextValue: unknown): void\n signalDisposed?(signal: ReadableSignal<unknown>): void\n dependencyTracked?(dependency: Dependency, subscriber: Subscriber): void\n dependencyUntracked?(dependency: Dependency, subscriber: Subscriber): void\n effectCreated?(effect: Effect, owner: Owner | null): void\n effectInvalidated?(effect: Effect): void\n effectRunStart?(effect: Effect): void\n effectRunEnd?(effect: Effect, error?: unknown, handled?: boolean): void\n effectDisposed?(effect: Effect): void\n memoCreated?(signal: ReadableSignal<unknown>, subscriber: Subscriber, owner: Owner | null): void\n memoInvalidated?(signal: ReadableSignal<unknown>): void\n flushStart?(): void\n flushEnd?(): void\n}\n\nlet activeDebugHooks: ReactivityDebugHooks | null = null\nconst signalNames = new WeakMap<object, string>()\n\nexport function setDebugHooks(hooks: ReactivityDebugHooks | null): ReactivityDebugHooks | null {\n const previous = activeDebugHooks\n activeDebugHooks = hooks\n return previous\n}\n\nexport function getDebugHooks(): ReactivityDebugHooks | null {\n return activeDebugHooks\n}\n\n/** 热路径守卫:无 hooks 时跳过 invokeDebug 调用,避免 rest 参数数组分配。 */\nexport function hasDebugHooks(): boolean {\n return activeDebugHooks !== null\n}\n\nexport function setSignalDebugName(signal: ReadableSignal<unknown>, name: string): void {\n signalNames.set(signal, name)\n invokeDebug('signalNamed', signal, name)\n}\n\nexport function getSignalDebugName(signal: ReadableSignal<unknown>): string | undefined {\n return signalNames.get(signal)\n}\n\nexport function invokeDebug<K extends keyof ReactivityDebugHooks>(\n name: K,\n ...args: Parameters<NonNullable<ReactivityDebugHooks[K]>>\n): void {\n const callback = activeDebugHooks?.[name] as ((...values: unknown[]) => void) | undefined\n if (!callback) return\n try {\n callback(...args)\n } catch {\n // Debug tooling must never change application behavior.\n }\n}\n","import { invokeDebug, hasDebugHooks } from './debug'\n\nexport interface Owner {\n readonly id: string\n readonly parent: Owner | null\n readonly children: readonly Owner[]\n readonly depth: number\n readonly disposed: boolean\n run<T>(fn: () => T): T\n addCleanup(cleanup: () => void): void\n onDispose(cleanup: () => void): void\n onError(handler: (error: unknown) => void): () => void\n handleError(error: unknown): boolean\n dispose(): void\n}\n\nlet currentOwner: Owner | null = null\nlet nextOwnerId = 1\nconst ownerNames = new WeakMap<Owner, string>()\n\nexport function createOwner(): Owner {\n const parent = currentOwner\n let disposed = parent?.disposed ?? false\n const children: Owner[] = []\n const cleanups: Array<() => void> = []\n const errorHandlers = new Set<(error: unknown) => void>()\n\n const owner: Owner = {\n id: `owner-${nextOwnerId++}`,\n parent,\n children,\n depth: (parent?.depth ?? -1) + 1,\n\n get disposed(): boolean {\n return disposed\n },\n\n run<T>(fn: () => T): T {\n if (disposed) throw new Error('Vobs: 已销毁的 Owner 不能继续运行')\n const previous = currentOwner\n currentOwner = owner\n try {\n return fn()\n } finally {\n currentOwner = previous\n }\n },\n\n addCleanup(cleanup: () => void): void {\n if (disposed) {\n cleanup()\n return\n }\n cleanups.push(cleanup)\n },\n\n onDispose(cleanup: () => void): void {\n owner.addCleanup(cleanup)\n },\n\n onError(handler: (error: unknown) => void): () => void {\n errorHandlers.add(handler)\n const remove = () => errorHandlers.delete(handler)\n owner.addCleanup(remove)\n return remove\n },\n\n handleError(error: unknown): boolean {\n for (const handler of [...errorHandlers].reverse()) {\n try {\n handler(error)\n return true\n } catch (handlerError) {\n return parent?.handleError(handlerError) ?? false\n }\n }\n return parent?.handleError(error) ?? false\n },\n\n dispose(): void {\n if (disposed) return\n disposed = true\n for (const child of [...children]) child.dispose()\n children.length = 0\n\n let firstError: unknown\n for (let index = cleanups.length - 1; index >= 0; index--) {\n try {\n cleanups[index]()\n } catch (error) {\n firstError ??= error\n }\n }\n cleanups.length = 0\n\n if (parent) {\n const index = parent.children.indexOf(owner)\n if (index >= 0) (parent.children as Owner[]).splice(index, 1)\n }\n if (hasDebugHooks()) invokeDebug('ownerDisposed', owner)\n if (firstError) throw firstError\n }\n }\n\n if (parent && !parent.disposed) (parent.children as Owner[]).push(owner)\n if (hasDebugHooks()) invokeDebug('ownerCreated', owner)\n return owner\n}\n\nexport function setOwnerDebugName(owner: Owner, name: string): void {\n ownerNames.set(owner, name)\n if (hasDebugHooks()) invokeDebug('ownerNamed', owner, name)\n}\n\nexport function getOwnerDebugName(owner: Owner): string | undefined {\n return ownerNames.get(owner)\n}\n\nexport function getCurrentOwner(): Owner | null {\n return currentOwner\n}\n\n/** Re-enter an Owner for an explicitly captured asynchronous continuation. */\nexport function runWithOwner<T>(owner: Owner, fn: () => T): T {\n return owner.run(fn)\n}\n\nexport function onDispose(cleanup: () => void): void {\n const owner = getCurrentOwner()\n if (!owner) throw new Error('Vobs: onDispose 必须在 Owner 作用域内调用')\n owner.onDispose(cleanup)\n}\n","import { getCurrentOwner } from './owner'\nimport { invokeDebug, hasDebugHooks, setSignalDebugName } from './debug'\n\nexport interface Dependency {\n unsubscribe(subscriber: Subscriber): void\n}\n\nexport interface Subscriber {\n readonly dependencies: Set<Dependency>\n readonly disposed: boolean\n notify(): void\n}\n\n/** 只读信号:派生值(memo)与只读上下文的最小契约,只能订阅与读取。 */\nexport interface ReadableSignal<T> extends Dependency {\n readonly value: T\n dispose(): void\n}\n\n/** 可写信号:state() 的返回类型。`set` 与 `.value =` 赋值语义完全一致。 */\nexport interface Signal<T> extends ReadableSignal<T> {\n value: T\n set(next: T): void\n}\n\nlet currentSubscriber: Subscriber | null = null\n\nexport function getCurrentSubscriber(): Subscriber | null {\n return currentSubscriber\n}\n\nexport function setCurrentSubscriber(subscriber: Subscriber | null): void {\n currentSubscriber = subscriber\n}\n\nexport function untrack<T>(fn: () => T): T {\n const previous = currentSubscriber\n currentSubscriber = null\n try {\n return fn()\n } finally {\n currentSubscriber = previous\n }\n}\n\nexport function trackDependency(dependency: Dependency): void {\n if (!currentSubscriber || currentSubscriber.disposed) return\n const added = !currentSubscriber.dependencies.has(dependency)\n currentSubscriber.dependencies.add(dependency)\n if (added && hasDebugHooks()) invokeDebug('dependencyTracked', dependency, currentSubscriber)\n}\n\n/**\n * Create a reactive state signal.\n *\n * State uses identity (`Object.is`) change detection. Objects and arrays are\n * intentionally shallow: mutating a nested property in place does not notify\n * subscribers; assign a new object/array to `value` to publish the change.\n *\n * The optional debug name is metadata for inspection tools only. It does not\n * affect subscriptions, scheduling, serialization, or the signal contract.\n */\nexport function state<T>(initialValue: T, debugName?: string): Signal<T> {\n let value = initialValue\n let disposed = false\n const subscribers = new Set<Subscriber>()\n\n const signalInstance: Signal<T> = {\n get value(): T {\n const subscriber = getCurrentSubscriber()\n if (subscriber && !subscriber.disposed) {\n subscribers.add(subscriber)\n if (hasDebugHooks()) invokeDebug('signalRead', signalInstance as Signal<unknown>, subscriber)\n trackDependency(signalInstance)\n }\n return value\n },\n\n set value(nextValue: T) {\n if (disposed || Object.is(value, nextValue)) return\n const previousValue = value\n value = nextValue\n if (hasDebugHooks()) invokeDebug('signalChanged', signalInstance as Signal<unknown>, previousValue, nextValue)\n for (const subscriber of [...subscribers]) subscriber.notify()\n },\n\n unsubscribe(subscriber: Subscriber): void {\n subscribers.delete(subscriber)\n },\n\n // 与 `.value =` 赋值同一条路径:判等短路、debug hook、notify 全部一致。\n // 以闭包实现,可安全地作为回调直接传递(无 this 绑定问题)。\n set(next: T): void {\n signalInstance.value = next\n },\n\n dispose(): void {\n if (disposed) return\n disposed = true\n subscribers.clear()\n if (hasDebugHooks()) invokeDebug('signalDisposed', signalInstance as Signal<unknown>)\n }\n }\n\n const owner = getCurrentOwner()\n owner?.addCleanup(signalInstance.dispose)\n if (hasDebugHooks()) invokeDebug('signalCreated', signalInstance as Signal<unknown>, owner)\n if (debugName?.trim()) setSignalDebugName(signalInstance as Signal<unknown>, debugName.trim())\n return signalInstance\n}\n","import type { Effect } from './effect'\nimport { hasDebugHooks, invokeDebug } from './debug'\n\nexport class Scheduler {\n private readonly dirtyEffects = new Set<Effect>()\n private readonly lowPriorityEffects = new Set<Effect>()\n // flush 不可重入(flushing 标志保证),缓冲数组可在轮次间安全复用,避免每轮分配。\n private readonly normalBuffer: Effect[] = []\n private readonly lowBuffer: Effect[] = []\n private flushing = false\n private scheduled = false\n private batchDepth = 0\n\n schedule(effect: Effect): void {\n if (effect.disposed) return\n this.dirtyEffects.add(effect)\n this.lowPriorityEffects.delete(effect)\n this.ensureScheduled()\n }\n\n /** Queue an effect behind normal updates while preserving deterministic order. */\n scheduleLow(effect: Effect): void {\n if (effect.disposed) return\n if (!this.dirtyEffects.has(effect)) this.lowPriorityEffects.add(effect)\n this.ensureScheduled()\n }\n\n private ensureScheduled(): void {\n if (this.batchDepth === 0 && !this.flushing && !this.scheduled) {\n this.scheduled = true\n queueMicrotask(() => {\n this.scheduled = false\n this.flush()\n })\n }\n }\n\n remove(effect: Effect): void {\n this.dirtyEffects.delete(effect)\n this.lowPriorityEffects.delete(effect)\n }\n\n batch<T>(fn: () => T): T {\n this.batchDepth++\n try {\n return fn()\n } finally {\n this.batchDepth--\n if (this.batchDepth === 0) this.flush()\n }\n }\n\n flush(): void {\n if (this.flushing || this.batchDepth > 0) return\n this.flushing = true\n const debugEnabled = hasDebugHooks()\n if (debugEnabled) invokeDebug('flushStart')\n let rounds = 0\n let firstError: unknown\n let hasError = false\n try {\n while (this.dirtyEffects.size > 0 || this.lowPriorityEffects.size > 0) {\n if (++rounds > 100) {\n this.dirtyEffects.clear()\n this.lowPriorityEffects.clear()\n throw new Error('Vobs: 响应式更新超过 100 轮,可能存在循环依赖')\n }\n\n // normal 先、low 后,两组分别排序:与旧的合并排序语义一致\n // (旧比较器里 low 优先级本就高于 depth),但消除了比较器内的 Set 查找。\n this.collectRunnable(this.dirtyEffects, this.normalBuffer)\n this.collectRunnable(this.lowPriorityEffects, this.lowBuffer)\n sortEffects(this.normalBuffer)\n sortEffects(this.lowBuffer)\n for (const effect of this.normalBuffer) {\n try {\n effect.run()\n } catch (error) {\n // Isolate one failed effect from the rest of the flush. Re-throw\n // the first error after all runnable effects have had a chance.\n if (!hasError) {\n firstError = error\n hasError = true\n }\n }\n }\n for (const effect of this.lowBuffer) {\n try {\n effect.run()\n } catch (error) {\n if (!hasError) {\n firstError = error\n hasError = true\n }\n }\n }\n this.normalBuffer.length = 0\n this.lowBuffer.length = 0\n }\n } finally {\n this.normalBuffer.length = 0\n this.lowBuffer.length = 0\n this.flushing = false\n if (debugEnabled) invokeDebug('flushEnd')\n }\n if (hasError) throw firstError\n }\n\n /** 收集未 disposed 的 effect 并清空源集合;run() 期间新调度的 effect 留给下一轮。 */\n private collectRunnable(source: Set<Effect>, target: Effect[]): void {\n for (const effect of source) {\n if (!effect.disposed) target.push(effect)\n }\n source.clear()\n }\n}\n\n/** depth 深的先跑(子 effect 先于父),同深度按创建顺序。 */\nfunction sortEffects(effects: Effect[]): void {\n if (effects.length > 1) {\n effects.sort((a, b) => b.depth - a.depth || a.order - b.order)\n }\n}\n\nexport const scheduler = new Scheduler()\n\nexport function batch<T>(fn: () => T): T {\n return scheduler.batch(fn)\n}\n\n/** Schedule a low-priority effect explicitly. */\nexport function scheduleLow(effect: Effect): void {\n effect.scheduleLow()\n}\n","import { getCurrentOwner } from './owner'\nimport { invokeDebug, hasDebugHooks } from './debug'\nimport {\n getCurrentSubscriber,\n setCurrentSubscriber,\n type Dependency,\n type Subscriber\n} from './signal'\nimport { scheduler } from './scheduler'\n\nexport interface Effect extends Subscriber {\n readonly order: number\n readonly depth: number\n run(): void\n scheduleLow(): void\n dispose(): void\n}\n\nexport type EffectCleanup = () => void\nexport type EffectCallback = () => void | EffectCleanup\n\nlet nextEffectOrder = 1\n\nexport function cleanupDependencies(subscriber: Subscriber): void {\n for (const dependency of subscriber.dependencies) {\n dependency.unsubscribe(subscriber)\n if (hasDebugHooks()) invokeDebug('dependencyUntracked', dependency, subscriber)\n }\n subscriber.dependencies.clear()\n}\n\nexport function effect(callback: EffectCallback): Effect {\n const owner = getCurrentOwner()\n let cleanup: EffectCleanup | undefined\n let dirty = true\n let disposed = false\n\n const eff: Effect = {\n order: nextEffectOrder++,\n depth: owner?.depth ?? 0,\n dependencies: new Set<Dependency>(),\n\n get disposed(): boolean {\n return disposed\n },\n\n notify(): void {\n if (disposed || dirty) return\n dirty = true\n if (hasDebugHooks()) invokeDebug('effectInvalidated', eff)\n scheduler.schedule(eff)\n },\n\n run(): void {\n if (disposed || !dirty) return\n dirty = false\n const previousCleanup = cleanup\n cleanup = undefined\n let cleanupError: unknown\n if (previousCleanup) {\n try {\n previousCleanup()\n } catch (error) {\n const handled = owner?.handleError(error) ?? false\n if (!handled) cleanupError = error\n }\n }\n cleanupDependencies(eff)\n\n const previous = getCurrentSubscriber()\n setCurrentSubscriber(eff)\n let thrown: unknown\n let handled = false\n if (hasDebugHooks()) invokeDebug('effectRunStart', eff)\n try {\n const result = owner ? owner.run(callback) : callback()\n cleanup = typeof result === 'function' ? result : undefined\n } catch (error) {\n thrown = error\n handled = owner?.handleError(error) ?? false\n if (!handled) throw error\n } finally {\n setCurrentSubscriber(previous)\n if (hasDebugHooks()) invokeDebug('effectRunEnd', eff, thrown, handled)\n }\n if (cleanupError && !thrown) throw cleanupError\n },\n\n scheduleLow(): void {\n if (disposed || dirty) return\n dirty = true\n scheduler.scheduleLow(eff)\n },\n\n dispose(): void {\n if (disposed) return\n disposed = true\n dirty = false\n scheduler.remove(eff)\n const previousCleanup = cleanup\n cleanup = undefined\n let cleanupError: unknown\n if (previousCleanup) {\n try {\n previousCleanup()\n } catch (error) {\n const handled = owner?.handleError(error) ?? false\n if (!handled) cleanupError = error\n }\n }\n cleanupDependencies(eff)\n if (hasDebugHooks()) invokeDebug('effectDisposed', eff)\n if (cleanupError) throw cleanupError\n }\n }\n\n owner?.addCleanup(eff.dispose)\n if (hasDebugHooks()) invokeDebug('effectCreated', eff, owner)\n eff.run()\n return eff\n}\n\nexport const renderEffect = effect\n","import { createOwner, effect, getCurrentOwner, state, type Signal } from '@vobs/reactivity'\n\nexport type ResourceKey = readonly unknown[]\nexport type ResourceKeySource = ResourceKey | Signal<ResourceKey> | (() => ResourceKey)\nexport type ResourceFetcher<T> = (signal: AbortSignal) => T | PromiseLike<T>\nexport type ResourceCacheStrategy = 'cache-first' | 'stale-while-revalidate'\n\nexport interface Resource<T> {\n readonly key: ResourceKey | undefined\n readonly data: Signal<T | null>\n readonly error: Signal<Error | null>\n readonly loading: Signal<boolean>\n dispose(): void\n refetch(): Promise<T>\n prefetch(): Promise<T>\n invalidate(): void\n mutate(next: T | ((current: T | null) => T)): void\n optimistic<Result>(\n next: T | ((current: T | null) => T),\n action: () => Result | PromiseLike<Result>\n ): Promise<Result>\n}\n\nexport interface ResourceOptions<T> {\n key?: ResourceKeySource\n fetcher: ResourceFetcher<T>\n staleTime?: number\n cache?: boolean\n strategy?: ResourceCacheStrategy\n retry?: number\n retryDelay?: RetryDelay\n}\n\nexport type RetryDelay = number | ((attempt: number, error: Error) => number)\n\nexport interface ResourceSnapshot<T> {\n readonly data: T | null\n readonly error: Error | null\n readonly loading: boolean\n readonly updatedAt: number\n}\n\nexport interface ResourceDehydratedEntry {\n readonly key: ResourceKey\n readonly data: unknown\n readonly updatedAt: number\n readonly staleTime: number\n}\n\nexport interface ResourceDehydratedState {\n readonly version: 1\n readonly entries: readonly ResourceDehydratedEntry[]\n}\n\nexport interface ResourceClientOptions {\n staleTime?: number\n retry?: number\n retryDelay?: RetryDelay\n onError?: (error: Error, key: ResourceKey | undefined) => void\n}\n\nexport interface ResourceClient {\n resource<T>(fetcher: ResourceFetcher<T>): Resource<T>\n resource<T>(options: ResourceOptions<T>): Resource<T>\n invalidate(key: ResourceKey): void\n prefetchAll(): Promise<void>\n dehydrate(): ResourceDehydratedState\n hydrate(snapshot: unknown): void\n get<T>(key: ResourceKey): ResourceSnapshot<T> | undefined\n clear(): void\n}\n\ninterface ResourceEntry<T> {\n readonly key: ResourceKey | undefined\n readonly data: Signal<T | null>\n readonly error: Signal<Error | null>\n readonly loading: Signal<boolean>\n readonly staleTime: number\n readonly subscribers: Set<object>\n updatedAt: number\n revision: number\n inFlight: Promise<T> | null\n controller: AbortController | null\n}\n\nconst defaultClient = createResourceClient()\n\nexport function resource<T>(fetcher: ResourceFetcher<T>): Resource<T>\nexport function resource<T>(options: ResourceOptions<T>): Resource<T>\nexport function resource<T>(\n optionsOrFetcher: ResourceOptions<T> | ResourceFetcher<T>\n): Resource<T> {\n return typeof optionsOrFetcher === 'function'\n ? defaultClient.resource(optionsOrFetcher)\n : defaultClient.resource(optionsOrFetcher)\n}\n\nexport function createResourceClient(options: ResourceClientOptions = {}): ResourceClient {\n let owner = createOwner()\n const cache = new Map<string, ResourceEntry<unknown>>()\n const entries = new Set<ResourceEntry<unknown>>()\n const defaultStaleTime = validateStaleTime(options.staleTime ?? 0)\n const defaultRetry = validateRetry(options.retry ?? 0)\n const defaultRetryDelay = options.retryDelay ?? 0\n\n function createEntry<T>(key: ResourceKey | undefined, staleTime: number): ResourceEntry<T> {\n const entry: ResourceEntry<T> = owner.run(() => ({\n key,\n data: state<T | null>(null),\n error: state<Error | null>(null),\n loading: state(false),\n staleTime,\n subscribers: new Set(),\n updatedAt: 0,\n revision: 0,\n inFlight: null,\n controller: null\n }))\n owner.onDispose(() => entry.controller?.abort())\n entries.add(entry as ResourceEntry<unknown>)\n return entry\n }\n\n function execute<T>(\n entry: ResourceEntry<T>,\n fetcher: ResourceFetcher<T>,\n retry: number,\n retryDelay: RetryDelay\n ): Promise<T> {\n if (entry.inFlight) return entry.inFlight\n\n entry.loading.value = true\n entry.error.value = null\n const controller = new AbortController()\n entry.controller = controller\n const revision = entry.revision\n const request = requestWithRetry(fetcher, controller.signal, retry, retryDelay)\n entry.inFlight = request.then(\n data => {\n // 请求飞行期间 mutate/optimistic 已推进 revision 时,迟到的旧结果不得覆盖新数据。\n if (entry.revision === revision) {\n entry.revision++\n entry.data.value = data\n entry.error.value = null\n entry.updatedAt = Date.now()\n }\n return data\n },\n reason => {\n const error = toError(reason)\n if (entry.revision === revision) {\n entry.error.value = error\n if (!controller.signal.aborted) options.onError?.(error, entry.key)\n }\n throw error\n }\n ).finally(() => {\n entry.loading.value = false\n if (entry.controller === controller) entry.controller = null\n entry.inFlight = null\n })\n return entry.inFlight\n }\n\n function isFresh(entry: ResourceEntry<unknown>): boolean {\n return entry.updatedAt > 0 && Date.now() - entry.updatedAt <= entry.staleTime\n }\n\n function createResource<T>(\n optionsOrFetcher: ResourceOptions<T> | ResourceFetcher<T>\n ): Resource<T> {\n const config = normalizeOptions(optionsOrFetcher, defaultStaleTime, defaultRetry, defaultRetryDelay)\n if (isReactiveKey(config.key)) return createReactiveResource(config)\n const staticKey = resolveKey(config.key)\n const keyId = config.cache && staticKey ? stableSerialize(staticKey) : undefined\n let entry = keyId ? cache.get(keyId) as ResourceEntry<T> | undefined : undefined\n if (!entry) {\n entry = createEntry(staticKey, config.staleTime)\n if (keyId) cache.set(keyId, entry as ResourceEntry<unknown>)\n }\n\n const request = (force: boolean): Promise<T> => {\n if (entry.inFlight) return entry.inFlight\n if (!force && config.strategy === 'stale-while-revalidate' && entry.data.value !== null) {\n if (!isFresh(entry)) void execute(entry, config.fetcher, config.retry, config.retryDelay).catch(() => undefined)\n return Promise.resolve(entry.data.value as T)\n }\n if (!force && isFresh(entry as ResourceEntry<unknown>)) return Promise.resolve(entry.data.value as T)\n return execute(entry, config.fetcher, config.retry, config.retryDelay)\n }\n\n // Initial failures are represented by error and must not become unhandled rejections.\n void request(false).catch(() => undefined)\n\n const resourceHandle = {}\n entry.subscribers.add(resourceHandle)\n const dispose = (): void => {\n if (!entry?.subscribers.delete(resourceHandle)) return\n if (entry.subscribers.size === 0) entry.controller?.abort()\n }\n getCurrentOwner()?.onDispose(dispose)\n\n return {\n key: staticKey,\n data: entry.data,\n error: entry.error,\n loading: entry.loading,\n dispose,\n refetch: () => request(true),\n prefetch: () => request(false),\n invalidate: () => { entry.updatedAt = 0 },\n mutate(next) {\n const value = typeof next === 'function'\n ? (next as (current: T | null) => T)(entry.data.value)\n : next\n entry.revision++\n entry.data.value = value\n entry.error.value = null\n entry.updatedAt = Date.now()\n },\n optimistic<Result>(\n next: T | ((current: T | null) => T),\n action: () => Result | PromiseLike<Result>\n ): Promise<Result> {\n const previous = {\n data: entry.data.value,\n error: entry.error.value,\n updatedAt: entry.updatedAt\n }\n const value = typeof next === 'function'\n ? (next as (current: T | null) => T)(entry.data.value)\n : next\n const revision = ++entry.revision\n entry.data.value = value\n entry.error.value = null\n entry.updatedAt = Date.now()\n\n let actionResult: Promise<Result>\n try {\n actionResult = Promise.resolve(action())\n } catch (reason) {\n actionResult = Promise.reject(reason)\n }\n return actionResult.catch(reason => {\n const error = toError(reason)\n if (entry.revision === revision) {\n entry.revision++\n entry.data.value = previous.data\n entry.error.value = error\n entry.updatedAt = previous.updatedAt\n options.onError?.(error, entry.key)\n }\n throw error\n })\n }\n }\n\n function createReactiveResource(\n reactiveConfig: ReturnType<typeof normalizeOptions<T>>\n ): Resource<T> {\n const data = state<T | null>(null)\n const error = state<Error | null>(null)\n const loading = state(false)\n const handle = {}\n let activeEntry: ResourceEntry<T> | undefined\n let activeKey: ResourceKey | undefined\n let disposed = false\n\n const sync = (): void => {\n if (!activeEntry) return\n data.value = activeEntry.data.value\n error.value = activeEntry.error.value\n loading.value = activeEntry.loading.value\n }\n\n const switchKey = (nextKey: ResourceKey): void => {\n const keyId = reactiveConfig.cache ? stableSerialize(nextKey) : undefined\n let nextEntry = keyId ? cache.get(keyId) as ResourceEntry<T> | undefined : undefined\n if (!nextEntry) {\n nextEntry = createEntry(nextKey, reactiveConfig.staleTime)\n if (keyId) cache.set(keyId, nextEntry as ResourceEntry<unknown>)\n }\n if (activeEntry === nextEntry) {\n sync()\n return\n }\n if (activeEntry) {\n activeEntry.subscribers.delete(handle)\n if (activeEntry.subscribers.size === 0) activeEntry.controller?.abort()\n }\n activeEntry = nextEntry\n activeKey = nextKey\n activeEntry.subscribers.add(handle)\n sync()\n void request(false).catch(() => undefined)\n }\n\n const stop = effect(() => {\n if (disposed) return\n const nextKey = resolveKey(reactiveConfig.key)\n if (!nextKey) throw new Error('resource: 响应式 key 不能是 undefined')\n switchKey(nextKey)\n sync()\n })\n\n const dispose = (): void => {\n if (disposed) return\n disposed = true\n stop.dispose()\n if (activeEntry) {\n activeEntry.subscribers.delete(handle)\n if (activeEntry.subscribers.size === 0) activeEntry.controller?.abort()\n }\n activeEntry = undefined\n }\n getCurrentOwner()?.onDispose(dispose)\n\n return {\n get key(): ResourceKey | undefined { return activeKey },\n data,\n error,\n loading,\n dispose,\n refetch: () => request(true),\n prefetch: () => request(false),\n invalidate: () => { if (activeEntry) activeEntry.updatedAt = 0 },\n mutate(next) {\n if (!activeEntry) return\n const value = typeof next === 'function'\n ? (next as (current: T | null) => T)(activeEntry.data.value)\n : next\n activeEntry.revision++\n activeEntry.data.value = value\n activeEntry.error.value = null\n activeEntry.updatedAt = Date.now()\n },\n optimistic<Result>(\n next: T | ((current: T | null) => T),\n action: () => Result | PromiseLike<Result>\n ): Promise<Result> {\n if (!activeEntry) return Promise.reject(new Error('resource: key 尚未初始化'))\n return createOptimistic<Result>(activeEntry, next, action)\n }\n }\n\n function request(force: boolean): Promise<T> {\n if (!activeEntry) return Promise.reject(new Error('resource: key 尚未初始化'))\n if (!force && isFresh(activeEntry) && reactiveConfig.strategy === 'cache-first') {\n return Promise.resolve(activeEntry.data.value as T)\n }\n if (!force && reactiveConfig.strategy === 'stale-while-revalidate'\n && activeEntry.data.value !== null) {\n if (!isFresh(activeEntry)) void execute(activeEntry, reactiveConfig.fetcher, reactiveConfig.retry, reactiveConfig.retryDelay)\n .catch(() => undefined)\n return Promise.resolve(activeEntry.data.value as T)\n }\n return execute(activeEntry, reactiveConfig.fetcher, reactiveConfig.retry, reactiveConfig.retryDelay)\n }\n }\n\n function createOptimistic<Result>(\n target: ResourceEntry<T>,\n next: T | ((current: T | null) => T),\n action: () => Result | PromiseLike<Result>\n ): Promise<Result> {\n const previous = { data: target.data.value, error: target.error.value, updatedAt: target.updatedAt }\n const value = typeof next === 'function'\n ? (next as (current: T | null) => T)(target.data.value)\n : next\n const revision = ++target.revision\n target.data.value = value\n target.error.value = null\n target.updatedAt = Date.now()\n return Promise.resolve().then(action).catch(reason => {\n const failure = toError(reason)\n if (target.revision === revision) {\n target.revision++\n target.data.value = previous.data\n target.error.value = failure\n target.updatedAt = previous.updatedAt\n options.onError?.(failure, target.key)\n }\n throw failure\n })\n }\n }\n\n return {\n resource: createResource,\n invalidate(key) {\n const entry = cache.get(stableSerialize(key))\n if (entry) entry.updatedAt = 0\n },\n async prefetchAll() {\n const requests = [...entries]\n .map(entry => entry.inFlight)\n .filter((request): request is Promise<unknown> => request !== null)\n await Promise.allSettled(requests)\n },\n dehydrate() {\n const entries: ResourceDehydratedEntry[] = []\n for (const entry of cache.values()) {\n if (entry.updatedAt <= 0 || entry.error.value) continue\n entries.push({\n key: entry.key ?? [],\n data: entry.data.value,\n updatedAt: entry.updatedAt,\n staleTime: entry.staleTime\n })\n }\n return { version: 1, entries }\n },\n hydrate(snapshot) {\n for (const restored of parseDehydratedState(snapshot).entries) {\n const keyId = stableSerialize(restored.key)\n const entry = cache.get(keyId) as ResourceEntry<unknown> | undefined\n ?? createEntry(restored.key, restored.staleTime)\n entry.data.value = restored.data\n entry.error.value = null\n entry.loading.value = false\n entry.updatedAt = restored.updatedAt\n entry.revision++\n cache.set(keyId, entry)\n }\n },\n get<T>(key: ResourceKey): ResourceSnapshot<T> | undefined {\n const entry = cache.get(stableSerialize(key)) as ResourceEntry<T> | undefined\n if (!entry) return undefined\n return {\n data: entry.data.value,\n error: entry.error.value,\n loading: entry.loading.value,\n updatedAt: entry.updatedAt\n }\n },\n clear() {\n cache.clear()\n entries.clear()\n owner.dispose()\n owner = createOwner()\n }\n }\n}\n\nfunction normalizeOptions<T>(\n optionsOrFetcher: ResourceOptions<T> | ResourceFetcher<T>,\n defaultStaleTime: number,\n defaultRetry: number,\n defaultRetryDelay: RetryDelay\n): Required<Pick<ResourceOptions<T>, 'fetcher' | 'staleTime' | 'cache' | 'strategy' | 'retry' | 'retryDelay'>> & Pick<ResourceOptions<T>, 'key'> {\n if (typeof optionsOrFetcher === 'function') {\n return {\n fetcher: optionsOrFetcher,\n staleTime: defaultStaleTime,\n cache: false,\n strategy: 'cache-first',\n retry: defaultRetry,\n retryDelay: defaultRetryDelay\n }\n }\n return {\n key: optionsOrFetcher.key,\n fetcher: optionsOrFetcher.fetcher,\n staleTime: validateStaleTime(optionsOrFetcher.staleTime ?? defaultStaleTime),\n cache: optionsOrFetcher.cache ?? Boolean(optionsOrFetcher.key),\n strategy: optionsOrFetcher.strategy ?? 'cache-first',\n retry: validateRetry(optionsOrFetcher.retry ?? defaultRetry),\n retryDelay: optionsOrFetcher.retryDelay ?? defaultRetryDelay\n }\n}\n\nfunction isReactiveKey(key: ResourceKeySource | undefined): key is Signal<ResourceKey> | (() => ResourceKey) {\n return typeof key === 'function' || isSignal(key)\n}\n\nfunction isSignal(value: unknown): value is Signal<ResourceKey> {\n return value !== null && typeof value === 'object' && 'value' in value\n && typeof (value as { dispose?: unknown }).dispose === 'function'\n}\n\nfunction resolveKey(source: ResourceKeySource | undefined): ResourceKey | undefined {\n const key = typeof source === 'function'\n ? source()\n : isSignal(source) ? source.value : source\n if (key === undefined) return undefined\n if (!Array.isArray(key)) throw new Error('resource: key 必须是数组')\n return key\n}\n\nfunction requestWithRetry<T>(\n fetcher: ResourceFetcher<T>,\n signal: AbortSignal,\n retry: number,\n retryDelay: RetryDelay\n): Promise<T> {\n let attempt = 0\n const request = (): Promise<T> => Promise.resolve().then(() => fetcher(signal)).catch(reason => {\n const error = toError(reason)\n if (signal.aborted) throw error\n if (attempt++ >= retry) throw error\n const delay = resolveRetryDelay(retryDelay, attempt, error)\n return delay > 0 ? wait(delay).then(request) : request()\n })\n return request()\n}\n\nfunction resolveRetryDelay(retryDelay: RetryDelay, attempt: number, error: Error): number {\n const delay = typeof retryDelay === 'function' ? retryDelay(attempt, error) : retryDelay\n if (!Number.isFinite(delay) || delay < 0) {\n throw new Error('resource: retryDelay 必须是大于等于 0 的有限数字')\n }\n return delay\n}\n\nfunction wait(delay: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, delay))\n}\n\nfunction validateStaleTime(staleTime: number): number {\n if (!Number.isFinite(staleTime) || staleTime < 0) {\n throw new Error('resource: staleTime 必须是大于等于 0 的有限数字')\n }\n return staleTime\n}\n\nfunction validateRetry(retry: number): number {\n if (!Number.isInteger(retry) || retry < 0) {\n throw new Error('resource: retry 必须是大于等于 0 的整数')\n }\n return retry\n}\n\nfunction toError(reason: unknown): Error {\n return reason instanceof Error ? reason : new Error(String(reason))\n}\n\nexport function stableSerialize(value: unknown): string {\n return serialize(value, new Set<object>())\n}\n\nexport function serializeResourceState(snapshot: ResourceDehydratedState): string {\n const serialized = JSON.stringify(snapshot)\n return serialized\n .replace(/</g, '\\\\u003c')\n .replace(/>/g, '\\\\u003e')\n .replace(/&/g, '\\\\u0026')\n .replace(/\\u2028/g, '\\\\u2028')\n .replace(/\\u2029/g, '\\\\u2029')\n}\n\nfunction parseDehydratedState(snapshot: unknown): ResourceDehydratedState {\n let value: unknown = snapshot\n if (typeof snapshot === 'string') {\n try {\n value = JSON.parse(snapshot)\n } catch {\n throw new Error('resource: 预取状态不是有效 JSON')\n }\n }\n if (!value || typeof value !== 'object') throw new Error('resource: 预取状态格式无效')\n const candidate = value as { version?: unknown; entries?: unknown }\n if (candidate.version !== 1 || !Array.isArray(candidate.entries)) {\n throw new Error('resource: 预取状态版本或 entries 无效')\n }\n\n const entries: ResourceDehydratedEntry[] = []\n for (const entry of candidate.entries) {\n if (!entry || typeof entry !== 'object') throw new Error('resource: 预取条目格式无效')\n const candidateEntry = entry as Partial<ResourceDehydratedEntry>\n if (!Array.isArray(candidateEntry.key)\n || typeof candidateEntry.updatedAt !== 'number'\n || !Number.isFinite(candidateEntry.updatedAt)\n || typeof candidateEntry.staleTime !== 'number'\n || !Number.isFinite(candidateEntry.staleTime)\n || candidateEntry.staleTime < 0) {\n throw new Error('resource: 预取条目字段无效')\n }\n // Re-serialize now so untrusted keys cannot poison the cache map.\n stableSerialize(candidateEntry.key)\n entries.push({\n key: candidateEntry.key,\n data: candidateEntry.data,\n updatedAt: candidateEntry.updatedAt,\n staleTime: candidateEntry.staleTime\n })\n }\n return { version: 1, entries }\n}\n\nfunction serialize(value: unknown, stack: Set<object>): string {\n if (value === null) return 'null'\n switch (typeof value) {\n case 'string': return `string:${JSON.stringify(value)}`\n case 'boolean': return `boolean:${value}`\n case 'number':\n if (Number.isNaN(value)) return 'number:NaN'\n if (Object.is(value, -0)) return 'number:-0'\n return `number:${value}`\n case 'bigint': return `bigint:${value}`\n case 'undefined': return 'undefined'\n case 'function':\n case 'symbol':\n throw new Error(`resource: key 不能包含 ${typeof value}`)\n case 'object': break\n }\n\n const object = value as object\n if (stack.has(object)) throw new Error('resource: key 不能包含循环引用')\n stack.add(object)\n try {\n if (Array.isArray(object)) {\n return `array:[${object.map(item => serialize(item, stack)).join(',')}]`\n }\n if (object instanceof Date) return `date:${object.toJSON()}`\n if (object instanceof RegExp) return `regexp:${object.toString()}`\n const entries = Object.keys(object).sort().map(key => `${JSON.stringify(key)}:${serialize((object as Record<string, unknown>)[key], stack)}`)\n return `object:{${entries.join(',')}}`\n } finally {\n stack.delete(object)\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/resource.ts"],"sourcesContent":["import { createOwner, effect, getCurrentOwner, state, type Signal } from '@vobs/reactivity'\n\nexport type ResourceKey = readonly unknown[]\nexport type ResourceKeySource = ResourceKey | Signal<ResourceKey> | (() => ResourceKey)\nexport type ResourceFetcher<T> = (signal: AbortSignal) => T | PromiseLike<T>\nexport type ResourceCacheStrategy = 'cache-first' | 'stale-while-revalidate'\n\nexport interface Resource<T> {\n readonly key: ResourceKey | undefined\n readonly data: Signal<T | null>\n readonly error: Signal<Error | null>\n readonly loading: Signal<boolean>\n dispose(): void\n refetch(): Promise<T>\n prefetch(): Promise<T>\n invalidate(): void\n mutate(next: T | ((current: T | null) => T)): void\n optimistic<Result>(\n next: T | ((current: T | null) => T),\n action: () => Result | PromiseLike<Result>\n ): Promise<Result>\n}\n\nexport interface ResourceOptions<T> {\n key?: ResourceKeySource\n fetcher: ResourceFetcher<T>\n staleTime?: number\n cache?: boolean\n strategy?: ResourceCacheStrategy\n retry?: number\n retryDelay?: RetryDelay\n}\n\nexport type RetryDelay = number | ((attempt: number, error: Error) => number)\n\nexport interface ResourceSnapshot<T> {\n readonly data: T | null\n readonly error: Error | null\n readonly loading: boolean\n readonly updatedAt: number\n}\n\nexport interface ResourceDehydratedEntry {\n readonly key: ResourceKey\n readonly data: unknown\n readonly updatedAt: number\n readonly staleTime: number\n}\n\nexport interface ResourceDehydratedState {\n readonly version: 1\n readonly entries: readonly ResourceDehydratedEntry[]\n}\n\nexport interface ResourceClientOptions {\n staleTime?: number\n retry?: number\n retryDelay?: RetryDelay\n onError?: (error: Error, key: ResourceKey | undefined) => void\n}\n\nexport interface ResourceClient {\n resource<T>(fetcher: ResourceFetcher<T>): Resource<T>\n resource<T>(options: ResourceOptions<T>): Resource<T>\n invalidate(key: ResourceKey): void\n prefetchAll(): Promise<void>\n dehydrate(): ResourceDehydratedState\n hydrate(snapshot: unknown): void\n get<T>(key: ResourceKey): ResourceSnapshot<T> | undefined\n clear(): void\n}\n\ninterface ResourceEntry<T> {\n readonly key: ResourceKey | undefined\n readonly data: Signal<T | null>\n readonly error: Signal<Error | null>\n readonly loading: Signal<boolean>\n readonly staleTime: number\n readonly subscribers: Set<object>\n updatedAt: number\n revision: number\n inFlight: Promise<T> | null\n controller: AbortController | null\n}\n\nconst defaultClient = createResourceClient()\n\nexport function resource<T>(fetcher: ResourceFetcher<T>): Resource<T>\nexport function resource<T>(options: ResourceOptions<T>): Resource<T>\nexport function resource<T>(\n optionsOrFetcher: ResourceOptions<T> | ResourceFetcher<T>\n): Resource<T> {\n return typeof optionsOrFetcher === 'function'\n ? defaultClient.resource(optionsOrFetcher)\n : defaultClient.resource(optionsOrFetcher)\n}\n\nexport function createResourceClient(options: ResourceClientOptions = {}): ResourceClient {\n let owner = createOwner()\n const cache = new Map<string, ResourceEntry<unknown>>()\n const entries = new Set<ResourceEntry<unknown>>()\n const defaultStaleTime = validateStaleTime(options.staleTime ?? 0)\n const defaultRetry = validateRetry(options.retry ?? 0)\n const defaultRetryDelay = options.retryDelay ?? 0\n\n function createEntry<T>(key: ResourceKey | undefined, staleTime: number): ResourceEntry<T> {\n const entry: ResourceEntry<T> = owner.run(() => ({\n key,\n data: state<T | null>(null),\n error: state<Error | null>(null),\n loading: state(false),\n staleTime,\n subscribers: new Set(),\n updatedAt: 0,\n revision: 0,\n inFlight: null,\n controller: null\n }))\n owner.onDispose(() => entry.controller?.abort())\n entries.add(entry as ResourceEntry<unknown>)\n return entry\n }\n\n function execute<T>(\n entry: ResourceEntry<T>,\n fetcher: ResourceFetcher<T>,\n retry: number,\n retryDelay: RetryDelay\n ): Promise<T> {\n if (entry.inFlight) return entry.inFlight\n\n entry.loading.value = true\n entry.error.value = null\n const controller = new AbortController()\n entry.controller = controller\n const revision = entry.revision\n const request = requestWithRetry(fetcher, controller.signal, retry, retryDelay)\n entry.inFlight = request.then(\n data => {\n // 请求飞行期间 mutate/optimistic 已推进 revision 时,迟到的旧结果不得覆盖新数据。\n if (entry.revision === revision) {\n entry.revision++\n entry.data.value = data\n entry.error.value = null\n entry.updatedAt = Date.now()\n }\n return data\n },\n reason => {\n const error = toError(reason)\n if (entry.revision === revision) {\n entry.error.value = error\n if (!controller.signal.aborted) options.onError?.(error, entry.key)\n }\n throw error\n }\n ).finally(() => {\n entry.loading.value = false\n if (entry.controller === controller) entry.controller = null\n entry.inFlight = null\n })\n return entry.inFlight\n }\n\n function isFresh(entry: ResourceEntry<unknown>): boolean {\n return entry.updatedAt > 0 && Date.now() - entry.updatedAt <= entry.staleTime\n }\n\n function createResource<T>(\n optionsOrFetcher: ResourceOptions<T> | ResourceFetcher<T>\n ): Resource<T> {\n const config = normalizeOptions(optionsOrFetcher, defaultStaleTime, defaultRetry, defaultRetryDelay)\n if (isReactiveKey(config.key)) return createReactiveResource(config)\n const staticKey = resolveKey(config.key)\n const keyId = config.cache && staticKey ? stableSerialize(staticKey) : undefined\n let entry = keyId ? cache.get(keyId) as ResourceEntry<T> | undefined : undefined\n if (!entry) {\n entry = createEntry(staticKey, config.staleTime)\n if (keyId) cache.set(keyId, entry as ResourceEntry<unknown>)\n }\n\n const request = (force: boolean): Promise<T> => {\n if (entry.inFlight) return entry.inFlight\n if (!force && config.strategy === 'stale-while-revalidate' && entry.data.value !== null) {\n if (!isFresh(entry)) void execute(entry, config.fetcher, config.retry, config.retryDelay).catch(() => undefined)\n return Promise.resolve(entry.data.value as T)\n }\n if (!force && isFresh(entry as ResourceEntry<unknown>)) return Promise.resolve(entry.data.value as T)\n return execute(entry, config.fetcher, config.retry, config.retryDelay)\n }\n\n // Initial failures are represented by error and must not become unhandled rejections.\n void request(false).catch(() => undefined)\n\n const resourceHandle = {}\n entry.subscribers.add(resourceHandle)\n const dispose = (): void => {\n if (!entry?.subscribers.delete(resourceHandle)) return\n if (entry.subscribers.size === 0) entry.controller?.abort()\n }\n getCurrentOwner()?.onDispose(dispose)\n\n return {\n key: staticKey,\n data: entry.data,\n error: entry.error,\n loading: entry.loading,\n dispose,\n refetch: () => request(true),\n prefetch: () => request(false),\n invalidate: () => { entry.updatedAt = 0 },\n mutate(next) {\n const value = typeof next === 'function'\n ? (next as (current: T | null) => T)(entry.data.value)\n : next\n entry.revision++\n entry.data.value = value\n entry.error.value = null\n entry.updatedAt = Date.now()\n },\n optimistic<Result>(\n next: T | ((current: T | null) => T),\n action: () => Result | PromiseLike<Result>\n ): Promise<Result> {\n const previous = {\n data: entry.data.value,\n error: entry.error.value,\n updatedAt: entry.updatedAt\n }\n const value = typeof next === 'function'\n ? (next as (current: T | null) => T)(entry.data.value)\n : next\n const revision = ++entry.revision\n entry.data.value = value\n entry.error.value = null\n entry.updatedAt = Date.now()\n\n let actionResult: Promise<Result>\n try {\n actionResult = Promise.resolve(action())\n } catch (reason) {\n actionResult = Promise.reject(reason)\n }\n return actionResult.catch(reason => {\n const error = toError(reason)\n if (entry.revision === revision) {\n entry.revision++\n entry.data.value = previous.data\n entry.error.value = error\n entry.updatedAt = previous.updatedAt\n options.onError?.(error, entry.key)\n }\n throw error\n })\n }\n }\n\n function createReactiveResource(\n reactiveConfig: ReturnType<typeof normalizeOptions<T>>\n ): Resource<T> {\n const data = state<T | null>(null)\n const error = state<Error | null>(null)\n const loading = state(false)\n const handle = {}\n let activeEntry: ResourceEntry<T> | undefined\n let activeKey: ResourceKey | undefined\n let disposed = false\n\n const sync = (): void => {\n if (!activeEntry) return\n data.value = activeEntry.data.value\n error.value = activeEntry.error.value\n loading.value = activeEntry.loading.value\n }\n\n const switchKey = (nextKey: ResourceKey): void => {\n const keyId = reactiveConfig.cache ? stableSerialize(nextKey) : undefined\n let nextEntry = keyId ? cache.get(keyId) as ResourceEntry<T> | undefined : undefined\n if (!nextEntry) {\n nextEntry = createEntry(nextKey, reactiveConfig.staleTime)\n if (keyId) cache.set(keyId, nextEntry as ResourceEntry<unknown>)\n }\n if (activeEntry === nextEntry) {\n sync()\n return\n }\n if (activeEntry) {\n activeEntry.subscribers.delete(handle)\n if (activeEntry.subscribers.size === 0) activeEntry.controller?.abort()\n }\n activeEntry = nextEntry\n activeKey = nextKey\n activeEntry.subscribers.add(handle)\n sync()\n void request(false).catch(() => undefined)\n }\n\n const stop = effect(() => {\n if (disposed) return\n const nextKey = resolveKey(reactiveConfig.key)\n if (!nextKey) throw new Error('resource: 响应式 key 不能是 undefined')\n switchKey(nextKey)\n sync()\n })\n\n const dispose = (): void => {\n if (disposed) return\n disposed = true\n stop.dispose()\n if (activeEntry) {\n activeEntry.subscribers.delete(handle)\n if (activeEntry.subscribers.size === 0) activeEntry.controller?.abort()\n }\n activeEntry = undefined\n }\n getCurrentOwner()?.onDispose(dispose)\n\n return {\n get key(): ResourceKey | undefined { return activeKey },\n data,\n error,\n loading,\n dispose,\n refetch: () => request(true),\n prefetch: () => request(false),\n invalidate: () => { if (activeEntry) activeEntry.updatedAt = 0 },\n mutate(next) {\n if (!activeEntry) return\n const value = typeof next === 'function'\n ? (next as (current: T | null) => T)(activeEntry.data.value)\n : next\n activeEntry.revision++\n activeEntry.data.value = value\n activeEntry.error.value = null\n activeEntry.updatedAt = Date.now()\n },\n optimistic<Result>(\n next: T | ((current: T | null) => T),\n action: () => Result | PromiseLike<Result>\n ): Promise<Result> {\n if (!activeEntry) return Promise.reject(new Error('resource: key 尚未初始化'))\n return createOptimistic<Result>(activeEntry, next, action)\n }\n }\n\n function request(force: boolean): Promise<T> {\n if (!activeEntry) return Promise.reject(new Error('resource: key 尚未初始化'))\n if (!force && isFresh(activeEntry) && reactiveConfig.strategy === 'cache-first') {\n return Promise.resolve(activeEntry.data.value as T)\n }\n if (!force && reactiveConfig.strategy === 'stale-while-revalidate'\n && activeEntry.data.value !== null) {\n if (!isFresh(activeEntry)) void execute(activeEntry, reactiveConfig.fetcher, reactiveConfig.retry, reactiveConfig.retryDelay)\n .catch(() => undefined)\n return Promise.resolve(activeEntry.data.value as T)\n }\n return execute(activeEntry, reactiveConfig.fetcher, reactiveConfig.retry, reactiveConfig.retryDelay)\n }\n }\n\n function createOptimistic<Result>(\n target: ResourceEntry<T>,\n next: T | ((current: T | null) => T),\n action: () => Result | PromiseLike<Result>\n ): Promise<Result> {\n const previous = { data: target.data.value, error: target.error.value, updatedAt: target.updatedAt }\n const value = typeof next === 'function'\n ? (next as (current: T | null) => T)(target.data.value)\n : next\n const revision = ++target.revision\n target.data.value = value\n target.error.value = null\n target.updatedAt = Date.now()\n return Promise.resolve().then(action).catch(reason => {\n const failure = toError(reason)\n if (target.revision === revision) {\n target.revision++\n target.data.value = previous.data\n target.error.value = failure\n target.updatedAt = previous.updatedAt\n options.onError?.(failure, target.key)\n }\n throw failure\n })\n }\n }\n\n return {\n resource: createResource,\n invalidate(key) {\n const entry = cache.get(stableSerialize(key))\n if (entry) entry.updatedAt = 0\n },\n async prefetchAll() {\n const requests = [...entries]\n .map(entry => entry.inFlight)\n .filter((request): request is Promise<unknown> => request !== null)\n await Promise.allSettled(requests)\n },\n dehydrate() {\n const entries: ResourceDehydratedEntry[] = []\n for (const entry of cache.values()) {\n if (entry.updatedAt <= 0 || entry.error.value) continue\n entries.push({\n key: entry.key ?? [],\n data: entry.data.value,\n updatedAt: entry.updatedAt,\n staleTime: entry.staleTime\n })\n }\n return { version: 1, entries }\n },\n hydrate(snapshot) {\n for (const restored of parseDehydratedState(snapshot).entries) {\n const keyId = stableSerialize(restored.key)\n const entry = cache.get(keyId) as ResourceEntry<unknown> | undefined\n ?? createEntry(restored.key, restored.staleTime)\n entry.data.value = restored.data\n entry.error.value = null\n entry.loading.value = false\n entry.updatedAt = restored.updatedAt\n entry.revision++\n cache.set(keyId, entry)\n }\n },\n get<T>(key: ResourceKey): ResourceSnapshot<T> | undefined {\n const entry = cache.get(stableSerialize(key)) as ResourceEntry<T> | undefined\n if (!entry) return undefined\n return {\n data: entry.data.value,\n error: entry.error.value,\n loading: entry.loading.value,\n updatedAt: entry.updatedAt\n }\n },\n clear() {\n cache.clear()\n entries.clear()\n owner.dispose()\n owner = createOwner()\n }\n }\n}\n\nfunction normalizeOptions<T>(\n optionsOrFetcher: ResourceOptions<T> | ResourceFetcher<T>,\n defaultStaleTime: number,\n defaultRetry: number,\n defaultRetryDelay: RetryDelay\n): Required<Pick<ResourceOptions<T>, 'fetcher' | 'staleTime' | 'cache' | 'strategy' | 'retry' | 'retryDelay'>> & Pick<ResourceOptions<T>, 'key'> {\n if (typeof optionsOrFetcher === 'function') {\n return {\n fetcher: optionsOrFetcher,\n staleTime: defaultStaleTime,\n cache: false,\n strategy: 'cache-first',\n retry: defaultRetry,\n retryDelay: defaultRetryDelay\n }\n }\n return {\n key: optionsOrFetcher.key,\n fetcher: optionsOrFetcher.fetcher,\n staleTime: validateStaleTime(optionsOrFetcher.staleTime ?? defaultStaleTime),\n cache: optionsOrFetcher.cache ?? Boolean(optionsOrFetcher.key),\n strategy: optionsOrFetcher.strategy ?? 'cache-first',\n retry: validateRetry(optionsOrFetcher.retry ?? defaultRetry),\n retryDelay: optionsOrFetcher.retryDelay ?? defaultRetryDelay\n }\n}\n\nfunction isReactiveKey(key: ResourceKeySource | undefined): key is Signal<ResourceKey> | (() => ResourceKey) {\n return typeof key === 'function' || isSignal(key)\n}\n\nfunction isSignal(value: unknown): value is Signal<ResourceKey> {\n return value !== null && typeof value === 'object' && 'value' in value\n && typeof (value as { dispose?: unknown }).dispose === 'function'\n}\n\nfunction resolveKey(source: ResourceKeySource | undefined): ResourceKey | undefined {\n const key = typeof source === 'function'\n ? source()\n : isSignal(source) ? source.value : source\n if (key === undefined) return undefined\n if (!Array.isArray(key)) throw new Error('resource: key 必须是数组')\n return key\n}\n\nfunction requestWithRetry<T>(\n fetcher: ResourceFetcher<T>,\n signal: AbortSignal,\n retry: number,\n retryDelay: RetryDelay\n): Promise<T> {\n let attempt = 0\n const request = (): Promise<T> => Promise.resolve().then(() => fetcher(signal)).catch(reason => {\n const error = toError(reason)\n if (signal.aborted) throw error\n if (attempt++ >= retry) throw error\n const delay = resolveRetryDelay(retryDelay, attempt, error)\n return delay > 0 ? wait(delay).then(request) : request()\n })\n return request()\n}\n\nfunction resolveRetryDelay(retryDelay: RetryDelay, attempt: number, error: Error): number {\n const delay = typeof retryDelay === 'function' ? retryDelay(attempt, error) : retryDelay\n if (!Number.isFinite(delay) || delay < 0) {\n throw new Error('resource: retryDelay 必须是大于等于 0 的有限数字')\n }\n return delay\n}\n\nfunction wait(delay: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, delay))\n}\n\nfunction validateStaleTime(staleTime: number): number {\n if (!Number.isFinite(staleTime) || staleTime < 0) {\n throw new Error('resource: staleTime 必须是大于等于 0 的有限数字')\n }\n return staleTime\n}\n\nfunction validateRetry(retry: number): number {\n if (!Number.isInteger(retry) || retry < 0) {\n throw new Error('resource: retry 必须是大于等于 0 的整数')\n }\n return retry\n}\n\nfunction toError(reason: unknown): Error {\n return reason instanceof Error ? reason : new Error(String(reason))\n}\n\nexport function stableSerialize(value: unknown): string {\n return serialize(value, new Set<object>())\n}\n\nexport function serializeResourceState(snapshot: ResourceDehydratedState): string {\n const serialized = JSON.stringify(snapshot)\n return serialized\n .replace(/</g, '\\\\u003c')\n .replace(/>/g, '\\\\u003e')\n .replace(/&/g, '\\\\u0026')\n .replace(/\\u2028/g, '\\\\u2028')\n .replace(/\\u2029/g, '\\\\u2029')\n}\n\nfunction parseDehydratedState(snapshot: unknown): ResourceDehydratedState {\n let value: unknown = snapshot\n if (typeof snapshot === 'string') {\n try {\n value = JSON.parse(snapshot)\n } catch {\n throw new Error('resource: 预取状态不是有效 JSON')\n }\n }\n if (!value || typeof value !== 'object') throw new Error('resource: 预取状态格式无效')\n const candidate = value as { version?: unknown; entries?: unknown }\n if (candidate.version !== 1 || !Array.isArray(candidate.entries)) {\n throw new Error('resource: 预取状态版本或 entries 无效')\n }\n\n const entries: ResourceDehydratedEntry[] = []\n for (const entry of candidate.entries) {\n if (!entry || typeof entry !== 'object') throw new Error('resource: 预取条目格式无效')\n const candidateEntry = entry as Partial<ResourceDehydratedEntry>\n if (!Array.isArray(candidateEntry.key)\n || typeof candidateEntry.updatedAt !== 'number'\n || !Number.isFinite(candidateEntry.updatedAt)\n || typeof candidateEntry.staleTime !== 'number'\n || !Number.isFinite(candidateEntry.staleTime)\n || candidateEntry.staleTime < 0) {\n throw new Error('resource: 预取条目字段无效')\n }\n // Re-serialize now so untrusted keys cannot poison the cache map.\n stableSerialize(candidateEntry.key)\n entries.push({\n key: candidateEntry.key,\n data: candidateEntry.data,\n updatedAt: candidateEntry.updatedAt,\n staleTime: candidateEntry.staleTime\n })\n }\n return { version: 1, entries }\n}\n\nfunction serialize(value: unknown, stack: Set<object>): string {\n if (value === null) return 'null'\n switch (typeof value) {\n case 'string': return `string:${JSON.stringify(value)}`\n case 'boolean': return `boolean:${value}`\n case 'number':\n if (Number.isNaN(value)) return 'number:NaN'\n if (Object.is(value, -0)) return 'number:-0'\n return `number:${value}`\n case 'bigint': return `bigint:${value}`\n case 'undefined': return 'undefined'\n case 'function':\n case 'symbol':\n throw new Error(`resource: key 不能包含 ${typeof value}`)\n case 'object': break\n }\n\n const object = value as object\n if (stack.has(object)) throw new Error('resource: key 不能包含循环引用')\n stack.add(object)\n try {\n if (Array.isArray(object)) {\n return `array:[${object.map(item => serialize(item, stack)).join(',')}]`\n }\n if (object instanceof Date) return `date:${object.toJSON()}`\n if (object instanceof RegExp) return `regexp:${object.toString()}`\n const entries = Object.keys(object).sort().map(key => `${JSON.stringify(key)}:${serialize((object as Record<string, unknown>)[key], stack)}`)\n return `object:{${entries.join(',')}}`\n } finally {\n stack.delete(object)\n }\n}\n"],"mappings":"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","names":["keyId","request","dispose","entries"]}
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"type": "git",
|
|
12
12
|
"url": "git+https://github.com/vobsjs/vobs.git"
|
|
13
13
|
},
|
|
14
|
-
"version": "1.2.
|
|
14
|
+
"version": "1.2.2",
|
|
15
15
|
"publishConfig": {
|
|
16
16
|
"access": "public"
|
|
17
17
|
},
|
|
@@ -33,9 +33,9 @@
|
|
|
33
33
|
"./source/*": "./src/*"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@vobs/reactivity": "1.2.
|
|
37
|
-
"@vobs/
|
|
38
|
-
"@vobs/
|
|
39
|
-
"@vobs/
|
|
36
|
+
"@vobs/reactivity": "1.2.2",
|
|
37
|
+
"@vobs/runtime": "1.2.2",
|
|
38
|
+
"@vobs/router": "1.2.2",
|
|
39
|
+
"@vobs/vobs": "1.2.2"
|
|
40
40
|
}
|
|
41
41
|
}
|