From a70fb3b937968b294aacdd437fcd6d21a86345b3 Mon Sep 17 00:00:00 2001 From: DimitarTachev Date: Mon, 1 Jul 2019 15:36:05 +0300 Subject: [PATCH 1/2] fix: create PropertyAssignment instead of string literal (Identifier) when modifying the NgModule - in some cases (e.g. when there is a decomposition in another NgModule property), the TypeScipt program is trying to read `node.name.kind` on each property causing an exception for Identifiers) --- transformers/ns-replace-lazy-loader.spec.ts | 37 +++++++++++++++++++++ transformers/ns-replace-lazy-loader.ts | 3 +- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/transformers/ns-replace-lazy-loader.spec.ts b/transformers/ns-replace-lazy-loader.spec.ts index b3628dfc..cdf49df6 100644 --- a/transformers/ns-replace-lazy-loader.spec.ts +++ b/transformers/ns-replace-lazy-loader.spec.ts @@ -43,6 +43,43 @@ describe("@ngtools/webpack transformers", () => { AppModule); export { AppModule };` }, + { + name: "should add providers and NgModuleFactoryLoader when providers is missing and decomposition is used", + rawAppModule: ` + import { NgModule } from "@angular/core"; + import { NativeScriptModule } from "nativescript-angular/nativescript.module"; + import { AppComponent } from "./app.component"; + + const declarationsArray = [AppComponent]; + @NgModule({ + bootstrap: [ + AppComponent + ], + imports: [ + NativeScriptModule + ], + declarations: [ + ...declarationsArray + ] + }) + export class AppModule { } + `, + transformedAppModule: ` + import * as tslib_1 from "tslib"; import { NgModule } from "@angular/core"; + import { NativeScriptModule } from "nativescript-angular/nativescript.module"; + import { AppComponent } from "./app.component"; + ${NgLazyLoaderCode} + const declarationsArray = [AppComponent]; + let AppModule = class AppModule { }; + AppModule = tslib_1.__decorate([ NgModule({ + bootstrap: [ AppComponent ], + imports: [ NativeScriptModule ], + declarations: [ ...declarationsArray ], + providers: [{ provide: nsNgCoreImport_Generated.NgModuleFactoryLoader, useClass: NSLazyModulesLoader_Generated }] }) + ], + AppModule); + export { AppModule };` + }, { name: "should add NgModuleFactoryLoader when the providers array is empty", rawAppModule: ` diff --git a/transformers/ns-replace-lazy-loader.ts b/transformers/ns-replace-lazy-loader.ts index 9823e801..99f9774f 100644 --- a/transformers/ns-replace-lazy-loader.ts +++ b/transformers/ns-replace-lazy-loader.ts @@ -93,7 +93,8 @@ export function addArrayPropertyValueToNgModule( // the target field is missing, we will insert it @NgModule({ otherProps }) const lastConfigObjPropertyNode = ngModuleConfigObjectNode.properties[ngModuleConfigObjectNode.properties.length - 1]; - const newTargetPropertyNode = ts.createIdentifier(`${targetPropertyName}: [${newPropertyValue}]`); + + const newTargetPropertyNode = ts.createPropertyAssignment(targetPropertyName, ts.createIdentifier(`[${newPropertyValue}]`)); return [ new AddNodeOperation(sourceFile, lastConfigObjPropertyNode, undefined, newTargetPropertyNode), From 7d18cc19b25d6eae547acba25f15db88a29ad46c Mon Sep 17 00:00:00 2001 From: DimitarTachev Date: Tue, 2 Jul 2019 11:17:02 +0300 Subject: [PATCH 2/2] fix: unify the TypeScript version with the Angular App (trying to fix the CI) --- demo/TypeScriptApp/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demo/TypeScriptApp/package.json b/demo/TypeScriptApp/package.json index f98d9675..aabe8c7e 100644 --- a/demo/TypeScriptApp/package.json +++ b/demo/TypeScriptApp/package.json @@ -28,7 +28,7 @@ "mochawesome": "~3.1.2", "nativescript-dev-appium": "next", "nativescript-dev-webpack": "next", - "typescript": "~3.2.2", + "typescript": "~3.4.1", "node-sass": "^4.12.0" }, "scripts": {