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; 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); } } });