mirror of
https://github.com/strapi/strapi.git
synced 2025-11-03 11:25:17 +00:00
massive refactor
This commit is contained in:
parent
b9c5595aea
commit
19a8c7676d
@ -6,7 +6,6 @@
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"fs-extra": "10.0.0",
|
||||
"inquirer": "8.1.2",
|
||||
"inquirer-recursive": "0.0.7",
|
||||
"node-plop": "0.26.2",
|
||||
"plop": "2.7.4",
|
||||
|
||||
@ -1,322 +1,26 @@
|
||||
'use strict';
|
||||
|
||||
const { join } = require('path');
|
||||
const fs = require('fs-extra');
|
||||
const pluralize = require('pluralize');
|
||||
|
||||
const rootDir = process.cwd();
|
||||
|
||||
const getFilePath = destination => {
|
||||
if (destination === 'api') {
|
||||
return `api/{{api}}`;
|
||||
}
|
||||
|
||||
if (destination === 'plugin') {
|
||||
return `plugins/{{plugin}}`;
|
||||
}
|
||||
|
||||
return `api/{{id}}`;
|
||||
};
|
||||
|
||||
const getDestinationPrompts = action => {
|
||||
return [
|
||||
{
|
||||
type: 'list',
|
||||
name: 'destination',
|
||||
message: `Where do you want to add this ${action}?`,
|
||||
choices: [
|
||||
{
|
||||
name: `Add ${action} to ${action === 'policy' ? 'root of project' : 'new API'}`,
|
||||
value: 'new',
|
||||
},
|
||||
{ name: `Add ${action} to existing API`, value: 'api' },
|
||||
{ name: `Add ${action} to existing plugin`, value: 'plugin' },
|
||||
],
|
||||
},
|
||||
{
|
||||
when: answers => answers.destination === 'api',
|
||||
type: 'input',
|
||||
message: 'Which API is this for?',
|
||||
name: 'api',
|
||||
validate: async input => {
|
||||
const exists = await fs.pathExists(join(rootDir, `api/${input}`));
|
||||
|
||||
return exists || 'That api does not exist, please try again';
|
||||
},
|
||||
},
|
||||
{
|
||||
when: answers => answers.destination === 'plugin',
|
||||
type: 'input',
|
||||
message: 'Which plugin is this for?',
|
||||
name: 'plugin',
|
||||
validate: async input => {
|
||||
const exists = await fs.pathExists(join(rootDir, `plugins/${input}`));
|
||||
|
||||
return exists || 'That plugin does not exist, please try again';
|
||||
},
|
||||
},
|
||||
];
|
||||
};
|
||||
const api = require('./plops/api');
|
||||
const controller = require('./plops/controller');
|
||||
const model = require('./plops/model');
|
||||
const plugin = require('./plops/plugin');
|
||||
const policy = require('./plops/policy');
|
||||
const service = require('./plops/service');
|
||||
|
||||
module.exports = function(plop) {
|
||||
const rootDir = process.cwd();
|
||||
// Plop config
|
||||
plop.setWelcomeMessage('Strapi Generators');
|
||||
|
||||
plop.addHelper('pluralize', text => pluralize(text));
|
||||
|
||||
// API generator
|
||||
plop.setGenerator('api', {
|
||||
description: 'Generate a basic API',
|
||||
prompts: [
|
||||
{
|
||||
type: 'input',
|
||||
name: 'id',
|
||||
message: 'API name',
|
||||
},
|
||||
{
|
||||
type: 'list',
|
||||
name: 'kind',
|
||||
message: 'Please choose the model type',
|
||||
choices: [
|
||||
{ name: 'Collection Type', value: 'collectionType' },
|
||||
{ name: 'Singe Type', value: 'singleType' },
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'confirm',
|
||||
name: 'isPluginApi',
|
||||
message: 'Is this API for a plugin?',
|
||||
},
|
||||
{
|
||||
when: answers => answers.isPluginApi,
|
||||
type: 'input',
|
||||
name: 'plugin',
|
||||
message: 'Plugin name',
|
||||
validate: async input => {
|
||||
const exists = await fs.pathExists(join(rootDir, `plugins/${input}`));
|
||||
|
||||
return exists || 'That plugin does not exist, please try again';
|
||||
},
|
||||
},
|
||||
{
|
||||
type: 'confirm',
|
||||
name: 'useDraftAndPublish',
|
||||
message: 'Use draft and publish?',
|
||||
},
|
||||
],
|
||||
actions: answers => {
|
||||
let filePath;
|
||||
if (answers.isPluginApi && answers.plugin) {
|
||||
filePath = `plugins/{{plugin}}`;
|
||||
} else {
|
||||
filePath = `api/{{id}}`;
|
||||
}
|
||||
|
||||
const baseActions = [
|
||||
{
|
||||
type: 'add',
|
||||
path: join(rootDir, `${filePath}/controllers/{{id}}.js`),
|
||||
templateFile: 'templates/controller.js.hbs',
|
||||
},
|
||||
{
|
||||
type: 'add',
|
||||
path: join(rootDir, `${filePath}/models/{{id}}.js`),
|
||||
templateFile: 'templates/model.js.hbs',
|
||||
},
|
||||
{
|
||||
type: 'add',
|
||||
path: join(rootDir, `${filePath}/models/{{id}}.settings.json`),
|
||||
templateFile: 'templates/model.settings.json.hbs',
|
||||
},
|
||||
{
|
||||
type: 'add',
|
||||
path: join(rootDir, `${filePath}/services/{{id}}.js`),
|
||||
templateFile: 'templates/service.js.hbs',
|
||||
},
|
||||
];
|
||||
|
||||
if (answers.isPluginApi) {
|
||||
return baseActions;
|
||||
} else {
|
||||
return [
|
||||
{
|
||||
type: 'add',
|
||||
path: join(rootDir, `${filePath}/config/routes.json`),
|
||||
templateFile: 'templates/api-routes.json.hbs',
|
||||
},
|
||||
...baseActions,
|
||||
];
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
// Controller generator
|
||||
plop.setGenerator('controller', {
|
||||
description: 'Generate a controller for an API',
|
||||
prompts: [
|
||||
{
|
||||
type: 'input',
|
||||
name: 'id',
|
||||
message: 'Controller name',
|
||||
},
|
||||
...getDestinationPrompts('controller'),
|
||||
],
|
||||
actions: answers => {
|
||||
const filePath = getFilePath(answers.destination);
|
||||
|
||||
return [
|
||||
{
|
||||
type: 'add',
|
||||
path: join(rootDir, `${filePath}/controllers/{{id}}.js`),
|
||||
templateFile: 'templates/controller.js.hbs',
|
||||
},
|
||||
];
|
||||
},
|
||||
});
|
||||
|
||||
plop.setPrompt('recursive', require('inquirer-recursive'));
|
||||
// Model generator
|
||||
plop.setGenerator('model', {
|
||||
description: 'Generate a model for an API',
|
||||
prompts: [
|
||||
{
|
||||
type: 'input',
|
||||
name: 'id',
|
||||
message: 'Model name',
|
||||
},
|
||||
{
|
||||
type: 'list',
|
||||
name: 'kind',
|
||||
message: 'Please choose the model type',
|
||||
choices: [
|
||||
{ name: 'Collection Type', value: 'collectionType' },
|
||||
{ name: 'Singe Type', value: 'singleType' },
|
||||
],
|
||||
},
|
||||
...getDestinationPrompts('model'),
|
||||
{
|
||||
type: 'addAttributes',
|
||||
name: 'attributes',
|
||||
},
|
||||
{
|
||||
type: 'confirm',
|
||||
name: 'useDraftAndPublish',
|
||||
message: 'Use draft and publish?',
|
||||
},
|
||||
],
|
||||
actions: answers => {
|
||||
const filePath = getFilePath(answers.destination);
|
||||
|
||||
return [
|
||||
{
|
||||
type: 'add',
|
||||
path: join(rootDir, `${filePath}/models/{{id}}.js`),
|
||||
templateFile: 'templates/model.js.hbs',
|
||||
},
|
||||
{
|
||||
type: 'add',
|
||||
path: join(rootDir, `${filePath}/models/{{id}}.settings.json`),
|
||||
templateFile: 'templates/model.settings.json.hbs',
|
||||
},
|
||||
];
|
||||
},
|
||||
});
|
||||
|
||||
const { prompts } = plop.inquirer.prompt;
|
||||
console.log(prompts);
|
||||
|
||||
// Plugin generator
|
||||
plop.setGenerator('plugin', {
|
||||
description: 'Generate a basic plugin',
|
||||
prompts: [
|
||||
{
|
||||
type: 'input',
|
||||
name: 'id',
|
||||
message: 'Plugin name',
|
||||
},
|
||||
],
|
||||
actions: answers => {
|
||||
fs.copySync(join(__dirname, 'files', 'plugin'), join(rootDir, 'plugins', answers.id));
|
||||
return [
|
||||
{
|
||||
type: 'add',
|
||||
path: join(rootDir, 'plugins/{{id}}/services/{{id}}.js'),
|
||||
templateFile: 'templates/service.js.hbs',
|
||||
},
|
||||
{
|
||||
type: 'add',
|
||||
path: join(rootDir, 'plugins/{{id}}/controllers/{{id}}.js'),
|
||||
templateFile: 'templates/controller.js.hbs',
|
||||
},
|
||||
{
|
||||
type: 'add',
|
||||
path: join(rootDir, 'plugins/{{id}}/config/routes.json'),
|
||||
templateFile: 'templates/plugin-routes.json.hbs',
|
||||
},
|
||||
{
|
||||
type: 'add',
|
||||
path: join(rootDir, 'plugins/{{id}}/README.md'),
|
||||
templateFile: 'templates/README.md.hbs',
|
||||
},
|
||||
{
|
||||
type: 'add',
|
||||
path: join(rootDir, 'plugins/{{id}}/package.json'),
|
||||
templateFile: 'templates/plugin-package.json.hbs',
|
||||
},
|
||||
];
|
||||
},
|
||||
});
|
||||
|
||||
// Policy generator
|
||||
plop.setGenerator('policy', {
|
||||
description: 'Generate a policy for an API',
|
||||
prompts: [
|
||||
{
|
||||
type: 'input',
|
||||
name: 'id',
|
||||
message: 'Policy name',
|
||||
},
|
||||
...getDestinationPrompts('policy'),
|
||||
],
|
||||
actions: answers => {
|
||||
let filePath;
|
||||
if (answers.destination === 'api') {
|
||||
filePath = `api/{{api}}`;
|
||||
} else if (answers.destination === 'plugin') {
|
||||
filePath = `plugins/{{plugin}}`;
|
||||
} else {
|
||||
filePath = ``;
|
||||
}
|
||||
|
||||
return [
|
||||
{
|
||||
type: 'add',
|
||||
path: join(rootDir, `${filePath}/config/policies/{{id}}.js`),
|
||||
templateFile: 'templates/policy.js.hbs',
|
||||
},
|
||||
];
|
||||
},
|
||||
});
|
||||
|
||||
// Service generator
|
||||
plop.setGenerator('service', {
|
||||
description: 'Generate a service for an API',
|
||||
prompts: [
|
||||
{
|
||||
type: 'input',
|
||||
name: 'id',
|
||||
message: 'Service name',
|
||||
},
|
||||
...getDestinationPrompts('service'),
|
||||
],
|
||||
actions: answers => {
|
||||
const filePath = getFilePath(answers.destination);
|
||||
return [
|
||||
{
|
||||
type: 'add',
|
||||
path: join(rootDir, `${filePath}/services/{{id}}.js`),
|
||||
templateFile: 'templates/service.js.hbs',
|
||||
},
|
||||
];
|
||||
},
|
||||
});
|
||||
// Generators
|
||||
api(plop, rootDir);
|
||||
controller(plop, rootDir);
|
||||
model(plop, rootDir);
|
||||
plugin(plop, rootDir);
|
||||
policy(plop, rootDir);
|
||||
service(plop, rootDir);
|
||||
};
|
||||
|
||||
92
packages/generators/generate/plops/api.js
Normal file
92
packages/generators/generate/plops/api.js
Normal file
@ -0,0 +1,92 @@
|
||||
'use strict';
|
||||
|
||||
const { join } = require('path');
|
||||
const fs = require('fs-extra');
|
||||
|
||||
module.exports = (plop, rootDir) => {
|
||||
// API generator
|
||||
plop.setGenerator('api', {
|
||||
description: 'Generate a basic API',
|
||||
prompts: [
|
||||
{
|
||||
type: 'input',
|
||||
name: 'id',
|
||||
message: 'API name',
|
||||
},
|
||||
{
|
||||
type: 'list',
|
||||
name: 'kind',
|
||||
message: 'Please choose the model type',
|
||||
choices: [
|
||||
{ name: 'Collection Type', value: 'collectionType' },
|
||||
{ name: 'Singe Type', value: 'singleType' },
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'confirm',
|
||||
name: 'isPluginApi',
|
||||
message: 'Is this API for a plugin?',
|
||||
},
|
||||
{
|
||||
when: answers => answers.isPluginApi,
|
||||
type: 'input',
|
||||
name: 'plugin',
|
||||
message: 'Plugin name',
|
||||
validate: async input => {
|
||||
const exists = await fs.pathExists(join(rootDir, `plugins/${input}`));
|
||||
|
||||
return exists || 'That plugin does not exist, please try again';
|
||||
},
|
||||
},
|
||||
{
|
||||
type: 'confirm',
|
||||
name: 'useDraftAndPublish',
|
||||
message: 'Use draft and publish?',
|
||||
},
|
||||
],
|
||||
actions: answers => {
|
||||
let filePath;
|
||||
if (answers.isPluginApi && answers.plugin) {
|
||||
filePath = `plugins/{{plugin}}`;
|
||||
} else {
|
||||
filePath = `api/{{id}}`;
|
||||
}
|
||||
|
||||
const baseActions = [
|
||||
{
|
||||
type: 'add',
|
||||
path: join(rootDir, `${filePath}/controllers/{{id}}.js`),
|
||||
templateFile: 'templates/controller.js.hbs',
|
||||
},
|
||||
{
|
||||
type: 'add',
|
||||
path: join(rootDir, `${filePath}/models/{{id}}.js`),
|
||||
templateFile: 'templates/model.js.hbs',
|
||||
},
|
||||
{
|
||||
type: 'add',
|
||||
path: join(rootDir, `${filePath}/models/{{id}}.settings.json`),
|
||||
templateFile: 'templates/model.settings.json.hbs',
|
||||
},
|
||||
{
|
||||
type: 'add',
|
||||
path: join(rootDir, `${filePath}/services/{{id}}.js`),
|
||||
templateFile: 'templates/service.js.hbs',
|
||||
},
|
||||
];
|
||||
|
||||
if (answers.isPluginApi) {
|
||||
return baseActions;
|
||||
} else {
|
||||
return [
|
||||
{
|
||||
type: 'add',
|
||||
path: join(rootDir, `${filePath}/config/routes.json`),
|
||||
templateFile: 'templates/api-routes.json.hbs',
|
||||
},
|
||||
...baseActions,
|
||||
];
|
||||
}
|
||||
},
|
||||
});
|
||||
};
|
||||
31
packages/generators/generate/plops/controller.js
Normal file
31
packages/generators/generate/plops/controller.js
Normal file
@ -0,0 +1,31 @@
|
||||
'use strict';
|
||||
|
||||
const { join } = require('path');
|
||||
const getDestinationPrompts = require('./utils/get-destination-prompts');
|
||||
const getFilePath = require('./utils/get-file-path');
|
||||
|
||||
module.exports = (plop, rootDir) => {
|
||||
// Controller generator
|
||||
plop.setGenerator('controller', {
|
||||
description: 'Generate a controller for an API',
|
||||
prompts: [
|
||||
{
|
||||
type: 'input',
|
||||
name: 'id',
|
||||
message: 'Controller name',
|
||||
},
|
||||
...getDestinationPrompts('controller'),
|
||||
],
|
||||
actions: answers => {
|
||||
const filePath = getFilePath(answers.destination);
|
||||
|
||||
return [
|
||||
{
|
||||
type: 'add',
|
||||
path: join(rootDir, `${filePath}/controllers/{{id}}.js`),
|
||||
templateFile: 'templates/controller.js.hbs',
|
||||
},
|
||||
];
|
||||
},
|
||||
});
|
||||
};
|
||||
115
packages/generators/generate/plops/model.js
Normal file
115
packages/generators/generate/plops/model.js
Normal file
@ -0,0 +1,115 @@
|
||||
'use strict';
|
||||
|
||||
const { join } = require('path');
|
||||
const getDestinationPrompts = require('./utils/get-destination-prompts');
|
||||
const getFilePath = require('./utils/get-file-path');
|
||||
|
||||
const DEFAULT_TYPES = [
|
||||
// advanced types
|
||||
'media',
|
||||
|
||||
// scalar types
|
||||
'string',
|
||||
'text',
|
||||
'richtext',
|
||||
'json',
|
||||
'enumeration',
|
||||
'password',
|
||||
'email',
|
||||
'integer',
|
||||
'biginteger',
|
||||
'float',
|
||||
'decimal',
|
||||
'date',
|
||||
'time',
|
||||
'datetime',
|
||||
'timestamp',
|
||||
'boolean',
|
||||
|
||||
'relation',
|
||||
];
|
||||
|
||||
module.exports = (plop, rootDir) => {
|
||||
// Model generator
|
||||
plop.setGenerator('model', {
|
||||
description: 'Generate a model for an API',
|
||||
prompts: [
|
||||
{
|
||||
type: 'input',
|
||||
name: 'id',
|
||||
message: 'Model name',
|
||||
},
|
||||
{
|
||||
type: 'list',
|
||||
name: 'kind',
|
||||
message: 'Please choose the model type',
|
||||
choices: [
|
||||
{ name: 'Collection Type', value: 'collectionType' },
|
||||
{ name: 'Singe Type', value: 'singleType' },
|
||||
],
|
||||
},
|
||||
...getDestinationPrompts('model'),
|
||||
{
|
||||
type: 'confirm',
|
||||
name: 'useDraftAndPublish',
|
||||
message: 'Use draft and publish?',
|
||||
},
|
||||
{
|
||||
type: 'recursive',
|
||||
message: 'Add attribute?',
|
||||
name: 'attributes',
|
||||
prompts: [
|
||||
{
|
||||
type: 'input',
|
||||
name: 'attributeName',
|
||||
message: 'Name of attribute',
|
||||
},
|
||||
{
|
||||
type: 'list',
|
||||
name: 'attributeType',
|
||||
message: 'What type of attribute',
|
||||
pageSize: DEFAULT_TYPES.length,
|
||||
choices: DEFAULT_TYPES.map(type => {
|
||||
return { name: type, value: type };
|
||||
}),
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
actions: answers => {
|
||||
const attributes = answers.attributes.reduce((object, answer) => {
|
||||
// Rest/spread properties are not supported until Node.js 8.3.0.
|
||||
// The configured version range is '>=8.0.0'
|
||||
return Object.assign(
|
||||
object,
|
||||
{ [answer.attributeName]: { type: answer.attributeType } },
|
||||
{}
|
||||
);
|
||||
}, {});
|
||||
|
||||
const filePath = getFilePath(answers.destination);
|
||||
|
||||
return [
|
||||
{
|
||||
type: 'add',
|
||||
path: join(rootDir, `${filePath}/models/{{id}}.js`),
|
||||
templateFile: 'templates/model.js.hbs',
|
||||
},
|
||||
{
|
||||
type: 'add',
|
||||
path: join(rootDir, `${filePath}/models/{{id}}.settings.json`),
|
||||
templateFile: 'templates/model.settings.json.hbs',
|
||||
},
|
||||
{
|
||||
type: 'modify',
|
||||
path: join(rootDir, `${filePath}/models/{{id}}.settings.json`),
|
||||
transform: template => {
|
||||
const temp = JSON.parse(template);
|
||||
temp.attributes = attributes;
|
||||
return JSON.stringify(temp, null, 2);
|
||||
},
|
||||
},
|
||||
];
|
||||
},
|
||||
});
|
||||
};
|
||||
48
packages/generators/generate/plops/plugin.js
Normal file
48
packages/generators/generate/plops/plugin.js
Normal file
@ -0,0 +1,48 @@
|
||||
'use strict';
|
||||
|
||||
const { join } = require('path');
|
||||
const fs = require('fs-extra');
|
||||
|
||||
module.exports = (plop, rootDir) => {
|
||||
// Plugin generator
|
||||
plop.setGenerator('plugin', {
|
||||
description: 'Generate a basic plugin',
|
||||
prompts: [
|
||||
{
|
||||
type: 'input',
|
||||
name: 'id',
|
||||
message: 'Plugin name',
|
||||
},
|
||||
],
|
||||
actions: answers => {
|
||||
fs.copySync(join(__dirname, 'files', 'plugin'), join(rootDir, 'plugins', answers.id));
|
||||
return [
|
||||
{
|
||||
type: 'add',
|
||||
path: join(rootDir, 'plugins/{{id}}/services/{{id}}.js'),
|
||||
templateFile: 'templates/service.js.hbs',
|
||||
},
|
||||
{
|
||||
type: 'add',
|
||||
path: join(rootDir, 'plugins/{{id}}/controllers/{{id}}.js'),
|
||||
templateFile: 'templates/controller.js.hbs',
|
||||
},
|
||||
{
|
||||
type: 'add',
|
||||
path: join(rootDir, 'plugins/{{id}}/config/routes.json'),
|
||||
templateFile: 'templates/plugin-routes.json.hbs',
|
||||
},
|
||||
{
|
||||
type: 'add',
|
||||
path: join(rootDir, 'plugins/{{id}}/README.md'),
|
||||
templateFile: 'templates/README.md.hbs',
|
||||
},
|
||||
{
|
||||
type: 'add',
|
||||
path: join(rootDir, 'plugins/{{id}}/package.json'),
|
||||
templateFile: 'templates/plugin-package.json.hbs',
|
||||
},
|
||||
];
|
||||
},
|
||||
});
|
||||
};
|
||||
37
packages/generators/generate/plops/policy.js
Normal file
37
packages/generators/generate/plops/policy.js
Normal file
@ -0,0 +1,37 @@
|
||||
'use strict';
|
||||
|
||||
const { join } = require('path');
|
||||
const getDestinationPrompts = require('./utils/get-destination-prompts');
|
||||
|
||||
module.exports = (plop, rootDir) => {
|
||||
// Policy generator
|
||||
plop.setGenerator('policy', {
|
||||
description: 'Generate a policy for an API',
|
||||
prompts: [
|
||||
{
|
||||
type: 'input',
|
||||
name: 'id',
|
||||
message: 'Policy name',
|
||||
},
|
||||
...getDestinationPrompts('policy'),
|
||||
],
|
||||
actions: answers => {
|
||||
let filePath;
|
||||
if (answers.destination === 'api') {
|
||||
filePath = `api/{{api}}`;
|
||||
} else if (answers.destination === 'plugin') {
|
||||
filePath = `plugins/{{plugin}}`;
|
||||
} else {
|
||||
filePath = ``;
|
||||
}
|
||||
|
||||
return [
|
||||
{
|
||||
type: 'add',
|
||||
path: join(rootDir, `${filePath}/config/policies/{{id}}.js`),
|
||||
templateFile: 'templates/policy.js.hbs',
|
||||
},
|
||||
];
|
||||
},
|
||||
});
|
||||
};
|
||||
30
packages/generators/generate/plops/service.js
Normal file
30
packages/generators/generate/plops/service.js
Normal file
@ -0,0 +1,30 @@
|
||||
'use strict';
|
||||
|
||||
const { join } = require('path');
|
||||
const getDestinationPrompts = require('./utils/get-destination-prompts');
|
||||
const getFilePath = require('./utils/get-file-path');
|
||||
|
||||
module.exports = (plop, rootDir) => {
|
||||
// Service generator
|
||||
plop.setGenerator('service', {
|
||||
description: 'Generate a service for an API',
|
||||
prompts: [
|
||||
{
|
||||
type: 'input',
|
||||
name: 'id',
|
||||
message: 'Service name',
|
||||
},
|
||||
...getDestinationPrompts('service'),
|
||||
],
|
||||
actions: answers => {
|
||||
const filePath = getFilePath(answers.destination);
|
||||
return [
|
||||
{
|
||||
type: 'add',
|
||||
path: join(rootDir, `${filePath}/services/{{id}}.js`),
|
||||
templateFile: 'templates/service.js.hbs',
|
||||
},
|
||||
];
|
||||
},
|
||||
});
|
||||
};
|
||||
@ -0,0 +1,43 @@
|
||||
'use strict';
|
||||
const { join } = require('path');
|
||||
const fs = require('fs-extra');
|
||||
|
||||
module.exports = (action, rootDir) => {
|
||||
return [
|
||||
{
|
||||
type: 'list',
|
||||
name: 'destination',
|
||||
message: `Where do you want to add this ${action}?`,
|
||||
choices: [
|
||||
{
|
||||
name: `Add ${action} to ${action === 'policy' ? 'root of project' : 'new API'}`,
|
||||
value: 'new',
|
||||
},
|
||||
{ name: `Add ${action} to existing API`, value: 'api' },
|
||||
{ name: `Add ${action} to existing plugin`, value: 'plugin' },
|
||||
],
|
||||
},
|
||||
{
|
||||
when: answers => answers.destination === 'api',
|
||||
type: 'input',
|
||||
message: 'Which API is this for?',
|
||||
name: 'api',
|
||||
validate: async input => {
|
||||
const exists = await fs.pathExists(join(rootDir, `api/${input}`));
|
||||
|
||||
return exists || 'That api does not exist, please try again';
|
||||
},
|
||||
},
|
||||
{
|
||||
when: answers => answers.destination === 'plugin',
|
||||
type: 'input',
|
||||
message: 'Which plugin is this for?',
|
||||
name: 'plugin',
|
||||
validate: async input => {
|
||||
const exists = await fs.pathExists(join(rootDir, `plugins/${input}`));
|
||||
|
||||
return exists || 'That plugin does not exist, please try again';
|
||||
},
|
||||
},
|
||||
];
|
||||
};
|
||||
13
packages/generators/generate/plops/utils/get-file-path.js
Normal file
13
packages/generators/generate/plops/utils/get-file-path.js
Normal file
@ -0,0 +1,13 @@
|
||||
'use strict';
|
||||
|
||||
module.exports = destination => {
|
||||
if (destination === 'api') {
|
||||
return `api/{{api}}`;
|
||||
}
|
||||
|
||||
if (destination === 'plugin') {
|
||||
return `plugins/{{plugin}}`;
|
||||
}
|
||||
|
||||
return `api/{{id}}`;
|
||||
};
|
||||
@ -8,6 +8,5 @@
|
||||
"options": {
|
||||
"draftAndPublish": {{useDraftAndPublish}},
|
||||
"comment": ""
|
||||
},
|
||||
"attributes": {}
|
||||
}
|
||||
}
|
||||
27
yarn.lock
27
yarn.lock
@ -11187,26 +11187,6 @@ inquirer@8.1.0:
|
||||
strip-ansi "^6.0.0"
|
||||
through "^2.3.6"
|
||||
|
||||
inquirer@8.1.2:
|
||||
version "8.1.2"
|
||||
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.1.2.tgz#65b204d2cd7fb63400edd925dfe428bafd422e3d"
|
||||
integrity sha512-DHLKJwLPNgkfwNmsuEUKSejJFbkv0FMO9SMiQbjI3n5NQuCrSIBqP66ggqyz2a6t2qEolKrMjhQ3+W/xXgUQ+Q==
|
||||
dependencies:
|
||||
ansi-escapes "^4.2.1"
|
||||
chalk "^4.1.1"
|
||||
cli-cursor "^3.1.0"
|
||||
cli-width "^3.0.0"
|
||||
external-editor "^3.0.3"
|
||||
figures "^3.0.0"
|
||||
lodash "^4.17.21"
|
||||
mute-stream "0.0.8"
|
||||
ora "^5.3.0"
|
||||
run-async "^2.4.0"
|
||||
rxjs "^7.2.0"
|
||||
string-width "^4.1.0"
|
||||
strip-ansi "^6.0.0"
|
||||
through "^2.3.6"
|
||||
|
||||
inquirer@^6.2.0, inquirer@^6.2.1, inquirer@^6.3.1:
|
||||
version "6.5.2"
|
||||
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca"
|
||||
@ -18282,13 +18262,6 @@ rxjs@^6.4.0, rxjs@^6.6.0, rxjs@^6.6.6, rxjs@^6.6.7:
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
rxjs@^7.2.0:
|
||||
version "7.3.0"
|
||||
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.3.0.tgz#39fe4f3461dc1e50be1475b2b85a0a88c1e938c6"
|
||||
integrity sha512-p2yuGIg9S1epc3vrjKf6iVb3RCaAYjYskkO+jHIaV0IjOPlJop4UnodOoFb2xeNwlguqLYvGw1b1McillYb5Gw==
|
||||
dependencies:
|
||||
tslib "~2.1.0"
|
||||
|
||||
safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user