From 208e69b4d724d3a43721ed3d779d2b52879e41ac Mon Sep 17 00:00:00 2001 From: Sumit Arora Date: Thu, 20 Apr 2017 11:03:45 -0400 Subject: [PATCH 1/2] fix(@angular/cli): fix issue of folder getting generated on dry run --- .../@angular/cli/blueprints/class/index.ts | 3 ++- .../@angular/cli/blueprints/component/index.ts | 2 +- .../@angular/cli/blueprints/directive/index.ts | 2 +- packages/@angular/cli/blueprints/enum/index.ts | 2 +- .../@angular/cli/blueprints/guard/index.ts | 2 +- .../@angular/cli/blueprints/interface/index.ts | 2 +- .../@angular/cli/blueprints/module/index.ts | 2 +- packages/@angular/cli/blueprints/pipe/index.ts | 2 +- .../@angular/cli/blueprints/service/index.ts | 2 +- .../cli/ember-cli/lib/models/blueprint.js | 2 +- .../cli/utilities/dynamic-path-parser.ts | 7 +++++-- .../cli/utilities/resolve-module-file.ts | 2 +- tests/acceptance/dynamic-path-parser.spec.js | 18 +++++++++--------- 13 files changed, 26 insertions(+), 22 deletions(-) diff --git a/packages/@angular/cli/blueprints/class/index.ts b/packages/@angular/cli/blueprints/class/index.ts index 60190c15c700..9b583debd78e 100644 --- a/packages/@angular/cli/blueprints/class/index.ts +++ b/packages/@angular/cli/blueprints/class/index.ts @@ -27,7 +27,8 @@ export default Blueprint.extend({ normalizeEntityName: function (entityName: string) { const appConfig = getAppFromConfig(this.options.app); - const parsedPath = dynamicPathParser(this.project, entityName.split('.')[0], appConfig); + const parsedPath = + dynamicPathParser(this.project, entityName.split('.')[0], appConfig, this.options.dryRun); this.dynamicPath = parsedPath; return parsedPath.name; diff --git a/packages/@angular/cli/blueprints/component/index.ts b/packages/@angular/cli/blueprints/component/index.ts index 1a57f81f945e..b33912b31e3e 100644 --- a/packages/@angular/cli/blueprints/component/index.ts +++ b/packages/@angular/cli/blueprints/component/index.ts @@ -125,7 +125,7 @@ export default Blueprint.extend({ normalizeEntityName: function (entityName: string) { const appConfig = getAppFromConfig(this.options.app); - const parsedPath = dynamicPathParser(this.project, entityName, appConfig); + const parsedPath = dynamicPathParser(this.project, entityName, appConfig, this.options.dryRun); this.dynamicPath = parsedPath; diff --git a/packages/@angular/cli/blueprints/directive/index.ts b/packages/@angular/cli/blueprints/directive/index.ts index 9c843e12f1da..f0f351d5e0cd 100644 --- a/packages/@angular/cli/blueprints/directive/index.ts +++ b/packages/@angular/cli/blueprints/directive/index.ts @@ -78,7 +78,7 @@ export default Blueprint.extend({ normalizeEntityName: function (entityName: string) { const appConfig = getAppFromConfig(this.options.app); - const parsedPath = dynamicPathParser(this.project, entityName, appConfig); + const parsedPath = dynamicPathParser(this.project, entityName, appConfig, this.options.dryRun); this.dynamicPath = parsedPath; diff --git a/packages/@angular/cli/blueprints/enum/index.ts b/packages/@angular/cli/blueprints/enum/index.ts index 6d5726d385f4..f7229f1e43fc 100644 --- a/packages/@angular/cli/blueprints/enum/index.ts +++ b/packages/@angular/cli/blueprints/enum/index.ts @@ -20,7 +20,7 @@ export default Blueprint.extend({ normalizeEntityName: function (entityName: string) { const appConfig = getAppFromConfig(this.options.app); - const parsedPath = dynamicPathParser(this.project, entityName, appConfig); + const parsedPath = dynamicPathParser(this.project, entityName, appConfig, this.options.dryRun); this.dynamicPath = parsedPath; return parsedPath.name; diff --git a/packages/@angular/cli/blueprints/guard/index.ts b/packages/@angular/cli/blueprints/guard/index.ts index 5b320f8fab9a..b9141b460b84 100644 --- a/packages/@angular/cli/blueprints/guard/index.ts +++ b/packages/@angular/cli/blueprints/guard/index.ts @@ -46,7 +46,7 @@ export default Blueprint.extend({ normalizeEntityName: function (entityName: string) { const appConfig = getAppFromConfig(this.options.app); - const parsedPath = dynamicPathParser(this.project, entityName, appConfig); + const parsedPath = dynamicPathParser(this.project, entityName, appConfig, this.options.dryRun); this.dynamicPath = parsedPath; return parsedPath.name; diff --git a/packages/@angular/cli/blueprints/interface/index.ts b/packages/@angular/cli/blueprints/interface/index.ts index f947bde7bd62..8069c1206afb 100644 --- a/packages/@angular/cli/blueprints/interface/index.ts +++ b/packages/@angular/cli/blueprints/interface/index.ts @@ -25,7 +25,7 @@ export default Blueprint.extend({ normalizeEntityName: function (entityName: string) { const appConfig = getAppFromConfig(this.options.app); - const parsedPath = dynamicPathParser(this.project, entityName, appConfig); + const parsedPath = dynamicPathParser(this.project, entityName, appConfig, this.options.dryRun); this.dynamicPath = parsedPath; return parsedPath.name; diff --git a/packages/@angular/cli/blueprints/module/index.ts b/packages/@angular/cli/blueprints/module/index.ts index 8bc12c897e8d..b2365f7d32cb 100644 --- a/packages/@angular/cli/blueprints/module/index.ts +++ b/packages/@angular/cli/blueprints/module/index.ts @@ -58,7 +58,7 @@ export default Blueprint.extend({ normalizeEntityName: function (entityName: string) { this.entityName = entityName; const appConfig = getAppFromConfig(this.options.app); - const parsedPath = dynamicPathParser(this.project, entityName, appConfig); + const parsedPath = dynamicPathParser(this.project, entityName, appConfig, this.options.dryRun); this.dynamicPath = parsedPath; return parsedPath.name; diff --git a/packages/@angular/cli/blueprints/pipe/index.ts b/packages/@angular/cli/blueprints/pipe/index.ts index c2741397495b..c6e1efdeb5ed 100644 --- a/packages/@angular/cli/blueprints/pipe/index.ts +++ b/packages/@angular/cli/blueprints/pipe/index.ts @@ -72,7 +72,7 @@ export default Blueprint.extend({ normalizeEntityName: function (entityName: string) { const appConfig = getAppFromConfig(this.options.app); - const parsedPath = dynamicPathParser(this.project, entityName, appConfig); + const parsedPath = dynamicPathParser(this.project, entityName, appConfig, this.options.dryRun); this.dynamicPath = parsedPath; return parsedPath.name; diff --git a/packages/@angular/cli/blueprints/service/index.ts b/packages/@angular/cli/blueprints/service/index.ts index 8cca6ffb695d..1fe849b1fbab 100644 --- a/packages/@angular/cli/blueprints/service/index.ts +++ b/packages/@angular/cli/blueprints/service/index.ts @@ -51,7 +51,7 @@ export default Blueprint.extend({ normalizeEntityName: function (entityName: string) { const appConfig = getAppFromConfig(this.options.app); - const parsedPath = dynamicPathParser(this.project, entityName, appConfig); + const parsedPath = dynamicPathParser(this.project, entityName, appConfig, this.options.dryRun); this.dynamicPath = parsedPath; return parsedPath.name; diff --git a/packages/@angular/cli/ember-cli/lib/models/blueprint.js b/packages/@angular/cli/ember-cli/lib/models/blueprint.js index 8b20725f8307..ebef14b32c16 100644 --- a/packages/@angular/cli/ember-cli/lib/models/blueprint.js +++ b/packages/@angular/cli/ember-cli/lib/models/blueprint.js @@ -517,7 +517,7 @@ Blueprint.prototype.install = function(options) { ui.writeLine(chalk.yellow('You specified the dry-run flag, so no' + ' changes will be written.')); } - + this._normalizeEntityName(options.entity); this._checkForPod(options.verbose); this._checkInRepoAddonExists(options.inRepoAddon); diff --git a/packages/@angular/cli/utilities/dynamic-path-parser.ts b/packages/@angular/cli/utilities/dynamic-path-parser.ts index 39ecf1486807..06aecc19f643 100644 --- a/packages/@angular/cli/utilities/dynamic-path-parser.ts +++ b/packages/@angular/cli/utilities/dynamic-path-parser.ts @@ -3,7 +3,8 @@ import * as process from 'process'; import * as fs from 'fs-extra'; const stringUtils = require('ember-cli-string-utils'); -export function dynamicPathParser(project: any, entityName: string, appConfig: any) { +export function dynamicPathParser(project: any, entityName: string, appConfig: any, + dryRun: boolean) { const projectRoot = project.root; const sourceDir = appConfig.root; const appRoot = path.join(sourceDir, 'app'); @@ -38,7 +39,9 @@ export function dynamicPathParser(project: any, entityName: string, appConfig: a // Folder not found, create it, and return it const dasherizedPart = stringUtils.dasherize(part); const dasherizedDirName = path.join(tempPath, dasherizedPart); - fs.mkdirpSync(dasherizedDirName); + if (!dryRun) { + fs.mkdirpSync(dasherizedDirName); + } return dasherizedDirName; }, parsedOutputPath.root); diff --git a/packages/@angular/cli/utilities/resolve-module-file.ts b/packages/@angular/cli/utilities/resolve-module-file.ts index 87e5cc9f4ccb..25bbe3bdc7c8 100644 --- a/packages/@angular/cli/utilities/resolve-module-file.ts +++ b/packages/@angular/cli/utilities/resolve-module-file.ts @@ -41,7 +41,7 @@ export function resolveModulePath( } function buildFullPath(project: any, relativeModulePath: string, appConfig: any, projectRoot: any) { - const parsedPath = dynamicPathParser(project, relativeModulePath, appConfig); + const parsedPath = dynamicPathParser(project, relativeModulePath, appConfig, false); const fullModulePath = path.join(projectRoot, parsedPath.dir, parsedPath.base); return fullModulePath; diff --git a/tests/acceptance/dynamic-path-parser.spec.js b/tests/acceptance/dynamic-path-parser.spec.js index 10111833ba30..fb1526074fc4 100644 --- a/tests/acceptance/dynamic-path-parser.spec.js +++ b/tests/acceptance/dynamic-path-parser.spec.js @@ -42,28 +42,28 @@ describe('dynamic path parser', () => { it('parse from proj root dir', () => { process.env.PWD = project.root; - var result = dynamicPathParser(project, entityName, appConfig); + var result = dynamicPathParser(project, entityName, appConfig, false); expect(result.dir).to.equal(appDir); expect(result.name).to.equal(entityName); }); it('parse from proj src dir', () => { process.env.PWD = path.join(project.root, 'src'); - var result = dynamicPathParser(project, entityName, appConfig); + var result = dynamicPathParser(project, entityName, appConfig, false); expect(result.dir).to.equal(appDir); expect(result.name).to.equal(entityName); }); it(`parse from proj src${path.sep}client dir`, () => { process.env.PWD = path.join(project.root, 'src', 'client'); - var result = dynamicPathParser(project, entityName, appConfig); + var result = dynamicPathParser(project, entityName, appConfig, false); expect(result.dir).to.equal(appDir); expect(result.name).to.equal(entityName); }); it(`parse from proj src${path.sep}client${path.sep}app dir`, () => { process.env.PWD = path.join(project.root, 'src', 'client', 'app'); - var result = dynamicPathParser(project, entityName, appConfig); + var result = dynamicPathParser(project, entityName, appConfig, false); expect(result.dir).to.equal(appDir); expect(result.name).to.equal(entityName); }); @@ -82,7 +82,7 @@ describe('dynamic path parser', () => { }; mockFs(mockFolder); process.env.PWD = path.join(project.root, 'src', 'app', 'child-dir'); - var result = dynamicPathParser(project, entityName, appConfig); + var result = dynamicPathParser(project, entityName, appConfig, false); expect(result.dir).to.equal(`${appDir}${path.sep}child-dir`); expect(result.name).to.equal(entityName); }); @@ -100,7 +100,7 @@ describe('dynamic path parser', () => { }; mockFs(mockFolder); process.env.PWD = path.join(project.root, 'src', 'app', 'child-dir'); - var result = dynamicPathParser(project, '..' + path.sep + entityName, appConfig); + var result = dynamicPathParser(project, '..' + path.sep + entityName, appConfig, false); expect(result.dir).to.equal(appDir); expect(result.name).to.equal(entityName); }); @@ -121,7 +121,7 @@ describe('dynamic path parser', () => { }; mockFs(mockFolder); process.env.PWD = path.join(project.root, 'src', 'app', 'child-dir', 'grand-child-dir'); - var result = dynamicPathParser(project, '..' + path.sep + entityName, appConfig); + var result = dynamicPathParser(project, '..' + path.sep + entityName, appConfig, false); expect(result.dir).to.equal(`${appDir}${path.sep}child-dir`); expect(result.name).to.equal(entityName); }); @@ -137,14 +137,14 @@ describe('dynamic path parser', () => { }; mockFs(mockFolder); process.env.PWD = path.join(project.root, 'src', 'app', 'my-route'); - var result = dynamicPathParser(project, entityName, appConfig); + var result = dynamicPathParser(project, entityName, appConfig, false); expect(result.dir).to.equal(`${appDir}${path.sep}+my-route`); expect(result.name).to.equal(entityName); }); it('create new dirs as dasherized', () => { process.env.PWD = project.root; - var result = dynamicPathParser(project, path.join('NewDir', entityName), appConfig); + var result = dynamicPathParser(project, path.join('NewDir', entityName), appConfig, false); expect(result.dir).to.equal(`${appDir}${path.sep}new-dir`); expect(result.name).to.equal(entityName); }); From 672b5f5608d6074a7954b1d640e2f840fd5a0b51 Mon Sep 17 00:00:00 2001 From: Sumit Arora Date: Wed, 3 May 2017 17:55:26 -0400 Subject: [PATCH 2/2] fix(@angular/cli): adding dynamic parser options --- .../@angular/cli/blueprints/class/index.ts | 12 +++- .../cli/blueprints/component/index.ts | 10 ++- .../cli/blueprints/directive/index.ts | 10 ++- .../@angular/cli/blueprints/enum/index.ts | 10 ++- .../@angular/cli/blueprints/guard/index.ts | 10 ++- .../cli/blueprints/interface/index.ts | 10 ++- .../@angular/cli/blueprints/module/index.ts | 10 ++- .../@angular/cli/blueprints/pipe/index.ts | 10 ++- .../@angular/cli/blueprints/service/index.ts | 10 ++- .../cli/utilities/dynamic-path-parser.ts | 26 ++++--- .../cli/utilities/resolve-module-file.ts | 10 ++- tests/acceptance/dynamic-path-parser.spec.js | 72 ++++++++++++++++--- 12 files changed, 160 insertions(+), 40 deletions(-) diff --git a/packages/@angular/cli/blueprints/class/index.ts b/packages/@angular/cli/blueprints/class/index.ts index 9b583debd78e..1b65e1104ed4 100644 --- a/packages/@angular/cli/blueprints/class/index.ts +++ b/packages/@angular/cli/blueprints/class/index.ts @@ -1,5 +1,5 @@ import {getAppFromConfig} from '../../utilities/app-utils'; -import {dynamicPathParser} from '../../utilities/dynamic-path-parser'; +import {dynamicPathParser, DynamicPathOptions} from '../../utilities/dynamic-path-parser'; import {CliConfig} from '../../models/config'; const stringUtils = require('ember-cli-string-utils'); @@ -27,8 +27,14 @@ export default Blueprint.extend({ normalizeEntityName: function (entityName: string) { const appConfig = getAppFromConfig(this.options.app); - const parsedPath = - dynamicPathParser(this.project, entityName.split('.')[0], appConfig, this.options.dryRun); + const dynamicPathOptions: DynamicPathOptions = { + project: this.project, + entityName: entityName.split('.')[0], + appConfig, + dryRun: this.options.dryRun + }; + + const parsedPath = dynamicPathParser(dynamicPathOptions); this.dynamicPath = parsedPath; return parsedPath.name; diff --git a/packages/@angular/cli/blueprints/component/index.ts b/packages/@angular/cli/blueprints/component/index.ts index b33912b31e3e..a7d311b74f13 100644 --- a/packages/@angular/cli/blueprints/component/index.ts +++ b/packages/@angular/cli/blueprints/component/index.ts @@ -5,7 +5,7 @@ import { oneLine } from 'common-tags'; import { NodeHost } from '../../lib/ast-tools'; import { CliConfig } from '../../models/config'; import { getAppFromConfig } from '../../utilities/app-utils'; -import { dynamicPathParser } from '../../utilities/dynamic-path-parser'; +import { dynamicPathParser, DynamicPathOptions } from '../../utilities/dynamic-path-parser'; import { resolveModulePath } from '../../utilities/resolve-module-file'; const Blueprint = require('../../ember-cli/lib/models/blueprint'); @@ -125,7 +125,13 @@ export default Blueprint.extend({ normalizeEntityName: function (entityName: string) { const appConfig = getAppFromConfig(this.options.app); - const parsedPath = dynamicPathParser(this.project, entityName, appConfig, this.options.dryRun); + const dynamicPathOptions: DynamicPathOptions = { + project: this.project, + entityName, + appConfig, + dryRun: this.options.dryRun + }; + const parsedPath = dynamicPathParser(dynamicPathOptions); this.dynamicPath = parsedPath; diff --git a/packages/@angular/cli/blueprints/directive/index.ts b/packages/@angular/cli/blueprints/directive/index.ts index f0f351d5e0cd..d5c9bf0f0b79 100644 --- a/packages/@angular/cli/blueprints/directive/index.ts +++ b/packages/@angular/cli/blueprints/directive/index.ts @@ -5,7 +5,7 @@ import { NodeHost } from '../../lib/ast-tools'; import { CliConfig } from '../../models/config'; import { getAppFromConfig } from '../../utilities/app-utils'; import { resolveModulePath } from '../../utilities/resolve-module-file'; -import { dynamicPathParser } from '../../utilities/dynamic-path-parser'; +import { dynamicPathParser, DynamicPathOptions } from '../../utilities/dynamic-path-parser'; const stringUtils = require('ember-cli-string-utils'); const astUtils = require('../../utilities/ast-utils'); @@ -78,7 +78,13 @@ export default Blueprint.extend({ normalizeEntityName: function (entityName: string) { const appConfig = getAppFromConfig(this.options.app); - const parsedPath = dynamicPathParser(this.project, entityName, appConfig, this.options.dryRun); + const dynamicPathOptions: DynamicPathOptions = { + project: this.project, + entityName, + appConfig, + dryRun: this.options.dryRun + }; + const parsedPath = dynamicPathParser(dynamicPathOptions); this.dynamicPath = parsedPath; diff --git a/packages/@angular/cli/blueprints/enum/index.ts b/packages/@angular/cli/blueprints/enum/index.ts index f7229f1e43fc..9d5ed0d4bce6 100644 --- a/packages/@angular/cli/blueprints/enum/index.ts +++ b/packages/@angular/cli/blueprints/enum/index.ts @@ -1,5 +1,5 @@ import {getAppFromConfig} from '../../utilities/app-utils'; -import {dynamicPathParser} from '../../utilities/dynamic-path-parser'; +import {dynamicPathParser, DynamicPathOptions} from '../../utilities/dynamic-path-parser'; const stringUtils = require('ember-cli-string-utils'); const Blueprint = require('../../ember-cli/lib/models/blueprint'); @@ -20,7 +20,13 @@ export default Blueprint.extend({ normalizeEntityName: function (entityName: string) { const appConfig = getAppFromConfig(this.options.app); - const parsedPath = dynamicPathParser(this.project, entityName, appConfig, this.options.dryRun); + const dynamicPathOptions: DynamicPathOptions = { + project: this.project, + entityName, + appConfig, + dryRun: this.options.dryRun + }; + const parsedPath = dynamicPathParser(dynamicPathOptions); this.dynamicPath = parsedPath; return parsedPath.name; diff --git a/packages/@angular/cli/blueprints/guard/index.ts b/packages/@angular/cli/blueprints/guard/index.ts index b9141b460b84..40dbb695bdb9 100644 --- a/packages/@angular/cli/blueprints/guard/index.ts +++ b/packages/@angular/cli/blueprints/guard/index.ts @@ -3,7 +3,7 @@ import * as path from 'path'; import { oneLine } from 'common-tags'; import { NodeHost } from '../../lib/ast-tools'; import { CliConfig } from '../../models/config'; -import { dynamicPathParser } from '../../utilities/dynamic-path-parser'; +import { dynamicPathParser, DynamicPathOptions } from '../../utilities/dynamic-path-parser'; import { getAppFromConfig } from '../../utilities/app-utils'; import { resolveModulePath } from '../../utilities/resolve-module-file'; @@ -46,7 +46,13 @@ export default Blueprint.extend({ normalizeEntityName: function (entityName: string) { const appConfig = getAppFromConfig(this.options.app); - const parsedPath = dynamicPathParser(this.project, entityName, appConfig, this.options.dryRun); + const dynamicPathOptions: DynamicPathOptions = { + project: this.project, + entityName, + appConfig, + dryRun: this.options.dryRun + }; + const parsedPath = dynamicPathParser(dynamicPathOptions); this.dynamicPath = parsedPath; return parsedPath.name; diff --git a/packages/@angular/cli/blueprints/interface/index.ts b/packages/@angular/cli/blueprints/interface/index.ts index 8069c1206afb..dd84787a638f 100644 --- a/packages/@angular/cli/blueprints/interface/index.ts +++ b/packages/@angular/cli/blueprints/interface/index.ts @@ -1,6 +1,6 @@ import {CliConfig} from '../../models/config'; import {getAppFromConfig} from '../../utilities/app-utils'; -import {dynamicPathParser} from '../../utilities/dynamic-path-parser'; +import {dynamicPathParser, DynamicPathOptions} from '../../utilities/dynamic-path-parser'; const stringUtils = require('ember-cli-string-utils'); const Blueprint = require('../../ember-cli/lib/models/blueprint'); @@ -25,7 +25,13 @@ export default Blueprint.extend({ normalizeEntityName: function (entityName: string) { const appConfig = getAppFromConfig(this.options.app); - const parsedPath = dynamicPathParser(this.project, entityName, appConfig, this.options.dryRun); + const dynamicPathOptions: DynamicPathOptions = { + project: this.project, + entityName, + appConfig, + dryRun: this.options.dryRun + }; + const parsedPath = dynamicPathParser(dynamicPathOptions); this.dynamicPath = parsedPath; return parsedPath.name; diff --git a/packages/@angular/cli/blueprints/module/index.ts b/packages/@angular/cli/blueprints/module/index.ts index b2365f7d32cb..9b5d2d46cbd6 100644 --- a/packages/@angular/cli/blueprints/module/index.ts +++ b/packages/@angular/cli/blueprints/module/index.ts @@ -5,7 +5,7 @@ import { NodeHost } from '../../lib/ast-tools'; import { CliConfig } from '../../models/config'; import { getAppFromConfig } from '../../utilities/app-utils'; import { resolveModulePath } from '../../utilities/resolve-module-file'; -import { dynamicPathParser } from '../../utilities/dynamic-path-parser'; +import { dynamicPathParser, DynamicPathOptions } from '../../utilities/dynamic-path-parser'; const stringUtils = require('ember-cli-string-utils'); const Blueprint = require('../../ember-cli/lib/models/blueprint'); @@ -58,7 +58,13 @@ export default Blueprint.extend({ normalizeEntityName: function (entityName: string) { this.entityName = entityName; const appConfig = getAppFromConfig(this.options.app); - const parsedPath = dynamicPathParser(this.project, entityName, appConfig, this.options.dryRun); + const dynamicPathOptions: DynamicPathOptions = { + project: this.project, + entityName, + appConfig, + dryRun: this.options.dryRun + }; + const parsedPath = dynamicPathParser(dynamicPathOptions); this.dynamicPath = parsedPath; return parsedPath.name; diff --git a/packages/@angular/cli/blueprints/pipe/index.ts b/packages/@angular/cli/blueprints/pipe/index.ts index c6e1efdeb5ed..b8e7242bbd79 100644 --- a/packages/@angular/cli/blueprints/pipe/index.ts +++ b/packages/@angular/cli/blueprints/pipe/index.ts @@ -2,7 +2,7 @@ import * as chalk from 'chalk'; import * as path from 'path'; import { NodeHost } from '../../lib/ast-tools'; import { CliConfig } from '../../models/config'; -import { dynamicPathParser } from '../../utilities/dynamic-path-parser'; +import { dynamicPathParser, DynamicPathOptions } from '../../utilities/dynamic-path-parser'; import { getAppFromConfig } from '../../utilities/app-utils'; import { resolveModulePath } from '../../utilities/resolve-module-file'; @@ -72,7 +72,13 @@ export default Blueprint.extend({ normalizeEntityName: function (entityName: string) { const appConfig = getAppFromConfig(this.options.app); - const parsedPath = dynamicPathParser(this.project, entityName, appConfig, this.options.dryRun); + const dynamicPathOptions: DynamicPathOptions = { + project: this.project, + entityName, + appConfig, + dryRun: this.options.dryRun + }; + const parsedPath = dynamicPathParser(dynamicPathOptions); this.dynamicPath = parsedPath; return parsedPath.name; diff --git a/packages/@angular/cli/blueprints/service/index.ts b/packages/@angular/cli/blueprints/service/index.ts index 1fe849b1fbab..6829767faf01 100644 --- a/packages/@angular/cli/blueprints/service/index.ts +++ b/packages/@angular/cli/blueprints/service/index.ts @@ -3,7 +3,7 @@ import * as path from 'path'; import { oneLine } from 'common-tags'; import { NodeHost } from '../../lib/ast-tools'; import { CliConfig } from '../../models/config'; -import { dynamicPathParser } from '../../utilities/dynamic-path-parser'; +import { dynamicPathParser, DynamicPathOptions } from '../../utilities/dynamic-path-parser'; import { getAppFromConfig } from '../../utilities/app-utils'; import { resolveModulePath } from '../../utilities/resolve-module-file'; @@ -51,7 +51,13 @@ export default Blueprint.extend({ normalizeEntityName: function (entityName: string) { const appConfig = getAppFromConfig(this.options.app); - const parsedPath = dynamicPathParser(this.project, entityName, appConfig, this.options.dryRun); + const dynamicPathOptions: DynamicPathOptions = { + project: this.project, + entityName, + appConfig, + dryRun: this.options.dryRun + }; + const parsedPath = dynamicPathParser(dynamicPathOptions); this.dynamicPath = parsedPath; return parsedPath.name; diff --git a/packages/@angular/cli/utilities/dynamic-path-parser.ts b/packages/@angular/cli/utilities/dynamic-path-parser.ts index 06aecc19f643..fd0b259bc4ea 100644 --- a/packages/@angular/cli/utilities/dynamic-path-parser.ts +++ b/packages/@angular/cli/utilities/dynamic-path-parser.ts @@ -3,20 +3,26 @@ import * as process from 'process'; import * as fs from 'fs-extra'; const stringUtils = require('ember-cli-string-utils'); -export function dynamicPathParser(project: any, entityName: string, appConfig: any, - dryRun: boolean) { - const projectRoot = project.root; - const sourceDir = appConfig.root; +export interface DynamicPathOptions { + project: any; + entityName: string; + appConfig: any; + dryRun: boolean; +} + +export function dynamicPathParser(options: DynamicPathOptions) { + const projectRoot = options.project.root; + const sourceDir = options.appConfig.root; const appRoot = path.join(sourceDir, 'app'); const cwd = process.env.PWD; const rootPath = path.join(projectRoot, appRoot); - let outputPath = path.join(rootPath, entityName); + let outputPath = path.join(rootPath, options.entityName); - if (entityName.indexOf(path.sep) === 0) { - outputPath = path.join(rootPath, entityName.substr(1)); + if (options.entityName.indexOf(path.sep) === 0) { + outputPath = path.join(rootPath, options.entityName.substr(1)); } else if (cwd.indexOf(rootPath) >= 0) { - outputPath = path.join(cwd, entityName); + outputPath = path.join(cwd, options.entityName); } if (!fs.existsSync(outputPath)) { @@ -39,7 +45,7 @@ export function dynamicPathParser(project: any, entityName: string, appConfig: a // Folder not found, create it, and return it const dasherizedPart = stringUtils.dasherize(part); const dasherizedDirName = path.join(tempPath, dasherizedPart); - if (!dryRun) { + if (!options.dryRun) { fs.mkdirpSync(dasherizedDirName); } return dasherizedDirName; @@ -49,7 +55,7 @@ export function dynamicPathParser(project: any, entityName: string, appConfig: a } if (outputPath.indexOf(rootPath) < 0) { - throw `Invalid path: "${entityName}" cannot be ` + + throw `Invalid path: "${options.entityName}" cannot be ` + `above the "${appRoot}" directory`; } diff --git a/packages/@angular/cli/utilities/resolve-module-file.ts b/packages/@angular/cli/utilities/resolve-module-file.ts index 25bbe3bdc7c8..25efd3415bd3 100644 --- a/packages/@angular/cli/utilities/resolve-module-file.ts +++ b/packages/@angular/cli/utilities/resolve-module-file.ts @@ -1,6 +1,6 @@ import * as path from 'path'; import * as fs from 'fs'; -import { dynamicPathParser } from './dynamic-path-parser'; +import { dynamicPathParser, DynamicPathOptions } from './dynamic-path-parser'; export function resolveModulePath( moduleNameFromFlag: string, project: any, projectRoot: any, appConfig: any): string { @@ -41,7 +41,13 @@ export function resolveModulePath( } function buildFullPath(project: any, relativeModulePath: string, appConfig: any, projectRoot: any) { - const parsedPath = dynamicPathParser(project, relativeModulePath, appConfig, false); + const dynamicPathOptions: DynamicPathOptions = { + project, + entityName: relativeModulePath, + appConfig, + dryRun: false + }; + const parsedPath = dynamicPathParser(dynamicPathOptions); const fullModulePath = path.join(projectRoot, parsedPath.dir, parsedPath.base); return fullModulePath; diff --git a/tests/acceptance/dynamic-path-parser.spec.js b/tests/acceptance/dynamic-path-parser.spec.js index fb1526074fc4..d0e43bb143e0 100644 --- a/tests/acceptance/dynamic-path-parser.spec.js +++ b/tests/acceptance/dynamic-path-parser.spec.js @@ -42,28 +42,52 @@ describe('dynamic path parser', () => { it('parse from proj root dir', () => { process.env.PWD = project.root; - var result = dynamicPathParser(project, entityName, appConfig, false); + var options = { + project, + entityName, + appConfig, + dryRun: false + }; + var result = dynamicPathParser(options); expect(result.dir).to.equal(appDir); expect(result.name).to.equal(entityName); }); it('parse from proj src dir', () => { process.env.PWD = path.join(project.root, 'src'); - var result = dynamicPathParser(project, entityName, appConfig, false); + var options = { + project, + entityName, + appConfig, + dryRun: false + }; + var result = dynamicPathParser(options); expect(result.dir).to.equal(appDir); expect(result.name).to.equal(entityName); }); it(`parse from proj src${path.sep}client dir`, () => { process.env.PWD = path.join(project.root, 'src', 'client'); - var result = dynamicPathParser(project, entityName, appConfig, false); + var options = { + project, + entityName, + appConfig, + dryRun: false + }; + var result = dynamicPathParser(options); expect(result.dir).to.equal(appDir); expect(result.name).to.equal(entityName); }); it(`parse from proj src${path.sep}client${path.sep}app dir`, () => { process.env.PWD = path.join(project.root, 'src', 'client', 'app'); - var result = dynamicPathParser(project, entityName, appConfig, false); + var options = { + project, + entityName, + appConfig, + dryRun: false + }; + var result = dynamicPathParser(options); expect(result.dir).to.equal(appDir); expect(result.name).to.equal(entityName); }); @@ -82,7 +106,13 @@ describe('dynamic path parser', () => { }; mockFs(mockFolder); process.env.PWD = path.join(project.root, 'src', 'app', 'child-dir'); - var result = dynamicPathParser(project, entityName, appConfig, false); + var options = { + project, + entityName, + appConfig, + dryRun: false + }; + var result = dynamicPathParser(options); expect(result.dir).to.equal(`${appDir}${path.sep}child-dir`); expect(result.name).to.equal(entityName); }); @@ -100,7 +130,13 @@ describe('dynamic path parser', () => { }; mockFs(mockFolder); process.env.PWD = path.join(project.root, 'src', 'app', 'child-dir'); - var result = dynamicPathParser(project, '..' + path.sep + entityName, appConfig, false); + var options = { + project, + entityName: '..' + path.sep + entityName, + appConfig, + dryRun: false + }; + var result = dynamicPathParser(options); expect(result.dir).to.equal(appDir); expect(result.name).to.equal(entityName); }); @@ -121,7 +157,13 @@ describe('dynamic path parser', () => { }; mockFs(mockFolder); process.env.PWD = path.join(project.root, 'src', 'app', 'child-dir', 'grand-child-dir'); - var result = dynamicPathParser(project, '..' + path.sep + entityName, appConfig, false); + var options = { + project, + entityName: '..' + path.sep + entityName, + appConfig, + dryRun: false + }; + var result = dynamicPathParser(options); expect(result.dir).to.equal(`${appDir}${path.sep}child-dir`); expect(result.name).to.equal(entityName); }); @@ -137,14 +179,26 @@ describe('dynamic path parser', () => { }; mockFs(mockFolder); process.env.PWD = path.join(project.root, 'src', 'app', 'my-route'); - var result = dynamicPathParser(project, entityName, appConfig, false); + var options = { + project, + entityName, + appConfig, + dryRun: false + }; + var result = dynamicPathParser(options); expect(result.dir).to.equal(`${appDir}${path.sep}+my-route`); expect(result.name).to.equal(entityName); }); it('create new dirs as dasherized', () => { process.env.PWD = project.root; - var result = dynamicPathParser(project, path.join('NewDir', entityName), appConfig, false); + var options = { + project, + entityName: path.join('NewDir', entityName), + appConfig, + dryRun: false + }; + var result = dynamicPathParser(options); expect(result.dir).to.equal(`${appDir}${path.sep}new-dir`); expect(result.name).to.equal(entityName); });