import type { True } from './index.js'; import type { Ary } from './ary.js'; import type { And2, Covers$, Extends, If, Ifp, Yield1$ } from './common.js'; import type { Apply1, Assume, Flow2, HKT1, HKT2, HKT3, HKT4, Pipe1, Pipe2, } from './hkt.js'; import type { IfpList, IfpList$, List } from './list.js'; import type { Int, Num } from './num/index.js'; export type Obj = object; export declare namespace Obj { export type KeyOf = keyof O; export interface KeyOf$ extends HKT1 { new: (o: Assume) => KeyOf; } export type KeyOfNullish = keyof Exclude; export interface KeyOfNullish$ extends HKT1 { new: (o: Assume) => KeyOfNullish; } export type WritableDeep = _Id<{ -readonly [K in keyof O]: O[K] extends object ? WritableDeep : O[K]; }>; export type ValueOf = O[keyof O]; export interface ValueOf$ extends HKT1 { new: (o: Assume) => ValueOf; } export type ValueOfNullish = Exclude[keyof Exclude< O, Nullish >]; export interface ValueOfNullish$ extends HKT1 { new: (o: Assume) => ValueOfNullish; } export type OptionalKeyOf = { [K in keyof O]-?: NonNullable extends { [P in K]: O[K]; } ? K : never; }[keyof O]; export interface OptionalKeyOf$ extends HKT1 { new: (o: Assume) => OptionalKeyOf; } type _SpreadProperties = { [P in K]: L[P] | Exclude; }; type _Id = T extends infer U ? { [K in keyof U]: U[K]; } : never; type _SpreadTwo = _Id< Pick> & Pick>> & Pick, keyof L>> & _SpreadProperties & keyof L> >; export type Spread = AS extends [infer Head, ...infer Tail] ? _SpreadTwo> : unknown; export interface Spread$ extends HKT1 { new: (as: Assume) => Spread; } export type Merge1 = O1; export interface Merge1$ extends HKT1 { new: (o1: Assume) => Merge1; } export type Merge2 = _SpreadTwo; export interface Merge2$ extends HKT1 { new: (o1: Assume) => Merge2; } export interface Merge2$$ extends HKT2 { new: ( o1: Assume, o2: Assume, ) => Merge2; } export type Merge3 = _SpreadTwo<_SpreadTwo, O3>; export interface Merge3$ extends HKT1 { new: (o1: Assume) => Merge3; } export interface Merge3$$ extends HKT2 { new: ( o1: Assume, o2: Assume, ) => Merge3; } export interface Merge3$$$ extends HKT3 { new: ( o1: Assume, o2: Assume, o3: Assume, ) => Merge3; } export type BuildNested

, V> = P extends readonly [ infer Head, ...infer Tail, ] ? { [P in Head]: BuildNested; } : V; export interface BuildNested$ extends HKT1 { new: (p: Assume>) => BuildNested; } export interface BuildNested$$ extends HKT2 { new: ( p: Assume>, v: Assume, ) => BuildNested; } export type Get> = And2< Extends, Ary>, Num.IsNat > extends True ? Pipe1>, Ary.ElemOrUndefined$>> : K extends keyof Exclude ? Exclude[K] | Exclude> : K extends List ? Pipe1> : never; export interface Get$> extends HKT1 { new: (o: Assume) => Get; } export interface Get$$ extends HKT2 { new: ( o: Assume, k: Assume>, ) => Get; } export type KeyContains = Pipe2>; export interface KeyContains$ extends HKT1 { new: (o: Assume) => KeyContains; } export interface KeyContains$$ extends HKT2 { new: ( o: Assume, k: Assume, ) => KeyContains; } export type IfKeyContains = If< KeyContains, Then, Else >; export interface IfKeyContains$ extends HKT1 { new: ( o: Assume, ) => IfKeyContains; } export interface IfKeyContains$$ extends HKT2 { new: ( o: Assume, k: Assume, ) => IfKeyContains; } export interface IfKeyContains$$$ extends HKT3 { new: ( o: Assume, k: Assume, then: Assume, ) => IfKeyContains; } export interface IfKeyContains$$$$ extends HKT4 { new: ( o: Assume, k: Assume, then: Assume, else_: Assume, ) => IfKeyContains; } export type IfpKeyContains< O, K, ThenFn extends HKT1, ElseFn extends HKT1, > = KeyContains extends True ? Apply1 : Apply1; export interface IfpKeyContains$ extends HKT1 { new: ( o: Assume, ) => IfpKeyContains; } export interface IfpKeyContains$$ extends HKT2 { new: ( o: Assume, k: Assume, ) => IfpKeyContains; } export interface IfpKeyContains$$$ extends HKT3 { new: ( o: Assume, k: Assume, thenFn: Assume, ) => IfpKeyContains; } export interface IfpKeyContains$$$$ extends HKT4 { new: ( o: Assume, k: Assume, thenFn: Assume, elseFn: Assume, ) => IfpKeyContains; } export type OptionalKeyContains = Pipe2>; export interface OptionalKeyContains$ extends HKT1 { new: (o: Assume) => OptionalKeyContains; } export interface OptionalKeyContains$$ extends HKT2 { new: ( o: Assume, k: Assume, ) => OptionalKeyContains; } type _Set = And2, Num.IsNat> extends True ? Pipe1, V>, Ary.Mix$>> : K extends PropertyKey ? O extends Ary ? O & { [P in K]: V; } : Merge2< O, { [P in K]: V; } > : O; type _With__Step> = Ifp< O, KeyContains$>, Get$>, Yield1$<_With__GenerateDefault>> >; type _With__GenerateDefault = Num.IfNat>; export type With< O, K extends PropertyKey | List, V, > = K extends PropertyKey ? _Set : K extends List ? K extends readonly [infer Head] ? _Set : K extends readonly [ infer Head extends PropertyKey, ...infer T extends List, ] ? List.ToReadonly extends infer Tail extends List ? And2, Num.IsNat> extends True ? IfpList< O, List.With$, With<_With__Step, Tail, V>>, Ary.Mutate$< And2< Extends, Tail, V>, object>, Extends, Obj> > extends True ? Merge2< Pipe1, With<_With__Step, Tail, V> > : Pipe1 | With<_With__Step, Tail, V> > > : O extends Ary ? O & If< OptionalKeyContains, { [P in Head]?: With>, Tail, V>; }, { [P in Head]: With<_With__Step, Tail, V>; } > : Ifp< O, OptionalKeyContains$, Flow2< Omit$, Merge2$<{ [P in Head]: Union2< With>, Tail, V>, With<_With__GenerateDefault>, Tail, V> >; }> >, Merge2$<{ [P in Head]: With<_With__Step, Tail, V>; }> > : never : O : never; export interface With$, V> extends HKT1 { new: (o: Assume) => With; } export interface With$$ extends HKT2 { new: ( o: Assume, k: Assume>, ) => With; } export interface With$$$ extends HKT3 { new: ( o: Assume, k: Assume>, v: Assume, ) => With; } export type Omit = { [P in Exclude]: O[P]; }; export interface Omit$ extends HKT1 { new: (o: Assume) => Omit; } export interface Omit$$ extends HKT2 { new: ( o: Assume, k: Assume, ) => Omit; } export type Union2 = _Id< { [K in keyof O1 & keyof O2]: If< And2, Extends>, Union2, O1[K] | O2[K] >; } & { [K in Exclude]?: O1[K]; } & { [K in Exclude]?: O2[K]; } >; export interface Union2$ extends HKT1 { new: (o1: Assume) => Union2; } export interface Union2$$ extends HKT2 { new: ( o1: Assume, o2: Assume, ) => Union2; } export {}; } //# sourceMappingURL=obj.d.ts.map