UNPKG

@strapi/generators

Version:

Interactive API generator.

76 lines (72 loc) 3.11 kB
'use strict'; 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