Skip to content

Commit

Permalink
fix(schematics): disable output hashing in configurations (#169)
Browse files Browse the repository at this point in the history
  • Loading branch information
arturovt committed Apr 14, 2020
1 parent 6a7d487 commit cc0c32a
Show file tree
Hide file tree
Showing 4 changed files with 111 additions and 4 deletions.
17 changes: 16 additions & 1 deletion schematics/ng-add/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,8 @@ function updateProjectNewAngular(context: SchematicContext, clientProject: Works
path: join(clientProject.root, 'extra-webpack.config.js'),
};

updateConfigurationsAndDisableOutputHashing(clientProject);

const devServerBuilder = '@angular-builders/custom-webpack:dev-server' as Builders.DevServer;
clientProject.architect!.serve!.builder = devServerBuilder;
}
Expand All @@ -155,7 +157,7 @@ function updateTSConfig(host: Tree, clientProject: WorkspaceProject): void {
}

export function addNPMScripts(options: NgAddOptions): Rule {
return (host: Tree, context: SchematicContext) => {
return (host: Tree) => {
const pkgPath = '/package.json';
const buffer = host.read(pkgPath);

Expand Down Expand Up @@ -189,3 +191,16 @@ function atLeastAngular8(): boolean {
const { VERSION } = require('@angular/core');
return Number(VERSION.major) >= 8;
}

function updateConfigurationsAndDisableOutputHashing(clientProject: WorkspaceProject): void {
const configurations = clientProject.architect!.build!.configurations;

// If the user doesn't have any `configurations` then just skip this step.
if (typeof configurations !== 'object') {
return;
}

for (const configuration of Object.values(configurations)) {
configuration.outputHashing = 'none';
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { SchematicTestRunner, UnitTestTree } from '@angular-devkit/schematics/testing';
import { join } from 'path';

const collectionPath = join(__dirname, '../schematics.json');
const collectionPath = join(__dirname, '../../schematics.json');

const workspaceOptions = {
name: 'workspace',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ import { SchematicTestRunner, UnitTestTree } from '@angular-devkit/schematics/te
import { getFileContent } from '@schematics/angular/utility/test';
import { join } from 'path';

import { Schema as NgAddOptions } from './schema';
import { Schema as NgAddOptions } from '../schema';

const collectionPath = join(__dirname, '../schematics.json');
const collectionPath = join(__dirname, '../../schematics.json');

const workspaceOptions = {
name: 'ss-workspace',
Expand Down
92 changes: 92 additions & 0 deletions schematics/ng-add/tests/issue-168.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
import { SchematicTestRunner, UnitTestTree } from '@angular-devkit/schematics/testing';
import { join } from 'path';

const collectionPath = join(__dirname, '../../schematics.json');

const workspaceOptions = {
name: 'workspace',
newProjectRoot: 'projects',
version: '9.0.0',
};

describe('https://github.com/single-spa/single-spa-angular/issues/168', () => {
let workspaceTree: UnitTestTree;
const testRunner = new SchematicTestRunner('single-spa-angular', collectionPath);

function generateApplication(name: string, project?: string) {
return testRunner
.runExternalSchematicAsync(
'@schematics/angular',
'application',
{
name,
project,
},
workspaceTree,
)
.toPromise();
}

beforeEach(async () => {
workspaceTree = await testRunner
.runExternalSchematicAsync('@schematics/angular', 'workspace', workspaceOptions)
.toPromise();
});

test('should update all configurations and disable output hashing', async () => {
// Arrange
const appTree = await generateApplication('first-cool-app');
let buildTarget = JSON.parse(`${appTree.get('/angular.json')!.content}`);
let configurations = buildTarget.projects['first-cool-app'].architect.build.configurations;
// `production` is always present by default
const production = configurations.production;
// Let's just add more configurations for testing purposes.
configurations['us-dev'] = { ...production };
configurations['eu-west-1'] = { ...production };

// Act
appTree.overwrite('/angular.json', JSON.stringify(buildTarget));

await testRunner.runSchematicAsync('ng-add', undefined, appTree).toPromise();

buildTarget = JSON.parse(`${appTree.get('/angular.json')!.content}`);
configurations = buildTarget.projects['first-cool-app'].architect.build.configurations;

// Arrange
expect(Object.keys(configurations).length).toBe(3);

for (const configuration of configurations) {
expect(configuration.outputHashing).toBe('none');
}
});

test('should update all configurations in the provided "--project"', async () => {
// Arrange
await generateApplication('first-cool-app');
const appTree = await generateApplication('second-cool-app', 'second-cool-app');
let buildTarget = JSON.parse(`${appTree.get('/angular.json')!.content}`);
let configurations = buildTarget.projects['second-cool-app'].architect.build.configurations;
// `production` is always present by default
const production = configurations.production;
// Let's just add more configurations for testing purposes.
configurations['us-dev'] = { ...production };
configurations['eu-west-1'] = { ...production };

// Act
appTree.overwrite('/angular.json', JSON.stringify(buildTarget));

await testRunner
.runSchematicAsync('ng-add', { project: 'second-cool-app' }, appTree)
.toPromise();

buildTarget = JSON.parse(`${appTree.get('/angular.json')!.content}`);
configurations = buildTarget.projects['second-cool-app'].architect.build.configurations;

// Arrange
expect(Object.keys(configurations).length).toBe(3);

for (const configuration of configurations) {
expect(configuration.outputHashing).toBe('none');
}
});
});

0 comments on commit cc0c32a

Please sign in to comment.