diff --git a/packages/angular/src/schematics/application/application.spec.ts b/packages/angular/src/schematics/application/application.spec.ts index 5b304c718f..d622562df3 100644 --- a/packages/angular/src/schematics/application/application.spec.ts +++ b/packages/angular/src/schematics/application/application.spec.ts @@ -60,9 +60,7 @@ describe('app', () => { const tsconfigApp = JSON.parse( stripJsonComments(getFileContent(tree, 'apps/my-app/tsconfig.app.json')) ); - expect(tsconfigApp.compilerOptions.outDir).toEqual( - '../../dist/out-tsc/apps/my-app' - ); + expect(tsconfigApp.compilerOptions.outDir).toEqual('../../dist/out-tsc'); expect(tsconfigApp.extends).toEqual('./tsconfig.json'); const tslintJson = JSON.parse( @@ -76,9 +74,6 @@ describe('app', () => { getFileContent(tree, 'apps/my-app-e2e/tsconfig.e2e.json') ) ); - // expect(tsconfigE2E.compilerOptions.outDir).toEqual( - // '../../dist/out-tsc/apps/my-app-e2e' - // ); expect(tsconfigE2E.extends).toEqual('./tsconfig.json'); }); @@ -206,7 +201,7 @@ describe('app', () => { { path: 'apps/my-dir/my-app/tsconfig.app.json', lookupFn: json => json.compilerOptions.outDir, - expectedValue: '../../../dist/out-tsc/apps/my-dir/my-app' + expectedValue: '../../../dist/out-tsc' }, { path: 'apps/my-dir/my-app-e2e/tsconfig.json', @@ -335,7 +330,7 @@ describe('app', () => { ); expect(tsconfigAppJson.exclude).toEqual(['src/test.ts', '**/*.spec.ts']); expect(tsconfigAppJson.compilerOptions.outDir).toEqual( - '../../dist/out-tsc/apps/my-app' + '../../dist/out-tsc' ); }); }); diff --git a/packages/angular/src/schematics/application/application.ts b/packages/angular/src/schematics/application/application.ts index e379302904..8a3264c38e 100644 --- a/packages/angular/src/schematics/application/application.ts +++ b/packages/angular/src/schematics/application/application.ts @@ -229,9 +229,7 @@ function updateProject(options: NormalizedSchema): Rule { extends: `./tsconfig.json`, compilerOptions: { ...json.compilerOptions, - outDir: `${offsetFromRoot(options.appProjectRoot)}dist/out-tsc/${ - options.appProjectRoot - }` + outDir: `${offsetFromRoot(options.appProjectRoot)}dist/out-tsc` }, exclude: options.unitTestRunner === 'jest' @@ -307,9 +305,7 @@ function updateE2eProject(options: NormalizedSchema): Rule { extends: `./tsconfig.json`, compilerOptions: { ...json.compilerOptions, - outDir: `${offsetFromRoot(options.e2eProjectRoot)}dist/out-tsc/${ - options.e2eProjectRoot - }` + outDir: `${offsetFromRoot(options.e2eProjectRoot)}dist/out-tsc` } }; }) @@ -345,6 +341,7 @@ export default function(schema: Schema): Rule { skipTests: options.skipTests, style: options.style, viewEncapsulation: options.viewEncapsulation, + enableIvy: options.enableIvy, routing: false, skipInstall: true, skipPackageJson: false diff --git a/packages/angular/src/schematics/application/schema.d.ts b/packages/angular/src/schematics/application/schema.d.ts index 9f4fd7b36c..2b581da7f0 100644 --- a/packages/angular/src/schematics/application/schema.d.ts +++ b/packages/angular/src/schematics/application/schema.d.ts @@ -8,6 +8,7 @@ export interface Schema { inlineTemplate?: boolean; viewEncapsulation?: 'Emulated' | 'Native' | 'None'; routing?: boolean; + enableIvy?: boolean; prefix?: string; style?: string; skipTests?: boolean; diff --git a/packages/angular/src/schematics/application/schema.json b/packages/angular/src/schematics/application/schema.json index 6285746b1c..ebf45f3517 100644 --- a/packages/angular/src/schematics/application/schema.json +++ b/packages/angular/src/schematics/application/schema.json @@ -40,6 +40,11 @@ "description": "Generates a routing module.", "default": false }, + "enablyIvy": { + "description": "**EXPERIMENTAL** True to create a new app that uses the Ivy rendering engine.", + "type": "boolean", + "default": false + }, "prefix": { "type": "string", "format": "html-selector", diff --git a/packages/angular/src/schematics/karma-project/files/tsconfig.spec.json b/packages/angular/src/schematics/karma-project/files/tsconfig.spec.json index a29bf2584c..f671d494c4 100644 --- a/packages/angular/src/schematics/karma-project/files/tsconfig.spec.json +++ b/packages/angular/src/schematics/karma-project/files/tsconfig.spec.json @@ -1,7 +1,7 @@ { "extends": "./tsconfig.json", "compilerOptions": { - "outDir": "<%= offsetFromRoot %>dist/out-tsc/<%= projectRoot %>", + "outDir": "<%= offsetFromRoot %>dist/out-tsc", "types": ["jasmine", "node"] }, "files": ["src/test.ts"], diff --git a/packages/angular/src/schematics/karma-project/karma-project.spec.ts b/packages/angular/src/schematics/karma-project/karma-project.spec.ts index 27f39f2d0a..29610e8724 100644 --- a/packages/angular/src/schematics/karma-project/karma-project.spec.ts +++ b/packages/angular/src/schematics/karma-project/karma-project.spec.ts @@ -118,7 +118,7 @@ module.exports = function(config) { expect(tsConfig).toEqual({ extends: './tsconfig.json', compilerOptions: { - outDir: '../../dist/out-tsc/libs/lib1', + outDir: '../../dist/out-tsc', types: ['jasmine', 'node'] }, files: ['src/test.ts'], @@ -182,7 +182,7 @@ module.exports = function(config) { expect(tsConfig).toEqual({ extends: './tsconfig.json', compilerOptions: { - outDir: '../../dist/out-tsc/apps/app1', + outDir: '../../dist/out-tsc', types: ['jasmine', 'node'] }, files: ['src/test.ts', 'src/polyfills.ts'], diff --git a/packages/angular/src/schematics/library/library.ts b/packages/angular/src/schematics/library/library.ts index 370cd94c0b..2542e0d278 100644 --- a/packages/angular/src/schematics/library/library.ts +++ b/packages/angular/src/schematics/library/library.ts @@ -345,9 +345,7 @@ function updateProject(options: NormalizedSchema): Rule { extends: `./tsconfig.json`, compilerOptions: { ...json.compilerOptions, - outDir: `${offsetFromRoot(options.projectRoot)}dist/out-tsc/${ - options.projectRoot - }` + outDir: `${offsetFromRoot(options.projectRoot)}dist/out-tsc` } }; }), diff --git a/packages/cypress/src/schematics/cypress-project/cypress-project.spec.ts b/packages/cypress/src/schematics/cypress-project/cypress-project.spec.ts index 9468c667e5..608279b8f4 100644 --- a/packages/cypress/src/schematics/cypress-project/cypress-project.spec.ts +++ b/packages/cypress/src/schematics/cypress-project/cypress-project.spec.ts @@ -101,9 +101,7 @@ describe('schematic:cypress-project', () => { ); expect(tsconfigJson.extends).toEqual('./tsconfig.json'); - expect(tsconfigJson.compilerOptions.outDir).toEqual( - '../../dist/out-tsc/apps/my-app-e2e/src' - ); + expect(tsconfigJson.compilerOptions.outDir).toEqual('../../dist/out-tsc'); }); describe('nested', () => { @@ -180,7 +178,7 @@ describe('schematic:cypress-project', () => { ); expect(tsconfigJson.compilerOptions.outDir).toEqual( - '../../../dist/out-tsc/apps/my-dir/my-app-e2e/src' + '../../../dist/out-tsc' ); }); }); diff --git a/packages/cypress/src/schematics/cypress-project/files/tsconfig.e2e.json b/packages/cypress/src/schematics/cypress-project/files/tsconfig.e2e.json index 2496547c0e..9a40f0989b 100644 --- a/packages/cypress/src/schematics/cypress-project/files/tsconfig.e2e.json +++ b/packages/cypress/src/schematics/cypress-project/files/tsconfig.e2e.json @@ -2,7 +2,7 @@ "extends": "./tsconfig.json", "compilerOptions": { "sourceMap": false, - "outDir": "<%= offsetFromRoot %>dist/out-tsc/<%= projectRoot %>/src" + "outDir": "<%= offsetFromRoot %>dist/out-tsc" }, "include": ["src/**/*.ts"] } diff --git a/packages/jest/src/schematics/jest-project/files/tsconfig.spec.json b/packages/jest/src/schematics/jest-project/files/tsconfig.spec.json index cc799b12d5..9cad516d73 100644 --- a/packages/jest/src/schematics/jest-project/files/tsconfig.spec.json +++ b/packages/jest/src/schematics/jest-project/files/tsconfig.spec.json @@ -1,7 +1,7 @@ { "extends": "./tsconfig.json", "compilerOptions": { - "outDir": "<%= offsetFromRoot %>dist/out-tsc/<%= projectRoot %>", + "outDir": "<%= offsetFromRoot %>dist/out-tsc", "module": "commonjs", "types": ["jest", "node"] },<% if(setupFile !== 'none') { %> diff --git a/packages/jest/src/schematics/jest-project/jest-project.spec.ts b/packages/jest/src/schematics/jest-project/jest-project.spec.ts index db09dffc5d..b859c5aed1 100644 --- a/packages/jest/src/schematics/jest-project/jest-project.spec.ts +++ b/packages/jest/src/schematics/jest-project/jest-project.spec.ts @@ -123,7 +123,7 @@ describe('jestProject', () => { extends: './tsconfig.json', compilerOptions: { module: 'commonjs', - outDir: '../../dist/out-tsc/libs/lib1', + outDir: '../../dist/out-tsc', types: ['jest', 'node'] }, files: ['src/test-setup.ts'], diff --git a/packages/node/src/schematics/application/application.spec.ts b/packages/node/src/schematics/application/application.spec.ts index caea971005..8532d7c9d2 100644 --- a/packages/node/src/schematics/application/application.spec.ts +++ b/packages/node/src/schematics/application/application.spec.ts @@ -87,9 +87,7 @@ describe('app', () => { getFileContent(tree, 'apps/my-node-app/tsconfig.app.json') ) ); - expect(tsconfigApp.compilerOptions.outDir).toEqual( - '../../dist/out-tsc/apps/my-node-app' - ); + expect(tsconfigApp.compilerOptions.outDir).toEqual('../../dist/out-tsc'); expect(tsconfigApp.extends).toEqual('./tsconfig.json'); const tslintJson = JSON.parse( @@ -162,7 +160,7 @@ describe('app', () => { { path: 'apps/my-dir/my-node-app/tsconfig.app.json', lookupFn: json => json.compilerOptions.outDir, - expectedValue: '../../../dist/out-tsc/apps/my-dir/my-node-app' + expectedValue: '../../../dist/out-tsc' }, { path: 'apps/my-dir/my-node-app/tsconfig.app.json', diff --git a/packages/node/src/schematics/application/files/app/tsconfig.app.json b/packages/node/src/schematics/application/files/app/tsconfig.app.json index d071717839..3040988763 100644 --- a/packages/node/src/schematics/application/files/app/tsconfig.app.json +++ b/packages/node/src/schematics/application/files/app/tsconfig.app.json @@ -1,7 +1,7 @@ { "extends": "./tsconfig.json", "compilerOptions": { - "outDir": "<%= offset %>dist/out-tsc/<%= root %>", + "outDir": "<%= offset %>dist/out-tsc", "types": ["node"] }, "exclude": ["**/*.spec.ts"], diff --git a/packages/react/src/schematics/application/application.spec.ts b/packages/react/src/schematics/application/application.spec.ts index bf5692da4c..7d1ad41d22 100644 --- a/packages/react/src/schematics/application/application.spec.ts +++ b/packages/react/src/schematics/application/application.spec.ts @@ -57,9 +57,7 @@ describe('app', () => { const tsconfigApp = JSON.parse( stripJsonComments(tree.readContent('apps/my-app/tsconfig.app.json')) ); - expect(tsconfigApp.compilerOptions.outDir).toEqual( - '../../dist/out-tsc/apps/my-app' - ); + expect(tsconfigApp.compilerOptions.outDir).toEqual('../../dist/out-tsc'); expect(tsconfigApp.extends).toEqual('./tsconfig.json'); const tslintJson = JSON.parse( @@ -71,9 +69,7 @@ describe('app', () => { const tsconfigE2E = JSON.parse( stripJsonComments(tree.readContent('apps/my-app-e2e/tsconfig.e2e.json')) ); - expect(tsconfigE2E.compilerOptions.outDir).toEqual( - '../../dist/out-tsc/apps/my-app-e2e/src' - ); + expect(tsconfigE2E.compilerOptions.outDir).toEqual('../../dist/out-tsc'); expect(tsconfigE2E.extends).toEqual('./tsconfig.json'); }); }); @@ -148,7 +144,7 @@ describe('app', () => { { path: 'apps/my-dir/my-app/tsconfig.app.json', lookupFn: json => json.compilerOptions.outDir, - expectedValue: '../../../dist/out-tsc/apps/my-dir/my-app' + expectedValue: '../../../dist/out-tsc' }, { path: 'apps/my-dir/my-app-e2e/tsconfig.json', @@ -158,7 +154,7 @@ describe('app', () => { { path: 'apps/my-dir/my-app-e2e/tsconfig.e2e.json', lookupFn: json => json.compilerOptions.outDir, - expectedValue: '../../../dist/out-tsc/apps/my-dir/my-app-e2e/src' + expectedValue: '../../../dist/out-tsc' }, { path: 'apps/my-dir/my-app/tslint.json', diff --git a/packages/react/src/schematics/application/files/app/tsconfig.app.json b/packages/react/src/schematics/application/files/app/tsconfig.app.json index b0cb942af2..f6326068a4 100644 --- a/packages/react/src/schematics/application/files/app/tsconfig.app.json +++ b/packages/react/src/schematics/application/files/app/tsconfig.app.json @@ -1,7 +1,7 @@ { "extends": "./tsconfig.json", "compilerOptions": { - "outDir": "<%= offsetFromRoot %>dist/out-tsc/<%= appProjectRoot %>", + "outDir": "<%= offsetFromRoot %>dist/out-tsc", "types": [] }, "exclude": ["**/*.spec.ts"], diff --git a/packages/react/src/schematics/library/files/lib/tsconfig.lib.json b/packages/react/src/schematics/library/files/lib/tsconfig.lib.json index 40457f8168..99e059b511 100644 --- a/packages/react/src/schematics/library/files/lib/tsconfig.lib.json +++ b/packages/react/src/schematics/library/files/lib/tsconfig.lib.json @@ -1,7 +1,7 @@ { "extends": "./tsconfig.json", "compilerOptions": { - "outDir": "<%= offsetFromRoot %>dist/out-tsc/<%= projectRoot %>", + "outDir": "<%= offsetFromRoot %>dist/out-tsc", "types": [] }, "exclude": ["**/*.spec.ts", "**/*.spec.tsx"], diff --git a/packages/schematics/migrations/update-8-0-0/update-8-0-0.spec.ts b/packages/schematics/migrations/update-8-0-0/update-8-0-0.spec.ts index fd9925db69..32add48c44 100644 --- a/packages/schematics/migrations/update-8-0-0/update-8-0-0.spec.ts +++ b/packages/schematics/migrations/update-8-0-0/update-8-0-0.spec.ts @@ -36,6 +36,24 @@ describe('Update 8-0-0', () => { initialTree ) .toPromise(); + initialTree = await schematicRunner + .callRule( + updateJsonInTree('tsconfig.json', json => ({ + compilerOptions: {} + })), + initialTree + ) + .toPromise(); + initialTree = await schematicRunner + .callRule( + updateJsonInTree('tsconfig.app.json', json => ({ + compilerOptions: { + outDir: '../../dist/out-tsc/apps/blah' + } + })), + initialTree + ) + .toPromise(); initialTree = await schematicRunner .callRule( updateJsonInTree('angular.json', json => ({ @@ -164,6 +182,20 @@ describe('Update 8-0-0', () => { }); }); + describe('set root dir', () => { + it('should set root dir and update out dirs', async () => { + const tree = await schematicRunner + .runSchematicAsync('update-8.0.0', {}, initialTree) + .toPromise(); + const rootTsConfig = readJsonInTree(tree, 'tsconfig.json'); + expect(rootTsConfig.compilerOptions.rootDir).toEqual('.'); + + const appTsConfig = readJsonInTree(tree, 'tsconfig.app.json'); + console.log(appTsConfig); + expect(appTsConfig.compilerOptions.outDir).toEqual('../../dist/out-tsc'); + }); + }); + describe('jest config', () => { it('should have the plugin path migrated', async () => { initialTree.create( diff --git a/packages/schematics/migrations/update-8-0-0/update-8-0-0.ts b/packages/schematics/migrations/update-8-0-0/update-8-0-0.ts index 2930b3917e..33ddd5dfa5 100644 --- a/packages/schematics/migrations/update-8-0-0/update-8-0-0.ts +++ b/packages/schematics/migrations/update-8-0-0/update-8-0-0.ts @@ -262,6 +262,33 @@ const updateDefaultCollection = (host: Tree) => { }); }; +const setRootDirAndUpdateOurDir = (host: Tree) => { + host.visit(path => { + if (!path.endsWith('.json')) { + return; + } + + const json = host.read(path).toString(); + const match = json.match(/"outDir"\s*:\s*"([^"]+)"/); + if (match) { + const outParts = match[1].split('out-tsc'); + if (outParts.length > 1) { + const updatedJson = json.replace( + /"outDir"\s*:\s*"([^"]+)"/, + `"outDir": "${outParts[0]}out-tsc"` + ); + host.overwrite(path, updatedJson); + } + } + }); + + updateJsonInTree('tsconfig.json', json => { + json.compilerOptions = json.compilerOptions || {}; + json.compilerOptions.rootDir = '.'; + return json; + })(host, null); +}; + export const runAngularMigrations: Rule = ( host: Tree, context: SchematicContext @@ -314,6 +341,7 @@ export default function(): Rule { updateTslintRules, addDependencies(), updateDefaultCollection, + setRootDirAndUpdateOurDir, formatFiles() ]); } diff --git a/packages/web/src/schematics/application/application.spec.ts b/packages/web/src/schematics/application/application.spec.ts index 0ef528932e..3ffce0c504 100644 --- a/packages/web/src/schematics/application/application.spec.ts +++ b/packages/web/src/schematics/application/application.spec.ts @@ -59,9 +59,7 @@ describe('app', () => { const tsconfigApp = JSON.parse( stripJsonComments(tree.readContent('apps/my-app/tsconfig.app.json')) ); - expect(tsconfigApp.compilerOptions.outDir).toEqual( - '../../dist/out-tsc/apps/my-app' - ); + expect(tsconfigApp.compilerOptions.outDir).toEqual('../../dist/out-tsc'); expect(tsconfigApp.extends).toEqual('./tsconfig.json'); const tslintJson = JSON.parse( @@ -73,9 +71,7 @@ describe('app', () => { const tsconfigE2E = JSON.parse( stripJsonComments(tree.readContent('apps/my-app-e2e/tsconfig.e2e.json')) ); - expect(tsconfigE2E.compilerOptions.outDir).toEqual( - '../../dist/out-tsc/apps/my-app-e2e/src' - ); + expect(tsconfigE2E.compilerOptions.outDir).toEqual('../../dist/out-tsc'); expect(tsconfigE2E.extends).toEqual('./tsconfig.json'); }); }); @@ -150,7 +146,7 @@ describe('app', () => { { path: 'apps/my-dir/my-app/tsconfig.app.json', lookupFn: json => json.compilerOptions.outDir, - expectedValue: '../../../dist/out-tsc/apps/my-dir/my-app' + expectedValue: '../../../dist/out-tsc' }, { path: 'apps/my-dir/my-app-e2e/tsconfig.json', @@ -160,7 +156,7 @@ describe('app', () => { { path: 'apps/my-dir/my-app-e2e/tsconfig.e2e.json', lookupFn: json => json.compilerOptions.outDir, - expectedValue: '../../../dist/out-tsc/apps/my-dir/my-app-e2e/src' + expectedValue: '../../../dist/out-tsc' }, { path: 'apps/my-dir/my-app/tslint.json', diff --git a/packages/web/src/schematics/application/files/app/tsconfig.app.json b/packages/web/src/schematics/application/files/app/tsconfig.app.json index b0cb942af2..f6326068a4 100644 --- a/packages/web/src/schematics/application/files/app/tsconfig.app.json +++ b/packages/web/src/schematics/application/files/app/tsconfig.app.json @@ -1,7 +1,7 @@ { "extends": "./tsconfig.json", "compilerOptions": { - "outDir": "<%= offsetFromRoot %>dist/out-tsc/<%= appProjectRoot %>", + "outDir": "<%= offsetFromRoot %>dist/out-tsc", "types": [] }, "exclude": ["**/*.spec.ts"], diff --git a/packages/workspace/src/schematics/library/files/lib/tsconfig.lib.json b/packages/workspace/src/schematics/library/files/lib/tsconfig.lib.json index 72a1b6fc38..f6326068a4 100644 --- a/packages/workspace/src/schematics/library/files/lib/tsconfig.lib.json +++ b/packages/workspace/src/schematics/library/files/lib/tsconfig.lib.json @@ -1,7 +1,7 @@ { "extends": "./tsconfig.json", "compilerOptions": { - "outDir": "<%= offsetFromRoot %>dist/out-tsc/<%= projectRoot %>", + "outDir": "<%= offsetFromRoot %>dist/out-tsc", "types": [] }, "exclude": ["**/*.spec.ts"], diff --git a/packages/workspace/src/schematics/ng-add/ng-add.ts b/packages/workspace/src/schematics/ng-add/ng-add.ts index adfe8490d4..61f49795c2 100755 --- a/packages/workspace/src/schematics/ng-add/ng-add.ts +++ b/packages/workspace/src/schematics/ng-add/ng-add.ts @@ -249,23 +249,17 @@ function updateTsConfigsJson(options: Schema) { const offset = '../../'; updateJsonFile(app.architect.build.options.tsConfig, json => { json.extends = `${offset}tsconfig.json`; - json.compilerOptions.outDir = `${offset}dist/out-tsc/apps/${ - options.name - }`; + json.compilerOptions.outDir = `${offset}dist/out-tsc`; }); updateJsonFile(app.architect.test.options.tsConfig, json => { json.extends = `${offset}tsconfig.json`; - json.compilerOptions.outDir = `${offset}dist/out-tsc/apps/${ - options.name - }`; + json.compilerOptions.outDir = `${offset}dist/out-tsc`; }); if (app.architect.server) { updateJsonFile(app.architect.server.options.tsConfig, json => { - json.compilerOptions.outDir = `${offset}dist/out-tsc/apps/${ - options.name - }-server`; + json.compilerOptions.outDir = `${offset}dist/out-tsc`; }); } @@ -274,9 +268,7 @@ function updateTsConfigsJson(options: Schema) { json.extends = `${offsetFromRoot(e2eProject.root)}tsconfig.json`; json.compilerOptions = { ...json.compilerOptions, - outDir: `${offsetFromRoot(e2eProject.root)}dist/out-tsc/${ - e2eProject.root - }` + outDir: `${offsetFromRoot(e2eProject.root)}dist/out-tsc` }; }); } diff --git a/packages/workspace/src/schematics/workspace/files/tsconfig.json b/packages/workspace/src/schematics/workspace/files/tsconfig.json index c51eec1a54..f4c1f18d6b 100644 --- a/packages/workspace/src/schematics/workspace/files/tsconfig.json +++ b/packages/workspace/src/schematics/workspace/files/tsconfig.json @@ -1,6 +1,7 @@ { "compileOnSave": false, "compilerOptions": { + "rootDir": ".", "sourceMap": true, "declaration": false, "moduleResolution": "node", diff --git a/scripts/build.sh b/scripts/build.sh index 6aea874df9..2304342334 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -14,6 +14,11 @@ echo "Compiling Typescript..." ./node_modules/.bin/ngc echo "Compiled Typescript" +rm build/packages/angular/testing/nrwl-angular-testing.metadata.json +rm build/packages/angular/testing/index.metadata.json +rm build/packages/workspace/index.metadata.json +rm build/packages/workspace/testing.metadata.json + #TODO This is a temporary hack until we can publish named umds sed -i.bak "s/define(\[/define('@nrwl\/angular',\[/" build/packages/angular/bundles/nrwl-angular.umd.js sed -i.bak "s/define(\[/define('@nrwl\/angular',\[/" build/packages/angular/bundles/nrwl-angular.umd.min.js