@strapi/generators
Version:
Interactive API generator.
76 lines (72 loc) • 3.11 kB
JavaScript
;
var tsUtils = require('@strapi/typescript-utils');
var path = require('path');
var fs = require('fs');
var getDestinationPrompts = require('./prompts/get-destination-prompts.js');
var validateInput = require('./utils/validate-input.js');
var getFilePath = require('./utils/get-file-path.js');
var extendPluginIndexFiles = require('./utils/extend-plugin-index-files.js');
var generateMiddleware = ((plop)=>{
// middleware generator
plop.setGenerator('middleware', {
description: 'Generate a middleware for an API',
prompts: [
{
type: 'input',
name: 'name',
message: 'Middleware name',
validate: (input)=>validateInput(input)
},
...getDestinationPrompts('middleware', plop.getDestBasePath(), {
rootFolder: true
})
],
actions (answers) {
if (!answers) {
return [];
}
const filePath = getFilePath(answers.destination);
const currentDir = process.cwd();
let language = tsUtils.isUsingTypeScriptSync(currentDir) ? 'ts' : 'js';
if (answers.plugin) {
// The tsconfig in plugins is located just outside the server src, not in the root of the plugin.
const pluginServerDir = path.join(currentDir, 'src', filePath.replace('{{ plugin }}', answers.plugin), '../');
language = tsUtils.isUsingTypeScriptSync(pluginServerDir) ? 'ts' : 'js';
}
const baseActions = [
{
type: 'add',
path: `${filePath}/middlewares/{{ name }}.${language}`,
templateFile: `templates/${language}/middleware.${language}.hbs`
}
];
if (answers.plugin) {
const indexPath = path.join(plop.getDestBasePath(), `${filePath}/middlewares/index.${language}`);
const exists = fs.existsSync(indexPath);
if (!exists) {
// Create index file if it doesn't exist
baseActions.push({
type: 'add',
path: `${filePath}/middlewares/index.${language}`,
templateFile: `templates/${language}/plugin/plugin.index.${language}.hbs`,
skipIfExists: true
});
}
// Append the new middleware to the index.ts file
baseActions.push({
type: 'modify',
path: `${filePath}/middlewares/index.${language}`,
transform (template) {
return extendPluginIndexFiles.appendToFile(template, {
type: 'index',
singularName: answers.name
});
}
});
}
return baseActions;
}
});
});
module.exports = generateMiddleware;
//# sourceMappingURL=middleware.js.map