From 9d78629ec021b21179c38e52f545c233dca6f25c Mon Sep 17 00:00:00 2001 From: Phillip Barta Date: Wed, 16 Jun 2021 23:09:30 +0200 Subject: [PATCH] cleanup(web): use json utils (#5944) --- .../web/src/executors/build/build.impl.ts | 2 +- .../web/src/executors/package/package.impl.ts | 12 +- .../create-babelrc-for-workspace-libs.spec.ts | 142 ++++++++---------- .../create-babelrc-for-workspace-libs.ts | 7 +- .../update-existing-babelrc-files.spec.ts | 117 +++++++-------- .../update-existing-babelrc-files.ts | 2 +- .../update-root-babel-config.spec.ts | 11 +- .../update-8-5-0/update-builder-8-5-0.spec.ts | 40 +++-- .../set-build-libs-from-source.spec.ts | 32 ++-- packages/web/src/utils/web-babel-loader.ts | 2 +- 10 files changed, 163 insertions(+), 204 deletions(-) diff --git a/packages/web/src/executors/build/build.impl.ts b/packages/web/src/executors/build/build.impl.ts index 25b0e4c836..1e03338cc8 100644 --- a/packages/web/src/executors/build/build.impl.ts +++ b/packages/web/src/executors/build/build.impl.ts @@ -1,4 +1,4 @@ -import { ExecutorContext } from '@nrwl/devkit'; +import type { ExecutorContext } from '@nrwl/devkit'; import * as webpack from 'webpack'; import { Stats } from 'webpack'; diff --git a/packages/web/src/executors/package/package.impl.ts b/packages/web/src/executors/package/package.impl.ts index 9881876f45..183f4f88d2 100644 --- a/packages/web/src/executors/package/package.impl.ts +++ b/packages/web/src/executors/package/package.impl.ts @@ -1,4 +1,5 @@ -import { ExecutorContext, logger, names } from '@nrwl/devkit'; +import { readJsonFile, writeJsonFile, logger, names } from '@nrwl/devkit'; +import type { ExecutorContext, ProjectGraphNode } from '@nrwl/devkit'; import * as rollup from 'rollup'; import * as peerDepsExternal from 'rollup-plugin-peer-deps-external'; @@ -21,14 +22,7 @@ import { catchError, concatMap, last, tap } from 'rxjs/operators'; import { eachValueFrom } from 'rxjs-for-await'; import * as autoprefixer from 'autoprefixer'; -import { - readJsonFile, - writeJsonFile, -} from '@nrwl/workspace/src/utilities/fileutils'; -import { - createProjectGraph, - ProjectGraphNode, -} from '@nrwl/workspace/src/core/project-graph'; +import { createProjectGraph } from '@nrwl/workspace/src/core/project-graph'; import { calculateProjectDependencies, checkDependentProjectsHaveBeenBuilt, diff --git a/packages/web/src/migrations/update-11-5-2/create-babelrc-for-workspace-libs.spec.ts b/packages/web/src/migrations/update-11-5-2/create-babelrc-for-workspace-libs.spec.ts index 514f945e59..6cc840d6dc 100644 --- a/packages/web/src/migrations/update-11-5-2/create-babelrc-for-workspace-libs.spec.ts +++ b/packages/web/src/migrations/update-11-5-2/create-babelrc-for-workspace-libs.spec.ts @@ -1,5 +1,5 @@ import { createTreeWithEmptyWorkspace } from '@nrwl/devkit/testing'; -import { readJson, DependencyType } from '@nrwl/devkit'; +import { readJson, writeJson, DependencyType } from '@nrwl/devkit'; import { createBabelrcForWorkspaceLibs } from './create-babelrc-for-workspace-libs'; import type { ProjectGraph, Tree } from '@nrwl/devkit'; @@ -17,47 +17,41 @@ describe('Create missing .babelrc files', () => { }); it(`should create .babelrc files for libs that are used in '@nrwl/web:build'`, async () => { - tree.write( - 'workspace.json', - JSON.stringify({ - projects: { - webapp: { - root: 'apps/webapp', - projectType: 'application', - targets: { - build: { executor: '@nrwl/web:build' }, - }, - }, - nodeapp: { - root: 'apps/nodeapp', - projectType: 'application', - targets: { - build: { executor: '@nrwl/node:build' }, - }, - }, - weblib: { - root: 'libs/weblib', - projectType: 'library', - }, - nodelib: { - root: 'libs/nodelib', - projectType: 'library', + writeJson(tree, 'workspace.json', { + projects: { + webapp: { + root: 'apps/webapp', + projectType: 'application', + targets: { + build: { executor: '@nrwl/web:build' }, }, }, - }) - ); - tree.write( - 'nx.json', - JSON.stringify({ - npmScope: 'proj', - projects: { - webapp: {}, - nodeapp: {}, - weblib: {}, - nodelib: {}, + nodeapp: { + root: 'apps/nodeapp', + projectType: 'application', + targets: { + build: { executor: '@nrwl/node:build' }, + }, }, - }) - ); + weblib: { + root: 'libs/weblib', + projectType: 'library', + }, + nodelib: { + root: 'libs/nodelib', + projectType: 'library', + }, + }, + }); + writeJson(tree, 'nx.json', { + npmScope: 'proj', + projects: { + webapp: {}, + nodeapp: {}, + weblib: {}, + nodelib: {}, + }, + }); tree.write('apps/webapp/index.ts', `import '@proj/weblib';`); projectGraph = { @@ -116,47 +110,41 @@ describe('Create missing .babelrc files', () => { }); it('should not error if there are circular dependencies', async () => { - tree.write( - 'workspace.json', - JSON.stringify({ - projects: { - webapp: { - root: 'apps/webapp', - projectType: 'application', - targets: { - build: { executor: '@nrwl/web:build' }, - }, - }, - nodeapp: { - root: 'apps/nodeapp', - projectType: 'application', - targets: { - build: { executor: '@nrwl/node:build' }, - }, - }, - weblib: { - root: 'libs/weblib', - projectType: 'library', - }, - nodelib: { - root: 'libs/nodelib', - projectType: 'library', + writeJson(tree, 'workspace.json', { + projects: { + webapp: { + root: 'apps/webapp', + projectType: 'application', + targets: { + build: { executor: '@nrwl/web:build' }, }, }, - }) - ); - tree.write( - 'nx.json', - JSON.stringify({ - npmScope: 'proj', - projects: { - webapp: {}, - nodeapp: {}, - weblib: {}, - nodelib: {}, + nodeapp: { + root: 'apps/nodeapp', + projectType: 'application', + targets: { + build: { executor: '@nrwl/node:build' }, + }, }, - }) - ); + weblib: { + root: 'libs/weblib', + projectType: 'library', + }, + nodelib: { + root: 'libs/nodelib', + projectType: 'library', + }, + }, + }); + writeJson(tree, 'nx.json', { + npmScope: 'proj', + projects: { + webapp: {}, + nodeapp: {}, + weblib: {}, + nodelib: {}, + }, + }); tree.write('apps/webapp/index.ts', `import '@proj/weblib';`); projectGraph = { diff --git a/packages/web/src/migrations/update-11-5-2/create-babelrc-for-workspace-libs.ts b/packages/web/src/migrations/update-11-5-2/create-babelrc-for-workspace-libs.ts index 41905705f8..81cfb264bc 100644 --- a/packages/web/src/migrations/update-11-5-2/create-babelrc-for-workspace-libs.ts +++ b/packages/web/src/migrations/update-11-5-2/create-babelrc-for-workspace-libs.ts @@ -1,4 +1,4 @@ -import { formatFiles, getProjects, Tree } from '@nrwl/devkit'; +import { formatFiles, getProjects, Tree, writeJson } from '@nrwl/devkit'; import { createProjectGraph, reverse, @@ -18,10 +18,7 @@ export async function createBabelrcForWorkspaceLibs(host: Tree) { if (p.projectType === 'library' && !host.exists(babelrcPath)) { // Library is included in applications that require .babelrc to // exist and contain '@nrwl/web/babel' preset. - host.write( - babelrcPath, - JSON.stringify({ presets: ['@nrwl/web/babel'] }, null, 2) - ); + writeJson(host, babelrcPath, { presets: ['@nrwl/web/babel'] }); } } diff --git a/packages/web/src/migrations/update-11-5-2/update-existing-babelrc-files.spec.ts b/packages/web/src/migrations/update-11-5-2/update-existing-babelrc-files.spec.ts index efb3a20a0e..4ebbc78422 100644 --- a/packages/web/src/migrations/update-11-5-2/update-existing-babelrc-files.spec.ts +++ b/packages/web/src/migrations/update-11-5-2/update-existing-babelrc-files.spec.ts @@ -1,5 +1,5 @@ import { createTreeWithEmptyWorkspace } from '@nrwl/devkit/testing'; -import { readJson, Tree } from '@nrwl/devkit'; +import { readJson, writeJson, Tree } from '@nrwl/devkit'; import { updateExistingBabelrcFiles } from './update-existing-babelrc-files'; describe('Create missing .babelrc files', () => { @@ -10,73 +10,58 @@ describe('Create missing .babelrc files', () => { }); it(`should add web babel preset if it does not exist`, async () => { - tree.write( - 'workspace.json', - JSON.stringify({ - projects: { - 'missing-babel-presets': { - root: 'apps/missing-babel-presets', - projectType: 'application', - }, - 'web-app': { - root: 'apps/web-app', - projectType: 'application', - }, - 'react-app': { - root: 'apps/react-app', - projectType: 'application', - }, - 'gatsby-app': { - root: 'apps/gatsby-app', - projectType: 'application', - }, - 'not-using-babel': { - root: 'apps/not-using-babel', - projectType: 'application', - }, - 'next-app': { - root: 'apps/next-app', - projectType: 'application', - }, + writeJson(tree, 'workspace.json', { + projects: { + 'missing-babel-presets': { + root: 'apps/missing-babel-presets', + projectType: 'application', }, - }) - ); - tree.write( - 'nx.json', - JSON.stringify({ - projects: { - 'missing-babel-presets': {}, - 'web-app': {}, - 'react-app': {}, - 'gatsby-app': {}, - 'not-using-babel': {}, - 'next-app': {}, + 'web-app': { + root: 'apps/web-app', + projectType: 'application', }, - }) - ); - tree.write( - 'babel.config.json', - JSON.stringify({ - presets: ['@nrwl/web/babel'], - }) - ); - tree.write('apps/missing-babel-presets/.babelrc', JSON.stringify({})); - tree.write( - 'apps/web-app/.babelrc', - JSON.stringify({ presets: ['@nrwl/web/babel'] }) - ); - tree.write( - 'apps/react-app/.babelrc', - JSON.stringify({ presets: ['@nrwl/react/babel'] }) - ); - tree.write( - 'apps/gatsby-app/.babelrc', - JSON.stringify({ presets: ['@nrwl/gatsby/babel'] }) - ); - tree.write( - 'apps/next-app/.babelrc', - JSON.stringify({ presets: ['@nrwl/next/babel'] }) - ); + 'react-app': { + root: 'apps/react-app', + projectType: 'application', + }, + 'gatsby-app': { + root: 'apps/gatsby-app', + projectType: 'application', + }, + 'not-using-babel': { + root: 'apps/not-using-babel', + projectType: 'application', + }, + 'next-app': { + root: 'apps/next-app', + projectType: 'application', + }, + }, + }); + writeJson(tree, 'nx.json', { + projects: { + 'missing-babel-presets': {}, + 'web-app': {}, + 'react-app': {}, + 'gatsby-app': {}, + 'not-using-babel': {}, + 'next-app': {}, + }, + }); + writeJson(tree, 'babel.config.json', { + presets: ['@nrwl/web/babel'], + }); + writeJson(tree, 'apps/missing-babel-presets/.babelrc', {}); + writeJson(tree, 'apps/web-app/.babelrc', { presets: ['@nrwl/web/babel'] }); + writeJson(tree, 'apps/react-app/.babelrc', { + presets: ['@nrwl/react/babel'], + }); + writeJson(tree, 'apps/gatsby-app/.babelrc', { + presets: ['@nrwl/gatsby/babel'], + }); + writeJson(tree, 'apps/next-app/.babelrc', { + presets: ['@nrwl/next/babel'], + }); await updateExistingBabelrcFiles(tree); diff --git a/packages/web/src/migrations/update-11-5-2/update-existing-babelrc-files.ts b/packages/web/src/migrations/update-11-5-2/update-existing-babelrc-files.ts index 7e0fdea98e..2c666ff20a 100644 --- a/packages/web/src/migrations/update-11-5-2/update-existing-babelrc-files.ts +++ b/packages/web/src/migrations/update-11-5-2/update-existing-babelrc-files.ts @@ -10,7 +10,7 @@ export async function updateExistingBabelrcFiles(host: Tree) { // This is needed because we removed it from the root. if (host.exists(babelrcPath)) { updateJson(host, babelrcPath, (json) => { - json.presets = json.presets || []; + json.presets ||= []; if ( -1 === json.presets.findIndex( diff --git a/packages/web/src/migrations/update-11-5-2/update-root-babel-config.spec.ts b/packages/web/src/migrations/update-11-5-2/update-root-babel-config.spec.ts index c7cdb5925c..725078f9c1 100644 --- a/packages/web/src/migrations/update-11-5-2/update-root-babel-config.spec.ts +++ b/packages/web/src/migrations/update-11-5-2/update-root-babel-config.spec.ts @@ -1,5 +1,5 @@ import { createTreeWithEmptyWorkspace } from '@nrwl/devkit/testing'; -import { readJson, Tree } from '@nrwl/devkit'; +import { readJson, writeJson, Tree } from '@nrwl/devkit'; import { updateRootBabelConfig } from './update-root-babel-config'; describe('Update root babel config', () => { @@ -10,12 +10,9 @@ describe('Update root babel config', () => { }); it(`should add web babel preset if it does not exist`, async () => { - tree.write( - 'babel.config.json', - JSON.stringify({ - presets: ['@nrwl/web/babel'], - }) - ); + writeJson(tree, 'babel.config.json', { + presets: ['@nrwl/web/babel'], + }); await updateRootBabelConfig(tree); diff --git a/packages/web/src/migrations/update-8-5-0/update-builder-8-5-0.spec.ts b/packages/web/src/migrations/update-8-5-0/update-builder-8-5-0.spec.ts index e5eb7e6bcc..648f3a2429 100644 --- a/packages/web/src/migrations/update-8-5-0/update-builder-8-5-0.spec.ts +++ b/packages/web/src/migrations/update-8-5-0/update-builder-8-5-0.spec.ts @@ -1,12 +1,6 @@ import { Tree } from '@angular-devkit/schematics'; import { SchematicTestRunner } from '@angular-devkit/schematics/testing'; -import { - updateJsonInTree, - readJsonInTree, - updateWorkspaceInTree, - readWorkspace, - getWorkspacePath, -} from '@nrwl/workspace'; +import { readWorkspace, updateJsonInTree } from '@nrwl/workspace'; import * as path from 'path'; @@ -23,25 +17,27 @@ describe('Update 8-5-0', () => { }); it(`should remove differentialLoading as an option for build builder`, async () => { - tree.create( - 'workspace.json', - JSON.stringify({ - projects: { - demo: { - root: 'apps/demo', - sourceRoot: 'apps/demo/src', - architect: { - build: { - builder: '@nrwl/web:build', - options: { - differentialLoading: true, + tree = await schematicRunner + .callRule( + updateJsonInTree('workspace.json', () => ({ + projects: { + demo: { + root: 'apps/demo', + sourceRoot: 'apps/demo/src', + architect: { + build: { + builder: '@nrwl/web:build', + options: { + differentialLoading: true, + }, }, }, }, }, - }, - }) - ); + })), + tree + ) + .toPromise(); tree = await schematicRunner .runSchematicAsync('update-builder-8.5.0', {}, tree) diff --git a/packages/web/src/migrations/update-9-2-0/set-build-libs-from-source.spec.ts b/packages/web/src/migrations/update-9-2-0/set-build-libs-from-source.spec.ts index 8f1325d524..76fae77494 100644 --- a/packages/web/src/migrations/update-9-2-0/set-build-libs-from-source.spec.ts +++ b/packages/web/src/migrations/update-9-2-0/set-build-libs-from-source.spec.ts @@ -1,6 +1,6 @@ import { Tree } from '@angular-devkit/schematics'; import { SchematicTestRunner } from '@angular-devkit/schematics/testing'; -import { readWorkspace } from '@nrwl/workspace'; +import { readWorkspace, updateJsonInTree } from '@nrwl/workspace'; import * as path from 'path'; @@ -17,23 +17,25 @@ describe('set buildLibsFromSource to true', () => { }); it(`should set buildLibsFromSource to true`, async () => { - tree.create( - 'workspace.json', - JSON.stringify({ - projects: { - demo: { - root: 'apps/demo', - sourceRoot: 'apps/demo/src', - architect: { - build: { - builder: '@nrwl/web:build', - options: {}, + tree = await schematicRunner + .callRule( + updateJsonInTree('workspace.json', () => ({ + projects: { + demo: { + root: 'apps/demo', + sourceRoot: 'apps/demo/src', + architect: { + build: { + builder: '@nrwl/web:build', + options: {}, + }, }, }, }, - }, - }) - ); + })), + tree + ) + .toPromise(); tree = await schematicRunner .runSchematicAsync('set-build-libs-from-source', {}, tree) diff --git a/packages/web/src/utils/web-babel-loader.ts b/packages/web/src/utils/web-babel-loader.ts index aa5246eab0..c13ddcfae3 100644 --- a/packages/web/src/utils/web-babel-loader.ts +++ b/packages/web/src/utils/web-babel-loader.ts @@ -1,4 +1,4 @@ -module.exports = require('babel-loader').custom((babel) => { +module.exports = require('babel-loader').custom(() => { return { customOptions({ isModern, emitDecoratorMetadata, ...loader }) { return {