mirror of
https://github.com/angular/angular-cli.git
synced 2025-05-23 15:36:23 +08:00
84 lines
2.8 KiB
TypeScript
84 lines
2.8 KiB
TypeScript
const path = require('path');
|
|
const Blueprint = require('../../ember-cli/lib/models/blueprint');
|
|
const dynamicPathParser = require('../../utilities/dynamic-path-parser');
|
|
const getFiles = Blueprint.prototype.files;
|
|
|
|
export default Blueprint.extend({
|
|
description: '',
|
|
|
|
availableOptions: [
|
|
{ name: 'spec', type: Boolean },
|
|
{ name: 'routing', type: Boolean, default: false }
|
|
],
|
|
|
|
normalizeEntityName: function (entityName: string) {
|
|
this.entityName = entityName;
|
|
const parsedPath = dynamicPathParser(this.project, entityName);
|
|
|
|
this.dynamicPath = parsedPath;
|
|
return parsedPath.name;
|
|
},
|
|
|
|
locals: function (options: any) {
|
|
options.spec = options.spec !== undefined ?
|
|
options.spec :
|
|
this.project.ngConfigObj.get('defaults.spec.module');
|
|
|
|
return {
|
|
dynamicPath: this.dynamicPath.dir,
|
|
spec: options.spec,
|
|
routing: options.routing
|
|
};
|
|
},
|
|
|
|
files: function() {
|
|
let fileList = getFiles.call(this) as Array<string>;
|
|
|
|
if (!this.options || !this.options.spec) {
|
|
fileList = fileList.filter(p => p.indexOf('__name__.module.spec.ts') < 0);
|
|
}
|
|
if (this.options && !this.options.routing) {
|
|
fileList = fileList.filter(p => p.indexOf('__name__-routing.module.ts') < 0);
|
|
}
|
|
|
|
return fileList;
|
|
},
|
|
|
|
fileMapTokens: function (options: any) {
|
|
// Return custom template variables here.
|
|
this.dasherizedModuleName = options.dasherizedModuleName;
|
|
return {
|
|
__path__: () => {
|
|
this.generatePath = this.dynamicPath.dir
|
|
+ path.sep
|
|
+ options.dasherizedModuleName;
|
|
return this.generatePath;
|
|
}
|
|
};
|
|
},
|
|
|
|
afterInstall: function (options: any) {
|
|
if (this.options && this.options.routing) {
|
|
|
|
// Component folder needs to be `/{moduleName}/{ComponentName}`
|
|
// Note that we are using `flat`, so no extra dir will be created
|
|
// We need the leading `/` so the component path resolution work for both cases below:
|
|
// 1. If module name has no path (no `/`), that's going to be `/mod-name/mod-name`
|
|
// as `this.dynamicPath.dir` will be the same as `this.dynamicPath.appRoot`
|
|
// 2. If it does have `/` (like `parent/mod-name`), it'll be `/parent/mod-name/mod-name`
|
|
// as `this.dynamicPath.dir` minus `this.dynamicPath.appRoot` will be `/parent`
|
|
const moduleDir = this.dynamicPath.dir.replace(this.dynamicPath.appRoot, '')
|
|
+ path.sep + this.dasherizedModuleName;
|
|
options.entity.name = moduleDir + path.sep + this.dasherizedModuleName;
|
|
options.flat = true;
|
|
|
|
options.route = false;
|
|
options.inlineTemplate = false;
|
|
options.inlineStyle = false;
|
|
options.prefix = null;
|
|
options.spec = true;
|
|
return Blueprint.load(path.join(__dirname, '../component')).install(options);
|
|
}
|
|
}
|
|
});
|