diff --git a/packages/angular_devkit/core/src/utils/object.ts b/packages/angular_devkit/core/src/utils/object.ts index 3d5d9edf2475..cf6216032069 100644 --- a/packages/angular_devkit/core/src/utils/object.ts +++ b/packages/angular_devkit/core/src/utils/object.ts @@ -6,9 +6,9 @@ * found in the LICENSE file at https://angular.io/license */ -export function mapObject(obj: {[k: string]: T}, - mapper: (k: string, v: T) => V): {[k: string]: V} { - return Object.keys(obj).reduce((acc: {[k: string]: V}, k: string) => { +export function mapObject(obj: { [k: string]: T }, + mapper: (k: string, v: T) => V): { [k: string]: V } { + return Object.keys(obj).reduce((acc: { [k: string]: V }, k: string) => { acc[k] = mapper(k, obj[k]); return acc; @@ -19,24 +19,33 @@ export function mapObject(obj: {[k: string]: T}, const copySymbol = Symbol(); // tslint:disable-next-line:no-any -export function deepCopy (value: T): T { +export function deepCopy(value: T): T { if (Array.isArray(value)) { - return value.map((o: T) => deepCopy(o)); + // tslint:disable-next-line:no-any + return value.map((o: any) => deepCopy(o)) as unknown as T; } else if (value && typeof value === 'object') { - if (value[copySymbol]) { + const valueCasted = value as { + [copySymbol]?: T, + toJSON?: () => string, + // tslint:disable-next-line:no-any + [key: string]: any, + }; + + if (valueCasted[copySymbol]) { // This is a circular dependency. Just return the cloned value. - return value[copySymbol]; + return valueCasted[copySymbol] as T; } - if (value['toJSON']) { - return JSON.parse((value['toJSON'] as () => string)()); + + if (valueCasted['toJSON']) { + return JSON.parse(valueCasted['toJSON']()); } - const copy = new (Object.getPrototypeOf(value).constructor)(); - value[copySymbol] = copy; - for (const key of Object.getOwnPropertyNames(value)) { - copy[key] = deepCopy(value[key]); + const copy = new (Object.getPrototypeOf(valueCasted).constructor)(); + valueCasted[copySymbol] = copy; + for (const key of Object.getOwnPropertyNames(valueCasted)) { + copy[key] = deepCopy(valueCasted[key]); } - value[copySymbol] = undefined; + valueCasted[copySymbol] = undefined; return copy; } else { diff --git a/packages/ngtools/webpack/src/compiler_host.ts b/packages/ngtools/webpack/src/compiler_host.ts index 477c40df0a75..eaf9c0421c28 100644 --- a/packages/ngtools/webpack/src/compiler_host.ts +++ b/packages/ngtools/webpack/src/compiler_host.ts @@ -361,7 +361,7 @@ export class WebpackCompilerHost implements ts.CompilerHost { getCanonicalFileName(fileName: string): string { const path = this.resolve(fileName); - return this.useCaseSensitiveFileNames ? path : path.toLowerCase(); + return this.useCaseSensitiveFileNames() ? path : path.toLowerCase(); } useCaseSensitiveFileNames(): boolean { diff --git a/packages/ngtools/webpack/src/transformers/replace_resources.ts b/packages/ngtools/webpack/src/transformers/replace_resources.ts index deb7f0138658..0bfd56a14a4f 100644 --- a/packages/ngtools/webpack/src/transformers/replace_resources.ts +++ b/packages/ngtools/webpack/src/transformers/replace_resources.ts @@ -17,7 +17,7 @@ export function replaceResources( return (context: ts.TransformationContext) => { const typeChecker = getTypeChecker(); - const visitNode: ts.Visitor = (node: ts.Decorator) => { + const visitNode: ts.Visitor = (node: ts.Node) => { if (ts.isClassDeclaration(node)) { const decorators = ts.visitNodes( node.decorators,