From f139a12ee39f6f666aeb5d1212528a2cac5678d6 Mon Sep 17 00:00:00 2001 From: jaybell Date: Wed, 9 Feb 2022 11:46:55 -0800 Subject: [PATCH 01/12] feat(core): create schematic to convert libraries to buildable libs --- .../generators/convert-to-buildable.md | 60 ++++++ packages/workspace/generators.json | 12 ++ .../convert-to-buildable.ts | 175 ++++++++++++++++++ .../convert-to-buildable/schema.d.ts | 5 + .../convert-to-buildable/schema.json | 29 +++ packages/workspace/src/utils/workspace.ts | 21 +++ 6 files changed, 302 insertions(+) create mode 100644 docs/generated/api-workspace/generators/convert-to-buildable.md create mode 100644 packages/workspace/src/generators/convert-to-buildable/convert-to-buildable.ts create mode 100644 packages/workspace/src/generators/convert-to-buildable/schema.d.ts create mode 100644 packages/workspace/src/generators/convert-to-buildable/schema.json diff --git a/docs/generated/api-workspace/generators/convert-to-buildable.md b/docs/generated/api-workspace/generators/convert-to-buildable.md new file mode 100644 index 0000000000000..150b0cae319a5 --- /dev/null +++ b/docs/generated/api-workspace/generators/convert-to-buildable.md @@ -0,0 +1,60 @@ +--- +title: '@nrwl/workspace:convert-to-buildable generator' +description: 'Convert an Nx library to be buildable' +--- + +# @nrwl/workspace:convert-to-buildable + +Convert an Nx library to be buildable + +## Usage + +```bash +nx generate convert-to-buildable ... +``` + +By default, Nx will search for `convert-to-buildable` in the default collection provisioned in `workspace.json`. + +You can specify the collection explicitly as follows: + +```bash +nx g @nrwl/workspace:convert-to-buildable ... +``` + +Show what will be generated without writing to disk: + +```bash +nx g convert-to-buildable ... --dry-run +``` + +### Examples + +Convert the my-feature-lib project to be buildable: + +```bash +nx g @nrwl/workspace:convert-to-buildable --project my-feature-lib +``` + +## Options + +### project + +Type: `string` + +Project name + +### skipFormat + +Default: `false` + +Type: `boolean` + +Skip formatting files. + +### type + +Type: `string` + +Possible values: `js`, `node`, `nest`, `next`, `react`, `angular`, `detox`, `web` + +The type of library that this is. diff --git a/packages/workspace/generators.json b/packages/workspace/generators.json index 7ce1f216bd378..b3fda5912ca51 100644 --- a/packages/workspace/generators.json +++ b/packages/workspace/generators.json @@ -72,6 +72,12 @@ "description": "Moves a project's configuration outside of workspace.json" }, + "convert-to-buildable": { + "factory": "./src/generators/convert-to-buildable/convert-to-buildable#convertToBuildable", + "schema": "./src/generators/convert-to-buildable/schema.json", + "description": "Convert an Nx library to be buildable" + }, + "npm-package": { "factory": "./src/generators/npm-package/npm-package#npmPackageSchematic", "schema": "./src/generators/npm-package/schema.json", @@ -150,6 +156,12 @@ "description": "Moves a project's configuration outside of workspace.json" }, + "convert-to-buildable": { + "factory": "./src/generators/convert-to-buildable/convert-to-buildable#convertToBuildable", + "schema": "./src/generators/convert-to-buildable/schema.json", + "description": "Convert an Nx library to be buildable" + }, + "npm-package": { "factory": "./src/generators/npm-package/npm-package#npmPackageGenerator", "schema": "./src/generators/npm-package/schema.json", diff --git a/packages/workspace/src/generators/convert-to-buildable/convert-to-buildable.ts b/packages/workspace/src/generators/convert-to-buildable/convert-to-buildable.ts new file mode 100644 index 0000000000000..5c07c1a4612be --- /dev/null +++ b/packages/workspace/src/generators/convert-to-buildable/convert-to-buildable.ts @@ -0,0 +1,175 @@ +import { + getWorkspacePath, + isStandaloneProject, + NxJsonConfiguration, + readJsonFile, + readProjectConfiguration, + readWorkspaceConfiguration, + formatFiles, + Tree, + updateJson, + WorkspaceConfiguration, + writeJson, + convertNxGenerator, +} from '@nrwl/devkit'; + +import { Schema } from './schema'; +import { checkWorkspaceVersion } from '@nrwl/workspace/src/utils/workspace'; +import { join } from 'path'; + +function getExecutor(type: Schema['type']): string { + switch (type) { + case 'angular': + return '@nrwl/angular:ng-packagr-lite'; + case 'detox': + case 'js': + case 'web': + return '@nrwl/js:tsc'; + case 'next': + case 'react': + return '@nrwl/web:rollup'; + case 'node': + case 'nest': + return '@nrwl/node:package'; + } +} + +export async function convertToBuildable(host: Tree, schema: Schema) { + const workspace = readWorkspaceConfiguration(host); + + checkWorkspaceVersion(workspace, host); + + const configuration = readProjectConfiguration(host, schema.project); + + const nxJson = readJsonFile('nx.json'); + + if (configuration.targets['build'] != null) { + throw new Error(`${schema.project} is already buildable.`); + } + + /* + * Note on this: It seems new workspaces default to `packages` even though + * it is not set in nx.json whereas old workspaces may be using `libs` but + * it is also not set in the nx.json. + */ + const libDir = nxJson.workspaceLayout?.libsDir ?? 'packages'; + + const projectImport = `@${nxJson.npmScope}/${configuration.root.replace( + `${libDir}/`, + '' + )}`; + + const packageJson = readJsonFile('package.json'); + + // Write the package.json the builder will need + writeJson(host, join(configuration.root, 'package.json'), { + name: projectImport, + version: '0.0.1', + ...(schema.type === 'angular' + ? { + peerDependencies: { + '@angular/common': packageJson['dependencies']['@angular/common'], + '@angular/core': packageJson['dependencies']['@angular/core'], + }, + dependencies: { tslib: packageJson['dependencies']['tslib'] }, + } + : {}), + }); + + // Write the build target to the projects configuration + const buildTarget: any = { + executor: getExecutor(schema.type), + outputs: ['{options.outputPath}'], + options: { + outputPath: `dist/${configuration.root}`, + tsConfig: `${configuration.root}/tsconfig.lib.json`, + main: `${configuration.root}/src/index.ts`, + assets: [`${configuration.root}/*.md`], + }, + }; + + switch (schema.type) { + case 'nest': + case 'node': + buildTarget.options['packageJson'] = `${configuration.root}/package.json`; + break; + case 'next': + case 'react': + const { main, ...options } = buildTarget.options; + buildTarget.options = { + ...options, + project: `${configuration.root}/package.json`, + entryFile: `${configuration.root}/src/index.ts`, + external: ['react/jsx-runtime'], + rollupConfig: '@nrwl/react/plugins/bundle-rollup', + compiler: 'babel', + assets: [ + { + glob: `${configuration.root}/README.md`, + input: '.', + output: '.', + }, + ], + }; + break; + case 'angular': + buildTarget.options = { + project: `${configuration.root}/ng-package.json`, + }; + buildTarget.outputs = [`dist/${configuration.root}`]; + buildTarget.configurations = { + production: { + tsConfig: `${configuration.root}/tsconfig.lib.prod.json`, + }, + development: { + tsConfig: `${configuration.root}/tsconfig.lib.json`, + }, + }; + buildTarget.defaultConfiguration = 'production'; + break; + } + + if (schema.type === 'angular') { + writeJson(host, join(configuration.root, 'tsconfig.lib.prod.json'), { + extends: './tsconfig.lib.json', + compilerOptions: { + declarationMap: false, + }, + angularCompilerOptions: {}, + }); + + writeJson(host, join(configuration.root, 'ng-package.json'), { + $schema: '../../node_modules/ng-packagr/ng-package.schema.json', + dest: `../../dist/${configuration.root}`, + lib: { + entryFile: 'src/index.ts', + }, + }); + } + + const isStandalone = isStandaloneProject(host, schema.project); + + if (isStandalone) { + writeJson(host, join(configuration.root, 'project.json'), { + ...configuration, + targets: { + ...configuration.targets, + build: buildTarget, + }, + }); + } else { + updateJson(host, getWorkspacePath(host), (value) => { + value.projects[schema.project].targets['build'] = buildTarget; + return value; + }); + } + + if (!schema.skipFormat) { + await formatFiles(host); + } +} + +export default convertToBuildable; + +export const convertToNxProjectSchematic = + convertNxGenerator(convertToBuildable); diff --git a/packages/workspace/src/generators/convert-to-buildable/schema.d.ts b/packages/workspace/src/generators/convert-to-buildable/schema.d.ts new file mode 100644 index 0000000000000..b9312cb881e1c --- /dev/null +++ b/packages/workspace/src/generators/convert-to-buildable/schema.d.ts @@ -0,0 +1,5 @@ +export interface Schema { + project: string; + type: 'js' | 'node' | 'nest' | 'next' | 'react' | 'angular' | 'detox' | 'web'; + skipFormat?: boolean; +} diff --git a/packages/workspace/src/generators/convert-to-buildable/schema.json b/packages/workspace/src/generators/convert-to-buildable/schema.json new file mode 100644 index 0000000000000..2b8065669d3e5 --- /dev/null +++ b/packages/workspace/src/generators/convert-to-buildable/schema.json @@ -0,0 +1,29 @@ +{ + "$schema": "http://json-schema.org/schema", + "$id": "SchematicsConvertToBuildable", + "title": "Convert library to be a buildable lib", + "type": "object", + "cli": "nx", + "examples": [ + { + "command": "g @nrwl/workspace:convert-to-buildable --project my-feature-lib", + "description": "Convert the my-feature-lib project to be buildable" + } + ], + "properties": { + "project": { + "description": "Project name", + "type": "string" + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false + }, + "type": { + "description": "The type of library that this is.", + "type": "string", + "enum": ["js", "node", "nest", "next", "react", "angular", "detox", "web"] + } + } +} diff --git a/packages/workspace/src/utils/workspace.ts b/packages/workspace/src/utils/workspace.ts index 7961c776792a2..34e88caba22a7 100644 --- a/packages/workspace/src/utils/workspace.ts +++ b/packages/workspace/src/utils/workspace.ts @@ -4,6 +4,27 @@ import { ProjectDefinition, TargetDefinition, } from '@angular-devkit/core/src/workspace'; +import { logger } from '@nrwl/tao/src/shared/logger'; +import { + getWorkspacePath, + WorkspaceConfiguration, + Tree as DevkitTree, +} from '@nrwl/devkit'; + +export function checkWorkspaceVersion( + workspace: WorkspaceConfiguration, + host: DevkitTree +) { + if (workspace.version < 2) { + logger.error(` +NX Only workspaces with version 2+ support project.json files. +To upgrade change the version number at the top of ${getWorkspacePath( + host + )} and run 'nx format'. +`); + throw new Error('v2+ Required'); + } +} function createHost(tree: Tree): workspaces.WorkspaceHost { return { From 18ca01a271553a443232ff36e10466483b26b3da Mon Sep 17 00:00:00 2001 From: jaybell Date: Wed, 9 Feb 2022 11:53:53 -0800 Subject: [PATCH 02/12] docs(core): add entry for convert-to-buildable generator --- docs/map.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/map.json b/docs/map.json index 2a369c5a1703e..07422aafa35fb 100644 --- a/docs/map.json +++ b/docs/map.json @@ -512,6 +512,11 @@ "id": "convert-to-nx-project-generator", "file": "generated/api-workspace/generators/convert-to-nx-project" }, + { + "name": "convert-to-buildable generator", + "id": "convert-to-buildable-generator", + "file": "generated/api-workspace/generators/convert-to-buildable" + }, { "name": "run-commands executor", "id": "run-commands-executor", From 2ca9903ccb1e2cc730af71f0545b3fe4f634f91d Mon Sep 17 00:00:00 2001 From: jaybell Date: Wed, 9 Feb 2022 13:15:25 -0800 Subject: [PATCH 03/12] chore(core): remove angular from convert to buildable --- .../generators/convert-to-buildable.md | 2 +- .../convert-to-buildable.ts | 47 ------------------- .../convert-to-buildable/schema.d.ts | 2 +- .../convert-to-buildable/schema.json | 2 +- 4 files changed, 3 insertions(+), 50 deletions(-) diff --git a/docs/generated/api-workspace/generators/convert-to-buildable.md b/docs/generated/api-workspace/generators/convert-to-buildable.md index 150b0cae319a5..e94d38ef34ed0 100644 --- a/docs/generated/api-workspace/generators/convert-to-buildable.md +++ b/docs/generated/api-workspace/generators/convert-to-buildable.md @@ -55,6 +55,6 @@ Skip formatting files. Type: `string` -Possible values: `js`, `node`, `nest`, `next`, `react`, `angular`, `detox`, `web` +Possible values: `js`, `node`, `nest`, `next`, `react`, `detox`, `web` The type of library that this is. diff --git a/packages/workspace/src/generators/convert-to-buildable/convert-to-buildable.ts b/packages/workspace/src/generators/convert-to-buildable/convert-to-buildable.ts index 5c07c1a4612be..f7cd33eaa6619 100644 --- a/packages/workspace/src/generators/convert-to-buildable/convert-to-buildable.ts +++ b/packages/workspace/src/generators/convert-to-buildable/convert-to-buildable.ts @@ -8,7 +8,6 @@ import { formatFiles, Tree, updateJson, - WorkspaceConfiguration, writeJson, convertNxGenerator, } from '@nrwl/devkit'; @@ -19,8 +18,6 @@ import { join } from 'path'; function getExecutor(type: Schema['type']): string { switch (type) { - case 'angular': - return '@nrwl/angular:ng-packagr-lite'; case 'detox': case 'js': case 'web': @@ -59,21 +56,10 @@ export async function convertToBuildable(host: Tree, schema: Schema) { '' )}`; - const packageJson = readJsonFile('package.json'); - // Write the package.json the builder will need writeJson(host, join(configuration.root, 'package.json'), { name: projectImport, version: '0.0.1', - ...(schema.type === 'angular' - ? { - peerDependencies: { - '@angular/common': packageJson['dependencies']['@angular/common'], - '@angular/core': packageJson['dependencies']['@angular/core'], - }, - dependencies: { tslib: packageJson['dependencies']['tslib'] }, - } - : {}), }); // Write the build target to the projects configuration @@ -112,39 +98,6 @@ export async function convertToBuildable(host: Tree, schema: Schema) { ], }; break; - case 'angular': - buildTarget.options = { - project: `${configuration.root}/ng-package.json`, - }; - buildTarget.outputs = [`dist/${configuration.root}`]; - buildTarget.configurations = { - production: { - tsConfig: `${configuration.root}/tsconfig.lib.prod.json`, - }, - development: { - tsConfig: `${configuration.root}/tsconfig.lib.json`, - }, - }; - buildTarget.defaultConfiguration = 'production'; - break; - } - - if (schema.type === 'angular') { - writeJson(host, join(configuration.root, 'tsconfig.lib.prod.json'), { - extends: './tsconfig.lib.json', - compilerOptions: { - declarationMap: false, - }, - angularCompilerOptions: {}, - }); - - writeJson(host, join(configuration.root, 'ng-package.json'), { - $schema: '../../node_modules/ng-packagr/ng-package.schema.json', - dest: `../../dist/${configuration.root}`, - lib: { - entryFile: 'src/index.ts', - }, - }); } const isStandalone = isStandaloneProject(host, schema.project); diff --git a/packages/workspace/src/generators/convert-to-buildable/schema.d.ts b/packages/workspace/src/generators/convert-to-buildable/schema.d.ts index b9312cb881e1c..c24242aa36d29 100644 --- a/packages/workspace/src/generators/convert-to-buildable/schema.d.ts +++ b/packages/workspace/src/generators/convert-to-buildable/schema.d.ts @@ -1,5 +1,5 @@ export interface Schema { project: string; - type: 'js' | 'node' | 'nest' | 'next' | 'react' | 'angular' | 'detox' | 'web'; + type: 'js' | 'node' | 'nest' | 'next' | 'react' | 'detox' | 'web'; skipFormat?: boolean; } diff --git a/packages/workspace/src/generators/convert-to-buildable/schema.json b/packages/workspace/src/generators/convert-to-buildable/schema.json index 2b8065669d3e5..63b7d7c118812 100644 --- a/packages/workspace/src/generators/convert-to-buildable/schema.json +++ b/packages/workspace/src/generators/convert-to-buildable/schema.json @@ -23,7 +23,7 @@ "type": { "description": "The type of library that this is.", "type": "string", - "enum": ["js", "node", "nest", "next", "react", "angular", "detox", "web"] + "enum": ["js", "node", "nest", "next", "react", "detox", "web"] } } } From 592932e6def9cba586f9175d03f548bfbfcf557b Mon Sep 17 00:00:00 2001 From: jaybell Date: Wed, 9 Feb 2022 13:19:11 -0800 Subject: [PATCH 04/12] fix(core): update function for schematic target for convert buildable schematic --- packages/workspace/generators.json | 2 +- .../generators/convert-to-nx-project/convert-to-nx-project.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/workspace/generators.json b/packages/workspace/generators.json index b3fda5912ca51..5115a41166eb6 100644 --- a/packages/workspace/generators.json +++ b/packages/workspace/generators.json @@ -73,7 +73,7 @@ }, "convert-to-buildable": { - "factory": "./src/generators/convert-to-buildable/convert-to-buildable#convertToBuildable", + "factory": "./src/generators/convert-to-buildable/convert-to-buildable#convertToBuildableSchematic", "schema": "./src/generators/convert-to-buildable/schema.json", "description": "Convert an Nx library to be buildable" }, diff --git a/packages/workspace/src/generators/convert-to-nx-project/convert-to-nx-project.ts b/packages/workspace/src/generators/convert-to-nx-project/convert-to-nx-project.ts index d40f53fd47dec..dcc51263fb6b7 100644 --- a/packages/workspace/src/generators/convert-to-nx-project/convert-to-nx-project.ts +++ b/packages/workspace/src/generators/convert-to-nx-project/convert-to-nx-project.ts @@ -83,6 +83,6 @@ To upgrade change the version number at the top of ${getWorkspacePath( export default convertToNxProjectGenerator; -export const convertToNxProjectSchematic = convertNxGenerator( +export const convertToBuildableSchematic = convertNxGenerator( convertToNxProjectGenerator ); From 824946b22639cb32c33b7dea425afc89593af6bb Mon Sep 17 00:00:00 2001 From: jaybell Date: Wed, 9 Feb 2022 13:20:36 -0800 Subject: [PATCH 05/12] cleanup(core): use update project configuration function to set build target --- .../convert-to-buildable.ts | 27 ++++++------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/packages/workspace/src/generators/convert-to-buildable/convert-to-buildable.ts b/packages/workspace/src/generators/convert-to-buildable/convert-to-buildable.ts index f7cd33eaa6619..fd381c226a058 100644 --- a/packages/workspace/src/generators/convert-to-buildable/convert-to-buildable.ts +++ b/packages/workspace/src/generators/convert-to-buildable/convert-to-buildable.ts @@ -1,15 +1,13 @@ import { - getWorkspacePath, - isStandaloneProject, NxJsonConfiguration, readJsonFile, readProjectConfiguration, readWorkspaceConfiguration, formatFiles, Tree, - updateJson, writeJson, convertNxGenerator, + updateProjectConfiguration, } from '@nrwl/devkit'; import { Schema } from './schema'; @@ -100,22 +98,13 @@ export async function convertToBuildable(host: Tree, schema: Schema) { break; } - const isStandalone = isStandaloneProject(host, schema.project); - - if (isStandalone) { - writeJson(host, join(configuration.root, 'project.json'), { - ...configuration, - targets: { - ...configuration.targets, - build: buildTarget, - }, - }); - } else { - updateJson(host, getWorkspacePath(host), (value) => { - value.projects[schema.project].targets['build'] = buildTarget; - return value; - }); - } + updateProjectConfiguration(host, schema.project, { + ...configuration, + targets: { + ...configuration.targets, + build: buildTarget, + }, + }); if (!schema.skipFormat) { await formatFiles(host); From dccf9946fde6508c9772fe0c5fa152f7429df62d Mon Sep 17 00:00:00 2001 From: jaybell Date: Wed, 9 Feb 2022 13:23:40 -0800 Subject: [PATCH 06/12] cleanup(core): use correct logger in shared workspace util function --- .../convert-to-nx-project/convert-to-nx-project.ts | 12 +++--------- packages/workspace/src/utils/workspace.ts | 2 +- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/packages/workspace/src/generators/convert-to-nx-project/convert-to-nx-project.ts b/packages/workspace/src/generators/convert-to-nx-project/convert-to-nx-project.ts index dcc51263fb6b7..2f7e1d3a56ba4 100644 --- a/packages/workspace/src/generators/convert-to-nx-project/convert-to-nx-project.ts +++ b/packages/workspace/src/generators/convert-to-nx-project/convert-to-nx-project.ts @@ -18,6 +18,7 @@ import { import { Schema } from './schema'; import { getProjectConfigurationPath } from './utils/get-project-configuration-path'; +import { checkWorkspaceVersion } from '@nrwl/workspace/src/utils/workspace'; export const SCHEMA_OPTIONS_ARE_MUTUALLY_EXCLUSIVE = '--project and --all are mutually exclusive'; @@ -42,15 +43,8 @@ export async function validateSchema(schema: Schema) { export async function convertToNxProjectGenerator(host: Tree, schema: Schema) { const workspace = readWorkspaceConfiguration(host); - if (workspace.version < 2) { - logger.error(` -NX Only workspaces with version 2+ support project.json files. -To upgrade change the version number at the top of ${getWorkspacePath( - host - )} and run 'nx format'. -`); - throw new Error('v2+ Required'); - } + + checkWorkspaceVersion(workspace, host); await validateSchema(schema); diff --git a/packages/workspace/src/utils/workspace.ts b/packages/workspace/src/utils/workspace.ts index 34e88caba22a7..f117c282264bd 100644 --- a/packages/workspace/src/utils/workspace.ts +++ b/packages/workspace/src/utils/workspace.ts @@ -4,11 +4,11 @@ import { ProjectDefinition, TargetDefinition, } from '@angular-devkit/core/src/workspace'; -import { logger } from '@nrwl/tao/src/shared/logger'; import { getWorkspacePath, WorkspaceConfiguration, Tree as DevkitTree, + logger, } from '@nrwl/devkit'; export function checkWorkspaceVersion( From cf57394b5cd618f65cca46543390016792311210 Mon Sep 17 00:00:00 2001 From: jaybell Date: Wed, 9 Feb 2022 13:24:26 -0800 Subject: [PATCH 07/12] docs(core): add a more descriptive description for convert to buildable schematic --- .../workspace/src/generators/convert-to-buildable/schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/workspace/src/generators/convert-to-buildable/schema.json b/packages/workspace/src/generators/convert-to-buildable/schema.json index 63b7d7c118812..15868aab4498d 100644 --- a/packages/workspace/src/generators/convert-to-buildable/schema.json +++ b/packages/workspace/src/generators/convert-to-buildable/schema.json @@ -12,7 +12,7 @@ ], "properties": { "project": { - "description": "Project name", + "description": "Name of project to convert to buildable lib.", "type": "string" }, "skipFormat": { From 8bd2bcbac2ec30e3836169a93930d8b3ce8b66a0 Mon Sep 17 00:00:00 2001 From: jaybell Date: Wed, 9 Feb 2022 13:25:24 -0800 Subject: [PATCH 08/12] fix(core): do not allow converting apps to buildable --- .../generators/convert-to-buildable/convert-to-buildable.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/workspace/src/generators/convert-to-buildable/convert-to-buildable.ts b/packages/workspace/src/generators/convert-to-buildable/convert-to-buildable.ts index fd381c226a058..2a1d0052c6d91 100644 --- a/packages/workspace/src/generators/convert-to-buildable/convert-to-buildable.ts +++ b/packages/workspace/src/generators/convert-to-buildable/convert-to-buildable.ts @@ -36,6 +36,10 @@ export async function convertToBuildable(host: Tree, schema: Schema) { const configuration = readProjectConfiguration(host, schema.project); + if (configuration.projectType !== 'library') { + throw new Error(`${schema.project} is not a library.`); + } + const nxJson = readJsonFile('nx.json'); if (configuration.targets['build'] != null) { From a529847bd20dc6ee708b73ffaf666119a16aa69a Mon Sep 17 00:00:00 2001 From: jaybell Date: Wed, 9 Feb 2022 13:26:09 -0800 Subject: [PATCH 09/12] docs(core): update documentation --- docs/generated/api-workspace/generators/convert-to-buildable.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/generated/api-workspace/generators/convert-to-buildable.md b/docs/generated/api-workspace/generators/convert-to-buildable.md index e94d38ef34ed0..b550aa9c70981 100644 --- a/docs/generated/api-workspace/generators/convert-to-buildable.md +++ b/docs/generated/api-workspace/generators/convert-to-buildable.md @@ -41,7 +41,7 @@ nx g @nrwl/workspace:convert-to-buildable --project my-feature-lib Type: `string` -Project name +Name of project to convert to buildable lib. ### skipFormat From c729b0ac6403e0a6fba223f0f5404d2ad39836c9 Mon Sep 17 00:00:00 2001 From: jaybell Date: Wed, 9 Feb 2022 13:32:45 -0800 Subject: [PATCH 10/12] fix(core): export correct converted nx generator --- .../src/generators/convert-to-buildable/convert-to-buildable.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/workspace/src/generators/convert-to-buildable/convert-to-buildable.ts b/packages/workspace/src/generators/convert-to-buildable/convert-to-buildable.ts index 2a1d0052c6d91..50f8529994b17 100644 --- a/packages/workspace/src/generators/convert-to-buildable/convert-to-buildable.ts +++ b/packages/workspace/src/generators/convert-to-buildable/convert-to-buildable.ts @@ -117,5 +117,5 @@ export async function convertToBuildable(host: Tree, schema: Schema) { export default convertToBuildable; -export const convertToNxProjectSchematic = +export const convertToBuildableSchematic = convertNxGenerator(convertToBuildable); From bdf76d8a135ac2e9c97f2bb4fea64f4f5af678d8 Mon Sep 17 00:00:00 2001 From: jaybell Date: Wed, 9 Feb 2022 13:34:36 -0800 Subject: [PATCH 11/12] cleanup(core): remove workspace version check --- .../convert-to-buildable.ts | 6 ------ .../convert-to-nx-project.ts | 12 ++++++++--- packages/workspace/src/utils/workspace.ts | 21 ------------------- 3 files changed, 9 insertions(+), 30 deletions(-) diff --git a/packages/workspace/src/generators/convert-to-buildable/convert-to-buildable.ts b/packages/workspace/src/generators/convert-to-buildable/convert-to-buildable.ts index 50f8529994b17..d6e4ffe83e60c 100644 --- a/packages/workspace/src/generators/convert-to-buildable/convert-to-buildable.ts +++ b/packages/workspace/src/generators/convert-to-buildable/convert-to-buildable.ts @@ -2,7 +2,6 @@ import { NxJsonConfiguration, readJsonFile, readProjectConfiguration, - readWorkspaceConfiguration, formatFiles, Tree, writeJson, @@ -11,7 +10,6 @@ import { } from '@nrwl/devkit'; import { Schema } from './schema'; -import { checkWorkspaceVersion } from '@nrwl/workspace/src/utils/workspace'; import { join } from 'path'; function getExecutor(type: Schema['type']): string { @@ -30,10 +28,6 @@ function getExecutor(type: Schema['type']): string { } export async function convertToBuildable(host: Tree, schema: Schema) { - const workspace = readWorkspaceConfiguration(host); - - checkWorkspaceVersion(workspace, host); - const configuration = readProjectConfiguration(host, schema.project); if (configuration.projectType !== 'library') { diff --git a/packages/workspace/src/generators/convert-to-nx-project/convert-to-nx-project.ts b/packages/workspace/src/generators/convert-to-nx-project/convert-to-nx-project.ts index 2f7e1d3a56ba4..dcc51263fb6b7 100644 --- a/packages/workspace/src/generators/convert-to-nx-project/convert-to-nx-project.ts +++ b/packages/workspace/src/generators/convert-to-nx-project/convert-to-nx-project.ts @@ -18,7 +18,6 @@ import { import { Schema } from './schema'; import { getProjectConfigurationPath } from './utils/get-project-configuration-path'; -import { checkWorkspaceVersion } from '@nrwl/workspace/src/utils/workspace'; export const SCHEMA_OPTIONS_ARE_MUTUALLY_EXCLUSIVE = '--project and --all are mutually exclusive'; @@ -43,8 +42,15 @@ export async function validateSchema(schema: Schema) { export async function convertToNxProjectGenerator(host: Tree, schema: Schema) { const workspace = readWorkspaceConfiguration(host); - - checkWorkspaceVersion(workspace, host); + if (workspace.version < 2) { + logger.error(` +NX Only workspaces with version 2+ support project.json files. +To upgrade change the version number at the top of ${getWorkspacePath( + host + )} and run 'nx format'. +`); + throw new Error('v2+ Required'); + } await validateSchema(schema); diff --git a/packages/workspace/src/utils/workspace.ts b/packages/workspace/src/utils/workspace.ts index f117c282264bd..7961c776792a2 100644 --- a/packages/workspace/src/utils/workspace.ts +++ b/packages/workspace/src/utils/workspace.ts @@ -4,27 +4,6 @@ import { ProjectDefinition, TargetDefinition, } from '@angular-devkit/core/src/workspace'; -import { - getWorkspacePath, - WorkspaceConfiguration, - Tree as DevkitTree, - logger, -} from '@nrwl/devkit'; - -export function checkWorkspaceVersion( - workspace: WorkspaceConfiguration, - host: DevkitTree -) { - if (workspace.version < 2) { - logger.error(` -NX Only workspaces with version 2+ support project.json files. -To upgrade change the version number at the top of ${getWorkspacePath( - host - )} and run 'nx format'. -`); - throw new Error('v2+ Required'); - } -} function createHost(tree: Tree): workspaces.WorkspaceHost { return { From b50b692dfbecda1dd3d24567cc5534677902ea08 Mon Sep 17 00:00:00 2001 From: jaybell Date: Wed, 9 Feb 2022 13:37:19 -0800 Subject: [PATCH 12/12] fix(core): rename exported function from other schematic back previous export --- .../generators/convert-to-nx-project/convert-to-nx-project.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/workspace/src/generators/convert-to-nx-project/convert-to-nx-project.ts b/packages/workspace/src/generators/convert-to-nx-project/convert-to-nx-project.ts index dcc51263fb6b7..d40f53fd47dec 100644 --- a/packages/workspace/src/generators/convert-to-nx-project/convert-to-nx-project.ts +++ b/packages/workspace/src/generators/convert-to-nx-project/convert-to-nx-project.ts @@ -83,6 +83,6 @@ To upgrade change the version number at the top of ${getWorkspacePath( export default convertToNxProjectGenerator; -export const convertToBuildableSchematic = convertNxGenerator( +export const convertToNxProjectSchematic = convertNxGenerator( convertToNxProjectGenerator );