.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / type-fest / source / partial-deep.d.ts
diff --git a/.config/coc/extensions/node_modules/coc-prettier/node_modules/type-fest/source/partial-deep.d.ts b/.config/coc/extensions/node_modules/coc-prettier/node_modules/type-fest/source/partial-deep.d.ts
new file mode 100644 (file)
index 0000000..b962b84
--- /dev/null
@@ -0,0 +1,72 @@
+import {Primitive} from './basic';
+
+/**
+Create a type from another type with all keys and nested keys set to optional.
+
+Use-cases:
+- Merging a default settings/config object with another object, the second object would be a deep partial of the default object.
+- Mocking and testing complex entities, where populating an entire object with its keys would be redundant in terms of the mock or test.
+
+@example
+```
+import {PartialDeep} from 'type-fest';
+
+const settings: Settings = {
+       textEditor: {
+               fontSize: 14;
+               fontColor: '#000000';
+               fontWeight: 400;
+       }
+       autocomplete: false;
+       autosave: true;
+};
+
+const applySavedSettings = (savedSettings: PartialDeep<Settings>) => {
+       return {...settings, ...savedSettings};
+}
+
+settings = applySavedSettings({textEditor: {fontWeight: 500}});
+```
+*/
+export type PartialDeep<T> = T extends Primitive
+       ? Partial<T>
+       : T extends Map<infer KeyType, infer ValueType>
+       ? PartialMapDeep<KeyType, ValueType>
+       : T extends Set<infer ItemType>
+       ? PartialSetDeep<ItemType>
+       : T extends ReadonlyMap<infer KeyType, infer ValueType>
+       ? PartialReadonlyMapDeep<KeyType, ValueType>
+       : T extends ReadonlySet<infer ItemType>
+       ? PartialReadonlySetDeep<ItemType>
+       : T extends ((...arguments: any[]) => unknown)
+       ? T | undefined
+       : T extends object
+       ? PartialObjectDeep<T>
+       : unknown;
+
+/**
+Same as `PartialDeep`, but accepts only `Map`s and  as inputs. Internal helper for `PartialDeep`.
+*/
+interface PartialMapDeep<KeyType, ValueType> extends Map<PartialDeep<KeyType>, PartialDeep<ValueType>> {}
+
+/**
+Same as `PartialDeep`, but accepts only `Set`s as inputs. Internal helper for `PartialDeep`.
+*/
+interface PartialSetDeep<T> extends Set<PartialDeep<T>> {}
+
+/**
+Same as `PartialDeep`, but accepts only `ReadonlyMap`s as inputs. Internal helper for `PartialDeep`.
+*/
+interface PartialReadonlyMapDeep<KeyType, ValueType> extends ReadonlyMap<PartialDeep<KeyType>, PartialDeep<ValueType>> {}
+
+/**
+Same as `PartialDeep`, but accepts only `ReadonlySet`s as inputs. Internal helper for `PartialDeep`.
+*/
+interface PartialReadonlySetDeep<T> extends ReadonlySet<PartialDeep<T>> {}
+
+/**
+Same as `PartialDeep`, but accepts only `object`s as inputs. Internal helper for `PartialDeep`.
+*/
+type PartialObjectDeep<ObjectType extends object> = {
+       [KeyType in keyof ObjectType]?: PartialDeep<ObjectType[KeyType]>
+};