@burojs/context 0.2.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/atom.ts","../src/tracked-deps.ts","../src/store.ts","../src/dag.ts","../src/slices/static.ts","../src/slices/from-auth.ts","../src/slices/picker.ts","../src/slices/async.ts","../src/define-context-slices.ts","../src/resolver.ts","../src/scope.ts","../src/permissions.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["export interface Atom<T> {\n get: () => T;\n set: (value: T) => void;\n subscribe: (fn: () => void) => () => void;\n}\n\nexport function createAtom<T>(initial: T): Atom<T> {\n let value = initial;\n const subscribers = new Set<() => void>();\n\n return {\n get() {\n return value;\n },\n set(next) {\n if (Object.is(value, next)) return;\n value = next;\n for (const sub of subscribers) {\n sub();\n }\n },\n subscribe(fn) {\n subscribers.add(fn);\n return () => {\n subscribers.delete(fn);\n };\n },\n };\n}\n","/**\n * Proxy-based read tracking. The selector function reads from a Proxy\n * wrapping the target; every property access is recorded with dotted-path keys.\n *\n * Used by store.subscribe to know exactly which slice keys a subscriber depends on,\n * enabling point-wise re-invocation only when relevant slices change.\n */\nexport interface TrackedReadResult<T> {\n result: T;\n deps: Set<string>;\n}\n\nfunction makeTracker(target: unknown, prefix: string, deps: Set<string>): unknown {\n if (target === null || target === undefined) return target;\n if (typeof target !== 'object') return target;\n\n return new Proxy(target as object, {\n get(obj, key) {\n if (typeof key === 'symbol') {\n return Reflect.get(obj, key);\n }\n const path = prefix ? `${prefix}.${key}` : key;\n deps.add(path);\n const value = Reflect.get(obj, key);\n return makeTracker(value, path, deps);\n },\n });\n}\n\nexport function trackReads<TCtx, TResult>(\n ctx: TCtx,\n selector: (c: TCtx) => TResult,\n): TrackedReadResult<TResult> {\n const deps = new Set<string>();\n const tracker = makeTracker(ctx, '', deps) as TCtx;\n const result = selector(tracker);\n return { result, deps };\n}\n","import { createAtom } from './atom.js';\nimport { trackReads } from './tracked-deps.js';\nimport type { Store } from './types/store.js';\n\nexport function createStore<TState extends Record<string, unknown>>(\n initial: TState,\n): Store<TState> {\n // Single root atom holding the whole state. Per-slice atoms is a future optimization;\n // for now, all subscribers receive a notification, but selectors filter by tracked deps.\n const root = createAtom<TState>({ ...initial });\n\n type Subscriber = {\n fn: () => void;\n selector?: (state: TState) => unknown;\n lastDeps?: Set<string>;\n };\n const subscribers = new Set<Subscriber>();\n let lastChangedKey: string | null = null;\n\n root.subscribe(() => {\n for (const sub of subscribers) {\n if (!sub.selector) {\n sub.fn();\n continue;\n }\n // Re-track selector deps and check if changed key intersects.\n const { deps } = trackReads(root.get(), sub.selector);\n sub.lastDeps = deps;\n if (lastChangedKey && intersects(deps, lastChangedKey)) {\n sub.fn();\n }\n }\n });\n\n return {\n snapshot() {\n return root.get();\n },\n setSlice(key, value) {\n const prev = root.get();\n lastChangedKey = key as string;\n root.set({ ...prev, [key]: value });\n },\n subscribe(fn, selector) {\n const sub: Subscriber = { fn, selector };\n if (selector) {\n const { deps } = trackReads(root.get(), selector);\n sub.lastDeps = deps;\n }\n subscribers.add(sub);\n return () => {\n subscribers.delete(sub);\n };\n },\n };\n}\n\nfunction intersects(deps: Set<string>, changedKey: string): boolean {\n if (deps.has(changedKey)) return true;\n // Also fire if a nested path under changedKey is tracked: e.g. changedKey='user', dep='user.id'.\n for (const dep of deps) {\n if (dep.startsWith(`${changedKey}.`)) return true;\n }\n return false;\n}\n","export interface DagNode {\n name: string;\n deps: string[];\n}\n\n/**\n * Kahn-style topological sort with cycle detection.\n * Throws on cycles (with path) and on missing dependencies.\n */\nexport function topoSort<N extends DagNode>(nodes: N[]): N[] {\n const byName = new Map<string, N>();\n for (const n of nodes) {\n byName.set(n.name, n);\n }\n\n // Validate deps exist\n for (const n of nodes) {\n for (const d of n.deps) {\n if (!byName.has(d)) {\n throw new Error(`Unknown dependency '${d}' referenced by '${n.name}'`);\n }\n }\n }\n\n const visited = new Set<string>();\n const visiting = new Set<string>();\n const result: N[] = [];\n\n function visit(name: string, path: string[]): void {\n if (visited.has(name)) return;\n if (visiting.has(name)) {\n const cycleStart = path.indexOf(name);\n const cyclePath = path.slice(cycleStart).concat(name).join(' → ');\n throw new Error(`Cycle detected: ${cyclePath}`);\n }\n visiting.add(name);\n // biome-ignore lint/style/noNonNullAssertion: existence checked above\n const node = byName.get(name)!;\n for (const dep of node.deps) {\n visit(dep, [...path, name]);\n }\n visiting.delete(name);\n visited.add(name);\n result.push(node);\n }\n\n for (const n of nodes) {\n visit(n.name, []);\n }\n\n return result;\n}\n","import type { SliceDefinition } from '../types/slice.js';\n\nexport interface StaticSliceDefinition<TName extends string, TValue>\n extends SliceDefinition<TName, TValue> {\n kind: 'static';\n value: () => TValue;\n}\n\nexport interface StaticSliceConfig<TValue> {\n value: TValue | (() => TValue);\n}\n\nexport function defineStaticSlice<TName extends string, TValue>(\n name: TName,\n config: StaticSliceConfig<TValue>,\n): StaticSliceDefinition<TName, TValue> {\n const valueFn =\n typeof config.value === 'function'\n ? (config.value as () => TValue)\n : () => config.value as TValue;\n\n return {\n kind: 'static',\n name,\n deps: [],\n value: valueFn,\n };\n}\n","import type { SliceDefinition } from '../types/slice.js';\n\nexport type AuthInvalidationEvent = 'login' | 'logout' | 'refresh';\n\nexport interface FromAuthSliceDefinition<TName extends string, TValue>\n extends SliceDefinition<TName, TValue> {\n kind: 'fromAuth';\n extract: (rawAuthUser: unknown) => TValue;\n invalidateOn: AuthInvalidationEvent[];\n}\n\nexport interface FromAuthSliceConfig<TValue> {\n extract: (rawAuthUser: never) => TValue;\n invalidateOn?: AuthInvalidationEvent[];\n}\n\nexport function defineFromAuthSlice<TName extends string, TValue>(\n name: TName,\n config: FromAuthSliceConfig<TValue>,\n): FromAuthSliceDefinition<TName, TValue> {\n return {\n kind: 'fromAuth',\n name,\n deps: [],\n extract: config.extract as (rawAuthUser: unknown) => TValue,\n invalidateOn: config.invalidateOn ?? ['login', 'logout'],\n };\n}\n","import type { SliceDefinition } from '../types/slice.js';\n\nexport type PickerPersistMode = 'localStorage' | 'sessionStorage' | 'url';\n\n/**\n * Picker target — minimal contract. Real ResourceDef from @burojs/core\n * has full shape; here we accept anything thunk-returning a name.\n *\n * SCOPE-ISOLATION CONTRACT:\n * The picker-slice NEVER reads `target.scope` or `target.requireScope`.\n *\n * ⚠️ This comment used to also list `picker.label` / `picker.searchFields`\n * / `picker.listColumns` / `picker.filters` as properties the slice reads.\n * It never read them: `definePickerSlice` is a pure descriptor factory and\n * touches none of them. The `ResourceConfig.picker` block those names came\n * from was deleted in the core-flexibility program (sub-project D) as dead\n * API — it had no reader anywhere in the repo, and only survived a type\n * error because `define-resource.ts` copied it through with an `as any`.\n * Resolver emits a dev-warning if target has those set.\n */\nexport interface PickerSliceDefinition<TName extends string, TValue>\n extends SliceDefinition<TName, TValue> {\n kind: 'picker';\n resource: () => unknown;\n filter?: (ctx: never) => Record<string, unknown>;\n resetWhen?: string[];\n persist?: PickerPersistMode;\n required: boolean;\n}\n\nexport interface PickerSliceConfig {\n resource: () => unknown;\n dependsOn?: string[];\n filter?: (ctx: never) => Record<string, unknown>;\n resetWhen?: string[];\n persist?: PickerPersistMode;\n required?: boolean;\n}\n\nexport function definePickerSlice<TName extends string, TValue = unknown>(\n name: TName,\n config: PickerSliceConfig,\n): PickerSliceDefinition<TName, TValue> {\n return {\n kind: 'picker',\n name,\n deps: config.dependsOn ?? [],\n resource: config.resource,\n filter: config.filter,\n resetWhen: config.resetWhen,\n persist: config.persist,\n required: config.required ?? false,\n };\n}\n","import type { SliceDefinition } from '../types/slice.js';\n\nexport interface AsyncSliceDefinition<TName extends string, TValue>\n extends SliceDefinition<TName, TValue> {\n kind: 'async';\n fetch: (ctx: never) => Promise<TValue>;\n cacheKey?: (ctx: never) => string;\n staleTime: number;\n}\n\nexport interface AsyncSliceConfig<TValue> {\n dependsOn?: string[];\n fetch: (ctx: never) => Promise<TValue>;\n cacheKey?: (ctx: never) => string;\n /** ms; 0 = always refetch on invalidation */\n staleTime?: number;\n}\n\nexport function defineAsyncSlice<TName extends string, TValue>(\n name: TName,\n config: AsyncSliceConfig<TValue>,\n): AsyncSliceDefinition<TName, TValue> {\n return {\n kind: 'async',\n name,\n deps: config.dependsOn ?? [],\n fetch: config.fetch,\n cacheKey: config.cacheKey,\n staleTime: config.staleTime ?? 0,\n };\n}\n","import {\n type AsyncSliceConfig,\n type AsyncSliceDefinition,\n defineAsyncSlice,\n} from './slices/async.js';\nimport {\n type FromAuthSliceConfig,\n type FromAuthSliceDefinition,\n defineFromAuthSlice,\n} from './slices/from-auth.js';\nimport {\n type PickerSliceConfig,\n type PickerSliceDefinition,\n definePickerSlice,\n} from './slices/picker.js';\nimport {\n type StaticSliceConfig,\n type StaticSliceDefinition,\n defineStaticSlice,\n} from './slices/static.js';\nimport type { SliceDefinition } from './types/slice.js';\n\nexport interface SliceBuilder {\n static: <TValue>(config: StaticSliceConfig<TValue>) => StaticSliceDefinition<string, TValue>;\n fromAuth: <TValue>(\n config: FromAuthSliceConfig<TValue>,\n ) => FromAuthSliceDefinition<string, TValue>;\n picker: <TValue = unknown>(config: PickerSliceConfig) => PickerSliceDefinition<string, TValue>;\n async: <TValue>(config: AsyncSliceConfig<TValue>) => AsyncSliceDefinition<string, TValue>;\n}\n\nconst builder: SliceBuilder = {\n static: (config) => defineStaticSlice('', config) as never,\n fromAuth: (config) => defineFromAuthSlice('', config) as never,\n picker: (config) => definePickerSlice('', config) as never,\n async: (config) => defineAsyncSlice('', config) as never,\n};\n\nexport function defineContextSlices<T extends Record<string, SliceDefinition>>(\n factory: (s: SliceBuilder) => T,\n): T {\n const result = factory(builder);\n for (const [key, slice] of Object.entries(result)) {\n (slice as { name: string }).name = key;\n }\n return result;\n}\n","import { topoSort } from './dag.js';\nimport { createStore } from './store.js';\nimport type { SliceDefinition } from './types/slice.js';\nimport type { Store } from './types/store.js';\n\ninterface AsyncCacheEntry {\n key: string;\n value: unknown;\n fetchedAt: number;\n}\n\nexport interface Resolver<TSlices extends Record<string, SliceDefinition>> {\n boot: () => Promise<void>;\n snapshot: () => { [K in keyof TSlices]: unknown };\n setSlice: <K extends keyof TSlices>(key: K, value: unknown) => void;\n subscribe: (fn: () => void, selector?: (s: never) => unknown) => () => void;\n feedAuth: (rawAuthUser: unknown) => void;\n flushAsync: () => Promise<void>;\n}\n\nexport function createResolver<TSlices extends Record<string, SliceDefinition>>(\n slices: TSlices,\n): Resolver<TSlices> {\n const sliceList = Object.values(slices);\n let sortedSlices: SliceDefinition[] = [];\n let store: Store<Record<string, unknown>>;\n const pendingAsync: Set<string> = new Set();\n const asyncCache = new Map<string, AsyncCacheEntry>();\n\n function initial(): Record<string, unknown> {\n const init: Record<string, unknown> = {};\n for (const slice of sliceList) {\n if (slice.kind === 'static') {\n init[slice.name] = (slice as never as { value: () => unknown }).value();\n } else if (slice.kind === 'picker') {\n init[slice.name] = null;\n } else {\n init[slice.name] = undefined;\n }\n }\n return init;\n }\n\n async function runAsyncFor(slice: SliceDefinition): Promise<void> {\n if (slice.kind !== 'async') return;\n const asyncSlice = slice as never as {\n name: string;\n fetch: (ctx: never) => Promise<unknown>;\n cacheKey?: (ctx: never) => string;\n staleTime: number;\n };\n const ctx = store.snapshot();\n const key = asyncSlice.cacheKey ? asyncSlice.cacheKey(ctx as never) : '__no_key__';\n const cached = asyncCache.get(asyncSlice.name);\n const now = Date.now();\n if (\n cached &&\n cached.key === key &&\n asyncSlice.staleTime > 0 &&\n now - cached.fetchedAt < asyncSlice.staleTime\n ) {\n store.setSlice(asyncSlice.name, cached.value);\n return;\n }\n try {\n const value = await asyncSlice.fetch(ctx as never);\n asyncCache.set(asyncSlice.name, { key, value, fetchedAt: Date.now() });\n store.setSlice(asyncSlice.name, value);\n } catch (err) {\n store.setSlice(asyncSlice.name, { __error: err });\n }\n }\n\n function invalidateDependents(changedKey: string): void {\n for (const slice of sortedSlices) {\n if (slice.deps.includes(changedKey)) {\n if (slice.kind === 'picker') {\n const picker = slice as never as { resetWhen?: string[]; name: string };\n if (picker.resetWhen?.includes(changedKey)) {\n store.setSlice(picker.name, null);\n }\n } else if (slice.kind === 'async') {\n pendingAsync.add(slice.name);\n }\n }\n }\n }\n\n return {\n async boot() {\n sortedSlices = topoSort(sliceList);\n store = createStore(initial());\n\n // Dev-warning: picker scope-isolation contract violation check\n for (const slice of sortedSlices) {\n if (slice.kind === 'picker') {\n try {\n const target = (slice as never as { resource: () => unknown }).resource();\n const t = target as { scope?: unknown; requireScope?: unknown };\n if (t && (t.scope !== undefined || t.requireScope !== undefined)) {\n if (typeof console !== 'undefined') {\n console.warn(\n `[@burojs/context] picker-slice '${slice.name}': resource has scope/requireScope set; these are ignored by picker-slice (scope-isolation contract).`,\n );\n }\n }\n } catch {\n // resource() may throw at boot; OK\n }\n }\n }\n\n // Queue async slices for initial fetch only if all deps are satisfied (non-null, non-undefined)\n for (const slice of sortedSlices) {\n if (slice.kind === 'async') {\n const snap = store.snapshot();\n const depsReady = slice.deps.every((dep) => {\n const val = snap[dep];\n return val !== null && val !== undefined;\n });\n if (depsReady) {\n pendingAsync.add(slice.name);\n }\n }\n }\n\n await this.flushAsync();\n },\n\n snapshot() {\n return store.snapshot() as never;\n },\n\n setSlice(key, value) {\n store.setSlice(key as string, value);\n invalidateDependents(key as string);\n },\n\n subscribe(fn, selector) {\n return store.subscribe(fn, selector as never);\n },\n\n feedAuth(rawAuthUser) {\n for (const slice of sortedSlices) {\n if (slice.kind === 'fromAuth') {\n const authSlice = slice as never as {\n name: string;\n extract: (raw: unknown) => unknown;\n };\n store.setSlice(authSlice.name, authSlice.extract(rawAuthUser));\n invalidateDependents(authSlice.name);\n }\n }\n },\n\n async flushAsync() {\n const queue = Array.from(pendingAsync);\n pendingAsync.clear();\n for (const name of queue) {\n const slice = sortedSlices.find((s) => s.name === name);\n if (slice) {\n await runAsyncFor(slice);\n }\n }\n },\n };\n}\n","export type Scope = Record<string, unknown> | null;\n\nexport interface ScopeChainEntry {\n name: string;\n scope: (ctx: never) => Scope;\n}\n\n/**\n * Shallow merge two scope objects. Patch wins on conflict.\n * null on either side is treated as \"no contribution\".\n */\nexport function mergeScope(base: Scope, patch: Scope): Scope {\n if (base === null && patch === null) return null;\n if (base === null) return { ...patch };\n if (patch === null) return { ...base };\n return { ...base, ...patch };\n}\n\n/**\n * Cascade scope down a parent → child chain.\n * Each entry's scope() is invoked with ctx; results are merged left-to-right.\n * Later entries override earlier ones (child wins).\n */\nexport function cascadeScope(chain: ScopeChainEntry[], ctx: never): Scope {\n let acc: Scope = null;\n for (const entry of chain) {\n const slice = entry.scope(ctx);\n acc = mergeScope(acc, slice);\n }\n return acc;\n}\n\nexport interface RequireScopeOk {\n ok: true;\n}\n\nexport interface RequireScopeFail {\n ok: false;\n missing: string[];\n}\n\nexport type RequireScopeResult = RequireScopeOk | RequireScopeFail;\n\n/**\n * Verify all required keys are present (and not undefined) in scope.\n */\nexport function checkRequireScope(scope: Scope, required: string[]): RequireScopeResult {\n const missing: string[] = [];\n for (const key of required) {\n if (scope === null || scope[key] === undefined) {\n missing.push(key);\n }\n }\n return missing.length === 0 ? { ok: true } : { ok: false, missing };\n}\n","import type { PermissionMap } from './types/permissions.js';\n\nexport function createPendingPermissions(): PermissionMap {\n return {\n status: 'loading',\n can: () => false,\n reason: () => 'Permissions loading…',\n };\n}\n\nexport function createErrorPermissions(error: unknown): PermissionMap {\n const message = error instanceof Error ? error.message : String(error);\n return {\n status: 'error',\n can: () => false,\n reason: () => `Permissions error: ${message}`,\n };\n}\n\nexport interface ReadyPermissionsConfig {\n can: (action: string, resource: string, record?: unknown) => boolean;\n reason?: (action: string, resource: string, record?: unknown) => string | undefined;\n}\n\nexport function createReadyPermissions(config: ReadyPermissionsConfig): PermissionMap {\n return {\n status: 'ready',\n can: config.can,\n reason: config.reason ?? (() => undefined),\n };\n}\n","// Constants\nexport const PACKAGE_NAME = '@burojs/context' as const;\nexport const PACKAGE_VERSION = '0.0.0' as const;\n\n// Types\nexport type * from './types/index.js';\n\n// Atom + Store\nexport { createAtom } from './atom.js';\nexport type { Atom } from './atom.js';\nexport { createStore } from './store.js';\nexport { trackReads } from './tracked-deps.js';\nexport type { TrackedReadResult } from './tracked-deps.js';\n\n// DAG\nexport { topoSort } from './dag.js';\nexport type { DagNode } from './dag.js';\n\n// Slices\nexport { defineStaticSlice } from './slices/static.js';\nexport type { StaticSliceDefinition, StaticSliceConfig } from './slices/static.js';\nexport { defineFromAuthSlice } from './slices/from-auth.js';\nexport type {\n FromAuthSliceDefinition,\n FromAuthSliceConfig,\n AuthInvalidationEvent,\n} from './slices/from-auth.js';\nexport { definePickerSlice } from './slices/picker.js';\nexport type {\n PickerSliceDefinition,\n PickerSliceConfig,\n PickerPersistMode,\n} from './slices/picker.js';\nexport { defineAsyncSlice } from './slices/async.js';\nexport type { AsyncSliceDefinition, AsyncSliceConfig } from './slices/async.js';\nexport { defineContextSlices } from './define-context-slices.js';\nexport type { SliceBuilder } from './define-context-slices.js';\n\n// Resolver\nexport { createResolver } from './resolver.js';\nexport type { Resolver } from './resolver.js';\n\n// Scope\nexport { mergeScope, cascadeScope, checkRequireScope } from './scope.js';\nexport type {\n Scope,\n ScopeChainEntry,\n RequireScopeResult,\n RequireScopeOk,\n RequireScopeFail,\n} from './scope.js';\n\n// Permissions\nexport {\n createPendingPermissions,\n createErrorPermissions,\n createReadyPermissions,\n} from './permissions.js';\nexport type { ReadyPermissionsConfig } from './permissions.js';\n"]}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/atom.ts","../src/tracked-deps.ts","../src/store.ts","../src/dag.ts","../src/slices/static.ts","../src/slices/from-auth.ts","../src/slices/picker.ts","../src/slices/async.ts","../src/define-context-slices.ts","../src/resolver.ts","../src/scope.ts","../src/permissions.ts","../src/index.ts"],"sourcesContent":["export interface Atom<T> {\n get: () => T;\n set: (value: T) => void;\n subscribe: (fn: () => void) => () => void;\n}\n\nexport function createAtom<T>(initial: T): Atom<T> {\n let value = initial;\n const subscribers = new Set<() => void>();\n\n return {\n get() {\n return value;\n },\n set(next) {\n if (Object.is(value, next)) return;\n value = next;\n for (const sub of subscribers) {\n sub();\n }\n },\n subscribe(fn) {\n subscribers.add(fn);\n return () => {\n subscribers.delete(fn);\n };\n },\n };\n}\n","/**\n * Proxy-based read tracking. The selector function reads from a Proxy\n * wrapping the target; every property access is recorded with dotted-path keys.\n *\n * Used by store.subscribe to know exactly which slice keys a subscriber depends on,\n * enabling point-wise re-invocation only when relevant slices change.\n */\nexport interface TrackedReadResult<T> {\n result: T;\n deps: Set<string>;\n}\n\nfunction makeTracker(target: unknown, prefix: string, deps: Set<string>): unknown {\n if (target === null || target === undefined) return target;\n if (typeof target !== 'object') return target;\n\n return new Proxy(target as object, {\n get(obj, key) {\n if (typeof key === 'symbol') {\n return Reflect.get(obj, key);\n }\n const path = prefix ? `${prefix}.${key}` : key;\n deps.add(path);\n const value = Reflect.get(obj, key);\n return makeTracker(value, path, deps);\n },\n });\n}\n\nexport function trackReads<TCtx, TResult>(\n ctx: TCtx,\n selector: (c: TCtx) => TResult,\n): TrackedReadResult<TResult> {\n const deps = new Set<string>();\n const tracker = makeTracker(ctx, '', deps) as TCtx;\n const result = selector(tracker);\n return { result, deps };\n}\n","import { createAtom } from './atom.js';\nimport { trackReads } from './tracked-deps.js';\nimport type { Store } from './types/store.js';\n\nexport function createStore<TState extends Record<string, unknown>>(\n initial: TState,\n): Store<TState> {\n // Single root atom holding the whole state. Per-slice atoms is a future optimization;\n // for now, all subscribers receive a notification, but selectors filter by tracked deps.\n const root = createAtom<TState>({ ...initial });\n\n type Subscriber = {\n fn: () => void;\n selector?: (state: TState) => unknown;\n lastDeps?: Set<string>;\n };\n const subscribers = new Set<Subscriber>();\n let lastChangedKey: string | null = null;\n\n root.subscribe(() => {\n for (const sub of subscribers) {\n if (!sub.selector) {\n sub.fn();\n continue;\n }\n // Re-track selector deps and check if changed key intersects.\n const { deps } = trackReads(root.get(), sub.selector);\n sub.lastDeps = deps;\n if (lastChangedKey && intersects(deps, lastChangedKey)) {\n sub.fn();\n }\n }\n });\n\n return {\n snapshot() {\n return root.get();\n },\n setSlice(key, value) {\n const prev = root.get();\n lastChangedKey = key as string;\n root.set({ ...prev, [key]: value });\n },\n subscribe(fn, selector) {\n const sub: Subscriber = { fn, selector };\n if (selector) {\n const { deps } = trackReads(root.get(), selector);\n sub.lastDeps = deps;\n }\n subscribers.add(sub);\n return () => {\n subscribers.delete(sub);\n };\n },\n };\n}\n\nfunction intersects(deps: Set<string>, changedKey: string): boolean {\n if (deps.has(changedKey)) return true;\n // Also fire if a nested path under changedKey is tracked: e.g. changedKey='user', dep='user.id'.\n for (const dep of deps) {\n if (dep.startsWith(`${changedKey}.`)) return true;\n }\n return false;\n}\n","export interface DagNode {\n name: string;\n deps: string[];\n}\n\n/**\n * Kahn-style topological sort with cycle detection.\n * Throws on cycles (with path) and on missing dependencies.\n */\nexport function topoSort<N extends DagNode>(nodes: N[]): N[] {\n const byName = new Map<string, N>();\n for (const n of nodes) {\n byName.set(n.name, n);\n }\n\n // Validate deps exist\n for (const n of nodes) {\n for (const d of n.deps) {\n if (!byName.has(d)) {\n throw new Error(`Unknown dependency '${d}' referenced by '${n.name}'`);\n }\n }\n }\n\n const visited = new Set<string>();\n const visiting = new Set<string>();\n const result: N[] = [];\n\n function visit(name: string, path: string[]): void {\n if (visited.has(name)) return;\n if (visiting.has(name)) {\n const cycleStart = path.indexOf(name);\n const cyclePath = path.slice(cycleStart).concat(name).join(' → ');\n throw new Error(`Cycle detected: ${cyclePath}`);\n }\n visiting.add(name);\n // biome-ignore lint/style/noNonNullAssertion: existence checked above\n const node = byName.get(name)!;\n for (const dep of node.deps) {\n visit(dep, [...path, name]);\n }\n visiting.delete(name);\n visited.add(name);\n result.push(node);\n }\n\n for (const n of nodes) {\n visit(n.name, []);\n }\n\n return result;\n}\n","import type { SliceDefinition } from '../types/slice.js';\n\nexport interface StaticSliceDefinition<TName extends string, TValue>\n extends SliceDefinition<TName, TValue> {\n kind: 'static';\n value: () => TValue;\n}\n\nexport interface StaticSliceConfig<TValue> {\n value: TValue | (() => TValue);\n}\n\nexport function defineStaticSlice<TName extends string, TValue>(\n name: TName,\n config: StaticSliceConfig<TValue>,\n): StaticSliceDefinition<TName, TValue> {\n const valueFn =\n typeof config.value === 'function'\n ? (config.value as () => TValue)\n : () => config.value as TValue;\n\n return {\n kind: 'static',\n name,\n deps: [],\n value: valueFn,\n };\n}\n","import type { SliceDefinition } from '../types/slice.js';\n\nexport type AuthInvalidationEvent = 'login' | 'logout' | 'refresh';\n\nexport interface FromAuthSliceDefinition<TName extends string, TValue>\n extends SliceDefinition<TName, TValue> {\n kind: 'fromAuth';\n extract: (rawAuthUser: unknown) => TValue;\n invalidateOn: AuthInvalidationEvent[];\n}\n\nexport interface FromAuthSliceConfig<TValue> {\n extract: (rawAuthUser: never) => TValue;\n invalidateOn?: AuthInvalidationEvent[];\n}\n\nexport function defineFromAuthSlice<TName extends string, TValue>(\n name: TName,\n config: FromAuthSliceConfig<TValue>,\n): FromAuthSliceDefinition<TName, TValue> {\n return {\n kind: 'fromAuth',\n name,\n deps: [],\n extract: config.extract as (rawAuthUser: unknown) => TValue,\n invalidateOn: config.invalidateOn ?? ['login', 'logout'],\n };\n}\n","import type { SliceDefinition } from '../types/slice.js';\n\nexport type PickerPersistMode = 'localStorage' | 'sessionStorage' | 'url';\n\n/**\n * Picker target — minimal contract. Real ResourceDef from @burojs/core\n * has full shape; here we accept anything thunk-returning a name.\n *\n * SCOPE-ISOLATION CONTRACT:\n * The picker-slice NEVER reads `target.scope` or `target.requireScope`.\n *\n * ⚠️ This comment used to also list `picker.label` / `picker.searchFields`\n * / `picker.listColumns` / `picker.filters` as properties the slice reads.\n * It never read them: `definePickerSlice` is a pure descriptor factory and\n * touches none of them. The `ResourceConfig.picker` block those names came\n * from was deleted in the core-flexibility program (sub-project D) as dead\n * API — it had no reader anywhere in the repo, and only survived a type\n * error because `define-resource.ts` copied it through with an `as any`.\n * Resolver emits a dev-warning if target has those set.\n */\nexport interface PickerSliceDefinition<TName extends string, TValue>\n extends SliceDefinition<TName, TValue> {\n kind: 'picker';\n resource: () => unknown;\n filter?: (ctx: never) => Record<string, unknown>;\n resetWhen?: string[];\n persist?: PickerPersistMode;\n required: boolean;\n}\n\nexport interface PickerSliceConfig {\n resource: () => unknown;\n dependsOn?: string[];\n filter?: (ctx: never) => Record<string, unknown>;\n resetWhen?: string[];\n persist?: PickerPersistMode;\n required?: boolean;\n}\n\nexport function definePickerSlice<TName extends string, TValue = unknown>(\n name: TName,\n config: PickerSliceConfig,\n): PickerSliceDefinition<TName, TValue> {\n return {\n kind: 'picker',\n name,\n deps: config.dependsOn ?? [],\n resource: config.resource,\n filter: config.filter,\n resetWhen: config.resetWhen,\n persist: config.persist,\n required: config.required ?? false,\n };\n}\n","import type { SliceDefinition } from '../types/slice.js';\n\nexport interface AsyncSliceDefinition<TName extends string, TValue>\n extends SliceDefinition<TName, TValue> {\n kind: 'async';\n fetch: (ctx: never) => Promise<TValue>;\n cacheKey?: (ctx: never) => string;\n staleTime: number;\n}\n\nexport interface AsyncSliceConfig<TValue> {\n dependsOn?: string[];\n fetch: (ctx: never) => Promise<TValue>;\n cacheKey?: (ctx: never) => string;\n /** ms; 0 = always refetch on invalidation */\n staleTime?: number;\n}\n\nexport function defineAsyncSlice<TName extends string, TValue>(\n name: TName,\n config: AsyncSliceConfig<TValue>,\n): AsyncSliceDefinition<TName, TValue> {\n return {\n kind: 'async',\n name,\n deps: config.dependsOn ?? [],\n fetch: config.fetch,\n cacheKey: config.cacheKey,\n staleTime: config.staleTime ?? 0,\n };\n}\n","import {\n type AsyncSliceConfig,\n type AsyncSliceDefinition,\n defineAsyncSlice,\n} from './slices/async.js';\nimport {\n type FromAuthSliceConfig,\n type FromAuthSliceDefinition,\n defineFromAuthSlice,\n} from './slices/from-auth.js';\nimport {\n type PickerSliceConfig,\n type PickerSliceDefinition,\n definePickerSlice,\n} from './slices/picker.js';\nimport {\n type StaticSliceConfig,\n type StaticSliceDefinition,\n defineStaticSlice,\n} from './slices/static.js';\nimport type { SliceDefinition } from './types/slice.js';\n\nexport interface SliceBuilder {\n static: <TValue>(config: StaticSliceConfig<TValue>) => StaticSliceDefinition<string, TValue>;\n fromAuth: <TValue>(\n config: FromAuthSliceConfig<TValue>,\n ) => FromAuthSliceDefinition<string, TValue>;\n picker: <TValue = unknown>(config: PickerSliceConfig) => PickerSliceDefinition<string, TValue>;\n async: <TValue>(config: AsyncSliceConfig<TValue>) => AsyncSliceDefinition<string, TValue>;\n}\n\nconst builder: SliceBuilder = {\n static: (config) => defineStaticSlice('', config) as never,\n fromAuth: (config) => defineFromAuthSlice('', config) as never,\n picker: (config) => definePickerSlice('', config) as never,\n async: (config) => defineAsyncSlice('', config) as never,\n};\n\nexport function defineContextSlices<T extends Record<string, SliceDefinition>>(\n factory: (s: SliceBuilder) => T,\n): T {\n const result = factory(builder);\n for (const [key, slice] of Object.entries(result)) {\n (slice as { name: string }).name = key;\n }\n return result;\n}\n","import { topoSort } from './dag.js';\nimport { createStore } from './store.js';\nimport type { SliceDefinition } from './types/slice.js';\nimport type { Store } from './types/store.js';\n\ninterface AsyncCacheEntry {\n key: string;\n value: unknown;\n fetchedAt: number;\n}\n\nexport interface Resolver<TSlices extends Record<string, SliceDefinition>> {\n boot: () => Promise<void>;\n snapshot: () => { [K in keyof TSlices]: unknown };\n setSlice: <K extends keyof TSlices>(key: K, value: unknown) => void;\n subscribe: (fn: () => void, selector?: (s: never) => unknown) => () => void;\n feedAuth: (rawAuthUser: unknown) => void;\n flushAsync: () => Promise<void>;\n}\n\nexport function createResolver<TSlices extends Record<string, SliceDefinition>>(\n slices: TSlices,\n): Resolver<TSlices> {\n const sliceList = Object.values(slices);\n let sortedSlices: SliceDefinition[] = [];\n let store: Store<Record<string, unknown>>;\n const pendingAsync: Set<string> = new Set();\n const asyncCache = new Map<string, AsyncCacheEntry>();\n\n function initial(): Record<string, unknown> {\n const init: Record<string, unknown> = {};\n for (const slice of sliceList) {\n if (slice.kind === 'static') {\n init[slice.name] = (slice as never as { value: () => unknown }).value();\n } else if (slice.kind === 'picker') {\n init[slice.name] = null;\n } else {\n init[slice.name] = undefined;\n }\n }\n return init;\n }\n\n async function runAsyncFor(slice: SliceDefinition): Promise<void> {\n if (slice.kind !== 'async') return;\n const asyncSlice = slice as never as {\n name: string;\n fetch: (ctx: never) => Promise<unknown>;\n cacheKey?: (ctx: never) => string;\n staleTime: number;\n };\n const ctx = store.snapshot();\n const key = asyncSlice.cacheKey ? asyncSlice.cacheKey(ctx as never) : '__no_key__';\n const cached = asyncCache.get(asyncSlice.name);\n const now = Date.now();\n if (\n cached &&\n cached.key === key &&\n asyncSlice.staleTime > 0 &&\n now - cached.fetchedAt < asyncSlice.staleTime\n ) {\n store.setSlice(asyncSlice.name, cached.value);\n return;\n }\n try {\n const value = await asyncSlice.fetch(ctx as never);\n asyncCache.set(asyncSlice.name, { key, value, fetchedAt: Date.now() });\n store.setSlice(asyncSlice.name, value);\n } catch (err) {\n store.setSlice(asyncSlice.name, { __error: err });\n }\n }\n\n function invalidateDependents(changedKey: string): void {\n for (const slice of sortedSlices) {\n if (slice.deps.includes(changedKey)) {\n if (slice.kind === 'picker') {\n const picker = slice as never as { resetWhen?: string[]; name: string };\n if (picker.resetWhen?.includes(changedKey)) {\n store.setSlice(picker.name, null);\n }\n } else if (slice.kind === 'async') {\n pendingAsync.add(slice.name);\n }\n }\n }\n }\n\n return {\n async boot() {\n sortedSlices = topoSort(sliceList);\n store = createStore(initial());\n\n // Dev-warning: picker scope-isolation contract violation check\n for (const slice of sortedSlices) {\n if (slice.kind === 'picker') {\n try {\n const target = (slice as never as { resource: () => unknown }).resource();\n const t = target as { scope?: unknown; requireScope?: unknown };\n if (t && (t.scope !== undefined || t.requireScope !== undefined)) {\n if (typeof console !== 'undefined') {\n console.warn(\n `[@burojs/context] picker-slice '${slice.name}': resource has scope/requireScope set; these are ignored by picker-slice (scope-isolation contract).`,\n );\n }\n }\n } catch {\n // resource() may throw at boot; OK\n }\n }\n }\n\n // Queue async slices for initial fetch only if all deps are satisfied (non-null, non-undefined)\n for (const slice of sortedSlices) {\n if (slice.kind === 'async') {\n const snap = store.snapshot();\n const depsReady = slice.deps.every((dep) => {\n const val = snap[dep];\n return val !== null && val !== undefined;\n });\n if (depsReady) {\n pendingAsync.add(slice.name);\n }\n }\n }\n\n await this.flushAsync();\n },\n\n snapshot() {\n return store.snapshot() as never;\n },\n\n setSlice(key, value) {\n store.setSlice(key as string, value);\n invalidateDependents(key as string);\n },\n\n subscribe(fn, selector) {\n return store.subscribe(fn, selector as never);\n },\n\n feedAuth(rawAuthUser) {\n for (const slice of sortedSlices) {\n if (slice.kind === 'fromAuth') {\n const authSlice = slice as never as {\n name: string;\n extract: (raw: unknown) => unknown;\n };\n store.setSlice(authSlice.name, authSlice.extract(rawAuthUser));\n invalidateDependents(authSlice.name);\n }\n }\n },\n\n async flushAsync() {\n const queue = Array.from(pendingAsync);\n pendingAsync.clear();\n for (const name of queue) {\n const slice = sortedSlices.find((s) => s.name === name);\n if (slice) {\n await runAsyncFor(slice);\n }\n }\n },\n };\n}\n","export type Scope = Record<string, unknown> | null;\n\nexport interface ScopeChainEntry {\n name: string;\n scope: (ctx: never) => Scope;\n}\n\n/**\n * Shallow merge two scope objects. Patch wins on conflict.\n * null on either side is treated as \"no contribution\".\n */\nexport function mergeScope(base: Scope, patch: Scope): Scope {\n if (base === null && patch === null) return null;\n if (base === null) return { ...patch };\n if (patch === null) return { ...base };\n return { ...base, ...patch };\n}\n\n/**\n * Cascade scope down a parent → child chain.\n * Each entry's scope() is invoked with ctx; results are merged left-to-right.\n * Later entries override earlier ones (child wins).\n */\nexport function cascadeScope(chain: ScopeChainEntry[], ctx: never): Scope {\n let acc: Scope = null;\n for (const entry of chain) {\n const slice = entry.scope(ctx);\n acc = mergeScope(acc, slice);\n }\n return acc;\n}\n\nexport interface RequireScopeOk {\n ok: true;\n}\n\nexport interface RequireScopeFail {\n ok: false;\n missing: string[];\n}\n\nexport type RequireScopeResult = RequireScopeOk | RequireScopeFail;\n\n/**\n * Verify all required keys are present (and not undefined) in scope.\n */\nexport function checkRequireScope(scope: Scope, required: string[]): RequireScopeResult {\n const missing: string[] = [];\n for (const key of required) {\n if (scope === null || scope[key] === undefined) {\n missing.push(key);\n }\n }\n return missing.length === 0 ? { ok: true } : { ok: false, missing };\n}\n","import type { PermissionMap } from './types/permissions.js';\n\nexport function createPendingPermissions(): PermissionMap {\n return {\n status: 'loading',\n can: () => false,\n reason: () => 'Permissions loading…',\n };\n}\n\nexport function createErrorPermissions(error: unknown): PermissionMap {\n const message = error instanceof Error ? error.message : String(error);\n return {\n status: 'error',\n can: () => false,\n reason: () => `Permissions error: ${message}`,\n };\n}\n\nexport interface ReadyPermissionsConfig {\n can: (action: string, resource: string, record?: unknown) => boolean;\n reason?: (action: string, resource: string, record?: unknown) => string | undefined;\n}\n\nexport function createReadyPermissions(config: ReadyPermissionsConfig): PermissionMap {\n return {\n status: 'ready',\n can: config.can,\n reason: config.reason ?? (() => undefined),\n };\n}\n","// Constants\nexport const PACKAGE_NAME = '@burojs/context' as const;\nexport const PACKAGE_VERSION = '0.0.0' as const;\n\n// Types\nexport type * from './types/index.js';\n\n// Atom + Store\nexport { createAtom } from './atom.js';\nexport type { Atom } from './atom.js';\nexport { createStore } from './store.js';\nexport { trackReads } from './tracked-deps.js';\nexport type { TrackedReadResult } from './tracked-deps.js';\n\n// DAG\nexport { topoSort } from './dag.js';\nexport type { DagNode } from './dag.js';\n\n// Slices\nexport { defineStaticSlice } from './slices/static.js';\nexport type { StaticSliceDefinition, StaticSliceConfig } from './slices/static.js';\nexport { defineFromAuthSlice } from './slices/from-auth.js';\nexport type {\n FromAuthSliceDefinition,\n FromAuthSliceConfig,\n AuthInvalidationEvent,\n} from './slices/from-auth.js';\nexport { definePickerSlice } from './slices/picker.js';\nexport type {\n PickerSliceDefinition,\n PickerSliceConfig,\n PickerPersistMode,\n} from './slices/picker.js';\nexport { defineAsyncSlice } from './slices/async.js';\nexport type { AsyncSliceDefinition, AsyncSliceConfig } from './slices/async.js';\nexport { defineContextSlices } from './define-context-slices.js';\nexport type { SliceBuilder } from './define-context-slices.js';\n\n// Resolver\nexport { createResolver } from './resolver.js';\nexport type { Resolver } from './resolver.js';\n\n// Scope\nexport { mergeScope, cascadeScope, checkRequireScope } from './scope.js';\nexport type {\n Scope,\n ScopeChainEntry,\n RequireScopeResult,\n RequireScopeOk,\n RequireScopeFail,\n} from './scope.js';\n\n// Permissions\nexport {\n createPendingPermissions,\n createErrorPermissions,\n createReadyPermissions,\n} from './permissions.js';\nexport type { ReadyPermissionsConfig } from './permissions.js';\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burojs/context",
3
- "version": "0.2.0",
3
+ "version": "0.5.0",
4
4
  "license": "MIT",
5
5
  "description": "Buro: DAG-based context engine with dependent pickers and reactive store",
6
6
  "type": "module",
@@ -25,12 +25,11 @@
25
25
  "README.md"
26
26
  ],
27
27
  "dependencies": {
28
- "@burojs/core": "0.2.0"
28
+ "@burojs/core": "0.5.0"
29
29
  },
30
30
  "devDependencies": {
31
- "tsup": "^8.3.0",
32
31
  "typescript": "^5.5.0",
33
- "vitest": "^2.1.0",
32
+ "vitest": "^4.0.0",
34
33
  "expect-type": "^1.1.0",
35
34
  "@burojs/tooling-tsconfig": "0.0.0",
36
35
  "@burojs/tooling-eslint": "0.0.0"
@@ -39,8 +38,8 @@
39
38
  "access": "public"
40
39
  },
41
40
  "scripts": {
42
- "build": "tsup",
43
- "dev": "tsup --watch",
41
+ "build": "tsdown",
42
+ "dev": "tsdown --watch",
44
43
  "typecheck": "tsc --noEmit",
45
44
  "typecheck:tests": "tsc -p tsconfig.test.json"
46
45
  }