From e10aa455eab24a5de0ea99078c83c0fa39d74afe Mon Sep 17 00:00:00 2001 From: Katerina Skroumpelou Date: Tue, 8 Sep 2020 18:36:24 +0300 Subject: [PATCH] feat(node): added rootDir flag when generating node/lib (#3659) --- docs/angular/api-node/schematics/library.md | 8 ++++++++ docs/node/api-node/schematics/library.md | 8 ++++++++ docs/react/api-node/schematics/library.md | 8 ++++++++ package.json | 2 +- packages/node/src/builders/package/package.impl.ts | 1 + .../package/utils/compile-typescript-files.ts | 1 + .../node/src/schematics/library/library.spec.ts | 13 +++++++++++++ packages/node/src/schematics/library/library.ts | 4 ++++ packages/node/src/schematics/library/schema.d.ts | 1 + packages/node/src/schematics/library/schema.json | 5 +++++ 10 files changed, 50 insertions(+), 1 deletion(-) diff --git a/docs/angular/api-node/schematics/library.md b/docs/angular/api-node/schematics/library.md index 34bc00a7b0..e429ca41b2 100644 --- a/docs/angular/api-node/schematics/library.md +++ b/docs/angular/api-node/schematics/library.md @@ -80,6 +80,14 @@ Type: `boolean` Create a publishable library. +### rootDir + +Alias(es): srcRootForCompilationRoot + +Type: `string` + +Sets the rootDir for TypeScript compilation. When not defined, it uses the project's root property, or srcRootForCompilationRoot if it is defined. + ### skipFormat Default: `false` diff --git a/docs/node/api-node/schematics/library.md b/docs/node/api-node/schematics/library.md index 24867910f1..5fc3b9d683 100644 --- a/docs/node/api-node/schematics/library.md +++ b/docs/node/api-node/schematics/library.md @@ -80,6 +80,14 @@ Type: `boolean` Create a publishable library. +### rootDir + +Alias(es): srcRootForCompilationRoot + +Type: `string` + +Sets the rootDir for TypeScript compilation. When not defined, it uses the project's root property, or srcRootForCompilationRoot if it is defined. + ### skipFormat Default: `false` diff --git a/docs/react/api-node/schematics/library.md b/docs/react/api-node/schematics/library.md index 24867910f1..5fc3b9d683 100644 --- a/docs/react/api-node/schematics/library.md +++ b/docs/react/api-node/schematics/library.md @@ -80,6 +80,14 @@ Type: `boolean` Create a publishable library. +### rootDir + +Alias(es): srcRootForCompilationRoot + +Type: `string` + +Sets the rootDir for TypeScript compilation. When not defined, it uses the project's root property, or srcRootForCompilationRoot if it is defined. + ### skipFormat Default: `false` diff --git a/package.json b/package.json index d0536c88a2..85a944ebad 100644 --- a/package.json +++ b/package.json @@ -249,4 +249,4 @@ "pre-push": "yarn checkcommit && yarn documentation && pretty-quick --check" } } -} +} \ No newline at end of file diff --git a/packages/node/src/builders/package/package.impl.ts b/packages/node/src/builders/package/package.impl.ts index c84ede3ae4..a7885093b8 100644 --- a/packages/node/src/builders/package/package.impl.ts +++ b/packages/node/src/builders/package/package.impl.ts @@ -19,6 +19,7 @@ export function runNodePackageBuilder( ) { const projGraph = createProjectGraph(); const libRoot = projGraph.nodes[context.target.project].data.root; + const normalizedOptions = normalizeOptions(options, context, libRoot); const { target, dependencies } = calculateProjectDependencies( projGraph, diff --git a/packages/node/src/builders/package/utils/compile-typescript-files.ts b/packages/node/src/builders/package/utils/compile-typescript-files.ts index e7860f36a2..20fb4c9bab 100644 --- a/packages/node/src/builders/package/utils/compile-typescript-files.ts +++ b/packages/node/src/builders/package/utils/compile-typescript-files.ts @@ -70,6 +70,7 @@ export default function compileTypeScriptFiles( const tsconfig = readTsConfig(tsConfigPath); tsconfig.options.outDir = options.normalizedOutputPath; + if (options.srcRootForCompilationRoot) { tsconfig.options.rootDir = options.srcRootForCompilationRoot; } else { diff --git a/packages/node/src/schematics/library/library.spec.ts b/packages/node/src/schematics/library/library.spec.ts index 0c7e406505..9916fc3ef8 100644 --- a/packages/node/src/schematics/library/library.spec.ts +++ b/packages/node/src/schematics/library/library.spec.ts @@ -37,6 +37,19 @@ describe('lib', () => { }); }); + it('adds srcRootForCompilationRoot in workspace.json', async () => { + const tree = await runSchematic( + 'lib', + { name: 'myLib', rootDir: './src', buildable: true }, + appTree + ); + const workspaceJson = readJsonInTree(tree, '/workspace.json'); + expect( + workspaceJson.projects['my-lib'].architect.build.options + .srcRootForCompilationRoot + ).toEqual('./src'); + }); + it('should update nx.json', async () => { const tree = await runSchematic( 'lib', diff --git a/packages/node/src/schematics/library/library.ts b/packages/node/src/schematics/library/library.ts index 6650698833..baef95527d 100644 --- a/packages/node/src/schematics/library/library.ts +++ b/packages/node/src/schematics/library/library.ts @@ -126,6 +126,10 @@ function addProject(options: NormalizedSchema): Rule { assets: [`${options.projectRoot}/*.md`], }, }; + + if (options.rootDir) { + architect.build.options.srcRootForCompilationRoot = options.rootDir; + } } return json; }); diff --git a/packages/node/src/schematics/library/schema.d.ts b/packages/node/src/schematics/library/schema.d.ts index c8531f9aa2..623cd6409f 100644 --- a/packages/node/src/schematics/library/schema.d.ts +++ b/packages/node/src/schematics/library/schema.d.ts @@ -12,4 +12,5 @@ export interface Schema { publishable?: boolean; importPath?: string; testEnvironment: 'jsdom' | 'node'; + rootDir?: string; } diff --git a/packages/node/src/schematics/library/schema.json b/packages/node/src/schematics/library/schema.json index 6d494d23de..d9de90e458 100644 --- a/packages/node/src/schematics/library/schema.json +++ b/packages/node/src/schematics/library/schema.json @@ -64,6 +64,11 @@ "type": "string", "description": "The library name used to import it, like @myorg/my-awesome-lib. Must be a valid npm name." }, + "rootDir": { + "type": "string", + "alias": "srcRootForCompilationRoot", + "description": "Sets the rootDir for TypeScript compilation. When not defined, it uses the project's root property, or srcRootForCompilationRoot if it is defined." + }, "testEnvironment": { "type": "string", "enum": ["jsdom", "node"],