From 5294d71fe914d5f7f70dd9ab9281c5a44bb3ec21 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 17 Jun 2020 17:35:16 +0200 Subject: [PATCH] packages/config: optimize some error message handling --- packages/config/src/reader.ts | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/packages/config/src/reader.ts b/packages/config/src/reader.ts index f1ed8a4f3d..2c2b560536 100644 --- a/packages/config/src/reader.ts +++ b/packages/config/src/reader.ts @@ -39,6 +39,16 @@ function typeOf(value: JsonValue | undefined): string { return type; } +// Separate out a couple of common error messages to reduce bundle size. +const errors = { + type(key: string, typeName: string, expected: string) { + return `Invalid type in config for key ${key}, got ${typeName}, wanted ${expected}`; + }, + missing(key: string) { + return `Missing required config value at '${key}'`; + }, +}; + export class ConfigReader implements Config { static fromConfigs(configs: AppConfig[]): ConfigReader { if (configs.length === 0) { @@ -65,11 +75,7 @@ export class ConfigReader implements Config { return new ConfigReader(value, fallbackConfig); } if (value !== undefined) { - throw new TypeError( - `Invalid type in config for key ${key}, got ${typeOf( - value, - )}, wanted object`, - ); + throw new TypeError(errors.type(key, typeOf(value), 'object')); } return fallbackConfig ?? new ConfigReader(undefined, undefined); } @@ -94,7 +100,7 @@ export class ConfigReader implements Config { getNumber(key: string): number { const value = this.getOptionalNumber(key); if (value === undefined) { - throw new Error(`Missing required config value at '${key}'`); + throw new Error(errors.missing(key)); } return value; } @@ -109,7 +115,7 @@ export class ConfigReader implements Config { getBoolean(key: string): boolean { const value = this.getOptionalBoolean(key); if (value === undefined) { - throw new Error(`Missing required config value at '${key}'`); + throw new Error(errors.missing(key)); } return value; } @@ -124,7 +130,7 @@ export class ConfigReader implements Config { getString(key: string): string { const value = this.getOptionalString(key); if (value === undefined) { - throw new Error(`Missing required config value at '${key}'`); + throw new Error(errors.missing(key)); } return value; } @@ -140,7 +146,7 @@ export class ConfigReader implements Config { getStringArray(key: string): string[] { const value = this.getOptionalStringArray(key); if (value === undefined) { - throw new Error(`Missing required config value at '${key}'`); + throw new Error(errors.missing(key)); } return value; } @@ -178,10 +184,7 @@ export class ConfigReader implements Config { value: theValue = value, expected, } = result; - const typeName = typeOf(theValue); - throw new TypeError( - `Invalid type in config for key ${keyName}, got ${typeName}, wanted ${expected}`, - ); + throw new TypeError(errors.type(keyName, typeOf(theValue), expected)); } }