//#region src/shared/pointer-path.d.ts /** * Pointer-path mini-DSL — parse, traverse, and filter JSON-like structures. * * Grammar (BNF): * PointerPath ::= Segment ( "." Segment )* * Segment ::= Name ("[*]")? * | "[*]" // root array expansion (first segment only) * Name ::= [A-Za-z_][A-Za-z0-9_]* * * Examples: * `id` → top-level string property * `ids[*]` → top-level array, each element a string * `blocks[*]` → top-level array of objects * `blocks[*].id` → string field of each element * `[*]` → root itself is an array * `data.blocks[*]` → array two segments deep * * Shape policy (STRICT_POINTER_POLICY): * - missing key → skip silently * - non-array where array expected → throw PointerPathShapeError * - non-object before a key → skip (graceful heterogeneous array handling) * * Terminal filter invariants (enforced by runPointerFilterTerminal + registry validation): * - terminal segment must be an array expansion * - at most one array expansion in the whole path * These ensure the filter can extract → filter → write-back in place. */ type PointerPath = string; declare class PointerPathShapeError extends Error { constructor(path: PointerPath, message: string); } type PathOp = { kind: 'key'; name: string; } | { kind: 'expandArray'; } | { kind: 'expandKey'; name: string; }; interface ShapePolicy { onMissingKey: 'skip' | 'throw'; onNonArray: 'skip' | 'throw'; onNonObject: 'skip' | 'throw'; } declare const STRICT_POINTER_POLICY: ShapePolicy; declare function compilePointerPath(path: PointerPath): PathOp[]; declare function pointerPathRoot(path: PointerPath): string | undefined; declare function runPointerGet(root: unknown, ops: PathOp[], path: PointerPath, policy?: ShapePolicy): unknown[]; declare function evaluatePointerPath(root: unknown, path: PointerPath, policy?: ShapePolicy): unknown[]; declare function isTerminalFilterCompatiblePointerPath(path: PointerPath): boolean; declare function runPointerFilterTerminal(root: unknown, path: PointerPath, filter: (items: unknown[]) => unknown[], policy?: ShapePolicy): unknown; //#endregion export { PathOp, PointerPath, PointerPathShapeError, STRICT_POINTER_POLICY, ShapePolicy, compilePointerPath, evaluatePointerPath, isTerminalFilterCompatiblePointerPath, pointerPathRoot, runPointerFilterTerminal, runPointerGet };