/** * Policy types * @see https://github.com/ucan-wg/delegation/#policy */ /** * Type-safe selector utilities */ /** * Extracts all possible paths from a data structure as string literals */ type PathsToStringProps = T extends string | number | boolean | null | undefined ? never : T extends Array ? `[]` | `[${number}]` | `[${number}:${number}]` | `[${number}:]` | `[:${number}]` | `[:]` | PathsToStringProps : T extends object ? { [K in keyof T & (string | number)]: K extends string ? `.${K}` | `.${K}?` | `.${K}${PathsToStringProps}` : `[${K}]` | `[${K}]?` | `[${K}]${PathsToStringProps}`; }[keyof T & (string | number)] : never; /** * Flattens nested path strings into a union of all possible selectors */ type FlattenPaths = T extends string ? T : T extends object ? { [K in keyof T]: T[K] extends string ? T[K] : T[K] extends object ? FlattenPaths : never; }[keyof T] : never; /** * Type-safe selector that only allows valid paths for the given data structure */ export type Selector = Args extends unknown ? FlattenPaths> | '.' : string; /** * Extracts the type of the value at a given selector path (minimal version) */ type SelectorValue = S extends `.${infer K}` ? K extends keyof T ? T[K] : never : S extends `[${infer I}]` ? T extends Array ? U : never : never; /** Connectives */ export type EqualityOp = '==' | '!='; export type Equality = [EqualityOp, Selector, unknown]; export type InequalityOp = '<' | '<=' | '>' | '>='; export type Inequality = [InequalityOp, Selector, number]; export type NegateOp = 'not'; export type Negate = [NegateOp, Statement]; export type ConnectiveOp = 'and' | 'or'; export type Connective = [ConnectiveOp, Statement[]]; export type QuantifierOp = 'all' | 'any'; export type Quantifier = Selector> = [QuantifierOp, Sel, Statement>]; export type LikeOp = 'like'; export type Like = [LikeOp, Selector, string]; export type Statement = Equality | Inequality | Negate | Connective | Quantifier | Like; export type Policy = Statement[]; export {}; //# sourceMappingURL=policy.d.ts.map