normul
Version:
Normul is a tiny TypeScript/JavaScript library for data normalization and transformation
23 lines (22 loc) • 1.19 kB
TypeScript
import type { Simplify, ParseContext } from '../../types.js';
import { Schema } from '../Schema.js';
export type Shape = Record<string, Schema>;
export type InferShape<S extends Shape> = Simplify<{
[K in keyof S as undefined extends (S[K] extends Schema<infer U> ? U : never) ? K : never]?: Exclude<S[K] extends Schema<infer U> ? U : never, undefined>;
} & {
[K in keyof S as undefined extends (S[K] extends Schema<infer U> ? U : never) ? never : K]: S[K] extends Schema<infer U> ? U : never;
}>;
export type ExtractShape<T> = T extends ObjectSchema<infer U> ? U : never;
export declare class ObjectSchema<T extends Shape> extends Schema<InferShape<T>> {
protected shape: T;
protected mode: 'strip' | 'passthrough';
constructor(shape: T);
protected _normalize(input: unknown, ctx: ParseContext): InferShape<T>;
get strip(): this;
get passthrough(): this;
extend<U extends Shape>(schemaOrShape: U | ObjectSchema<U>): ObjectSchema<T & U>;
pick<K extends keyof T>(keys: K[]): ObjectSchema<Pick<T, K>>;
omit<K extends keyof T>(keys: K[]): ObjectSchema<Omit<T, K>>;
protected cloneArgs(): T[];
protected cloneProps(target: this): void;
}