mirror of
https://github.com/directus/directus.git
synced 2026-04-03 03:00:39 -04:00
* Start setting up @directus/pressure * Build pressure middleware * Add basic readme * Install @directus/pressure * Fix this binding * Experiment * Add defaults util * Cleanup * Fix export * Use directus defaults * Start tests * Add random-utils package * Finish testing for monitor * Add prod deployment * Stop building test files in prod * My favorite * Integrate pressure handler * Add decent defaults * Add retry header + custom error support * Clean-up merge conflict & sort imports * Fix build * Remove default value for retry after * Verify sampleInterval value * ran eslint * updated package lock * updated vitest * Create slimy-zebras-jam.md * Added basic docs for config options * updated pnpm lock and changeset * Update & align new packages * Update .changeset/slimy-zebras-jam.md --------- Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch> Co-authored-by: Brainslug <br41nslug@users.noreply.github.com> Co-authored-by: Brainslug <tim@brainslug.nl>
34 lines
726 B
TypeScript
34 lines
726 B
TypeScript
/**
|
|
* Returns the input source object with the defaults applied
|
|
*
|
|
* @example
|
|
* ```js
|
|
* type Example = {
|
|
* optional?: boolean;
|
|
* required: boolean;
|
|
* }
|
|
* const input: Example = { required: true };
|
|
* const output = defaults(input, { optional: false });
|
|
* // => { required: true, optional: false }
|
|
* ```
|
|
*/
|
|
export const defaults = <T extends object>(
|
|
obj: T,
|
|
def: Required<
|
|
Pick<
|
|
T,
|
|
Exclude<
|
|
keyof T,
|
|
Exclude<{ [K in keyof T]: T[K] extends Exclude<T[keyof T], undefined> ? K : never }[keyof T], undefined>
|
|
>
|
|
>
|
|
>
|
|
): Required<T> => {
|
|
const input = Object.fromEntries(Object.entries(obj).filter(([_key, value]) => value !== undefined));
|
|
|
|
return {
|
|
...def,
|
|
...input,
|
|
} as Required<T>;
|
|
};
|