From d6504e2fb66c26d5ec0b3c75d915f50c17d78441 Mon Sep 17 00:00:00 2001 From: Mike Brocchi Date: Wed, 15 Mar 2017 13:42:24 -0400 Subject: [PATCH] fix(@angular/cli): generating will dasherize all new dirs (#5437) Fixes #5424 --- .../cli/utilities/dynamic-path-parser.js | 19 +++++++++++-------- tests/acceptance/dynamic-path-parser.spec.js | 15 +++++++++++---- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/packages/@angular/cli/utilities/dynamic-path-parser.js b/packages/@angular/cli/utilities/dynamic-path-parser.js index 50e40e07c9ba..58bb7a325b6f 100644 --- a/packages/@angular/cli/utilities/dynamic-path-parser.js +++ b/packages/@angular/cli/utilities/dynamic-path-parser.js @@ -1,6 +1,7 @@ var path = require('path'); var process = require('process'); var fs = require('fs'); +var stringUtils = require('ember-cli-string-utils'); module.exports = function dynamicPathParser(project, entityName, appConfig) { var projectRoot = project.root; @@ -10,13 +11,13 @@ module.exports = function dynamicPathParser(project, entityName, appConfig) { var rootPath = path.join(projectRoot, appRoot); var outputPath = path.join(rootPath, entityName); - + if (entityName.indexOf(path.sep) === 0) { outputPath = path.join(rootPath, entityName.substr(1)); } else if (cwd.indexOf(rootPath) >= 0) { outputPath = path.join(cwd, entityName); } - + if (!fs.existsSync(outputPath)) { // Verify the path exists on disk. var parsedOutputPath = path.parse(outputPath); @@ -25,8 +26,8 @@ module.exports = function dynamicPathParser(project, entityName, appConfig) { // if (tempPath === '') { // return part; // } - var withoutPlus = path.join(tempPath, path.sep, part); - var withPlus = path.join(tempPath, path.sep, '+' + part); + var withoutPlus = path.join(tempPath, part); + var withPlus = path.join(tempPath, '+' + part); if (fs.existsSync(withoutPlus)) { return withoutPlus; } else if (fs.existsSync(withPlus)) { @@ -34,13 +35,15 @@ module.exports = function dynamicPathParser(project, entityName, appConfig) { } // Folder not found, create it, and return it - fs.mkdirSync(withoutPlus); - return withoutPlus; + const dasherizedPart = stringUtils.dasherize(part); + const dasherizedDirName = path.join(tempPath, dasherizedPart); + fs.mkdirSync(dasherizedDirName); + return dasherizedDirName; }, parsedOutputPath.root); outputPath = path.join(newPath, parsedOutputPath.name); } - + if (outputPath.indexOf(rootPath) < 0) { throw `Invalid path: "${entityName}" cannot be ` + `above the "${appRoot}" directory`; @@ -49,7 +52,7 @@ module.exports = function dynamicPathParser(project, entityName, appConfig) { var adjustedPath = outputPath.replace(projectRoot, ''); var parsedPath = path.parse(adjustedPath); - + if (parsedPath.dir.indexOf(path.sep) === 0) { parsedPath.dir = parsedPath.dir.substr(1); } diff --git a/tests/acceptance/dynamic-path-parser.spec.js b/tests/acceptance/dynamic-path-parser.spec.js index f9d1f3000049..db597d2ccdf5 100644 --- a/tests/acceptance/dynamic-path-parser.spec.js +++ b/tests/acceptance/dynamic-path-parser.spec.js @@ -17,12 +17,12 @@ describe('dynamic path parser', () => { var root = 'src'; beforeEach(() => { project = { - root: rootName, + root: rootName, ngConfig: { apps: [{ root: root }] - } + } }; var mockFolder = {}; mockFolder[rootName] = { @@ -35,7 +35,7 @@ describe('dynamic path parser', () => { }; mockFs(mockFolder); }); - + afterEach(() => { mockFs.restore(); }); @@ -125,7 +125,7 @@ describe('dynamic path parser', () => { expect(result.dir).to.equal(`${appDir}${path.sep}child-dir`); expect(result.name).to.equal(entityName); }); - + it('auto look for dirs with a "+" when not specified', () => { var mockFolder = {}; mockFolder[rootName] = { @@ -141,4 +141,11 @@ describe('dynamic path parser', () => { 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); + expect(result.dir).to.equal(`${appDir}${path.sep}new-dir`); + expect(result.name).to.equal(entityName); + }); });