<Bag extends Record<string, ConfigField<unknown>>, K extends keyof Bag>(
bag: Bag,
key: K
): WithFrozenField<Bag, K>Like freeze but for a single field — that field becomes read-only, the rest stay swappable.
combinatorsfreeze
Source src/DynamicConfig.ts:60310 lines
export const const freezeField: <
Bag extends Record<
string,
ConfigField<unknown>
>,
K extends keyof Bag
>(
bag: Bag,
key: K
) => WithFrozenField<Bag, K>
Like
freeze
but for a single field — that field becomes read-only,
the rest stay swappable.
freezeField = <
function (type parameter) Bag in <Bag extends Record<string, ConfigField<unknown>>, K extends keyof Bag>(bag: Bag, key: K): WithFrozenField<Bag, K>Bag extends type Record<K extends keyof any, T> = {
[P in K]: T
}
Construct a type with a set of properties K of type T
Record<string, interface ConfigField<A>A yieldable config field. yield* field reads its underlying Config
through the ambient provider. Read-only on its own;
SwappableField
adds the control methods — so swappability is a structural distinction, not a
stored marker flag.
ConfigField<unknown>>,
function (type parameter) K in <Bag extends Record<string, ConfigField<unknown>>, K extends keyof Bag>(bag: Bag, key: K): WithFrozenField<Bag, K>K extends keyof function (type parameter) Bag in <Bag extends Record<string, ConfigField<unknown>>, K extends keyof Bag>(bag: Bag, key: K): WithFrozenField<Bag, K>Bag,
>(
bag: Bag extends Record<string, ConfigField<unknown>>bag: function (type parameter) Bag in <Bag extends Record<string, ConfigField<unknown>>, K extends keyof Bag>(bag: Bag, key: K): WithFrozenField<Bag, K>Bag,
key: K extends keyof Bagkey: function (type parameter) K in <Bag extends Record<string, ConfigField<unknown>>, K extends keyof Bag>(bag: Bag, key: K): WithFrozenField<Bag, K>K,
): type WithFrozenField<
Bag,
K extends keyof Bag
> = {
readonly [P in keyof Bag]: P extends K
? Bag[P] extends ConfigField<infer A>
? FixedField<A>
: Bag[P]
: Bag[P]
}
WithFrozenField<function (type parameter) Bag in <Bag extends Record<string, ConfigField<unknown>>, K extends keyof Bag>(bag: Bag, key: K): WithFrozenField<Bag, K>Bag, function (type parameter) K in <Bag extends Record<string, ConfigField<unknown>>, K extends keyof Bag>(bag: Bag, key: K): WithFrozenField<Bag, K>K> => {
const const target: stringtarget = var String: StringConstructor
;(value?: any) => string
Allows manipulation and formatting of text strings and determination and location of substrings within strings.
String(key: string | number | symbolkey);
return const rebuildBag: <Out>(
bag: Record<string, ConfigField<unknown>>,
freezeName: (name: string) => boolean
) => Out
rebuildBag<type WithFrozenField<
Bag,
K extends keyof Bag
> = {
readonly [P in keyof Bag]: P extends K
? Bag[P] extends ConfigField<infer A>
? FixedField<A>
: Bag[P]
: Bag[P]
}
WithFrozenField<function (type parameter) Bag in <Bag extends Record<string, ConfigField<unknown>>, K extends keyof Bag>(bag: Bag, key: K): WithFrozenField<Bag, K>Bag, function (type parameter) K in <Bag extends Record<string, ConfigField<unknown>>, K extends keyof Bag>(bag: Bag, key: K): WithFrozenField<Bag, K>K>>(bag: Bag extends Record<string, ConfigField<unknown>>bag, (name: stringname) => name: stringname === const target: stringtarget);
};