@atproto/jwk
Version:
A library for working with JSON Web Keys (JWKs) in TypeScript. This is meant to be extended by environment-specific libraries like @atproto/jwk-jose.
54 lines • 2.64 kB
TypeScript
import { RefinementCtx } from 'zod';
export type Simplify<T> = {
[K in keyof T]: T[K];
} & {};
export type Override<T, V> = Simplify<V & Omit<T, keyof V>>;
export type RequiredKey<T, K extends string> = Simplify<string extends K ? T : {
[L in K]: Exclude<L extends keyof T ? T[L] : unknown, undefined>;
} & Omit<T, K>>;
export type DeepReadonly<T> = T extends Function ? T : T extends object ? {
readonly [K in keyof T]: DeepReadonly<T[K]>;
} : T extends readonly (infer U)[] ? readonly DeepReadonly<U>[] : T;
export type UnReadonly<T> = T extends Function ? T : T extends object ? {
-readonly [K in keyof T]: UnReadonly<T[K]>;
} : T extends readonly (infer U)[] ? UnReadonly<U>[] : T;
export declare const isDefined: <T>(i: T | undefined) => i is T;
export declare const preferredOrderCmp: <T>(order: readonly T[]) => (a: T, b: T) => number;
export declare function matchesAny<T extends string | number | symbol | boolean>(value: null | undefined | T | readonly T[]): (v: unknown) => v is T;
/**
* Decorator to cache the result of a getter on a class instance.
*/
export declare const cachedGetter: <T extends object, V>(target: (this: T) => V, _context: ClassGetterDecoratorContext<T, V>) => (this: T) => V;
export declare function parseB64uJson(input: string): unknown;
/**
* @example
* ```ts
* // jwtSchema will only allow base64url chars & "." (dot)
* const jwtSchema = z.string().superRefine(jwtCharsRefinement)
* ```
*/
export declare const jwtCharsRefinement: (data: string, ctx: RefinementCtx) => void;
/**
* @example
* ```ts
* type SegmentedString3 = SegmentedString<3> // `${string}.${string}.${string}`
* type SegmentedString4 = SegmentedString<4> // `${string}.${string}.${string}.${string}`
* ```
*
* @note
* This utility only provides one way type safety (A SegmentedString<4> can be
* assigned to SegmentedString<3> but not vice versa). The purpose of this
* utility is to improve DX by avoiding as many potential errors as build time.
* DO NOT rely on this to enforce security or data integrity.
*/
type SegmentedString<C extends number, Acc extends string[] = [string]> = Acc['length'] extends C ? `${Acc[0]}` : `${Acc[0]}.${SegmentedString<C, [string, ...Acc]>}`;
/**
* @example
* ```ts
* const jwtSchema = z.string().superRefine(segmentedStringRefinementFactory(3))
* type Jwt = z.infer<typeof jwtSchema> // `${string}.${string}.${string}`
* ```
*/
export declare const segmentedStringRefinementFactory: <C extends number>(count: C, minPartLength?: number) => (data: string, ctx: RefinementCtx) => data is SegmentedString<C, [string]>;
export {};
//# sourceMappingURL=util.d.ts.map