From 6021ee1812195a5e65a44172b1b241bee1e121c2 Mon Sep 17 00:00:00 2001 From: Hans Larsen Date: Sun, 12 Feb 2017 17:38:02 -0800 Subject: [PATCH] fix(@ngtools/webpack): fix error with object spread The loader throws an exception when an object spread is used. This fixes it. Fixes #4600 --- packages/@ngtools/webpack/src/loader.ts | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/@ngtools/webpack/src/loader.ts b/packages/@ngtools/webpack/src/loader.ts index a995a341d4ac..dce1b0f5342f 100644 --- a/packages/@ngtools/webpack/src/loader.ts +++ b/packages/@ngtools/webpack/src/loader.ts @@ -9,7 +9,9 @@ const NormalModule = require('webpack/lib/NormalModule'); function _getContentOfKeyLiteral(source: ts.SourceFile, node: ts.Node): string { - if (node.kind == ts.SyntaxKind.Identifier) { + if (!node) { + return null; + } else if (node.kind == ts.SyntaxKind.Identifier) { return (node as ts.Identifier).text; } else if (node.kind == ts.SyntaxKind.StringLiteral) { return (node as ts.StringLiteral).text; @@ -241,11 +243,16 @@ function _removeModuleId(refactor: TypeScriptFileRefactor) { refactor.findAstNodes(sourceFile, ts.SyntaxKind.ObjectLiteralExpression, true) // Get all their property assignments. - .filter((node: ts.ObjectLiteralExpression) => - node.properties.some(prop => _getContentOfKeyLiteral(sourceFile, prop.name) == 'moduleId')) + .filter((node: ts.ObjectLiteralExpression) => { + return node.properties.some(prop => { + return prop.kind == ts.SyntaxKind.PropertyAssignment + && _getContentOfKeyLiteral(sourceFile, prop.name) == 'moduleId'; + }); + }) .forEach((node: ts.ObjectLiteralExpression) => { const moduleIdProp = node.properties.filter((prop: ts.ObjectLiteralElement, idx: number) => { - return _getContentOfKeyLiteral(sourceFile, prop.name) == 'moduleId'; + return prop.kind == ts.SyntaxKind.PropertyAssignment + && _getContentOfKeyLiteral(sourceFile, prop.name) == 'moduleId'; })[0]; // get the trailing comma const moduleIdCommaProp = moduleIdProp.parent.getChildAt(1).getChildren()[1];