mock-property
Version:
Given an object and a property, replaces a property descriptor (or deletes it), and returns a thunk to restore it.
51 lines (40 loc) • 1 kB
TypeScript
type RestoreFunction = () => void;
type OptionDelete = {
delete: true;
nonConfigurable?: boolean;
nonEnumerable?: never;
nonWritable?: never;
get?: never;
set?: never;
value?: never;
};
type OptionData<T = unknown> = {
value?: T;
nonConfigurable?: boolean;
nonEnumerable?: boolean;
nonWritable?: boolean;
delete?: false;
get?: never;
set?: never;
};
type Getter<T> = (() => void) | (() => T);
type Setter<T> = (v: T) => void;
type OptionAccessor<T = unknown> = {
get?: Getter<T>;
set?: Setter<T>;
nonConfigurable?: boolean;
nonEnumerable?: boolean;
delete?: false;
nonWritable?: never;
value?: never;
};
type MockPropertyOptions<T = unknown> =
| OptionDelete
| OptionData<T>
| OptionAccessor<T>;
declare function mockProperty<T = unknown>(
obj: Record<PropertyKey, T | undefined> | T[],
prop: PropertyKey,
options: MockPropertyOptions<T>,
): RestoreFunction;
export = mockProperty;