UNPKG

@jsonjoy.com/json-type

Version:

High-performance JSON Pointer implementation

37 lines (36 loc) 2.6 kB
import { Value } from './Value'; import { TypeSystem } from '../system/TypeSystem'; import type * as classes from '../type'; import type * as ts from '../typescript/types'; import type { TypeBuilder } from '../type/TypeBuilder'; import type { Printable } from 'tree-dump/lib/types'; import type { ResolveType } from '../system/types'; export type UnObjectType<T> = T extends classes.ObjectType<infer U> ? U : never; export type UnObjectValue<T> = T extends ObjectValue<infer U> ? U : never; export type UnObjectFieldTypeVal<T> = T extends classes.ObjectFieldType<any, infer U> ? U : never; export type ObjectFieldToTuple<F> = F extends classes.ObjectFieldType<infer K, infer V> ? [K, V] : never; export type ToObject<T> = T extends [string, unknown][] ? { [K in T[number] as K[0]]: K[1]; } : never; export type ObjectValueToTypeMap<F> = ToObject<{ [K in keyof F]: ObjectFieldToTuple<F[K]>; }>; export type TuplesToFields<T> = T extends PropDefinition<infer K, infer V>[] ? classes.ObjectFieldType<K, V>[] : never; type PropDefinition<K extends string, V extends classes.Type> = [key: K, val: V, data: ResolveType<V>]; type PropDef = <K extends string, V extends classes.Type>(key: K, val: V, data: ResolveType<V>) => PropDefinition<K, V>; export declare class ObjectValue<T extends classes.ObjectType<any>> extends Value<T> implements Printable { static create: (system?: TypeSystem) => ObjectValue<classes.ObjectType<[]>>; get system(): TypeSystem; get t(): TypeBuilder; keys(): string[]; get<K extends keyof ObjectValueToTypeMap<UnObjectType<T>>>(key: K): Value<ObjectValueToTypeMap<UnObjectType<T>>[K] extends classes.Type ? ObjectValueToTypeMap<UnObjectType<T>>[K] : classes.Type>; field<F extends classes.ObjectFieldType<any, any>>(field: F | ((t: TypeBuilder) => F), data: ResolveType<UnObjectFieldTypeVal<F>>): ObjectValue<classes.ObjectType<[...UnObjectType<T>, F]>>; prop<K extends string, V extends classes.Type>(key: K, type: V | ((t: TypeBuilder) => V), data: ResolveType<V>): ObjectValue<classes.ObjectType<[...UnObjectType<T>, classes.ObjectFieldType<K, V>]>>; merge<O extends ObjectValue<any>>(obj: O): ObjectValue<classes.ObjectType<[...UnObjectType<T>, ...UnObjectType<O['type']>]>>; extend<R extends PropDefinition<any, any>[]>(inp: (t: TypeBuilder, prop: PropDef, system: TypeSystem) => R): ObjectValue<classes.ObjectType<[...UnObjectType<T>, ...TuplesToFields<R>]>>; toTypeScriptAst(): ts.TsTypeLiteral; toTypeScriptModuleAst(): ts.TsModuleDeclaration; toTypeScript(): string; toString(tab?: string): string; } export {};