UNPKG

@jsonjoy.com/json-type

Version:

High-performance JSON Pointer implementation

31 lines (30 loc) 2.17 kB
import { ModuleType } from '../type/classes/ModuleType'; import { Value } from './Value'; import { FnValue } from './FnValue'; import type { Printable } from 'tree-dump/lib/types'; import type * as classes from '../type'; import type { TypeBuilder } from '../type/TypeBuilder'; export type UnObjType<T> = T extends classes.ObjType<infer U> ? U : never; export type UnObjValue<T> = T extends ObjValue<infer U> ? U : never; export type UnObjFieldTypeVal<T> = T extends classes.KeyType<any, infer U> ? U : never; export type ObjFieldToTuple<F> = F extends classes.KeyType<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 ObjValueToTypeMap<F> = ToObject<{ [K in keyof F]: ObjFieldToTuple<F[K]>; }>; export type Ensure<T, X> = T extends X ? T : X; export declare class ObjValue<T extends classes.ObjType<any>> extends Value<T> implements Printable { static new: (system?: ModuleType) => ObjValue<classes.ObjType<[]>>; get system(): classes.ModuleType; get t(): TypeBuilder; keys(): string[]; get<K extends keyof ObjValueToTypeMap<UnObjType<T>>>(key: K): Value<ObjValueToTypeMap<UnObjType<T>>[K] extends classes.Type ? ObjValueToTypeMap<UnObjType<T>>[K] : classes.Type>; fn<K extends keyof ObjValueToTypeMap<UnObjType<T>>>(key: K): FnValue<Ensure<ObjValueToTypeMap<UnObjType<T>>[K] extends classes.Type ? ObjValueToTypeMap<UnObjType<T>>[K] : classes.Type, classes.FnType<any, any, any>>>; field<F extends classes.KeyType<any, any>>(field: F | ((t: TypeBuilder) => F), data: classes.ResolveType<UnObjFieldTypeVal<F>>): ObjValue<classes.ObjType<[...UnObjType<T>, F]>>; add<K extends string, V extends classes.Type>(key: K, type: V | ((t: TypeBuilder) => V), data: classes.ResolveType<V>): ObjValue<classes.ObjType<[...UnObjType<T>, classes.KeyType<K, V>]>>; set<K extends string, V extends classes.Type>(key: K, value: Value<V>): ObjValue<classes.ObjType<[...UnObjType<T>, classes.KeyType<K, V>]>>; merge<O extends ObjValue<any>>(obj: O): ObjValue<classes.ObjType<[...UnObjType<T>, ...UnObjType<O['type']>]>>; name(): string; }