Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 672b5f5

Browse files
committedMay 23, 2017
fix(@angular/cli): adding dynamic parser options
1 parent 208e69b commit 672b5f5

File tree

12 files changed

+160
-40
lines changed

12 files changed

+160
-40
lines changed
 

‎packages/@angular/cli/blueprints/class/index.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {getAppFromConfig} from '../../utilities/app-utils';
2-
import {dynamicPathParser} from '../../utilities/dynamic-path-parser';
2+
import {dynamicPathParser, DynamicPathOptions} from '../../utilities/dynamic-path-parser';
33
import {CliConfig} from '../../models/config';
44

55
const stringUtils = require('ember-cli-string-utils');
@@ -27,8 +27,14 @@ export default Blueprint.extend({
2727

2828
normalizeEntityName: function (entityName: string) {
2929
const appConfig = getAppFromConfig(this.options.app);
30-
const parsedPath =
31-
dynamicPathParser(this.project, entityName.split('.')[0], appConfig, this.options.dryRun);
30+
const dynamicPathOptions: DynamicPathOptions = {
31+
project: this.project,
32+
entityName: entityName.split('.')[0],
33+
appConfig,
34+
dryRun: this.options.dryRun
35+
};
36+
37+
const parsedPath = dynamicPathParser(dynamicPathOptions);
3238

3339
this.dynamicPath = parsedPath;
3440
return parsedPath.name;

‎packages/@angular/cli/blueprints/component/index.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { oneLine } from 'common-tags';
55
import { NodeHost } from '../../lib/ast-tools';
66
import { CliConfig } from '../../models/config';
77
import { getAppFromConfig } from '../../utilities/app-utils';
8-
import { dynamicPathParser } from '../../utilities/dynamic-path-parser';
8+
import { dynamicPathParser, DynamicPathOptions } from '../../utilities/dynamic-path-parser';
99
import { resolveModulePath } from '../../utilities/resolve-module-file';
1010

1111
const Blueprint = require('../../ember-cli/lib/models/blueprint');
@@ -125,7 +125,13 @@ export default Blueprint.extend({
125125

126126
normalizeEntityName: function (entityName: string) {
127127
const appConfig = getAppFromConfig(this.options.app);
128-
const parsedPath = dynamicPathParser(this.project, entityName, appConfig, this.options.dryRun);
128+
const dynamicPathOptions: DynamicPathOptions = {
129+
project: this.project,
130+
entityName,
131+
appConfig,
132+
dryRun: this.options.dryRun
133+
};
134+
const parsedPath = dynamicPathParser(dynamicPathOptions);
129135

130136
this.dynamicPath = parsedPath;
131137

‎packages/@angular/cli/blueprints/directive/index.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { NodeHost } from '../../lib/ast-tools';
55
import { CliConfig } from '../../models/config';
66
import { getAppFromConfig } from '../../utilities/app-utils';
77
import { resolveModulePath } from '../../utilities/resolve-module-file';
8-
import { dynamicPathParser } from '../../utilities/dynamic-path-parser';
8+
import { dynamicPathParser, DynamicPathOptions } from '../../utilities/dynamic-path-parser';
99

1010
const stringUtils = require('ember-cli-string-utils');
1111
const astUtils = require('../../utilities/ast-utils');
@@ -78,7 +78,13 @@ export default Blueprint.extend({
7878

7979
normalizeEntityName: function (entityName: string) {
8080
const appConfig = getAppFromConfig(this.options.app);
81-
const parsedPath = dynamicPathParser(this.project, entityName, appConfig, this.options.dryRun);
81+
const dynamicPathOptions: DynamicPathOptions = {
82+
project: this.project,
83+
entityName,
84+
appConfig,
85+
dryRun: this.options.dryRun
86+
};
87+
const parsedPath = dynamicPathParser(dynamicPathOptions);
8288

8389
this.dynamicPath = parsedPath;
8490

‎packages/@angular/cli/blueprints/enum/index.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {getAppFromConfig} from '../../utilities/app-utils';
2-
import {dynamicPathParser} from '../../utilities/dynamic-path-parser';
2+
import {dynamicPathParser, DynamicPathOptions} from '../../utilities/dynamic-path-parser';
33

44
const stringUtils = require('ember-cli-string-utils');
55
const Blueprint = require('../../ember-cli/lib/models/blueprint');
@@ -20,7 +20,13 @@ export default Blueprint.extend({
2020

2121
normalizeEntityName: function (entityName: string) {
2222
const appConfig = getAppFromConfig(this.options.app);
23-
const parsedPath = dynamicPathParser(this.project, entityName, appConfig, this.options.dryRun);
23+
const dynamicPathOptions: DynamicPathOptions = {
24+
project: this.project,
25+
entityName,
26+
appConfig,
27+
dryRun: this.options.dryRun
28+
};
29+
const parsedPath = dynamicPathParser(dynamicPathOptions);
2430

2531
this.dynamicPath = parsedPath;
2632
return parsedPath.name;

‎packages/@angular/cli/blueprints/guard/index.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import * as path from 'path';
33
import { oneLine } from 'common-tags';
44
import { NodeHost } from '../../lib/ast-tools';
55
import { CliConfig } from '../../models/config';
6-
import { dynamicPathParser } from '../../utilities/dynamic-path-parser';
6+
import { dynamicPathParser, DynamicPathOptions } from '../../utilities/dynamic-path-parser';
77
import { getAppFromConfig } from '../../utilities/app-utils';
88
import { resolveModulePath } from '../../utilities/resolve-module-file';
99

@@ -46,7 +46,13 @@ export default Blueprint.extend({
4646

4747
normalizeEntityName: function (entityName: string) {
4848
const appConfig = getAppFromConfig(this.options.app);
49-
const parsedPath = dynamicPathParser(this.project, entityName, appConfig, this.options.dryRun);
49+
const dynamicPathOptions: DynamicPathOptions = {
50+
project: this.project,
51+
entityName,
52+
appConfig,
53+
dryRun: this.options.dryRun
54+
};
55+
const parsedPath = dynamicPathParser(dynamicPathOptions);
5056

5157
this.dynamicPath = parsedPath;
5258
return parsedPath.name;

‎packages/@angular/cli/blueprints/interface/index.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import {CliConfig} from '../../models/config';
22
import {getAppFromConfig} from '../../utilities/app-utils';
3-
import {dynamicPathParser} from '../../utilities/dynamic-path-parser';
3+
import {dynamicPathParser, DynamicPathOptions} from '../../utilities/dynamic-path-parser';
44

55
const stringUtils = require('ember-cli-string-utils');
66
const Blueprint = require('../../ember-cli/lib/models/blueprint');
@@ -25,7 +25,13 @@ export default Blueprint.extend({
2525

2626
normalizeEntityName: function (entityName: string) {
2727
const appConfig = getAppFromConfig(this.options.app);
28-
const parsedPath = dynamicPathParser(this.project, entityName, appConfig, this.options.dryRun);
28+
const dynamicPathOptions: DynamicPathOptions = {
29+
project: this.project,
30+
entityName,
31+
appConfig,
32+
dryRun: this.options.dryRun
33+
};
34+
const parsedPath = dynamicPathParser(dynamicPathOptions);
2935

3036
this.dynamicPath = parsedPath;
3137
return parsedPath.name;

‎packages/@angular/cli/blueprints/module/index.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { NodeHost } from '../../lib/ast-tools';
55
import { CliConfig } from '../../models/config';
66
import { getAppFromConfig } from '../../utilities/app-utils';
77
import { resolveModulePath } from '../../utilities/resolve-module-file';
8-
import { dynamicPathParser } from '../../utilities/dynamic-path-parser';
8+
import { dynamicPathParser, DynamicPathOptions } from '../../utilities/dynamic-path-parser';
99

1010
const stringUtils = require('ember-cli-string-utils');
1111
const Blueprint = require('../../ember-cli/lib/models/blueprint');
@@ -58,7 +58,13 @@ export default Blueprint.extend({
5858
normalizeEntityName: function (entityName: string) {
5959
this.entityName = entityName;
6060
const appConfig = getAppFromConfig(this.options.app);
61-
const parsedPath = dynamicPathParser(this.project, entityName, appConfig, this.options.dryRun);
61+
const dynamicPathOptions: DynamicPathOptions = {
62+
project: this.project,
63+
entityName,
64+
appConfig,
65+
dryRun: this.options.dryRun
66+
};
67+
const parsedPath = dynamicPathParser(dynamicPathOptions);
6268

6369
this.dynamicPath = parsedPath;
6470
return parsedPath.name;

‎packages/@angular/cli/blueprints/pipe/index.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as chalk from 'chalk';
22
import * as path from 'path';
33
import { NodeHost } from '../../lib/ast-tools';
44
import { CliConfig } from '../../models/config';
5-
import { dynamicPathParser } from '../../utilities/dynamic-path-parser';
5+
import { dynamicPathParser, DynamicPathOptions } from '../../utilities/dynamic-path-parser';
66
import { getAppFromConfig } from '../../utilities/app-utils';
77
import { resolveModulePath } from '../../utilities/resolve-module-file';
88

@@ -72,7 +72,13 @@ export default Blueprint.extend({
7272

7373
normalizeEntityName: function (entityName: string) {
7474
const appConfig = getAppFromConfig(this.options.app);
75-
const parsedPath = dynamicPathParser(this.project, entityName, appConfig, this.options.dryRun);
75+
const dynamicPathOptions: DynamicPathOptions = {
76+
project: this.project,
77+
entityName,
78+
appConfig,
79+
dryRun: this.options.dryRun
80+
};
81+
const parsedPath = dynamicPathParser(dynamicPathOptions);
7682

7783
this.dynamicPath = parsedPath;
7884
return parsedPath.name;

‎packages/@angular/cli/blueprints/service/index.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import * as path from 'path';
33
import { oneLine } from 'common-tags';
44
import { NodeHost } from '../../lib/ast-tools';
55
import { CliConfig } from '../../models/config';
6-
import { dynamicPathParser } from '../../utilities/dynamic-path-parser';
6+
import { dynamicPathParser, DynamicPathOptions } from '../../utilities/dynamic-path-parser';
77
import { getAppFromConfig } from '../../utilities/app-utils';
88
import { resolveModulePath } from '../../utilities/resolve-module-file';
99

@@ -51,7 +51,13 @@ export default Blueprint.extend({
5151

5252
normalizeEntityName: function (entityName: string) {
5353
const appConfig = getAppFromConfig(this.options.app);
54-
const parsedPath = dynamicPathParser(this.project, entityName, appConfig, this.options.dryRun);
54+
const dynamicPathOptions: DynamicPathOptions = {
55+
project: this.project,
56+
entityName,
57+
appConfig,
58+
dryRun: this.options.dryRun
59+
};
60+
const parsedPath = dynamicPathParser(dynamicPathOptions);
5561

5662
this.dynamicPath = parsedPath;
5763
return parsedPath.name;

‎packages/@angular/cli/utilities/dynamic-path-parser.ts

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,26 @@ import * as process from 'process';
33
import * as fs from 'fs-extra';
44
const stringUtils = require('ember-cli-string-utils');
55

6-
export function dynamicPathParser(project: any, entityName: string, appConfig: any,
7-
dryRun: boolean) {
8-
const projectRoot = project.root;
9-
const sourceDir = appConfig.root;
6+
export interface DynamicPathOptions {
7+
project: any;
8+
entityName: string;
9+
appConfig: any;
10+
dryRun: boolean;
11+
}
12+
13+
export function dynamicPathParser(options: DynamicPathOptions) {
14+
const projectRoot = options.project.root;
15+
const sourceDir = options.appConfig.root;
1016
const appRoot = path.join(sourceDir, 'app');
1117
const cwd = process.env.PWD;
1218

1319
const rootPath = path.join(projectRoot, appRoot);
14-
let outputPath = path.join(rootPath, entityName);
20+
let outputPath = path.join(rootPath, options.entityName);
1521

16-
if (entityName.indexOf(path.sep) === 0) {
17-
outputPath = path.join(rootPath, entityName.substr(1));
22+
if (options.entityName.indexOf(path.sep) === 0) {
23+
outputPath = path.join(rootPath, options.entityName.substr(1));
1824
} else if (cwd.indexOf(rootPath) >= 0) {
19-
outputPath = path.join(cwd, entityName);
25+
outputPath = path.join(cwd, options.entityName);
2026
}
2127

2228
if (!fs.existsSync(outputPath)) {
@@ -39,7 +45,7 @@ export function dynamicPathParser(project: any, entityName: string, appConfig: a
3945
// Folder not found, create it, and return it
4046
const dasherizedPart = stringUtils.dasherize(part);
4147
const dasherizedDirName = path.join(tempPath, dasherizedPart);
42-
if (!dryRun) {
48+
if (!options.dryRun) {
4349
fs.mkdirpSync(dasherizedDirName);
4450
}
4551
return dasherizedDirName;
@@ -49,7 +55,7 @@ export function dynamicPathParser(project: any, entityName: string, appConfig: a
4955
}
5056

5157
if (outputPath.indexOf(rootPath) < 0) {
52-
throw `Invalid path: "${entityName}" cannot be ` +
58+
throw `Invalid path: "${options.entityName}" cannot be ` +
5359
`above the "${appRoot}" directory`;
5460
}
5561

‎packages/@angular/cli/utilities/resolve-module-file.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as path from 'path';
22
import * as fs from 'fs';
3-
import { dynamicPathParser } from './dynamic-path-parser';
3+
import { dynamicPathParser, DynamicPathOptions } from './dynamic-path-parser';
44

55
export function resolveModulePath(
66
moduleNameFromFlag: string, project: any, projectRoot: any, appConfig: any): string {
@@ -41,7 +41,13 @@ export function resolveModulePath(
4141
}
4242

4343
function buildFullPath(project: any, relativeModulePath: string, appConfig: any, projectRoot: any) {
44-
const parsedPath = dynamicPathParser(project, relativeModulePath, appConfig, false);
44+
const dynamicPathOptions: DynamicPathOptions = {
45+
project,
46+
entityName: relativeModulePath,
47+
appConfig,
48+
dryRun: false
49+
};
50+
const parsedPath = dynamicPathParser(dynamicPathOptions);
4551
const fullModulePath = path.join(projectRoot, parsedPath.dir, parsedPath.base);
4652

4753
return fullModulePath;

‎tests/acceptance/dynamic-path-parser.spec.js

Lines changed: 63 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,28 +42,52 @@ describe('dynamic path parser', () => {
4242

4343
it('parse from proj root dir', () => {
4444
process.env.PWD = project.root;
45-
var result = dynamicPathParser(project, entityName, appConfig, false);
45+
var options = {
46+
project,
47+
entityName,
48+
appConfig,
49+
dryRun: false
50+
};
51+
var result = dynamicPathParser(options);
4652
expect(result.dir).to.equal(appDir);
4753
expect(result.name).to.equal(entityName);
4854
});
4955

5056
it('parse from proj src dir', () => {
5157
process.env.PWD = path.join(project.root, 'src');
52-
var result = dynamicPathParser(project, entityName, appConfig, false);
58+
var options = {
59+
project,
60+
entityName,
61+
appConfig,
62+
dryRun: false
63+
};
64+
var result = dynamicPathParser(options);
5365
expect(result.dir).to.equal(appDir);
5466
expect(result.name).to.equal(entityName);
5567
});
5668

5769
it(`parse from proj src${path.sep}client dir`, () => {
5870
process.env.PWD = path.join(project.root, 'src', 'client');
59-
var result = dynamicPathParser(project, entityName, appConfig, false);
71+
var options = {
72+
project,
73+
entityName,
74+
appConfig,
75+
dryRun: false
76+
};
77+
var result = dynamicPathParser(options);
6078
expect(result.dir).to.equal(appDir);
6179
expect(result.name).to.equal(entityName);
6280
});
6381

6482
it(`parse from proj src${path.sep}client${path.sep}app dir`, () => {
6583
process.env.PWD = path.join(project.root, 'src', 'client', 'app');
66-
var result = dynamicPathParser(project, entityName, appConfig, false);
84+
var options = {
85+
project,
86+
entityName,
87+
appConfig,
88+
dryRun: false
89+
};
90+
var result = dynamicPathParser(options);
6791
expect(result.dir).to.equal(appDir);
6892
expect(result.name).to.equal(entityName);
6993
});
@@ -82,7 +106,13 @@ describe('dynamic path parser', () => {
82106
};
83107
mockFs(mockFolder);
84108
process.env.PWD = path.join(project.root, 'src', 'app', 'child-dir');
85-
var result = dynamicPathParser(project, entityName, appConfig, false);
109+
var options = {
110+
project,
111+
entityName,
112+
appConfig,
113+
dryRun: false
114+
};
115+
var result = dynamicPathParser(options);
86116
expect(result.dir).to.equal(`${appDir}${path.sep}child-dir`);
87117
expect(result.name).to.equal(entityName);
88118
});
@@ -100,7 +130,13 @@ describe('dynamic path parser', () => {
100130
};
101131
mockFs(mockFolder);
102132
process.env.PWD = path.join(project.root, 'src', 'app', 'child-dir');
103-
var result = dynamicPathParser(project, '..' + path.sep + entityName, appConfig, false);
133+
var options = {
134+
project,
135+
entityName: '..' + path.sep + entityName,
136+
appConfig,
137+
dryRun: false
138+
};
139+
var result = dynamicPathParser(options);
104140
expect(result.dir).to.equal(appDir);
105141
expect(result.name).to.equal(entityName);
106142
});
@@ -121,7 +157,13 @@ describe('dynamic path parser', () => {
121157
};
122158
mockFs(mockFolder);
123159
process.env.PWD = path.join(project.root, 'src', 'app', 'child-dir', 'grand-child-dir');
124-
var result = dynamicPathParser(project, '..' + path.sep + entityName, appConfig, false);
160+
var options = {
161+
project,
162+
entityName: '..' + path.sep + entityName,
163+
appConfig,
164+
dryRun: false
165+
};
166+
var result = dynamicPathParser(options);
125167
expect(result.dir).to.equal(`${appDir}${path.sep}child-dir`);
126168
expect(result.name).to.equal(entityName);
127169
});
@@ -137,14 +179,26 @@ describe('dynamic path parser', () => {
137179
};
138180
mockFs(mockFolder);
139181
process.env.PWD = path.join(project.root, 'src', 'app', 'my-route');
140-
var result = dynamicPathParser(project, entityName, appConfig, false);
182+
var options = {
183+
project,
184+
entityName,
185+
appConfig,
186+
dryRun: false
187+
};
188+
var result = dynamicPathParser(options);
141189
expect(result.dir).to.equal(`${appDir}${path.sep}+my-route`);
142190
expect(result.name).to.equal(entityName);
143191
});
144192

145193
it('create new dirs as dasherized', () => {
146194
process.env.PWD = project.root;
147-
var result = dynamicPathParser(project, path.join('NewDir', entityName), appConfig, false);
195+
var options = {
196+
project,
197+
entityName: path.join('NewDir', entityName),
198+
appConfig,
199+
dryRun: false
200+
};
201+
var result = dynamicPathParser(options);
148202
expect(result.dir).to.equal(`${appDir}${path.sep}new-dir`);
149203
expect(result.name).to.equal(entityName);
150204
});

0 commit comments

Comments
 (0)
Please sign in to comment.