From b70b3397fbc6d6322b45b0b9dd01d74fdc4af7bb Mon Sep 17 00:00:00 2001 From: Shabab Karim Date: Tue, 3 Sep 2019 16:29:43 +0600 Subject: [PATCH] Fixed issue with duplicate model folder getting created when generating model with api option --- packages/strapi-generate-model/lib/before.js | 74 ++++++++++++++------ 1 file changed, 53 insertions(+), 21 deletions(-) diff --git a/packages/strapi-generate-model/lib/before.js b/packages/strapi-generate-model/lib/before.js index 13e4525ba5..ab7e215ed8 100644 --- a/packages/strapi-generate-model/lib/before.js +++ b/packages/strapi-generate-model/lib/before.js @@ -13,7 +13,10 @@ const _ = require('lodash'); const pluralize = require('pluralize'); // Fetch stub attribute template on initial load. -const attributeTemplate = fs.readFileSync(path.resolve(__dirname, '..', 'templates', 'attribute.template'), 'utf8'); +const attributeTemplate = fs.readFileSync( + path.resolve(__dirname, '..', 'templates', 'attribute.template'), + 'utf8' +); /* eslint-disable prefer-template */ /** @@ -26,26 +29,28 @@ const attributeTemplate = fs.readFileSync(path.resolve(__dirname, '..', 'templat module.exports = (scope, cb) => { if (!scope.rootPath || !scope.id) { - return cb.invalid('Usage: `$ strapi generate:model modelName --api apiName --plugin pluginName`'); + return cb.invalid( + 'Usage: `$ strapi generate:model modelName --api apiName --plugin pluginName`' + ); } // `scope.args` are the raw command line arguments. _.defaults(scope, { id: _.trim(_.deburr(scope.id)), idPluralized: pluralize.plural(_.trim(_.deburr(scope.id))), - environment: process.env.NODE_ENV || 'development' + environment: process.env.NODE_ENV || 'development', }); // Determine default values based on the available scope. _.defaults(scope, { globalID: _.upperFirst(_.camelCase(scope.id)), - ext: '.js' + ext: '.js', }); // Determine the destination path. let filePath; if (scope.args.api) { - filePath = `./api/${scope.args.api}/models`; + filePath = `./api/${scope.args.api}`; } else if (scope.args.plugin) { filePath = `./plugins/${scope.args.plugin}/models`; } else { @@ -57,41 +62,47 @@ module.exports = (scope, cb) => { rootPath: scope.rootPath, filePath, filename: scope.globalID + scope.ext, - filenameSettings: scope.globalID + '.settings.json' + filenameSettings: scope.globalID + '.settings.json', }); // Humanize output. _.defaults(scope, { humanizeId: _.camelCase(scope.id).toLowerCase(), - humanizedPath: '`' + scope.filePath + '`' + humanizedPath: '`' + scope.filePath + '`', }); // Validate optional attribute arguments. const invalidAttributes = []; // Map attributes and split them. - scope.attributes = scope.args.attributes.map((attribute) => { + scope.attributes = scope.args.attributes.map(attribute => { const parts = attribute.split(':'); parts[1] = parts[1] ? parts[1] : 'string'; // Handle invalid attributes. if (!parts[1] || !parts[0]) { - invalidAttributes.push('Error: Invalid attribute notation `' + attribute + '`.'); + invalidAttributes.push( + 'Error: Invalid attribute notation `' + attribute + '`.' + ); return; } return { name: _.trim(_.deburr(_.camelCase(parts[0]).toLowerCase())), - type: _.trim(_.deburr(_.camelCase(parts[1]).toLowerCase())) + type: _.trim(_.deburr(_.camelCase(parts[1]).toLowerCase())), }; }); // Set collectionName - scope.collectionName = _.has(scope.args, 'collectionName') ? scope.args.collectionName : undefined; + scope.collectionName = _.has(scope.args, 'collectionName') + ? scope.args.collectionName + : undefined; // Set description - scope.description = _.has(scope.args, 'description') ? scope.args.description : undefined; + scope.description = _.has(scope.args, 'description') + ? scope.args.description + : undefined; // Handle invalid action arguments. // Send back invalidActions. @@ -100,23 +111,44 @@ module.exports = (scope, cb) => { } // Make sure there aren't duplicates. - if (_(scope.attributes.map(attribute => (attribute.name))).uniq().valueOf().length !== scope.attributes.length) { + if ( + _(scope.attributes.map(attribute => attribute.name)) + .uniq() + .valueOf().length !== scope.attributes.length + ) { return cb.invalid('Duplicate attributes not allowed!'); } // Render some stringified code from the action template // and make it available in our scope for use later on. - scope.attributes = scope.attributes.map((attribute) => { - const compiled = _.template(attributeTemplate); - return _.trimEnd(_.unescape(compiled({ - name: attribute.name, - type: attribute.type - }))); - }).join(',\n'); + scope.attributes = scope.attributes + .map(attribute => { + const compiled = _.template(attributeTemplate); + return _.trimEnd( + _.unescape( + compiled({ + name: attribute.name, + type: attribute.type, + }) + ) + ); + }) + .join(',\n'); // Get default connection try { - scope.connection = JSON.parse(fs.readFileSync(path.resolve(scope.rootPath, 'config', 'environments', scope.environment, 'database.json'))).defaultConnection || ''; + scope.connection = + JSON.parse( + fs.readFileSync( + path.resolve( + scope.rootPath, + 'config', + 'environments', + scope.environment, + 'database.json' + ) + ) + ).defaultConnection || ''; } catch (err) { return cb.invalid(err); }