diff --git a/packages/js/src/utils/add-babel-inputs.ts b/packages/js/src/utils/add-babel-inputs.ts new file mode 100644 index 0000000000..6d8a09525c --- /dev/null +++ b/packages/js/src/utils/add-babel-inputs.ts @@ -0,0 +1,37 @@ +import { + formatFiles, + joinPathFragments, + readWorkspaceConfiguration, + Tree, + updateWorkspaceConfiguration, + writeJson, +} from '@nrwl/devkit'; + +export async function addBabelInputs(tree: Tree) { + const workspaceConfiguration = readWorkspaceConfiguration(tree); + let globalBabelFile = ['babel.config.js', 'babel.config.json'].find((file) => + tree.exists(file) + ); + + if (!globalBabelFile) { + writeJson(tree, '/babel.config.json', { + babelrcRoots: ['*'], // Make sure .babelrc files other than root can be loaded in a monorepo + }); + globalBabelFile = 'babel.config.json'; + } + + if (workspaceConfiguration.namedInputs?.sharedGlobals) { + const sharedGlobalFileset = new Set( + workspaceConfiguration.namedInputs.sharedGlobals + ); + sharedGlobalFileset.add( + joinPathFragments('{workspaceRoot}', globalBabelFile) + ); + workspaceConfiguration.namedInputs.sharedGlobals = + Array.from(sharedGlobalFileset); + } + + updateWorkspaceConfiguration(tree, workspaceConfiguration); + + await formatFiles(tree); +} diff --git a/packages/react-native/package.json b/packages/react-native/package.json index 3ca2d023d9..487d97c593 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -28,6 +28,7 @@ "@nrwl/detox": "file:../detox", "@nrwl/devkit": "file:../devkit", "@nrwl/jest": "file:../jest", + "@nrwl/js": "file:../js", "@nrwl/linter": "file:../linter", "@nrwl/react": "file:../react", "@nrwl/storybook": "file:../storybook", diff --git a/packages/react-native/src/generators/init/init.ts b/packages/react-native/src/generators/init/init.ts index 88643a34f7..e5a423b83a 100644 --- a/packages/react-native/src/generators/init/init.ts +++ b/packages/react-native/src/generators/init/init.ts @@ -9,6 +9,8 @@ import { } from '@nrwl/devkit'; import { Schema } from './schema'; import { runTasksInSerial } from '@nrwl/workspace/src/utilities/run-tasks-in-serial'; +import { addBabelInputs } from '@nrwl/js/src/utils/add-babel-inputs'; + import { jestInitGenerator } from '@nrwl/jest'; import { detoxInitGenerator } from '@nrwl/detox'; import { @@ -37,11 +39,10 @@ import { } from '../../utils/versions'; import { addGitIgnoreEntry } from './lib/add-git-ignore-entry'; -import { initRootBabelConfig } from './lib/init-root-babel-config'; export async function reactNativeInitGenerator(host: Tree, schema: Schema) { addGitIgnoreEntry(host); - initRootBabelConfig(host); + addBabelInputs(host); const tasks: GeneratorCallback[] = []; diff --git a/packages/react-native/src/generators/init/lib/init-root-babel-config.ts b/packages/react-native/src/generators/init/lib/init-root-babel-config.ts deleted file mode 100644 index 4b836f344c..0000000000 --- a/packages/react-native/src/generators/init/lib/init-root-babel-config.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { - readWorkspaceConfiguration, - Tree, - updateWorkspaceConfiguration, - writeJson, -} from '@nrwl/devkit'; - -export function initRootBabelConfig(tree: Tree) { - if (tree.exists('/babel.config.json') || tree.exists('/babel.config.js')) { - return; - } - - writeJson(tree, '/babel.config.json', { - babelrcRoots: ['*'], // Make sure .babelrc files other than root can be loaded in a monorepo - }); - - const workspaceConfiguration = readWorkspaceConfiguration(tree); - - if (workspaceConfiguration.namedInputs?.sharedGlobals) { - workspaceConfiguration.namedInputs.sharedGlobals.push( - '{workspaceRoot}/babel.config.json' - ); - } - updateWorkspaceConfiguration(tree, workspaceConfiguration); -} diff --git a/packages/react-native/src/migrations/update-13-5-0/add-babel-config-root-13-5-0.ts b/packages/react-native/src/migrations/update-13-5-0/add-babel-config-root-13-5-0.ts index 9af0586c21..42c5af86e9 100644 --- a/packages/react-native/src/migrations/update-13-5-0/add-babel-config-root-13-5-0.ts +++ b/packages/react-native/src/migrations/update-13-5-0/add-babel-config-root-13-5-0.ts @@ -1,6 +1,5 @@ import { getProjects, Tree } from '@nrwl/devkit'; - -import { initRootBabelConfig } from '../../generators/init/lib/init-root-babel-config'; +import { addBabelInputs } from '@nrwl/js/src/utils/add-babel-inputs'; export default async function update(tree: Tree) { const projects = getProjects(tree); @@ -17,6 +16,6 @@ export default async function update(tree: Tree) { ); if (hasReactNaiveProject) { - initRootBabelConfig(tree); + addBabelInputs(tree); } } diff --git a/packages/react-native/src/migrations/update-15-0-0/add-babel-inputs.ts b/packages/react-native/src/migrations/update-15-0-0/add-babel-inputs.ts index 64ec6ee101..fb09002f29 100644 --- a/packages/react-native/src/migrations/update-15-0-0/add-babel-inputs.ts +++ b/packages/react-native/src/migrations/update-15-0-0/add-babel-inputs.ts @@ -1,30 +1,6 @@ -import { - formatFiles, - joinPathFragments, - readWorkspaceConfiguration, - Tree, - updateWorkspaceConfiguration, -} from '@nrwl/devkit'; +import { Tree } from '@nrwl/devkit'; +import { addBabelInputs } from '@nrwl/js/src/utils/add-babel-inputs'; export default async function (tree: Tree) { - const workspaceConfiguration = readWorkspaceConfiguration(tree); - - const globalBabelFile = ['babel.config.js', 'babel.config.json'].find( - (file) => tree.exists(file) - ); - - if (globalBabelFile && workspaceConfiguration.namedInputs?.sharedGlobals) { - const sharedGlobalFileset = new Set( - workspaceConfiguration.namedInputs.sharedGlobals - ); - sharedGlobalFileset.add( - joinPathFragments('{workspaceRoot}', globalBabelFile) - ); - workspaceConfiguration.namedInputs.sharedGlobals = - Array.from(sharedGlobalFileset); - } - - updateWorkspaceConfiguration(tree, workspaceConfiguration); - - await formatFiles(tree); + addBabelInputs(tree); } diff --git a/packages/rollup/src/generators/init/init.ts b/packages/rollup/src/generators/init/init.ts index 1c4b170803..3a86f769be 100644 --- a/packages/rollup/src/generators/init/init.ts +++ b/packages/rollup/src/generators/init/init.ts @@ -3,20 +3,18 @@ import { convertNxGenerator, formatFiles, GeneratorCallback, - readWorkspaceConfiguration, Tree, - updateWorkspaceConfiguration, - writeJson, } from '@nrwl/devkit'; import { Schema } from './schema'; import { swcCoreVersion, swcHelpersVersion } from '@nrwl/js/src/utils/versions'; import { swcLoaderVersion, tsLibVersion } from '../../utils/versions'; +import { addBabelInputs } from '@nrwl/js/src/utils/add-babel-inputs'; export async function rollupInitGenerator(tree: Tree, schema: Schema) { let task: GeneratorCallback; if (schema.compiler === 'babel') { - initRootBabelConfig(tree); + addBabelInputs(tree); } if (schema.compiler === 'swc') { @@ -42,25 +40,6 @@ export async function rollupInitGenerator(tree: Tree, schema: Schema) { return task; } -function initRootBabelConfig(tree: Tree) { - if (tree.exists('/babel.config.json') || tree.exists('/babel.config.js')) { - return; - } - - writeJson(tree, '/babel.config.json', { - babelrcRoots: ['*'], // Make sure .babelrc files other than root can be loaded in a monorepo - }); - - const workspaceConfiguration = readWorkspaceConfiguration(tree); - - if (workspaceConfiguration.namedInputs?.sharedGlobals) { - workspaceConfiguration.namedInputs.sharedGlobals.push( - '{workspaceRoot}/babel.config.json' - ); - } - updateWorkspaceConfiguration(tree, workspaceConfiguration); -} - export default rollupInitGenerator; export const rollupInitSchematic = convertNxGenerator(rollupInitGenerator); diff --git a/packages/rollup/src/migrations/update-15-0-0/add-babel-inputs.ts b/packages/rollup/src/migrations/update-15-0-0/add-babel-inputs.ts index 64ec6ee101..fb09002f29 100644 --- a/packages/rollup/src/migrations/update-15-0-0/add-babel-inputs.ts +++ b/packages/rollup/src/migrations/update-15-0-0/add-babel-inputs.ts @@ -1,30 +1,6 @@ -import { - formatFiles, - joinPathFragments, - readWorkspaceConfiguration, - Tree, - updateWorkspaceConfiguration, -} from '@nrwl/devkit'; +import { Tree } from '@nrwl/devkit'; +import { addBabelInputs } from '@nrwl/js/src/utils/add-babel-inputs'; export default async function (tree: Tree) { - const workspaceConfiguration = readWorkspaceConfiguration(tree); - - const globalBabelFile = ['babel.config.js', 'babel.config.json'].find( - (file) => tree.exists(file) - ); - - if (globalBabelFile && workspaceConfiguration.namedInputs?.sharedGlobals) { - const sharedGlobalFileset = new Set( - workspaceConfiguration.namedInputs.sharedGlobals - ); - sharedGlobalFileset.add( - joinPathFragments('{workspaceRoot}', globalBabelFile) - ); - workspaceConfiguration.namedInputs.sharedGlobals = - Array.from(sharedGlobalFileset); - } - - updateWorkspaceConfiguration(tree, workspaceConfiguration); - - await formatFiles(tree); + addBabelInputs(tree); } diff --git a/packages/web/src/generators/init/init.ts b/packages/web/src/generators/init/init.ts index dfa1ba2149..cf6e93fa33 100644 --- a/packages/web/src/generators/init/init.ts +++ b/packages/web/src/generators/init/init.ts @@ -18,6 +18,7 @@ import { typesNodeVersion, } from '../../utils/versions'; import { Schema } from './schema'; +import { addBabelInputs } from '@nrwl/js/src/utils/add-babel-inputs'; function updateDependencies(tree: Tree, schema: Schema) { removeDependenciesFromPackageJson(tree, ['@nrwl/web'], []); @@ -42,27 +43,6 @@ function updateDependencies(tree: Tree, schema: Schema) { ); } -function initRootBabelConfig(tree: Tree, schema: Schema) { - if (tree.exists('/babel.config.json') || tree.exists('/babel.config.js')) { - return; - } - - if (!schema.skipBabelConfig) { - writeJson(tree, '/babel.config.json', { - babelrcRoots: ['*'], // Make sure .babelrc files other than root can be loaded in a monorepo - }); - } - - const workspaceConfiguration = readWorkspaceConfiguration(tree); - - if (workspaceConfiguration.namedInputs?.sharedGlobals) { - workspaceConfiguration.namedInputs.sharedGlobals.push( - '{workspaceRoot}/babel.config.json' - ); - } - updateWorkspaceConfiguration(tree, workspaceConfiguration); -} - export async function webInitGenerator(tree: Tree, schema: Schema) { let tasks: GeneratorCallback[] = []; @@ -82,7 +62,8 @@ export async function webInitGenerator(tree: Tree, schema: Schema) { const installTask = updateDependencies(tree, schema); tasks.push(installTask); } - initRootBabelConfig(tree, schema); + addBabelInputs(tree); + if (!schema.skipFormat) { await formatFiles(tree); } diff --git a/packages/web/src/migrations/update-15-0-0/add-babel-inputs.ts b/packages/web/src/migrations/update-15-0-0/add-babel-inputs.ts index 64ec6ee101..fb09002f29 100644 --- a/packages/web/src/migrations/update-15-0-0/add-babel-inputs.ts +++ b/packages/web/src/migrations/update-15-0-0/add-babel-inputs.ts @@ -1,30 +1,6 @@ -import { - formatFiles, - joinPathFragments, - readWorkspaceConfiguration, - Tree, - updateWorkspaceConfiguration, -} from '@nrwl/devkit'; +import { Tree } from '@nrwl/devkit'; +import { addBabelInputs } from '@nrwl/js/src/utils/add-babel-inputs'; export default async function (tree: Tree) { - const workspaceConfiguration = readWorkspaceConfiguration(tree); - - const globalBabelFile = ['babel.config.js', 'babel.config.json'].find( - (file) => tree.exists(file) - ); - - if (globalBabelFile && workspaceConfiguration.namedInputs?.sharedGlobals) { - const sharedGlobalFileset = new Set( - workspaceConfiguration.namedInputs.sharedGlobals - ); - sharedGlobalFileset.add( - joinPathFragments('{workspaceRoot}', globalBabelFile) - ); - workspaceConfiguration.namedInputs.sharedGlobals = - Array.from(sharedGlobalFileset); - } - - updateWorkspaceConfiguration(tree, workspaceConfiguration); - - await formatFiles(tree); + addBabelInputs(tree); } diff --git a/packages/webpack/src/generators/init/init.ts b/packages/webpack/src/generators/init/init.ts index 22c74364e9..0babd09590 100644 --- a/packages/webpack/src/generators/init/init.ts +++ b/packages/webpack/src/generators/init/init.ts @@ -3,10 +3,7 @@ import { convertNxGenerator, formatFiles, GeneratorCallback, - readWorkspaceConfiguration, Tree, - updateWorkspaceConfiguration, - writeJson, } from '@nrwl/devkit'; import { Schema } from './schema'; import { swcCoreVersion } from '@nrwl/js/src/utils/versions'; @@ -15,12 +12,13 @@ import { swcLoaderVersion, tsLibVersion, } from '../../utils/versions'; +import { addBabelInputs } from '@nrwl/js/src/utils/add-babel-inputs'; export async function webpackInitGenerator(tree: Tree, schema: Schema) { let task: GeneratorCallback; if (schema.compiler === 'babel') { - initRootBabelConfig(tree); + addBabelInputs(tree); } if (schema.compiler === 'swc') { @@ -46,25 +44,6 @@ export async function webpackInitGenerator(tree: Tree, schema: Schema) { return task; } -function initRootBabelConfig(tree: Tree) { - if (tree.exists('/babel.config.json') || tree.exists('/babel.config.js')) { - return; - } - - writeJson(tree, '/babel.config.json', { - babelrcRoots: ['*'], // Make sure .babelrc files other than root can be loaded in a monorepo - }); - - const workspaceConfiguration = readWorkspaceConfiguration(tree); - - if (workspaceConfiguration.namedInputs?.sharedGlobals) { - workspaceConfiguration.namedInputs.sharedGlobals.push( - '{workspaceRoot}/babel.config.json' - ); - } - updateWorkspaceConfiguration(tree, workspaceConfiguration); -} - export default webpackInitGenerator; export const webpackInitSchematic = convertNxGenerator(webpackInitGenerator); diff --git a/packages/webpack/src/migrations/update-15-0-0/add-babel-inputs.ts b/packages/webpack/src/migrations/update-15-0-0/add-babel-inputs.ts index 64ec6ee101..fb09002f29 100644 --- a/packages/webpack/src/migrations/update-15-0-0/add-babel-inputs.ts +++ b/packages/webpack/src/migrations/update-15-0-0/add-babel-inputs.ts @@ -1,30 +1,6 @@ -import { - formatFiles, - joinPathFragments, - readWorkspaceConfiguration, - Tree, - updateWorkspaceConfiguration, -} from '@nrwl/devkit'; +import { Tree } from '@nrwl/devkit'; +import { addBabelInputs } from '@nrwl/js/src/utils/add-babel-inputs'; export default async function (tree: Tree) { - const workspaceConfiguration = readWorkspaceConfiguration(tree); - - const globalBabelFile = ['babel.config.js', 'babel.config.json'].find( - (file) => tree.exists(file) - ); - - if (globalBabelFile && workspaceConfiguration.namedInputs?.sharedGlobals) { - const sharedGlobalFileset = new Set( - workspaceConfiguration.namedInputs.sharedGlobals - ); - sharedGlobalFileset.add( - joinPathFragments('{workspaceRoot}', globalBabelFile) - ); - workspaceConfiguration.namedInputs.sharedGlobals = - Array.from(sharedGlobalFileset); - } - - updateWorkspaceConfiguration(tree, workspaceConfiguration); - - await formatFiles(tree); + addBabelInputs(tree); }