From 89b02e871e02220efcfb2b5b19ed01055af1503d Mon Sep 17 00:00:00 2001 From: Alexandre Bodin Date: Sat, 28 Aug 2021 10:50:46 +0200 Subject: [PATCH] Org package to be consistent, complete package.json and add missing package files --- .eslintignore | 2 +- .../core/content-type-builder/package.json | 2 +- .../server/services/content-types.js | 4 +- packages/core/strapi/bin/strapi.js | 3 +- packages/core/strapi/package.json | 4 +- packages/generators/generate/package.json | 17 --- .../files/plugin => generators}/.editorconfig | 0 .../plugin => generators}/.gitattributes | 0 .../i18n => generators/generators}/.gitignore | 0 packages/generators/generators/.npmignore | 103 ++++++++++++++++++ packages/generators/generators/LICENSE | 22 ++++ packages/generators/generators/README.md | 18 +++ .../lib/files/plugin}/.editorconfig | 0 .../lib/files/plugin}/.gitattributes | 0 .../lib}/files/plugin/.gitignore | 0 .../admin/src/components/Initializer/index.js | 0 .../plugin/admin/src/containers/App/index.js | 0 .../admin/src/containers/HomePage/index.js | 0 .../admin/src/containers/Initializer/index.js | 0 .../lib}/files/plugin/admin/src/index.js | 0 .../files/plugin/admin/src/pages/App/index.js | 0 .../plugin/admin/src/pages/HomePage/index.js | 0 .../lib}/files/plugin/admin/src/pluginId.js | 0 .../plugin/admin/src/translations/en.json | 0 .../plugin/admin/src/translations/fr.json | 0 .../files/plugin/admin/src/utils/getTrad.js | 0 .../{generate => generators/lib}/index.js | 20 +++- .../{generate => generators/lib}/plopfile.js | 0 .../{generate => generators/lib}/plops/api.js | 6 +- .../lib}/plops/controller.js | 2 +- .../lib}/plops/model.js | 4 + .../lib}/plops/plugin.js | 14 ++- .../lib}/plops/policy.js | 4 +- .../lib}/plops/service.js | 2 +- .../plops/utils/get-destination-prompts.js | 7 +- .../lib}/plops/utils/get-file-path.js | 0 .../lib}/plops/utils/validate-input.js | 0 .../lib}/templates/README.md.hbs | 0 .../templates/collection-type-routes.json.hbs | 0 .../lib}/templates/controller.js.hbs | 0 .../lib}/templates/model.js.hbs | 0 .../lib}/templates/model.settings.json.hbs | 0 .../lib}/templates/plugin-package.json.hbs | 0 .../lib}/templates/plugin-routes.json.hbs | 0 .../lib}/templates/policy.js.hbs | 0 .../lib}/templates/service.js.hbs | 0 .../templates/single-type-routes.json.hbs | 0 packages/generators/generators/package.json | 41 +++++++ 48 files changed, 228 insertions(+), 47 deletions(-) delete mode 100644 packages/generators/generate/package.json rename packages/generators/{generate/files/plugin => generators}/.editorconfig (100%) rename packages/generators/{generate/files/plugin => generators}/.gitattributes (100%) rename packages/{plugins/i18n => generators/generators}/.gitignore (100%) create mode 100644 packages/generators/generators/.npmignore create mode 100644 packages/generators/generators/LICENSE create mode 100644 packages/generators/generators/README.md rename packages/{plugins/i18n => generators/generators/lib/files/plugin}/.editorconfig (100%) rename packages/{plugins/i18n => generators/generators/lib/files/plugin}/.gitattributes (100%) rename packages/generators/{generate => generators/lib}/files/plugin/.gitignore (100%) rename packages/generators/{generate => generators/lib}/files/plugin/admin/src/components/Initializer/index.js (100%) rename packages/generators/{generate => generators/lib}/files/plugin/admin/src/containers/App/index.js (100%) rename packages/generators/{generate => generators/lib}/files/plugin/admin/src/containers/HomePage/index.js (100%) rename packages/generators/{generate => generators/lib}/files/plugin/admin/src/containers/Initializer/index.js (100%) rename packages/generators/{generate => generators/lib}/files/plugin/admin/src/index.js (100%) rename packages/generators/{generate => generators/lib}/files/plugin/admin/src/pages/App/index.js (100%) rename packages/generators/{generate => generators/lib}/files/plugin/admin/src/pages/HomePage/index.js (100%) rename packages/generators/{generate => generators/lib}/files/plugin/admin/src/pluginId.js (100%) rename packages/generators/{generate => generators/lib}/files/plugin/admin/src/translations/en.json (100%) rename packages/generators/{generate => generators/lib}/files/plugin/admin/src/translations/fr.json (100%) rename packages/generators/{generate => generators/lib}/files/plugin/admin/src/utils/getTrad.js (100%) rename packages/generators/{generate => generators/lib}/index.js (50%) rename packages/generators/{generate => generators/lib}/plopfile.js (100%) rename packages/generators/{generate => generators/lib}/plops/api.js (93%) rename packages/generators/{generate => generators/lib}/plops/controller.js (96%) rename packages/generators/{generate => generators/lib}/plops/model.js (95%) rename packages/generators/{generate => generators/lib}/plops/plugin.js (81%) rename packages/generators/{generate => generators/lib}/plops/policy.js (93%) rename packages/generators/{generate => generators/lib}/plops/service.js (96%) rename packages/generators/{generate => generators/lib}/plops/utils/get-destination-prompts.js (89%) rename packages/generators/{generate => generators/lib}/plops/utils/get-file-path.js (100%) rename packages/generators/{generate => generators/lib}/plops/utils/validate-input.js (100%) rename packages/generators/{generate => generators/lib}/templates/README.md.hbs (100%) rename packages/generators/{generate => generators/lib}/templates/collection-type-routes.json.hbs (100%) rename packages/generators/{generate => generators/lib}/templates/controller.js.hbs (100%) rename packages/generators/{generate => generators/lib}/templates/model.js.hbs (100%) rename packages/generators/{generate => generators/lib}/templates/model.settings.json.hbs (100%) rename packages/generators/{generate => generators/lib}/templates/plugin-package.json.hbs (100%) rename packages/generators/{generate => generators/lib}/templates/plugin-routes.json.hbs (100%) rename packages/generators/{generate => generators/lib}/templates/policy.js.hbs (100%) rename packages/generators/{generate => generators/lib}/templates/service.js.hbs (100%) rename packages/generators/{generate => generators/lib}/templates/single-type-routes.json.hbs (100%) create mode 100644 packages/generators/generators/package.json diff --git a/.eslintignore b/.eslintignore index 8919593f5d..26c10e7162 100644 --- a/.eslintignore +++ b/.eslintignore @@ -5,7 +5,7 @@ testApp/** examples/** cypress/** -packages/generators/generate/files/ +packages/generators/generators/lib/files/ packages/core/helper-plugin/build/** packages/core/helper-plugin/lib/src/components/** packages/core/helper-plugin/lib/src/testUtils/** diff --git a/packages/core/content-type-builder/package.json b/packages/core/content-type-builder/package.json index 799dea8098..250c00dbde 100644 --- a/packages/core/content-type-builder/package.json +++ b/packages/core/content-type-builder/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "@sindresorhus/slugify": "1.1.0", - "@strapi/generate": "3.6.8", + "@strapi/generators": "3.6.8", "@strapi/helper-plugin": "3.6.8", "@strapi/utils": "3.6.8", "fs-extra": "^9.1.0", diff --git a/packages/core/content-type-builder/server/services/content-types.js b/packages/core/content-type-builder/server/services/content-types.js index 09d4a4f07d..0fd1615ce7 100644 --- a/packages/core/content-type-builder/server/services/content-types.js +++ b/packages/core/content-type-builder/server/services/content-types.js @@ -2,7 +2,7 @@ const _ = require('lodash'); const { getOr } = require('lodash/fp'); -const generator = require('@strapi/generate'); +const strapiGenerators = require('@strapi/generators'); const { nameToSlug, contentTypes: contentTypesUtils } = require('@strapi/utils'); const { formatAttributes, replaceTemporaryUIDs } = require('../utils/attributes'); @@ -127,7 +127,7 @@ const createContentType = async ({ contentType, components = [] }, options = {}) * @param {string} name */ const generateAPI = ({ name, kind = 'collectionType' }) => { - return generator.generate('api', { id: nameToSlug(name), kind }, { dir: strapi.dir }); + return strapiGenerators.generate('api', { id: nameToSlug(name), kind }, { dir: strapi.dir }); }; /** diff --git a/packages/core/strapi/bin/strapi.js b/packages/core/strapi/bin/strapi.js index 2998f282d1..db09a7b8bb 100755 --- a/packages/core/strapi/bin/strapi.js +++ b/packages/core/strapi/bin/strapi.js @@ -124,7 +124,8 @@ program .description('Launch interactive API generator') .action(() => { checkCwdIsStrapiApp('generate'); - require('@strapi/generate').execute(); + process.argv.splice(2, 1); + require('@strapi/generators').runCLI(); }); // `$ strapi generate:template ` diff --git a/packages/core/strapi/package.json b/packages/core/strapi/package.json index 57a80f48e7..035bd65a67 100644 --- a/packages/core/strapi/package.json +++ b/packages/core/strapi/package.json @@ -16,7 +16,7 @@ "@koa/cors": "^3.0.0", "@strapi/admin": "3.6.8", "@strapi/database": "3.6.8", - "@strapi/generate": "3.6.8", + "@strapi/generators": "3.6.8", "@strapi/generate-new": "3.6.8", "@strapi/logger": "3.6.8", "@strapi/utils": "3.6.8", @@ -135,4 +135,4 @@ "reactjs" ], "gitHead": "231263a3535658bab1e9492c6aaaed8692d62a53" -} \ No newline at end of file +} diff --git a/packages/generators/generate/package.json b/packages/generators/generate/package.json deleted file mode 100644 index c9515e05e3..0000000000 --- a/packages/generators/generate/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "@strapi/generate", - "version": "3.6.8", - "description": "Interactive API generator.", - "main": "index.js", - "license": "MIT", - "dependencies": { - "fs-extra": "10.0.0", - "node-plop": "0.26.2", - "plop": "2.7.4", - "pluralize": "8.0.0" - }, - "engines": { - "node": ">=12.x.x <=16.x.x", - "npm": ">=6.0.0" - } -} diff --git a/packages/generators/generate/files/plugin/.editorconfig b/packages/generators/generators/.editorconfig similarity index 100% rename from packages/generators/generate/files/plugin/.editorconfig rename to packages/generators/generators/.editorconfig diff --git a/packages/generators/generate/files/plugin/.gitattributes b/packages/generators/generators/.gitattributes similarity index 100% rename from packages/generators/generate/files/plugin/.gitattributes rename to packages/generators/generators/.gitattributes diff --git a/packages/plugins/i18n/.gitignore b/packages/generators/generators/.gitignore similarity index 100% rename from packages/plugins/i18n/.gitignore rename to packages/generators/generators/.gitignore diff --git a/packages/generators/generators/.npmignore b/packages/generators/generators/.npmignore new file mode 100644 index 0000000000..a788251bc6 --- /dev/null +++ b/packages/generators/generators/.npmignore @@ -0,0 +1,103 @@ +############################ +# OS X +############################ + +.DS_Store +.AppleDouble +.LSOverride +Icon +.Spotlight-V100 +.Trashes +._* + + +############################ +# Linux +############################ + +*~ + + +############################ +# Windows +############################ + +Thumbs.db +ehthumbs.db +Desktop.ini +$RECYCLE.BIN/ +*.cab +*.msi +*.msm +*.msp + + +############################ +# Packages +############################ + +*.7z +*.csv +*.dat +*.dmg +*.gz +*.iso +*.jar +*.rar +*.tar +*.zip +*.com +*.class +*.dll +*.exe +*.o +*.seed +*.so +*.swo +*.swp +*.swn +*.swm +*.out +*.pid + + +############################ +# Logs and databases +############################ + +*.log +*.sql + + +############################ +# Misc. +############################ + +*# +ssl +.editorconfig +.gitattributes +.idea +nbproject + + +############################ +# Node.js +############################ + +lib-cov +lcov.info +pids +logs +results +node_modules +.node_history + + +############################ +# Tests +############################ + +test +testApp +coverage diff --git a/packages/generators/generators/LICENSE b/packages/generators/generators/LICENSE new file mode 100644 index 0000000000..638baf882b --- /dev/null +++ b/packages/generators/generators/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2015-present Strapi Solutions SAS + +Portions of the Strapi software are licensed as follows: + +* All software that resides under an "ee/" directory (the “EE Software”), if that directory exists, is licensed under the license defined in "ee/LICENSE". + +* All software outside of the above-mentioned directories or restrictions above is available under the "MIT Expat" license as set forth below. + +MIT Expat License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/packages/generators/generators/README.md b/packages/generators/generators/README.md new file mode 100644 index 0000000000..ee26cbe562 --- /dev/null +++ b/packages/generators/generators/README.md @@ -0,0 +1,18 @@ +# @strapi/generators + +This package contains strapi code generators available through the CLI or programmatically. + +## API Reference + +### `runCLI()` + +Start the generator CLI. + +### `generate(generatorName, options, plopOptions)` + +Execute a generator without interactive mode. + +- `generatorName` - one of `api`, `controller`, `service`, `model`, `plugin`, `policy`. +- `options` - options are specific to each generator +- `plopOtions` + - `dir`: base directory that plop will use as base directory for its actions diff --git a/packages/plugins/i18n/.editorconfig b/packages/generators/generators/lib/files/plugin/.editorconfig similarity index 100% rename from packages/plugins/i18n/.editorconfig rename to packages/generators/generators/lib/files/plugin/.editorconfig diff --git a/packages/plugins/i18n/.gitattributes b/packages/generators/generators/lib/files/plugin/.gitattributes similarity index 100% rename from packages/plugins/i18n/.gitattributes rename to packages/generators/generators/lib/files/plugin/.gitattributes diff --git a/packages/generators/generate/files/plugin/.gitignore b/packages/generators/generators/lib/files/plugin/.gitignore similarity index 100% rename from packages/generators/generate/files/plugin/.gitignore rename to packages/generators/generators/lib/files/plugin/.gitignore diff --git a/packages/generators/generate/files/plugin/admin/src/components/Initializer/index.js b/packages/generators/generators/lib/files/plugin/admin/src/components/Initializer/index.js similarity index 100% rename from packages/generators/generate/files/plugin/admin/src/components/Initializer/index.js rename to packages/generators/generators/lib/files/plugin/admin/src/components/Initializer/index.js diff --git a/packages/generators/generate/files/plugin/admin/src/containers/App/index.js b/packages/generators/generators/lib/files/plugin/admin/src/containers/App/index.js similarity index 100% rename from packages/generators/generate/files/plugin/admin/src/containers/App/index.js rename to packages/generators/generators/lib/files/plugin/admin/src/containers/App/index.js diff --git a/packages/generators/generate/files/plugin/admin/src/containers/HomePage/index.js b/packages/generators/generators/lib/files/plugin/admin/src/containers/HomePage/index.js similarity index 100% rename from packages/generators/generate/files/plugin/admin/src/containers/HomePage/index.js rename to packages/generators/generators/lib/files/plugin/admin/src/containers/HomePage/index.js diff --git a/packages/generators/generate/files/plugin/admin/src/containers/Initializer/index.js b/packages/generators/generators/lib/files/plugin/admin/src/containers/Initializer/index.js similarity index 100% rename from packages/generators/generate/files/plugin/admin/src/containers/Initializer/index.js rename to packages/generators/generators/lib/files/plugin/admin/src/containers/Initializer/index.js diff --git a/packages/generators/generate/files/plugin/admin/src/index.js b/packages/generators/generators/lib/files/plugin/admin/src/index.js similarity index 100% rename from packages/generators/generate/files/plugin/admin/src/index.js rename to packages/generators/generators/lib/files/plugin/admin/src/index.js diff --git a/packages/generators/generate/files/plugin/admin/src/pages/App/index.js b/packages/generators/generators/lib/files/plugin/admin/src/pages/App/index.js similarity index 100% rename from packages/generators/generate/files/plugin/admin/src/pages/App/index.js rename to packages/generators/generators/lib/files/plugin/admin/src/pages/App/index.js diff --git a/packages/generators/generate/files/plugin/admin/src/pages/HomePage/index.js b/packages/generators/generators/lib/files/plugin/admin/src/pages/HomePage/index.js similarity index 100% rename from packages/generators/generate/files/plugin/admin/src/pages/HomePage/index.js rename to packages/generators/generators/lib/files/plugin/admin/src/pages/HomePage/index.js diff --git a/packages/generators/generate/files/plugin/admin/src/pluginId.js b/packages/generators/generators/lib/files/plugin/admin/src/pluginId.js similarity index 100% rename from packages/generators/generate/files/plugin/admin/src/pluginId.js rename to packages/generators/generators/lib/files/plugin/admin/src/pluginId.js diff --git a/packages/generators/generate/files/plugin/admin/src/translations/en.json b/packages/generators/generators/lib/files/plugin/admin/src/translations/en.json similarity index 100% rename from packages/generators/generate/files/plugin/admin/src/translations/en.json rename to packages/generators/generators/lib/files/plugin/admin/src/translations/en.json diff --git a/packages/generators/generate/files/plugin/admin/src/translations/fr.json b/packages/generators/generators/lib/files/plugin/admin/src/translations/fr.json similarity index 100% rename from packages/generators/generate/files/plugin/admin/src/translations/fr.json rename to packages/generators/generators/lib/files/plugin/admin/src/translations/fr.json diff --git a/packages/generators/generate/files/plugin/admin/src/utils/getTrad.js b/packages/generators/generators/lib/files/plugin/admin/src/utils/getTrad.js similarity index 100% rename from packages/generators/generate/files/plugin/admin/src/utils/getTrad.js rename to packages/generators/generators/lib/files/plugin/admin/src/utils/getTrad.js diff --git a/packages/generators/generate/index.js b/packages/generators/generators/lib/index.js similarity index 50% rename from packages/generators/generate/index.js rename to packages/generators/generators/lib/index.js index 04032cbde4..ce385d8b2e 100644 --- a/packages/generators/generate/index.js +++ b/packages/generators/generators/lib/index.js @@ -1,21 +1,29 @@ 'use strict'; -process.argv.splice(2, 1); - const { join } = require('path'); const { Plop, run } = require('plop'); const nodePlop = require('node-plop'); -const execute = () => { +/** + * Starts the Plop CLI programmatically + */ +const runCLI = () => { Plop.launch({ configPath: join(__dirname, 'plopfile.js') }, env => run({ ...env, dest: process.cwd() }, undefined, true) ); }; -const generate = async (action, options, { dir = process.cwd() } = {}) => { +/** + * Runs a generator programmatically without prompts + * @param {string} generatorName + * @param {Object} options generator options replacing the prompts answers + * @param {Object} plopOptions + * @param {string} plopOptions.dir base path for plop to generate the files from + */ +const generate = async (generatorName, options, { dir = process.cwd() } = {}) => { const plop = nodePlop(join(__dirname, 'plopfile.js'), { destBasePath: dir }); - const generator = plop.getGenerator(action); + const generator = plop.getGenerator(generatorName); await generator.runActions(options, { onSuccess: () => {}, onFailure: () => {}, @@ -25,5 +33,5 @@ const generate = async (action, options, { dir = process.cwd() } = {}) => { module.exports = { generate, - execute, + runCLI, }; diff --git a/packages/generators/generate/plopfile.js b/packages/generators/generators/lib/plopfile.js similarity index 100% rename from packages/generators/generate/plopfile.js rename to packages/generators/generators/lib/plopfile.js diff --git a/packages/generators/generate/plops/api.js b/packages/generators/generators/lib/plops/api.js similarity index 93% rename from packages/generators/generate/plops/api.js rename to packages/generators/generators/lib/plops/api.js index a73b1e2ecc..f15a6266a9 100644 --- a/packages/generators/generate/plops/api.js +++ b/packages/generators/generators/lib/plops/api.js @@ -33,10 +33,8 @@ module.exports = plop => { throw Error('Couldn\'t find a "plugins" directory'); } - const pluginsDir = await fs.readdir(pluginsPath); - const pluginsDirContent = pluginsDir.filter(api => - fs.lstatSync(join(pluginsPath, api)).isDirectory() - ); + const pluginsDir = await fs.readdir(pluginsPath, { withFileTypes: true }); + const pluginsDirContent = pluginsDir.filter(fd => fd.isDirectory()); if (pluginsDirContent.length === 0) { throw Error('The "plugins" directory is empty'); diff --git a/packages/generators/generate/plops/controller.js b/packages/generators/generators/lib/plops/controller.js similarity index 96% rename from packages/generators/generate/plops/controller.js rename to packages/generators/generators/lib/plops/controller.js index 827318a247..f58d484de1 100644 --- a/packages/generators/generate/plops/controller.js +++ b/packages/generators/generators/lib/plops/controller.js @@ -4,7 +4,7 @@ const getDestinationPrompts = require('./utils/get-destination-prompts'); const getFilePath = require('./utils/get-file-path'); const validateInput = require('./utils/validate-input'); -module.exports = (plop) => { +module.exports = plop => { // Controller generator plop.setGenerator('controller', { description: 'Generate a controller for an API', diff --git a/packages/generators/generate/plops/model.js b/packages/generators/generators/lib/plops/model.js similarity index 95% rename from packages/generators/generate/plops/model.js rename to packages/generators/generators/lib/plops/model.js index 94052e5e9b..9497688fda 100644 --- a/packages/generators/generate/plops/model.js +++ b/packages/generators/generators/lib/plops/model.js @@ -2,6 +2,7 @@ const getDestinationPrompts = require('./utils/get-destination-prompts'); const getFilePath = require('./utils/get-file-path'); +const validateInput = require('./utils/validate-input'); const DEFAULT_TYPES = [ // advanced types @@ -32,6 +33,7 @@ const promptConfigQuestions = (plop, inquirer) => { type: 'input', name: 'id', message: 'Model name', + validate: input => validateInput(input), }, { type: 'list', @@ -41,6 +43,7 @@ const promptConfigQuestions = (plop, inquirer) => { { name: 'Collection Type', value: 'collectionType' }, { name: 'Singe Type', value: 'singleType' }, ], + validate: input => validateInput(input), }, ...getDestinationPrompts('model', plop.getDestBasePath()), { @@ -62,6 +65,7 @@ const promptAttributeQuestions = inquirer => { type: 'input', name: 'attributeName', message: 'Name of attribute', + validate: input => validateInput(input), }, { type: 'list', diff --git a/packages/generators/generate/plops/plugin.js b/packages/generators/generators/lib/plops/plugin.js similarity index 81% rename from packages/generators/generate/plops/plugin.js rename to packages/generators/generators/lib/plops/plugin.js index f3312ed5f0..e5bdf96206 100644 --- a/packages/generators/generate/plops/plugin.js +++ b/packages/generators/generators/lib/plops/plugin.js @@ -1,9 +1,6 @@ 'use strict'; -const { join } = require('path'); -const fs = require('fs-extra'); - -module.exports = (plop) => { +module.exports = plop => { // Plugin generator plop.setGenerator('plugin', { description: 'Generate a basic plugin', @@ -14,9 +11,14 @@ module.exports = (plop) => { message: 'Plugin name', }, ], - actions: answers => { - fs.copySync(join(__dirname, '..', 'files', 'plugin'), join('plugins', answers.id)); + actions: () => { return [ + { + type: 'addMany', + destination: 'plugins/{{id}}/admin', + base: 'files/plugin/admin', + templateFiles: 'files/plugin/admin/**', + }, { type: 'add', path: 'plugins/{{id}}/services/{{id}}.js', diff --git a/packages/generators/generate/plops/policy.js b/packages/generators/generators/lib/plops/policy.js similarity index 93% rename from packages/generators/generate/plops/policy.js rename to packages/generators/generators/lib/plops/policy.js index 72f705c9b7..6199201fde 100644 --- a/packages/generators/generate/plops/policy.js +++ b/packages/generators/generators/lib/plops/policy.js @@ -2,7 +2,7 @@ const getDestinationPrompts = require('./utils/get-destination-prompts'); -module.exports = (plop) => { +module.exports = plop => { // Policy generator plop.setGenerator('policy', { description: 'Generate a policy for an API', @@ -21,7 +21,7 @@ module.exports = (plop) => { } else if (answers.destination === 'plugin') { filePath = `plugins/{{plugin}}`; } else { - filePath = ``; + filePath = `./`; } return [ diff --git a/packages/generators/generate/plops/service.js b/packages/generators/generators/lib/plops/service.js similarity index 96% rename from packages/generators/generate/plops/service.js rename to packages/generators/generators/lib/plops/service.js index 2ded6814c9..48fcbb7ee7 100644 --- a/packages/generators/generate/plops/service.js +++ b/packages/generators/generators/lib/plops/service.js @@ -3,7 +3,7 @@ const getDestinationPrompts = require('./utils/get-destination-prompts'); const getFilePath = require('./utils/get-file-path'); -module.exports = (plop) => { +module.exports = plop => { // Service generator plop.setGenerator('service', { description: 'Generate a service for an API', diff --git a/packages/generators/generate/plops/utils/get-destination-prompts.js b/packages/generators/generators/lib/plops/utils/get-destination-prompts.js similarity index 89% rename from packages/generators/generate/plops/utils/get-destination-prompts.js rename to packages/generators/generators/lib/plops/utils/get-destination-prompts.js index a0a8a47559..e117f119cf 100644 --- a/packages/generators/generate/plops/utils/get-destination-prompts.js +++ b/packages/generators/generators/lib/plops/utils/get-destination-prompts.js @@ -30,8 +30,9 @@ module.exports = (action, basePath) => { throw Error('Couldn\'t find an "api" directory'); } - const apiDir = await fs.readdir(apiPath); - const apiDirContent = apiDir.filter(api => fs.lstatSync(join(apiPath, api)).isDirectory()); + const apiDir = await fs.readdir(apiPath, { withFileTypes: true }); + const apiDirContent = apiDir.filter(fd => fd.isDirectory()); + if (apiDirContent.length === 0) { throw Error('The "api" directory is empty'); } @@ -45,7 +46,7 @@ module.exports = (action, basePath) => { message: 'Which plugin is this for?', name: 'plugin', choices: async () => { - const pluginsPath = join(basePath, 'plugins'); + const pluginsPath = join(basePath, 'plugins'); const exists = await fs.pathExists(pluginsPath); if (!exists) { diff --git a/packages/generators/generate/plops/utils/get-file-path.js b/packages/generators/generators/lib/plops/utils/get-file-path.js similarity index 100% rename from packages/generators/generate/plops/utils/get-file-path.js rename to packages/generators/generators/lib/plops/utils/get-file-path.js diff --git a/packages/generators/generate/plops/utils/validate-input.js b/packages/generators/generators/lib/plops/utils/validate-input.js similarity index 100% rename from packages/generators/generate/plops/utils/validate-input.js rename to packages/generators/generators/lib/plops/utils/validate-input.js diff --git a/packages/generators/generate/templates/README.md.hbs b/packages/generators/generators/lib/templates/README.md.hbs similarity index 100% rename from packages/generators/generate/templates/README.md.hbs rename to packages/generators/generators/lib/templates/README.md.hbs diff --git a/packages/generators/generate/templates/collection-type-routes.json.hbs b/packages/generators/generators/lib/templates/collection-type-routes.json.hbs similarity index 100% rename from packages/generators/generate/templates/collection-type-routes.json.hbs rename to packages/generators/generators/lib/templates/collection-type-routes.json.hbs diff --git a/packages/generators/generate/templates/controller.js.hbs b/packages/generators/generators/lib/templates/controller.js.hbs similarity index 100% rename from packages/generators/generate/templates/controller.js.hbs rename to packages/generators/generators/lib/templates/controller.js.hbs diff --git a/packages/generators/generate/templates/model.js.hbs b/packages/generators/generators/lib/templates/model.js.hbs similarity index 100% rename from packages/generators/generate/templates/model.js.hbs rename to packages/generators/generators/lib/templates/model.js.hbs diff --git a/packages/generators/generate/templates/model.settings.json.hbs b/packages/generators/generators/lib/templates/model.settings.json.hbs similarity index 100% rename from packages/generators/generate/templates/model.settings.json.hbs rename to packages/generators/generators/lib/templates/model.settings.json.hbs diff --git a/packages/generators/generate/templates/plugin-package.json.hbs b/packages/generators/generators/lib/templates/plugin-package.json.hbs similarity index 100% rename from packages/generators/generate/templates/plugin-package.json.hbs rename to packages/generators/generators/lib/templates/plugin-package.json.hbs diff --git a/packages/generators/generate/templates/plugin-routes.json.hbs b/packages/generators/generators/lib/templates/plugin-routes.json.hbs similarity index 100% rename from packages/generators/generate/templates/plugin-routes.json.hbs rename to packages/generators/generators/lib/templates/plugin-routes.json.hbs diff --git a/packages/generators/generate/templates/policy.js.hbs b/packages/generators/generators/lib/templates/policy.js.hbs similarity index 100% rename from packages/generators/generate/templates/policy.js.hbs rename to packages/generators/generators/lib/templates/policy.js.hbs diff --git a/packages/generators/generate/templates/service.js.hbs b/packages/generators/generators/lib/templates/service.js.hbs similarity index 100% rename from packages/generators/generate/templates/service.js.hbs rename to packages/generators/generators/lib/templates/service.js.hbs diff --git a/packages/generators/generate/templates/single-type-routes.json.hbs b/packages/generators/generators/lib/templates/single-type-routes.json.hbs similarity index 100% rename from packages/generators/generate/templates/single-type-routes.json.hbs rename to packages/generators/generators/lib/templates/single-type-routes.json.hbs diff --git a/packages/generators/generators/package.json b/packages/generators/generators/package.json new file mode 100644 index 0000000000..f4486908c1 --- /dev/null +++ b/packages/generators/generators/package.json @@ -0,0 +1,41 @@ +{ + "name": "@strapi/generators", + "version": "3.6.8", + "description": "Interactive API generator.", + "keywords": [ + "strapi", + "generators" + ], + "homepage": "https://strapi.io", + "bugs": { + "url": "https://github.com/strapi/strapi/issues" + }, + "repository": { + "type": "git", + "url": "git://github.com/strapi/strapi.git" + }, + "license": "SEE LICENSE IN LICENSE", + "author": { + "name": "Strapi team", + "email": "hi@strapi.io", + "url": "https://strapi.io" + }, + "maintainers": [ + { + "name": "Strapi team", + "email": "hi@strapi.io", + "url": "https://strapi.io" + } + ], + "main": "lib/index.js", + "dependencies": { + "fs-extra": "10.0.0", + "node-plop": "0.26.2", + "plop": "2.7.4", + "pluralize": "8.0.0" + }, + "engines": { + "node": ">=12.x.x <=16.x.x", + "npm": ">=6.0.0" + } +}