@bgub/fig 0.1.0-alpha.1 → 0.1.0-alpha.3
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/CHANGELOG.md +44 -0
- package/dist/{element-BZ7r9ncY.d.ts → element-BVg1bKOz.d.ts} +4 -1
- package/dist/{hooks-QDRabULx.d.ts → hooks-B7BTQWiu.d.ts} +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/internal.d.ts +6 -3
- package/dist/internal.js +2 -1
- package/dist/internal.js.map +1 -1
- package/dist/jsx-runtime.d.ts +1 -1
- package/dist/payload-format-KTNaSI4h.js.map +1 -1
- package/dist/payload.d.ts +1 -1
- package/dist/payload.js +1 -1
- package/dist/{resource-kXeIR52S.js → resource-DskjKeuM.js} +28 -17
- package/dist/resource-DskjKeuM.js.map +1 -0
- package/dist-development/element-B7mCQIMi.js +314 -0
- package/dist-development/element-B7mCQIMi.js.map +1 -0
- package/dist-development/index.js +4 -0
- package/dist-development/internal.js +172 -0
- package/dist-development/internal.js.map +1 -0
- package/dist-development/jsx-runtime.js +23 -0
- package/dist-development/jsx-runtime.js.map +1 -0
- package/dist-development/payload-format-KTNaSI4h.js +366 -0
- package/dist-development/payload-format-KTNaSI4h.js.map +1 -0
- package/dist-development/payload.js +429 -0
- package/dist-development/payload.js.map +1 -0
- package/dist-development/resource-CP2OynG0.js +336 -0
- package/dist-development/resource-CP2OynG0.js.map +1 -0
- package/dist-development/transition-B4XiOWAj.js +750 -0
- package/dist-development/transition-B4XiOWAj.js.map +1 -0
- package/package.json +7 -1
- package/dist/resource-kXeIR52S.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transition-B4XiOWAj.js","names":[],"sources":["../src/context.ts","../src/data-store.ts","../src/transition.ts"],"sourcesContent":["import type { FigNode } from \"./element.ts\";\n\nexport interface FigContext<T> {\n (props: { value: T; children?: FigNode }): FigNode;\n readonly $$typeof: symbol;\n readonly defaultValue: T;\n}\n\nexport const FigContextSymbol = Symbol.for(\"fig.context\");\n\nexport function createContext<T>(defaultValue: T): FigContext<T> {\n return Object.assign(\n (props: { value: T; children?: FigNode }) => props.children,\n {\n $$typeof: FigContextSymbol,\n defaultValue,\n },\n );\n}\n\nexport function isContext(value: unknown): value is FigContext<unknown> {\n return (\n typeof value === \"function\" &&\n \"$$typeof\" in value &&\n value.$$typeof === FigContextSymbol\n );\n}\n","import {\n type DataRefreshResult,\n type DataResource,\n type DataResourceKey,\n type DataResourceKeyInput,\n type DataResourceLoadContext,\n type DataResourceLoader,\n type DataStoreEntrySnapshot,\n dataResourceKeysForError,\n defineLoadContextCapabilities,\n type FigDataEntryStatus,\n type FigDataHydrationEntry,\n type FigDataStore,\n type FigDataStoreController,\n type FigDataStoreFactory,\n type FigDataStoreHandle,\n type FigDataStoreHost,\n type FigDataStoreOptions,\n isAttributableError,\n markDataResourceError,\n resolveCurrentDataStore,\n setCurrentDataStore,\n} from \"./data.ts\";\n\ndeclare const __FIG_DEV__: boolean | undefined;\n\nexport interface DataResourceOptions<TArgs extends unknown[], TValue> {\n key: (...args: TArgs) => DataResourceKey;\n debugArgs?: (...args: TArgs) => DataResourceKeyInput;\n load?: DataResourceLoader<TArgs, TValue>;\n}\n\nexport interface DataStoreHost<Owner extends object, Lane> {\n getLane(): Lane;\n inactiveRetentionMs?: number;\n onEntryChange?: (entry: DataStoreEntrySnapshot) => void;\n onEntryEvict?: (entry: DataStoreEntrySnapshot) => void;\n partition?: DataResourceKeyInput;\n preloadRetentionMs?: number;\n schedule(owner: Owner, lane: Lane): void;\n}\n\nexport interface DataStore<\n Owner extends object = object,\n Lane = unknown,\n> extends FigDataStore {\n readonly host: DataStoreHost<Owner, Lane>;\n}\n\ninterface Entry<Owner extends object, Lane> {\n canonicalKey: string;\n // The in-flight load's controller (null when no load is pending).\n controller: AbortController | null;\n // The authoritative generation's controller — the load whose value the\n // entry holds. Deliberately retained after that loader settles: the\n // signal's lifetime is the generation's authority, not the pending\n // promise's, so loaders that keep streaming into their value (payload\n // decodes filling holes) learn when a SUCCESSOR becomes authoritative, a\n // server push hydrates over them, the entry evicts, or the store is\n // disposed. A superseding load that starts does not abort it — a visible\n // stale value keeps streaming through the refresh window, and a failed\n // refresh leaves it fully alive.\n valueController: AbortController | null;\n // Errors rejected by streamed holes inside the authoritative fulfilled\n // value. Invalidating one retires that broken value instead of serving it\n // stale into a freshly remounted ErrorBoundary.\n valueErrors: WeakSet<object>;\n // Count of ensureData calls currently awaiting this entry's load. A\n // retainer like a subscriber or the preload timer: an awaited ensure must\n // not be evicted-and-aborted out from under its caller mid-load.\n ensureRetainers: number;\n error: unknown;\n fingerprint: string | null;\n generation: number;\n invalidationVersion: number;\n inactiveTimer: TimerHandle | null;\n key: DataResourceKey;\n lane: Lane | null;\n pending: PendingResult<unknown> | null;\n preloadTimer: TimerHandle | null;\n refreshError: unknown;\n resource: DataResource<unknown[], unknown> | null;\n stale: boolean;\n status: FigDataEntryStatus;\n storeKey: string;\n subscribers: Set<Owner>;\n value: unknown;\n}\n\ninterface PendingResult<T> {\n promise: Promise<DataRefreshResult<T>>;\n resolve: (result: DataRefreshResult<T>) => void;\n}\n\ninterface NormalizedKey {\n canonical: string;\n key: DataResourceKey;\n}\n\ninterface EncodePath {\n root: string;\n segments: Array<string | number>;\n}\n\ninterface LoadOptions<Lane> {\n lane: Lane;\n refresh: boolean;\n}\n\n// Why an in-flight load was aborted: \"superseded\" by a newer load, the store was\n// \"store-disposed\", or the entry was \"evicted\" from a live store because nothing\n// retained it (retention window elapsed, or last subscriber released).\ntype AbortReason = \"superseded\" | \"store-disposed\" | \"evicted\";\n\nconst DataResourceSymbol = Symbol.for(\"fig.data-resource\");\nconst DataStoreFactorySymbol = Symbol.for(\"fig.data-store-factory\");\nconst DataStoreControllerSymbol = Symbol.for(\"fig.data-store-controller\");\nconst DEFAULT_INACTIVE_RETENTION_MS = 5 * 60 * 1000;\nconst DEFAULT_PRELOAD_RETENTION_MS = 30 * 1000;\nconst __DEV__ = typeof __FIG_DEV__ === \"boolean\" ? __FIG_DEV__ : false;\n\ntype TimerHandle = ReturnType<typeof setTimeout>;\n\nconst dataStoreFactory: FigDataStoreFactory = createRendererDataStore;\n\nexport function dataResource<TArgs extends unknown[], TValue>(\n options: DataResourceOptions<TArgs, TValue>,\n): DataResource<TArgs, TValue> {\n const resource = {\n $$typeof: DataResourceSymbol,\n [DataStoreFactorySymbol]: dataStoreFactory,\n debugArgs: options.debugArgs,\n key: options.key,\n load: options.load,\n };\n return resource;\n}\n\nexport function ensureData<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n ...args: TArgs\n): Promise<TValue> {\n return resolveDataMutationStore(\"ensureData\").ensureData(resource, ...args);\n}\n\nexport function invalidateData<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n ...args: TArgs\n): void {\n resolveDataMutationStore(\"invalidateData\").invalidateData(resource, ...args);\n}\n\nexport function invalidateDataError(error: unknown): boolean {\n return resolveDataMutationStore(\"invalidateDataError\").invalidateDataError(\n error,\n );\n}\n\nexport function invalidateDataKey(key: DataResourceKey): void {\n resolveDataMutationStore(\"invalidateDataKey\").invalidateDataKey(key);\n}\n\nexport function invalidateDataPrefix(prefix: DataResourceKey): void {\n resolveDataMutationStore(\"invalidateDataPrefix\").invalidateDataPrefix(prefix);\n}\n\nexport function refreshData<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n ...args: TArgs\n): Promise<DataRefreshResult<TValue>> {\n return resolveDataMutationStore(\"refreshData\").refreshData(resource, ...args);\n}\n\n// Captures the ambient store as an explicit handle. Call it synchronously\n// wherever Fig is executing — render, event handlers, actions, effects — and\n// keep the reference: unlike the free functions above, the handle's methods\n// still work after an `await`, where the ambient slot is gone.\nexport function readDataStore(): FigDataStoreHandle {\n return resolveCurrentDataStore(\n \"readDataStore() must be called synchronously while Fig is executing — \" +\n \"during render, an event handler, an action, or an effect. Capture \" +\n \"the handle there and use it after awaits.\",\n );\n}\n\ninterface DataStoreControllerState {\n host: FigDataStoreHost | null;\n}\n\nexport function createDataStore(\n options: FigDataStoreOptions = {},\n): FigDataStoreController {\n const state: DataStoreControllerState = { host: null };\n const store = createRendererDataStore<object, unknown>({\n getLane: () => (state.host === null ? null : state.host.getLane()),\n partition: options.partition,\n schedule: (owner, lane) => state.host?.schedule(owner, lane),\n });\n Object.defineProperty(store, DataStoreControllerSymbol, { value: state });\n if (options.initialData !== undefined) store.hydrate(options.initialData);\n return store;\n}\n\nexport function isDataStoreController(\n value: unknown,\n): value is FigDataStoreController {\n return (\n (typeof value === \"object\" || typeof value === \"function\") &&\n value !== null &&\n Object.hasOwn(value, DataStoreControllerSymbol)\n );\n}\n\nexport function attachDataStore(\n controller: FigDataStoreController,\n host: FigDataStoreHost,\n initialData?: readonly FigDataHydrationEntry[],\n): FigDataStore {\n if (host.partition !== undefined || initialData !== undefined) {\n throw new Error(\n \"Pass partition and initialData to createDataStore(), not the renderer, when adopting a data store.\",\n );\n }\n const state = (\n controller as FigDataStoreController &\n Record<symbol, DataStoreControllerState | undefined>\n )[DataStoreControllerSymbol];\n if (state === undefined) {\n throw new Error(\"dataStore must be created with createDataStore().\");\n }\n if (state.host !== null) {\n throw new Error(\"A data store can only be adopted by one Fig renderer.\");\n }\n state.host = host;\n return controller as FigDataStore;\n}\n\nfunction resolveDataMutationStore(name: string): FigDataStore {\n return resolveCurrentDataStore(\n `${name}() must be called synchronously while Fig is executing — ` +\n \"during render, an event handler, an action, or an effect. Capture \" +\n \"readDataStore() (or root.data) synchronously and call the handle instead.\",\n );\n}\n\nexport function createRendererDataStore<Owner extends object, Lane>(\n host: DataStoreHost<Owner, Lane>,\n): DataStore<Owner, Lane> {\n return new DefaultDataStore(host);\n}\n\nexport function normalizeDataResourceKey(key: DataResourceKey): string {\n return normalizeKey(key).canonical;\n}\n\nclass DefaultDataStore<Owner extends object, Lane> implements DataStore<\n Owner,\n Lane\n> {\n private readonly entries = new Map<string, Entry<Owner, Lane>>();\n private readonly inactiveRetentionMs: number;\n private readonly ownerKeys = new WeakMap<object, Set<string>>();\n private readonly pendingOwnerKeys = new WeakMap<object, Set<string>>();\n private readonly partitionKey: string;\n private readonly preloadRetentionMs: number;\n private disposed = false;\n\n constructor(readonly host: DataStoreHost<Owner, Lane>) {\n this.inactiveRetentionMs =\n host.inactiveRetentionMs ?? DEFAULT_INACTIVE_RETENTION_MS;\n this.partitionKey =\n host.partition === undefined\n ? \"\"\n : encodeValue(host.partition, createEncodePath(\"partition\"));\n this.preloadRetentionMs =\n host.preloadRetentionMs ?? DEFAULT_PRELOAD_RETENTION_MS;\n }\n\n commitDataDependencies(owner: Owner, previousOwner: object | null): void {\n const nextKeys = this.pendingOwnerKeys.get(owner) ?? null;\n const ownerKeys = this.ownerKeys.get(owner) ?? null;\n const previousOwnerKeys =\n previousOwner === null\n ? null\n : (this.ownerKeys.get(previousOwner) ?? null);\n this.pendingOwnerKeys.delete(owner);\n\n if (\n (nextKeys === null || nextKeys.size === 0) &&\n ownerKeys === null &&\n previousOwnerKeys === null\n ) {\n return;\n }\n\n // Capture the entries this fiber's generations subscribed to before the\n // delete, then abort any that end up with no retainer once the new owner has\n // re-subscribed. Keys the owner still reads keep at least one subscriber, so\n // only genuinely dropped keys are orphaned.\n let orphanCandidates: Set<Entry<Owner, Lane>> | null = null;\n orphanCandidates = this.collectSubscribedEntries(\n ownerKeys,\n orphanCandidates,\n );\n orphanCandidates = this.collectSubscribedEntries(\n previousOwnerKeys,\n orphanCandidates,\n );\n\n this.deleteDataOwner(owner, nextKeys);\n if (previousOwner !== null) this.deleteDataOwner(previousOwner, nextKeys);\n\n if (nextKeys !== null && nextKeys.size > 0) {\n this.ownerKeys.set(owner, nextKeys);\n\n for (const key of nextKeys) {\n const entry = this.entries.get(key);\n if (entry !== undefined) {\n this.clearInactiveTimer(entry);\n entry.subscribers.add(owner);\n this.notifyEntryChange(entry);\n }\n }\n }\n\n if (orphanCandidates !== null) {\n for (const entry of orphanCandidates) this.abortOrphanedLoad(entry);\n }\n }\n\n releaseDataOwner(owner: object): void {\n // The genuine-deletion path (fiber unmount). Unlike deleteDataOwner, which\n // is also used for transient commit churn, this aborts in-flight loads left\n // with no retainer so an unmounted subtree does not keep fetching.\n const orphanCandidates = this.collectSubscribedEntries(\n this.ownerKeys.get(owner) ?? null,\n null,\n );\n this.deleteDataOwner(owner);\n if (orphanCandidates !== null) {\n for (const entry of orphanCandidates) this.abortOrphanedLoad(entry);\n }\n }\n\n resetDataDependencies(owner: object): void {\n // Reads accumulate into pendingOwnerKeys as a render runs. A render attempt\n // can be abandoned before commit (suspense retry, concurrent interruption,\n // the strict shadow pass), and the work-in-progress fiber object is reused\n // across attempts, so the keys must be cleared at the start of each render\n // or stale dependencies from a discarded attempt would be committed.\n this.pendingOwnerKeys.delete(owner);\n }\n\n deleteDataOwner(\n owner: object,\n retainedKeys: ReadonlySet<string> | null = null,\n ): void {\n this.pendingOwnerKeys.delete(owner);\n const keys = this.ownerKeys.get(owner);\n if (keys === undefined) return;\n\n this.ownerKeys.delete(owner);\n for (const key of keys) {\n const entry = this.entries.get(key);\n if (entry === undefined) continue;\n\n entry.subscribers.delete(owner as Owner);\n this.notifyEntryChange(entry);\n if (retainedKeys?.has(key) !== true) this.scheduleInactiveCleanup(entry);\n }\n }\n\n private collectSubscribedEntries(\n keys: ReadonlySet<string> | null,\n into: Set<Entry<Owner, Lane>> | null,\n ): Set<Entry<Owner, Lane>> | null {\n if (keys === null) return into;\n\n for (const key of keys) {\n const entry = this.entries.get(key);\n if (entry !== undefined) {\n into ??= new Set();\n into.add(entry);\n }\n }\n\n return into;\n }\n\n private abortOrphanedLoad(entry: Entry<Owner, Lane>): void {\n // Only a value-less in-flight load (a cache-miss \"pending\" entry) with no\n // committed subscriber and no preload retainer is safe to drop: it has no\n // value to lose, and any reader of such a key suspends rather than commits,\n // so it cannot be handed off to a sibling mid-commit. Value-bearing entries\n // are left alone — a \"refreshing\" entry still serves a usable value, and its\n // refresh settles into the normal inactive-retention path. Evicting those\n // would discard a live value or strand a sibling that read it without\n // suspending.\n if (this.entries.get(entry.storeKey) !== entry) return;\n if (\n entry.subscribers.size > 0 ||\n entry.preloadTimer !== null ||\n entry.ensureRetainers > 0 ||\n entry.pending === null ||\n entryHasValue(entry)\n ) {\n return;\n }\n\n this.evictEntry(entry, \"evicted\");\n }\n\n dispose(): void {\n this.disposed = true;\n\n for (const entry of this.entries.values()) {\n this.clearInactiveTimer(entry);\n this.clearPreloadTimer(entry);\n this.abortEntryGenerations(entry, \"store-disposed\");\n this.notifyEntryChange(entry);\n }\n }\n\n hydrate(entries: readonly FigDataHydrationEntry[]): void {\n if (this.disposed) return;\n\n for (const hydrated of entries) {\n const normalized = normalizeKey(hydrated.key);\n const storeKey = this.storeKey(normalized.canonical);\n const current = this.entries.get(storeKey);\n\n if (current !== undefined) {\n this.hydrateEntry(current, normalized.key, hydrated.value);\n this.publish(current);\n continue;\n }\n\n const entry = this.createEntry(\n normalized,\n storeKey,\n null,\n null,\n \"fulfilled\",\n hydrated.value,\n );\n this.entries.set(storeKey, entry);\n this.notifyEntryChange(entry);\n }\n }\n\n snapshot(): FigDataHydrationEntry[] {\n const entries: FigDataHydrationEntry[] = [];\n\n for (const entry of this.entries.values()) {\n if (entryHasValue(entry))\n entries.push({ key: entry.key, value: entry.value });\n }\n\n return entries;\n }\n\n inspectDataEntries(): DataStoreEntrySnapshot[] {\n return Array.from(this.entries.values(), (entry) =>\n this.snapshotEntry(entry),\n );\n }\n\n inspectDataDependencyCanonicalKeys(owner: object): string[] {\n // Inspection surface only (devtools snapshots are dev-gated); returns\n // empty in prod even though ownerKeys is populated there.\n if (!__DEV__) return [];\n\n const keys = this.ownerKeys.get(owner);\n if (keys === undefined) return [];\n\n const dependencies: string[] = [];\n for (const key of keys) {\n const entry = this.entries.get(key);\n if (entry !== undefined) dependencies.push(entry.canonicalKey);\n }\n return dependencies;\n }\n\n invalidateData<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n ...args: TArgs\n ): void {\n if (this.disposed) return;\n\n const entry = this.entryFor(resource, args, false);\n if (entry === null) return;\n\n this.invalidateEntry(entry, this.host.getLane());\n }\n\n invalidateDataError(error: unknown): boolean {\n if (this.disposed) return false;\n\n const keys = dataResourceKeysForError(error);\n if (keys === undefined || keys.length === 0) return false;\n\n const entries: Entry<Owner, Lane>[] = [];\n for (const key of keys) {\n const entry = this.entryForKey(key);\n if (entry !== null) entries.push(entry);\n }\n\n this.invalidateEntries(entries, error);\n return true;\n }\n\n invalidateDataKey(key: DataResourceKey): void {\n if (this.disposed) return;\n\n const entry = this.entryForKey(key);\n if (entry === null) return;\n\n this.invalidateEntry(entry, this.host.getLane());\n }\n\n invalidateDataPrefix(prefix: DataResourceKey): void {\n if (this.disposed) return;\n\n const prefixCanonical = normalizeKey(prefix).canonical;\n const entries: Entry<Owner, Lane>[] = [];\n for (const entry of this.entries.values()) {\n if (canonicalKeyStartsWith(entry.canonicalKey, prefixCanonical)) {\n entries.push(entry);\n }\n }\n\n this.invalidateEntries(entries);\n }\n\n async ensureData<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n ...args: TArgs\n ): Promise<TValue> {\n for (;;) {\n if (this.disposed) {\n throw new Error(\n \"ensureData() requires a live data store; this store was disposed.\",\n );\n }\n\n const entry = this.entryFor(resource, args, true);\n this.clearInactiveTimer(entry);\n this.retainPreload(entry);\n\n if (entryHasValue(entry)) {\n this.revalidateIfStale(entry, resource, args);\n return entry.value as TValue;\n }\n\n if (entry.status === \"rejected\") throwDataResourceError(entry);\n\n entry.ensureRetainers += 1;\n try {\n if (entry.pending !== null) {\n await entry.pending.promise;\n } else {\n await this.startLoad(entry, resource, args, {\n lane: this.host.getLane(),\n refresh: false,\n });\n }\n } finally {\n entry.ensureRetainers -= 1;\n // Hand retention back to the normal preload window so a reader\n // (the route component about to render) can still claim the entry.\n if (this.entries.get(entry.storeKey) === entry) {\n this.retainPreload(entry);\n }\n }\n // Loop and re-inspect the entry rather than trusting this load's\n // result: a superseding load, a server hydration, or an eviction may\n // have changed the authoritative state while we awaited.\n }\n }\n\n preloadData<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n ...args: TArgs\n ): void {\n if (this.disposed || resource.load === undefined) return;\n\n const entry = this.entryFor(resource, args, true);\n this.clearInactiveTimer(entry);\n this.retainPreload(entry);\n if (entry.pending !== null) return;\n if (entry.status === \"fulfilled\" && !entry.stale) return;\n\n void this.startLoad(entry, resource, args, {\n lane: this.host.getLane(),\n refresh: entry.status === \"fulfilled\",\n });\n }\n\n readData<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n args: TArgs,\n owner: Owner,\n ): TValue {\n const entry = this.entryFor(resource, args, true);\n this.clearInactiveTimer(entry);\n this.clearPreloadTimer(entry);\n this.addOwnerKey(owner, entry.storeKey);\n this.revalidateIfStale(entry, resource, args);\n\n if (entry.status === \"pending\" && entry.pending === null) {\n void this.startLoad(entry, resource, args, {\n lane: this.host.getLane(),\n refresh: false,\n });\n }\n\n return this.readCurrentValue(entry);\n }\n\n refreshData<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n ...args: TArgs\n ): Promise<DataRefreshResult<TValue>> {\n if (this.disposed) {\n return Promise.resolve({\n reason: \"store-disposed\",\n staleValue: undefined,\n status: \"aborted\",\n });\n }\n\n if (resource.load === undefined) {\n const entry = this.entryFor(resource, args, false);\n if (entry === null) {\n return Promise.resolve(unsupportedRefreshResult<TValue>());\n }\n\n this.clearInactiveTimer(entry);\n return Promise.resolve(unsupportedRefreshResult<TValue>(entry));\n }\n\n const entry = this.entryFor(resource, args, true);\n this.clearInactiveTimer(entry);\n\n if (entry.pending !== null && entry.status !== \"refreshing\") {\n return entry.pending.promise as Promise<DataRefreshResult<TValue>>;\n }\n\n return this.startLoad(entry, resource, args, {\n lane: this.host.getLane(),\n refresh: entry.status === \"fulfilled\" || entry.status === \"refreshing\",\n });\n }\n\n run<T>(callback: () => T): T {\n const previousStore = setCurrentDataStore(this);\n try {\n return callback();\n } finally {\n setCurrentDataStore(previousStore);\n }\n }\n\n private addOwnerKey(owner: Owner, key: string): void {\n let keys = this.pendingOwnerKeys.get(owner);\n if (keys === undefined) {\n keys = new Set();\n this.pendingOwnerKeys.set(owner, keys);\n }\n\n keys.add(key);\n }\n\n private entryFor<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n args: TArgs,\n create: true,\n ): Entry<Owner, Lane>;\n private entryFor<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n args: TArgs,\n create: false,\n ): Entry<Owner, Lane> | null;\n private entryFor<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n args: TArgs,\n create: boolean,\n ): Entry<Owner, Lane> | null {\n const normalized = normalizeKey(resource.key(...args));\n // The fingerprint feeds only the dev drift diagnostics below, so\n // production never pays for encoding the args on every read.\n const fingerprint = __DEV__ ? fingerprintFor(resource, args) : null;\n const key = this.storeKey(normalized.canonical);\n const current = this.entries.get(key);\n\n if (current !== undefined) {\n if (__DEV__) {\n diagnoseEntryDrift(\n current,\n resource,\n normalized.canonical,\n fingerprint,\n );\n }\n return current;\n }\n\n if (!create) return null;\n\n const entry = this.createEntry(\n normalized,\n key,\n resource as DataResource<unknown[], unknown>,\n fingerprint,\n \"pending\",\n undefined,\n );\n // A disposed store is terminal: hand back a transient entry but never\n // register it, so post-dispose reads cannot resurrect the cache.\n if (this.disposed) return entry;\n\n this.entries.set(key, entry);\n this.notifyEntryChange(entry);\n return entry;\n }\n\n private revalidateIfStale<TArgs extends unknown[], TValue>(\n entry: Entry<Owner, Lane>,\n resource: DataResource<TArgs, TValue>,\n args: TArgs,\n ): void {\n if (\n entry.status !== \"fulfilled\" ||\n !entry.stale ||\n entry.pending !== null ||\n entry.refreshError !== undefined ||\n resource.load === undefined\n ) {\n return;\n }\n\n // Serve the stale value and revalidate in the background. A recorded\n // refreshError blocks retries until an explicit invalidate/refresh.\n void this.startLoad(entry, resource, args, {\n lane: this.host.getLane(),\n refresh: true,\n });\n }\n\n private entryForKey(key: DataResourceKey): Entry<Owner, Lane> | null {\n const normalized = normalizeKey(key);\n return this.entries.get(this.storeKey(normalized.canonical)) ?? null;\n }\n\n private createEntry(\n normalized: NormalizedKey,\n storeKey: string,\n resource: DataResource<unknown[], unknown> | null,\n fingerprint: string | null,\n status: FigDataEntryStatus,\n value: unknown,\n ): Entry<Owner, Lane> {\n return {\n canonicalKey: normalized.canonical,\n controller: null,\n ensureRetainers: 0,\n error: undefined,\n fingerprint,\n generation: 0,\n invalidationVersion: 0,\n inactiveTimer: null,\n key: normalized.key,\n lane: null,\n pending: null,\n preloadTimer: null,\n refreshError: undefined,\n resource,\n stale: false,\n status,\n storeKey,\n subscribers: new Set(),\n value,\n valueController: null,\n valueErrors: new WeakSet(),\n };\n }\n\n private hydrateEntry(\n entry: Entry<Owner, Lane>,\n key: DataResourceKey,\n value: unknown,\n ): void {\n this.clearInactiveTimer(entry);\n this.abortEntryGenerations(entry, \"superseded\");\n entry.error = undefined;\n entry.generation += 1;\n // The hydrated value replaces whatever attributed hole errors the old\n // value carried; a boundary still holding one must not retire it.\n entry.valueErrors = new WeakSet();\n entry.invalidationVersion = 0;\n entry.key = key;\n entry.lane = null;\n entry.refreshError = undefined;\n entry.stale = false;\n entry.status = \"fulfilled\";\n entry.value = value;\n }\n\n private storeKey(canonicalKey: string): string {\n return this.partitionKey === \"\"\n ? canonicalKey\n : `${this.partitionKey}:${canonicalKey}`;\n }\n\n private startLoad<TArgs extends unknown[], TValue>(\n entry: Entry<Owner, Lane>,\n resource: DataResource<TArgs, TValue>,\n args: TArgs,\n options: LoadOptions<Lane>,\n ): Promise<DataRefreshResult<TValue>> {\n const hadValue = entryHasValue(entry);\n const load = resource.load;\n\n if (this.disposed) {\n return Promise.resolve(abortedRefreshResult(entry, \"store-disposed\"));\n }\n\n if (load === undefined) {\n const error = new Error(\n `Data resource \"${entry.canonicalKey}\" has no loader and no hydrated value.`,\n );\n entry.error = error;\n entry.status = \"rejected\";\n markDataResourceError(error, entry.key);\n this.notifyEntryChange(entry);\n return Promise.resolve(unsupportedRefreshResult<TValue>(entry));\n }\n\n this.abortPendingLoad(entry, \"superseded\");\n const controller = new AbortController();\n // This generation's attributed hole errors. Allocated per load and\n // installed on the entry only at publish: attribution can fire before the\n // root value settles (a hole's error row can share a network chunk with\n // the root row), so the set must survive fulfillment, and a generation\n // that never publishes must never make the entry's live value\n // invalidatable through its own errors.\n const valueErrors = new WeakSet<object>();\n const generation = entry.generation + 1;\n const invalidationVersion = entry.invalidationVersion;\n const pending = createPendingResult<TValue>();\n\n entry.controller = controller;\n entry.generation = generation;\n entry.lane = options.lane;\n entry.pending = pending as PendingResult<unknown>;\n entry.status = options.refresh && hadValue ? \"refreshing\" : \"pending\";\n this.notifyEntryChange(entry);\n\n let loaded: TValue | PromiseLike<TValue>;\n try {\n loaded = load(\n ...args,\n this.createLoadContext(entry, controller, valueErrors),\n );\n } catch (error) {\n loaded = Promise.reject(error);\n }\n\n const settleAborted = (): DataRefreshResult<TValue> => {\n const result = abortedRefreshResult<TValue, Owner, Lane>(\n entry,\n \"superseded\",\n );\n pending.resolve(result);\n return result;\n };\n const fulfill = (value: TValue): DataRefreshResult<TValue> => {\n if (entry.generation !== generation || controller.signal.aborted) {\n return settleAborted();\n }\n\n const superseded = entry.valueController;\n // This generation is now the authoritative value; its controller stays\n // live for the background work still streaming into the value.\n entry.controller = null;\n entry.valueController = controller;\n entry.valueErrors = valueErrors;\n entry.error = undefined;\n entry.pending = null;\n entry.refreshError = undefined;\n entry.stale = entry.invalidationVersion !== invalidationVersion;\n entry.status = \"fulfilled\";\n entry.value = value;\n this.publish(entry);\n // The predecessor loses authority only now that the successor's value\n // has published: subscribers re-render top-down onto the new tree in\n // the same pass, so the old generation's retired holes unmount before\n // their abort rejections could reach a mounted reader.\n superseded?.abort();\n const result: DataRefreshResult<TValue> = { status: \"fulfilled\", value };\n pending.resolve(result);\n return result;\n };\n const reject = (error: unknown): DataRefreshResult<TValue> => {\n if (entry.generation !== generation || controller.signal.aborted) {\n return settleAborted();\n }\n\n // A rejected load's generation never becomes authoritative; abort its\n // signal so background work it started stops. The previous\n // generation's valueController is deliberately untouched: a failed\n // refresh keeps the stale value fully alive, live holes included.\n entry.controller = null;\n controller.abort();\n entry.pending = null;\n\n if (hadValue && entryHasValue(entry)) {\n entry.refreshError = error;\n entry.stale = true;\n entry.status = \"fulfilled\";\n this.publish(entry);\n const result: DataRefreshResult<TValue> = {\n error,\n staleValue: entry.value as TValue,\n status: \"rejected\",\n };\n pending.resolve(result);\n return result;\n }\n\n entry.error = error;\n entry.status = \"rejected\";\n markDataResourceError(error, entry.key);\n this.publish(entry);\n const result: DataRefreshResult<TValue> = { error, status: \"rejected\" };\n pending.resolve(result);\n return result;\n };\n\n if (!isThenable(loaded)) {\n fulfill(loaded);\n return pending.promise;\n }\n\n void Promise.resolve(loaded).then(fulfill, reject);\n\n return pending.promise;\n }\n\n private createLoadContext(\n entry: Entry<Owner, Lane>,\n controller: AbortController,\n valueErrors: WeakSet<object>,\n ): DataResourceLoadContext {\n const context: DataResourceLoadContext = { signal: controller.signal };\n defineLoadContextCapabilities(context, {\n key: entry.key,\n attributeError: (error) => {\n // A fulfilled payload value may reject one of its streamed holes later.\n // Attribute that error for as long as this generation's signal is live —\n // the signal's lifetime IS its authority, so a visible value keeps\n // attributing through a superseding refresh's window. Retired decodes\n // must not make their successor invalidatable by a stale error object;\n // the errors land in this generation's own set, which reaches the entry\n // only if this generation publishes.\n if (this.disposed || controller.signal.aborted) return;\n markDataResourceError(error, entry.key);\n if (isAttributableError(error)) valueErrors.add(error);\n },\n hydrate: (entries) => {\n // Server-pushed rows hydrate for as long as this generation's signal\n // is live — the same authority window as attributeError. A visible\n // value keeps hydrating through a superseding refresh's window;\n // retired, evicted, and disposed decodes cannot mutate the store\n // (every retirement path aborts the signal).\n if (this.disposed || controller.signal.aborted) return;\n\n // The loading entry's own value comes from the loader's return, never\n // from a data row: hydrating its key here would supersede — and abort —\n // the very load delivering it.\n const foreign = entries.filter(\n (hydrated) =>\n this.storeKey(normalizeKey(hydrated.key).canonical) !==\n entry.storeKey,\n );\n if (__DEV__ && foreign.length !== entries.length) {\n warn(\n `Data rows targeting the loading key ${entry.canonicalKey} were skipped: a loader cannot hydrate its own entry.`,\n );\n }\n if (foreign.length > 0) this.hydrate(foreign);\n },\n });\n return context;\n }\n\n private publish(entry: Entry<Owner, Lane>): void {\n this.notifyEntryChange(entry);\n this.scheduleInactiveCleanup(entry);\n\n this.scheduleSubscribers(entry, entry.lane ?? this.host.getLane());\n }\n\n private scheduleSubscribers(entry: Entry<Owner, Lane>, lane: Lane): void {\n for (const subscriber of entry.subscribers) {\n this.host.schedule(subscriber, lane);\n }\n }\n\n // Aborts only the in-flight load: supersession-at-start cancels a wasted\n // request without revoking the authoritative generation's signal.\n private abortPendingLoad(\n entry: Entry<Owner, Lane>,\n reason: AbortReason,\n ): void {\n entry.controller?.abort();\n entry.controller = null;\n\n const pending = entry.pending;\n if (pending === null) return;\n\n entry.pending = null;\n pending.resolve(abortedRefreshResult(entry, reason));\n }\n\n // Terminal paths (hydrate-over, eviction, disposal) end every generation:\n // the pending load and the authoritative value's background work.\n private abortEntryGenerations(\n entry: Entry<Owner, Lane>,\n reason: AbortReason,\n ): void {\n this.abortPendingLoad(entry, reason);\n entry.valueController?.abort();\n entry.valueController = null;\n }\n\n private retainPreload(entry: Entry<Owner, Lane>): void {\n this.clearPreloadTimer(entry);\n if (this.disposed || !Number.isFinite(this.preloadRetentionMs)) return;\n\n entry.preloadTimer = scheduleStoreTimer(\n () => {\n entry.preloadTimer = null;\n if (\n entry.subscribers.size === 0 &&\n entry.ensureRetainers === 0 &&\n entry.pending !== null &&\n !entryHasValue(entry)\n ) {\n this.evictEntry(entry, \"evicted\");\n return;\n }\n this.scheduleInactiveCleanup(entry);\n },\n Math.max(0, this.preloadRetentionMs),\n );\n }\n\n private scheduleInactiveCleanup(entry: Entry<Owner, Lane>): void {\n if (\n this.disposed ||\n entry.subscribers.size > 0 ||\n entry.pending !== null ||\n entry.preloadTimer !== null ||\n entry.ensureRetainers > 0 ||\n !Number.isFinite(this.inactiveRetentionMs)\n ) {\n return;\n }\n\n this.clearInactiveTimer(entry);\n entry.inactiveTimer = scheduleStoreTimer(\n () => {\n entry.inactiveTimer = null;\n if (\n entry.subscribers.size > 0 ||\n entry.pending !== null ||\n entry.preloadTimer !== null ||\n entry.ensureRetainers > 0\n ) {\n return;\n }\n this.evictEntry(entry, \"evicted\");\n },\n Math.max(0, this.inactiveRetentionMs),\n );\n }\n\n private evictEntry(entry: Entry<Owner, Lane>, reason: AbortReason): void {\n if (this.entries.get(entry.storeKey) !== entry) return;\n\n this.clearInactiveTimer(entry);\n this.clearPreloadTimer(entry);\n this.abortEntryGenerations(entry, reason);\n this.entries.delete(entry.storeKey);\n this.host.onEntryEvict?.(this.snapshotEntry(entry));\n }\n\n private clearInactiveTimer(entry: Entry<Owner, Lane>): void {\n if (entry.inactiveTimer === null) return;\n\n clearTimeout(entry.inactiveTimer);\n entry.inactiveTimer = null;\n }\n\n private clearPreloadTimer(entry: Entry<Owner, Lane>): void {\n if (entry.preloadTimer === null) return;\n\n clearTimeout(entry.preloadTimer);\n entry.preloadTimer = null;\n }\n\n private notifyEntryChange(entry: Entry<Owner, Lane>): void {\n this.host.onEntryChange?.(this.snapshotEntry(entry));\n }\n\n private snapshotEntry(entry: Entry<Owner, Lane>): DataStoreEntrySnapshot {\n const hasValue = entryHasValue(entry);\n return {\n canonicalKey: entry.canonicalKey,\n error: entry.status === \"rejected\" ? entry.error : undefined,\n hasValue,\n key: entry.key,\n pending: entry.pending !== null,\n refreshError: entry.refreshError,\n stale: entry.stale,\n status: entry.status,\n subscriberCount: entry.subscribers.size,\n value: hasValue ? entry.value : undefined,\n };\n }\n\n private readCurrentValue<TValue>(entry: Entry<Owner, Lane>): TValue {\n if (entryHasValue(entry)) {\n return entry.value as TValue;\n }\n\n if (entry.status === \"rejected\") throwDataResourceError(entry);\n\n if (entry.pending === null) {\n throw new Error(\n `Data resource \"${entry.canonicalKey}\" has no pending load.`,\n );\n }\n\n throw entry.pending.promise;\n }\n\n private invalidateEntry(\n entry: Entry<Owner, Lane>,\n lane: Lane,\n attributedError?: unknown,\n ): void {\n entry.invalidationVersion += 1;\n entry.stale = true;\n // Clearing the prior refresh failure re-enables auto-refresh-on-read; an\n // explicit invalidation is a fresh \"this is stale, fetch again\" intent.\n entry.refreshError = undefined;\n if (\n isAttributableError(attributedError) &&\n entry.valueErrors.has(attributedError)\n ) {\n entry.valueController?.abort();\n entry.valueController = null;\n entry.valueErrors = new WeakSet();\n entry.value = undefined;\n entry.error = undefined;\n entry.status = \"pending\";\n } else if (entry.status === \"rejected\") {\n // The same intent applies to a cached rejection: without this, every\n // read rethrows the old error forever — remounting an ErrorBoundary\n // could never recover. Back to pending, so the next read loads afresh.\n entry.error = undefined;\n entry.status = \"pending\";\n }\n this.notifyEntryChange(entry);\n if (entry.subscribers.size === 0) return;\n\n this.scheduleSubscribers(entry, lane);\n }\n\n private invalidateEntries(\n entries: readonly Entry<Owner, Lane>[],\n attributedError?: unknown,\n ): void {\n if (entries.length === 0) return;\n\n const lane = this.host.getLane();\n for (const entry of entries) {\n this.invalidateEntry(entry, lane, attributedError);\n }\n }\n}\n\nfunction normalizeKey(key: DataResourceKey): NormalizedKey {\n if (!Array.isArray(key) || typeof key[0] !== \"string\") {\n throw new Error(\n \"Data resource keys must be arrays starting with a string.\",\n );\n }\n\n return {\n canonical: encodeArray(key, createEncodePath(\"key\")),\n key,\n };\n}\n\nfunction canonicalKeyStartsWith(key: string, prefix: string): boolean {\n if (key === prefix) return true;\n\n const arrayPrefix = prefix.slice(0, -1);\n return key.startsWith(arrayPrefix) && key[arrayPrefix.length] === \",\";\n}\n\nfunction entryHasValue<Owner extends object, Lane>(\n entry: Entry<Owner, Lane>,\n): boolean {\n return entry.status === \"fulfilled\" || entry.status === \"refreshing\";\n}\n\nfunction throwDataResourceError<Owner extends object, Lane>(\n entry: Entry<Owner, Lane>,\n): never {\n markDataResourceError(entry.error, entry.key);\n throw entry.error;\n}\n\nfunction abortedRefreshResult<T, Owner extends object, Lane>(\n entry: Entry<Owner, Lane>,\n reason: AbortReason,\n): DataRefreshResult<T> {\n return {\n reason,\n staleValue: entryHasValue(entry) ? (entry.value as T) : undefined,\n status: \"aborted\",\n };\n}\n\nfunction unsupportedRefreshResult<\n T,\n Owner extends object = object,\n Lane = unknown,\n>(entry?: Entry<Owner, Lane>): DataRefreshResult<T> {\n const result: DataRefreshResult<T> = {\n reason: \"no-client-loader\",\n status: \"unsupported\",\n };\n\n if (entry !== undefined) {\n result.staleValue = entryHasValue(entry) ? (entry.value as T) : undefined;\n }\n\n return result;\n}\n\nfunction fingerprintFor<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n args: TArgs,\n): string | null {\n if (resource.debugArgs !== undefined) {\n return encodeValue(\n resource.debugArgs(...args),\n createEncodePath(\"debugArgs\"),\n );\n }\n\n try {\n return encodeArray(args, createEncodePath(\"args\"));\n } catch {\n return null;\n }\n}\n\nfunction diagnoseEntryDrift<\n Owner extends object,\n Lane,\n TArgs extends unknown[],\n TValue,\n>(\n entry: Entry<Owner, Lane>,\n resource: DataResource<TArgs, TValue>,\n key: string,\n fingerprint: string | null,\n): void {\n if (!__DEV__) return;\n\n if (entry.resource === null) {\n entry.resource = resource as DataResource<unknown[], unknown>;\n } else if (entry.resource !== resource) {\n warn(`Data resource key ${key} was read by multiple resource definitions.`);\n }\n\n if (\n entry.fingerprint !== null &&\n fingerprint !== null &&\n entry.fingerprint !== fingerprint\n ) {\n warn(\n `Data resource key ${key} was read with different argument fingerprints.`,\n );\n }\n}\n\nfunction warn(message: string): void {\n if (typeof console === \"undefined\") return;\n console.warn(message);\n}\n\nfunction createEncodePath(root: string): EncodePath {\n return { root, segments: [] };\n}\n\nfunction formatEncodePath(path: EncodePath): string {\n let text = path.root;\n for (const segment of path.segments) {\n text += typeof segment === \"number\" ? `[${segment}]` : `.${segment}`;\n }\n return text;\n}\n\nfunction encodeArray(values: readonly unknown[], path: EncodePath): string {\n const parts: string[] = [];\n for (let index = 0; index < values.length; index += 1) {\n path.segments.push(index);\n parts.push(encodeValue(values[index], path));\n path.segments.pop();\n }\n return `[${parts.join(\",\")}]`;\n}\n\nfunction encodeObject(value: object, path: EncodePath): string {\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) {\n throw new Error(\n `Invalid data resource key value at ${formatEncodePath(path)}.`,\n );\n }\n\n const record = value as Record<string, unknown>;\n const keys = Object.keys(record).sort();\n const parts: string[] = [];\n\n for (const key of keys) {\n const child = record[key];\n if (child === undefined) {\n throw new Error(\n `Invalid undefined data resource key value at ${formatEncodePath(path)}.`,\n );\n }\n path.segments.push(key);\n parts.push(`${JSON.stringify(key)}:${encodeValue(child, path)}`);\n path.segments.pop();\n }\n\n return `{${parts.join(\",\")}}`;\n}\n\nfunction encodeValue(value: unknown, path: EncodePath): string {\n if (value === null) return \"null\";\n\n switch (typeof value) {\n case \"string\":\n return JSON.stringify(value);\n case \"boolean\":\n return value ? \"true\" : \"false\";\n case \"number\":\n if (!Number.isFinite(value)) {\n throw new Error(\n `Invalid number in data resource key at ${formatEncodePath(path)}.`,\n );\n }\n return Object.is(value, -0) ? \"0\" : JSON.stringify(value);\n case \"object\":\n if (Array.isArray(value)) return encodeArray(value, path);\n return encodeObject(value, path);\n default:\n throw new Error(\n `Invalid data resource key value at ${formatEncodePath(path)}.`,\n );\n }\n}\n\nfunction isThenable<T>(value: T | PromiseLike<T>): value is PromiseLike<T> {\n return (\n (typeof value === \"object\" || typeof value === \"function\") &&\n value !== null &&\n \"then\" in value &&\n typeof value.then === \"function\"\n );\n}\n\nfunction createPendingResult<T>(): PendingResult<T> {\n let resolve: (result: DataRefreshResult<T>) => void = () => undefined;\n const promise = new Promise<DataRefreshResult<T>>((settle) => {\n resolve = settle;\n });\n\n return {\n promise,\n resolve,\n };\n}\n\nfunction scheduleStoreTimer(callback: () => void, delay: number): TimerHandle {\n const timer = setTimeout(callback, delay);\n const unref = (timer as { unref?: () => void }).unref;\n if (unref !== undefined) unref.call(timer);\n return timer;\n}\n\nexport function runWithDataStore<T>(store: FigDataStore, callback: () => T): T {\n return store.run(callback);\n}\n\nexport function currentDataStore(): FigDataStore {\n return resolveCurrentDataStore();\n}\n","export interface TransitionOptions {\n types?: readonly string[];\n}\n\nexport type TransitionHandler = <T>(\n callback: () => T,\n options?: TransitionOptions,\n) => T;\n\nlet transitionHandler: TransitionHandler = (callback) => callback();\n\n/**\n * Runs state updates scheduled by `callback` at transition priority. If\n * `callback` returns a thenable, updates after an `await` remain in the\n * transition priority scope until it settles.\n */\nexport function transition<T>(\n callback: () => T,\n options?: TransitionOptions,\n): T {\n return transitionHandler(callback, options);\n}\n\nexport function setTransitionHandler(\n handler: TransitionHandler,\n): TransitionHandler {\n const previous = transitionHandler;\n transitionHandler = handler;\n return previous;\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bgub/fig",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.3",
|
|
4
4
|
"description": "Fig — a UI library",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"homepage": "https://github.com/bgub/fig",
|
|
@@ -8,26 +8,31 @@
|
|
|
8
8
|
"exports": {
|
|
9
9
|
".": {
|
|
10
10
|
"types": "./dist/index.d.ts",
|
|
11
|
+
"fig-development": "./dist-development/index.js",
|
|
11
12
|
"import": "./dist/index.js",
|
|
12
13
|
"default": "./dist/index.js"
|
|
13
14
|
},
|
|
14
15
|
"./internal": {
|
|
15
16
|
"types": "./dist/internal.d.ts",
|
|
17
|
+
"fig-development": "./dist-development/internal.js",
|
|
16
18
|
"import": "./dist/internal.js",
|
|
17
19
|
"default": "./dist/internal.js"
|
|
18
20
|
},
|
|
19
21
|
"./payload": {
|
|
20
22
|
"types": "./dist/payload.d.ts",
|
|
23
|
+
"fig-development": "./dist-development/payload.js",
|
|
21
24
|
"import": "./dist/payload.js",
|
|
22
25
|
"default": "./dist/payload.js"
|
|
23
26
|
},
|
|
24
27
|
"./jsx-runtime": {
|
|
25
28
|
"types": "./dist/jsx-runtime.d.ts",
|
|
29
|
+
"fig-development": "./dist-development/jsx-runtime.js",
|
|
26
30
|
"import": "./dist/jsx-runtime.js",
|
|
27
31
|
"default": "./dist/jsx-runtime.js"
|
|
28
32
|
},
|
|
29
33
|
"./jsx-dev-runtime": {
|
|
30
34
|
"types": "./dist/jsx-runtime.d.ts",
|
|
35
|
+
"fig-development": "./dist-development/jsx-runtime.js",
|
|
31
36
|
"import": "./dist/jsx-runtime.js",
|
|
32
37
|
"default": "./dist/jsx-runtime.js"
|
|
33
38
|
},
|
|
@@ -37,6 +42,7 @@
|
|
|
37
42
|
"sideEffects": false,
|
|
38
43
|
"files": [
|
|
39
44
|
"dist",
|
|
45
|
+
"dist-development",
|
|
40
46
|
"CHANGELOG.md"
|
|
41
47
|
],
|
|
42
48
|
"author": "Ben Gubler <nebrelbug@gmail.com>",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resource-kXeIR52S.js","names":[],"sources":["../src/thenables.ts","../src/resource.ts"],"sourcesContent":["export type Thenable<T = unknown> = PromiseLike<T> & object;\n\ntype ThenableRecord<T> =\n | { status: \"pending\" }\n | { status: \"fulfilled\"; value: T }\n | { status: \"rejected\"; reason: unknown };\n\n// One process-wide registry keyed by thenable identity: the reconciler's\n// readPromise, the server renderers' dispatchers, and preloaders all share\n// it, so suspend/settle semantics cannot drift between client and server.\nconst thenableRecords = new WeakMap<object, ThenableRecord<unknown>>();\n\nfunction recordFor<T>(thenable: PromiseLike<T>): ThenableRecord<T> {\n const key = thenable as Thenable<T>;\n let record = thenableRecords.get(key) as ThenableRecord<T> | undefined;\n\n if (record === undefined) {\n record = { status: \"pending\" };\n thenableRecords.set(key, record);\n thenable.then(\n (value) => {\n record = { status: \"fulfilled\", value };\n thenableRecords.set(key, record);\n },\n (reason: unknown) => {\n record = { reason, status: \"rejected\" };\n thenableRecords.set(key, record);\n },\n );\n }\n\n return record;\n}\n\n// Starts tracking without reading. Preloaders call this when they begin a\n// load so that a thenable settled before its first render read resolves\n// synchronously instead of suspending for one retry beat.\nexport function trackThenable<T>(thenable: PromiseLike<T>): void {\n recordFor(thenable);\n}\n\nexport function readThenable<T>(thenable: PromiseLike<T>): T {\n const record = recordFor(thenable);\n if (record.status === \"fulfilled\") return record.value;\n if (record.status === \"rejected\") throw record.reason;\n throw thenable;\n}\n\nexport function isThenable(value: unknown): value is Thenable {\n if (\n (typeof value !== \"object\" && typeof value !== \"function\") ||\n value === null\n ) {\n return false;\n }\n\n return \"then\" in value && typeof value.then === \"function\";\n}\n","import {\n Assets,\n createElement,\n type FigClientReference,\n type FigElement,\n type FigNode,\n type Props,\n} from \"./element.ts\";\nimport { isThenable, readThenable } from \"./thenables.ts\";\n\nconst PreventAssetResourceHoistSymbol = Symbol.for(\n \"fig.prevent-asset-resource-hoist\",\n);\ntype AssetResourceHostProps = Props & {\n [PreventAssetResourceHoistSymbol]?: true;\n};\n\nexport type AssetResourceBlocking = \"reveal\" | \"none\";\nexport type CrossOrigin = \"anonymous\" | \"use-credentials\" | \"\";\nexport type FetchPriority = \"high\" | \"low\" | \"auto\";\nexport type AssetResourceDestination = \"head\" | \"stream\";\n\nexport type FigAssetResource =\n | StylesheetResource\n | PreloadResource\n | ModulePreloadResource\n | ScriptResource\n | FontResource\n | PreconnectResource\n | TitleResource\n | MetaResource;\n\ninterface ResourceBase {\n key?: string;\n}\n\nexport interface StylesheetResource extends ResourceBase {\n blocking?: AssetResourceBlocking;\n crossorigin?: CrossOrigin;\n href: string;\n kind: \"stylesheet\";\n media?: string;\n precedence?: string;\n}\n\nexport interface PreloadResource extends ResourceBase {\n as: string;\n crossorigin?: CrossOrigin;\n fetchpriority?: FetchPriority;\n href: string;\n kind: \"preload\";\n type?: string;\n}\n\nexport interface ModulePreloadResource extends ResourceBase {\n crossorigin?: CrossOrigin;\n fetchpriority?: FetchPriority;\n href: string;\n kind: \"modulepreload\";\n}\n\nexport interface ScriptResource extends ResourceBase {\n async?: boolean;\n crossorigin?: CrossOrigin;\n defer?: boolean;\n kind: \"script\";\n module?: boolean;\n src: string;\n}\n\nexport interface FontResource extends ResourceBase {\n crossorigin?: CrossOrigin;\n fetchpriority?: FetchPriority;\n href: string;\n kind: \"font\";\n type: string;\n}\n\nexport interface PreconnectResource extends ResourceBase {\n crossorigin?: CrossOrigin;\n href: string;\n kind: \"preconnect\";\n}\n\nexport interface TitleResource extends ResourceBase {\n kind: \"title\";\n value: string;\n}\n\ninterface MetaResourceBase extends ResourceBase {\n kind: \"meta\";\n}\n\ntype DistributiveOmit<Value, Key extends PropertyKey> = Value extends unknown\n ? Omit<Value, Key>\n : never;\n\nexport type MetaResource =\n | (MetaResourceBase & {\n charset: string;\n content?: never;\n \"http-equiv\"?: never;\n name?: never;\n property?: never;\n })\n | (MetaResourceBase & {\n charset?: never;\n content: string;\n \"http-equiv\"?: never;\n name: string;\n property?: never;\n })\n | (MetaResourceBase & {\n charset?: never;\n content: string;\n \"http-equiv\"?: never;\n name?: never;\n property: string;\n })\n | (MetaResourceBase & {\n charset?: never;\n content: string;\n \"http-equiv\": string;\n name?: never;\n property?: never;\n });\n\nexport type MetaResourceOptions = DistributiveOmit<MetaResource, \"kind\">;\n\nexport type FigAssetResourceList =\n | FigAssetResource\n | readonly FigAssetResource[];\n\n// Asset resources a client reference contributes when it renders. Eager for\n// hand-written lists; a thunk for bundler-manifest resolution that may not be\n// available until serialization time, or that maps paths differently per build.\nexport type ClientReferenceAssets =\n | FigAssetResourceList\n | (() => FigAssetResourceList);\n\nexport interface AssetsProps {\n assets: FigAssetResourceList;\n children?: FigNode;\n}\n\nexport function assets(\n value: FigAssetResourceList,\n children?: FigNode,\n): FigElement<AssetsProps> {\n return createElement(Assets, { assets: value }, children);\n}\n\nexport function stylesheet(\n href: string,\n options: Omit<StylesheetResource, \"href\" | \"kind\"> = {},\n): StylesheetResource {\n return { ...options, href, kind: \"stylesheet\" };\n}\n\nexport function preload(\n href: string,\n as: string,\n options: Omit<PreloadResource, \"as\" | \"href\" | \"kind\"> = {},\n): PreloadResource {\n return { ...options, as, href, kind: \"preload\" };\n}\n\nexport function modulepreload(\n href: string,\n options: Omit<ModulePreloadResource, \"href\" | \"kind\"> = {},\n): ModulePreloadResource {\n return { ...options, href, kind: \"modulepreload\" };\n}\n\nexport function script(\n src: string,\n options: Omit<ScriptResource, \"kind\" | \"src\"> = {},\n): ScriptResource {\n return { ...options, kind: \"script\", src };\n}\n\nexport function font(\n href: string,\n type: string,\n options: Omit<FontResource, \"href\" | \"kind\" | \"type\"> = {},\n): FontResource {\n return { ...options, href, kind: \"font\", type };\n}\n\nexport function preconnect(\n href: string,\n options: Omit<PreconnectResource, \"href\" | \"kind\"> = {},\n): PreconnectResource {\n return { ...options, href, kind: \"preconnect\" };\n}\n\nexport function title(value: string): TitleResource {\n return { kind: \"title\", value };\n}\n\nexport function meta(options: MetaResourceOptions): MetaResource {\n return { ...options, kind: \"meta\" };\n}\n\nexport function isFigAssetResource(value: unknown): value is FigAssetResource {\n if (typeof value !== \"object\" || value === null || !(\"kind\" in value)) {\n return false;\n }\n\n switch (value.kind) {\n case \"stylesheet\":\n case \"preload\":\n case \"modulepreload\":\n case \"script\":\n case \"font\":\n case \"preconnect\":\n case \"title\":\n case \"meta\":\n return true;\n default:\n return false;\n }\n}\n\nexport function clientReferenceAssets(\n reference: FigClientReference,\n): readonly FigAssetResource[] {\n const value = reference.assets;\n if (value === undefined) return [];\n\n // Resolved on each call rather than memoized: a lazy resolver may read a\n // manifest that is not loaded until serialization, and a consumer that wants\n // to cache can do so against the stable reference identity.\n const list = typeof value === \"function\" ? value() : value;\n if (isFigAssetResource(list)) return [list];\n // A thunk that yields nothing (e.g. a missing manifest entry) normalizes to an\n // empty list rather than leaking a non-array through the readonly contract.\n return Array.isArray(list) ? list : [];\n}\n\nexport function assetResourceKey(resource: FigAssetResource): string {\n // A document carries a single <title>; collapse every title to one key even\n // when an author supplies an explicit key, so the singleton invariant cannot\n // be bypassed into emitting multiple <title> elements (invalid HTML).\n if (resource.kind === \"title\") return \"title\";\n\n // A font is serialized and inserted as <link rel=\"preload\" as=\"font\">, so an\n // explicit key must also live in the preload key space.\n if (resource.kind === \"font\" && resource.key !== undefined)\n return `preload:${resource.key}`;\n\n if (resource.key !== undefined) return `${resource.kind}:${resource.key}`;\n\n switch (resource.kind) {\n case \"stylesheet\":\n return `stylesheet:${resource.href}`;\n case \"preload\":\n return `preload:${resource.as}:${resource.href}`;\n case \"modulepreload\":\n return `modulepreload:${resource.href}`;\n case \"script\":\n return `script:${resource.src}`;\n case \"font\":\n // A font is loaded as <link rel=\"preload\" as=\"font\">, so it must share the\n // preload-font key space across every package (SSR registry, payload record,\n // client insert) — otherwise a font() and an equivalent preload(href,\n // \"font\") would key separately and fail to dedupe.\n return `preload:font:${resource.href}`;\n case \"preconnect\":\n return `preconnect:${resource.href}`;\n case \"meta\":\n return metaResourceKey(resource);\n }\n}\n\nexport function assetResourceDestination(\n resource: FigAssetResource,\n): AssetResourceDestination {\n return resource.kind === \"title\" || resource.kind === \"meta\"\n ? \"head\"\n : \"stream\";\n}\n\nexport function assetResourceFromHostProps(\n type: string,\n props: Props,\n): FigAssetResource | null {\n if (\n (props as AssetResourceHostProps)[PreventAssetResourceHoistSymbol] === true\n ) {\n return null;\n }\n return resourceFromHost(type, (name) => props[name], props.children, true);\n}\n\nexport function preventAssetResourceHoist<P extends Props>(props: P): P {\n Object.defineProperty(props, PreventAssetResourceHoistSymbol, {\n enumerable: true,\n value: true,\n });\n return props;\n}\n\nexport function assetResourceFromHostAttributes(\n type: string,\n getAttribute: (name: string) => unknown,\n): FigAssetResource | null {\n return resourceFromHost(type, getAttribute, undefined, false);\n}\n\nexport type AssetResourceHostAttribute = readonly [\n name: string,\n value: string | true,\n];\n\n// Canonical attribute serialization for hoisted asset-resource elements,\n// shared by the server's registry writer and the client's head insertion so\n// the two renders cannot drift. `true` marks a boolean attribute (bare on\n// the server, empty-string in the DOM). Server-only attributes (id, nonce)\n// stay with the server writer; title/meta are written by their own paths.\nexport function assetResourceHostAttributes(\n resource: FigAssetResource,\n): AssetResourceHostAttribute[] {\n const pairs: Array<readonly [string, string | true | undefined]> = [];\n\n switch (resource.kind) {\n case \"stylesheet\":\n pairs.push(\n [\"rel\", \"stylesheet\"],\n [\"href\", resource.href],\n [\"data-fig-resource-key\", resource.key],\n [\"data-precedence\", resource.precedence],\n [\"media\", resource.media],\n [\"crossorigin\", resource.crossorigin],\n );\n break;\n case \"preload\":\n pairs.push(\n [\"rel\", \"preload\"],\n [\"href\", resource.href],\n [\"as\", resource.as],\n [\"data-fig-resource-key\", resource.key],\n [\"type\", resource.type],\n [\"crossorigin\", resource.crossorigin],\n [\"fetchpriority\", resource.fetchpriority],\n );\n break;\n case \"modulepreload\":\n pairs.push(\n [\"rel\", \"modulepreload\"],\n [\"href\", resource.href],\n [\"data-fig-resource-key\", resource.key],\n [\"crossorigin\", resource.crossorigin],\n [\"fetchpriority\", resource.fetchpriority],\n );\n break;\n case \"font\":\n pairs.push(\n [\"rel\", \"preload\"],\n [\"href\", resource.href],\n [\"as\", \"font\"],\n [\"data-fig-resource-key\", resource.key],\n [\"type\", resource.type],\n [\"crossorigin\", resource.crossorigin ?? \"anonymous\"],\n [\"fetchpriority\", resource.fetchpriority],\n );\n break;\n case \"preconnect\":\n pairs.push(\n [\"rel\", \"preconnect\"],\n [\"href\", resource.href],\n [\"data-fig-resource-key\", resource.key],\n [\"crossorigin\", resource.crossorigin],\n );\n break;\n case \"script\":\n pairs.push(\n [\"src\", resource.src],\n [\"type\", resource.module === true ? \"module\" : undefined],\n [\"data-fig-resource-key\", resource.key],\n // Hoisted scripts default to async, but an explicit defer opts into\n // ordered execution and must not be overridden (async wins over\n // defer in browsers).\n [\n \"async\",\n (resource.async ?? resource.defer !== true) ? true : undefined,\n ],\n [\"defer\", resource.defer === true ? true : undefined],\n [\"crossorigin\", resource.crossorigin],\n );\n break;\n case \"title\":\n case \"meta\":\n break;\n }\n\n return pairs.filter(\n (pair): pair is readonly [string, string | true] => pair[1] !== undefined,\n );\n}\n\nfunction resourceFromHost(\n type: string,\n prop: (name: string) => unknown,\n children?: FigNode,\n requireAsyncScript = false,\n): FigAssetResource | null {\n const withKey = (\n resource: FigAssetResource | null,\n ): FigAssetResource | null => {\n if (resource === null) return null;\n const key = readProp(prop, \"data-fig-resource-key\");\n return key === undefined ? resource : { ...resource, key };\n };\n\n switch (type.toLowerCase()) {\n case \"title\":\n if (readProp(prop, \"itemprop\") !== undefined) return null;\n return withKey({ kind: \"title\", value: textResourceValue(children) });\n case \"meta\":\n if (readProp(prop, \"itemprop\") !== undefined) return null;\n return withKey(metaResourceFromHost(prop));\n case \"link\":\n return withKey(linkResourceFromHost(prop));\n case \"script\": {\n const src = readProp(prop, \"src\");\n // A raw script keeps native placement and execution semantics unless the\n // author explicitly marks it async. Explicit script() descriptors remain\n // the opt-in path for hoisted defer, module, or synchronous scripts.\n const async = hasBooleanAttribute(prop(\"async\"));\n if (src === undefined || (requireAsyncScript && !async)) return null;\n return withKey({\n async,\n crossorigin: readCrossorigin(prop),\n defer: hasBooleanAttribute(prop(\"defer\")),\n kind: \"script\",\n module: prop(\"type\") === \"module\",\n src,\n });\n }\n default:\n return null;\n }\n}\n\nfunction metaResourceFromHost(\n prop: (name: string) => unknown,\n): MetaResource | null {\n const charset = readProp(prop, \"charset\");\n const httpEquiv = readProp(prop, \"http-equiv\");\n const name = readProp(prop, \"name\");\n const property = readProp(prop, \"property\");\n const identities = [charset, httpEquiv, name, property].filter(\n (value) => value !== undefined,\n );\n\n if (identities.length !== 1) return null;\n if (charset !== undefined) return { charset, kind: \"meta\" };\n\n const content = readProp(prop, \"content\");\n if (content === undefined) return null;\n if (httpEquiv !== undefined) {\n return { content, \"http-equiv\": httpEquiv, kind: \"meta\" };\n }\n if (name !== undefined) return { content, kind: \"meta\", name };\n if (property !== undefined) return { content, kind: \"meta\", property };\n return null;\n}\n\nfunction hasBooleanAttribute(value: unknown): boolean {\n return value !== undefined && value !== null && value !== false;\n}\n\nfunction linkResourceFromHost(\n prop: (name: string) => unknown,\n): FigAssetResource | null {\n const rel = readProp(prop, \"rel\")?.toLowerCase();\n const href = readProp(prop, \"href\");\n if (\n rel === undefined ||\n href === undefined ||\n readProp(prop, \"itemprop\") !== undefined\n ) {\n return null;\n }\n\n if (rel === \"stylesheet\") {\n return {\n blocking: prop(\"blocking\") === \"none\" ? \"none\" : undefined,\n crossorigin: readCrossorigin(prop),\n href,\n kind: \"stylesheet\",\n media: readProp(prop, \"media\"),\n // Hoisted elements serialize the canonical data-precedence attribute;\n // host-rendered <link precedence> keeps the author-facing prop name.\n precedence: readProp(prop, \"precedence\", \"data-precedence\"),\n };\n }\n\n if (rel === \"modulepreload\") {\n return {\n crossorigin: readCrossorigin(prop),\n fetchpriority: fetchpriorityProp(readProp(prop, \"fetchpriority\")),\n href,\n kind: \"modulepreload\",\n };\n }\n\n if (rel === \"preload\") {\n const as = readProp(prop, \"as\");\n if (as === undefined) return null;\n return {\n as,\n crossorigin: readCrossorigin(prop),\n fetchpriority: fetchpriorityProp(readProp(prop, \"fetchpriority\")),\n href,\n kind: \"preload\",\n type: readProp(prop, \"type\"),\n };\n }\n\n if (rel === \"preconnect\") {\n return {\n crossorigin: readCrossorigin(prop),\n href,\n kind: \"preconnect\",\n };\n }\n\n return null;\n}\n\nfunction readProp(\n prop: (name: string) => unknown,\n ...names: string[]\n): string | undefined {\n for (const name of names) {\n const value = stringProp(prop(name));\n if (value !== undefined) return value;\n }\n\n return undefined;\n}\n\nfunction stringProp(value: unknown): string | undefined {\n if (value === undefined || value === null || value === false)\n return undefined;\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"bigint\" ||\n value === true\n ) {\n return String(value);\n }\n\n throw new Error(\n \"Resource host props must be serializable during server render.\",\n );\n}\n\nfunction readCrossorigin(\n prop: (name: string) => unknown,\n): CrossOrigin | undefined {\n return crossoriginProp(readProp(prop, \"crossorigin\"));\n}\n\nfunction crossoriginProp(value: unknown): CrossOrigin | undefined {\n return value === \"anonymous\" || value === \"use-credentials\" || value === \"\"\n ? value\n : undefined;\n}\n\nfunction fetchpriorityProp(value: unknown): FetchPriority | undefined {\n return value === \"high\" || value === \"low\" || value === \"auto\"\n ? value\n : undefined;\n}\n\nfunction textResourceValue(node: FigNode): string {\n if (node === null || node === undefined || typeof node === \"boolean\") {\n return \"\";\n }\n if (typeof node === \"string\" || typeof node === \"number\") return String(node);\n if (Array.isArray(node)) return node.map(textResourceValue).join(\"\");\n if (isThenable(node)) return textResourceValue(readThenable(node));\n\n throw new Error(\"<title> can only contain text during server render.\");\n}\n\nfunction metaResourceKey(resource: MetaResource): string {\n if (resource.charset !== undefined) return `meta:charset:${resource.charset}`;\n if (resource.name !== undefined) return `meta:name:${resource.name}`;\n if (resource.property !== undefined)\n return `meta:property:${resource.property}`;\n return `meta:http-equiv:${resource[\"http-equiv\"]}`;\n}\n"],"mappings":"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"}
|