import type { AnyObject } from '../types/basic.js'; import type { Merge } from '../types/utils.js'; export type ResolverObjectKey = string | boolean; export interface ResolverCache { [Symbol.toStringTag]: 'Object'; _cacheable: boolean; _scopes: T; _rootScopes: T | R; _fallback: ResolverObjectKey; _keys?: string[]; _scriptable?: boolean; _indexable?: boolean; _allKeys?: boolean; _storage?: T[number]; _getTarget(): T[number]; override(scope: S): ResolverProxy<(T[number] | S)[], T | R>; } export type ResolverProxy = Merge & ResolverCache; export interface DescriptorDefaults { scriptable: boolean; indexable: boolean; allKeys?: boolean; } export interface Descriptor { allKeys: boolean; scriptable: boolean; indexable: boolean; isScriptable(key: string): boolean; isIndexable(key: string): boolean; } export interface ContextCache { _cacheable: boolean; _proxy: ResolverProxy; _context: AnyObject; _subProxy: ResolverProxy; _stack: Set; _descriptors: Descriptor; setContext(ctx: AnyObject): ContextProxy; override(scope: S): ContextProxy<(T[number] | S)[], T | R>; } export type ContextProxy = Merge & ContextCache;