diff --git a/src/packages/options/src/create.ts b/src/packages/options/src/create.ts index c52b46b1bc..491728c828 100644 --- a/src/packages/options/src/create.ts +++ b/src/packages/options/src/create.ts @@ -6,11 +6,9 @@ import { hasOwn } from "@ganache/utils"; export type NamespacedOptions = { [key: string]: Base.Config }; -export type ProviderOptions = Partial< - { - [K in keyof O]: ExternalConfig; - } ->; +export type ProviderOptions = Partial<{ + [K in keyof O]: ExternalConfig; +}>; export type InternalOptions = { [K in keyof O]: InternalConfig; @@ -38,22 +36,19 @@ const checkForConflicts = ( } }; -function fill(defaults: any, options: any, target: any, namespace: any) { - const def = defaults[namespace]; +function fill(options: any, target: any, def: any, namespace: any) { const config = (target[namespace] = target[namespace] || {}); const flavor = options.flavor; const suppliedOptions = new Set(); - const keys = Object.keys(def); + const entries = Object.entries(def) as [string, any][]; if (hasOwn(options, namespace)) { const namespaceOptions = options[namespace]; - for (let i = 0, l = keys.length; i < l; i++) { - const key = keys[i]; - const propDefinition = def[key]; + for (const [key, propDefinition] of entries) { let value = namespaceOptions[key]; if (value !== undefined) { - const normalized = propDefinition.normalize(namespaceOptions[key]); + const normalized = propDefinition.normalize(value); if (normalized !== undefined) { checkForConflicts( key, @@ -85,9 +80,7 @@ function fill(defaults: any, options: any, target: any, namespace: any) { } } } else { - for (let i = 0, l = keys.length; i < l; i++) { - const key = keys[i]; - const propDefinition = def[key]; + for (const [key, propDefinition] of entries) { const legacyName = propDefinition.legacyName || key; const value = options[legacyName]; @@ -112,19 +105,15 @@ function fill(defaults: any, options: any, target: any, namespace: any) { export class OptionsConfig { #defaults: Defaults; - #namespaces: UnionToTuple>; constructor(defaults: Defaults) { this.#defaults = defaults; - this.#namespaces = Object.keys(defaults) as UnionToTuple>; } normalize(options: ProviderOptions) { - const defaults = this.#defaults; - const out = {} as InternalOptions; - this.#namespaces.forEach(namespace => { - fill(defaults, options, out, namespace as keyof Defaults); + Object.entries(this.#defaults).forEach(([namespace, definition]) => { + fill(options, out, definition, namespace as keyof Defaults); }); return out; }