📄 applyDefault.ts¶
📊 Analysis Summary¶
| Metric | Count |
|---|---|
| 🔧 Functions | 1 |
| 📦 Imports | 2 |
| 📊 Variables & Constants | 2 |
| 📑 Type Aliases | 1 |
📚 Table of Contents¶
🛠️ File Location:¶
📂 packages/utils/src/eslint-utils/applyDefault.ts
📦 Imports¶
| Name | Source |
|---|---|
deepMerge |
./deepMerge |
isObjectNotArray |
./deepMerge |
Variables & Constants¶
| Name | Type | Kind | Value | Exported |
|---|---|---|---|---|
options |
AsMutable<Default> |
const | structuredClone(defaultOptions) as AsMutable<Default> |
✗ |
userOpt |
unknown |
const | userOptions[i] |
✗ |
Functions¶
applyDefault(defaultOptions: Readonly<Default>, userOptions: Readonly<User> | null): Default¶
Code
export function applyDefault<
User extends readonly unknown[],
Default extends User,
>(
defaultOptions: Readonly<Default>,
userOptions: Readonly<User> | null,
): Default {
// clone defaults
const options = structuredClone(defaultOptions) as AsMutable<Default>;
if (userOptions == null) {
return options;
}
// For avoiding the type error
// `This expression is not callable. Type 'unknown' has no call signatures.ts(2349)`
(options as unknown[]).forEach((opt: unknown, i: number) => {
// eslint-disable-next-line @typescript-eslint/internal/eqeq-nullish
if (userOptions[i] !== undefined) {
const userOpt = userOptions[i];
if (isObjectNotArray(userOpt) && isObjectNotArray(opt)) {
options[i] = deepMerge(opt, userOpt);
} else {
options[i] = userOpt;
}
}
});
return options;
}
-
JSDoc:
-
Parameters:
defaultOptions: Readonly<Default>userOptions: Readonly<User> | null- Return Type:
Default - Calls:
structuredClone(options as unknown[]).forEachisObjectNotArray (from ./deepMerge)deepMerge (from ./deepMerge)- Internal Comments:
Type Aliases¶
AsMutable<T extends readonly unknown[] extends readonly unknown[]>¶
type AsMutable<T extends readonly unknown[] extends readonly unknown[]> = {
-readonly [Key in keyof T]: T[Key];
};