json-schema-describes-subset
Version:
Tools for static JSON schema analysis, including functions to determine if one schema describes a subset of another or if a schema describes the empty set or to convert a schema to its disjunctive normal form (DNF).
40 lines (39 loc) • 2.33 kB
TypeScript
export type ObjectKey = keyof any;
export type Prettify<Type> = {
[Key in keyof Type]: Type[Key];
} & unknown;
/**
* Any key in each union operand.
*
*/
export type ObjectUnionKey<Type> = Type extends unknown ? keyof Type : never;
export type ReadonlyDeep<Type> = Type extends (...args: infer Args) => infer Result ? ((...args: Args) => Result) & NonFunctionReadonlyDeep<Type> : NonFunctionReadonlyDeep<Type>;
type NonFunctionReadonlyDeep<Type> = {
readonly [Key in keyof Type]: Type[Key] extends number | string | symbol ? Readonly<Type[Key]> : ReadonlyDeep<Type[Key]>;
};
export type PartiallyUndefined<Type> = {
[Key in keyof Type]?: Type[Key] | undefined;
};
export type RequiredDefined<Type> = {
[Key in keyof Type]-?: Exclude<Type[Key], undefined>;
};
export type RequiredDefinedDeep<Type> = {
[Key in keyof Type]-?: Exclude<Type[Key], undefined> extends number | string | symbol ? Exclude<Type[Key], undefined> : RequiredDefinedDeep<Exclude<Type[Key], undefined>>;
};
export type RequiredKey<ObjectType> = {
[Key in keyof ObjectType]-?: object extends Pick<ObjectType, Key> ? never : string extends Key ? never : Key;
}[keyof ObjectType];
export type OptionalKey<ObjectType> = {
[Key in keyof ObjectType]-?: object extends Pick<ObjectType, Key> ? Key : string extends Key ? Key : never;
}[keyof ObjectType];
export type StringToNumber<Value> = Extract<Value, `${number}`> extends `${infer N extends number}` ? N : never;
export type TupleIndices<TupleType extends readonly unknown[]> = StringToNumber<keyof TupleType>;
export type FilteredTuple<TupleType extends readonly unknown[], FilteredType> = TupleType extends [infer First, ...infer Rest] ? First extends FilteredType ? [First, ...FilteredTuple<Rest, FilteredType>] : FilteredTuple<Rest, FilteredType> : [];
export declare function mapTuple<const Tuple extends readonly unknown[], const CallbackFunction extends (value: Tuple[number], index: number, array: Tuple) => unknown>(tuple: Tuple, callbackFunction: CallbackFunction): {
[Key in keyof Tuple]: ReturnType<CallbackFunction>;
};
export type UnknownProperties<Type> = {
[Key in keyof Type]: Type[Key] | unknown;
} & Record<string, unknown>;
export type PredicateIsType<FunctionType> = FunctionType extends (value: unknown) => value is infer Type ? Type : never;
export {};