diff --git a/src/lint/lint-factory.spec.ts b/src/lint/lint-factory.spec.ts index 72aecf51..cf66e1cc 100644 --- a/src/lint/lint-factory.spec.ts +++ b/src/lint/lint-factory.spec.ts @@ -55,6 +55,20 @@ describe('lint factory', () => { typeCheck: true }); }); + + it('should extend configuration with {linterOptions} and preserve original linterOptions', () => { + const tsConfigFilePath = 'tsconfig.json'; + const mockConfig = {rulesDirectory: ['node_modules/@ionic'], linterOptions: {exclude: ['vendor/**']}}; + spyOn(Configuration, Configuration.loadConfigurationFromPath.name).and.returnValue(mockConfig); + const config = getTsLintConfig(tsConfigFilePath, { + typeCheck: true + }); + + expect(config.linterOptions).toEqual({ + typeCheck: true, + exclude: ['vendor/**'] + }); + }); }); describe('createLinter()', () => { diff --git a/src/lint/lint-factory.ts b/src/lint/lint-factory.ts index 38f20052..63262fbb 100644 --- a/src/lint/lint-factory.ts +++ b/src/lint/lint-factory.ts @@ -79,7 +79,13 @@ export function getFileNames(context: BuildContext, program: Program): string[] */ export function getTsLintConfig(tsLintConfig: string, linterOptions?: LinterOptions): LinterConfig { const config = Configuration.loadConfigurationFromPath(tsLintConfig); - Object.assign(config, isObject(linterOptions) ? {linterOptions} : {}); + if (!isObject(linterOptions)) { + return config; + } + if (!config.linterOptions) { + config.linterOptions = {}; + } + Object.assign(config.linterOptions, linterOptions); return config; }