@strapi/generators 0.0.0-next.f7babb775ed9a7e18d8351cb7f74c63e016323c4 → 0.0.0-next.f86041c89a8c1545c6437a881dc613e98bc52bd7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/LICENSE +18 -3
  2. package/dist/index.d.ts +10 -5
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +92 -27
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.mjs +94 -0
  7. package/dist/index.mjs.map +1 -0
  8. package/dist/plopfile.d.ts +2 -1
  9. package/dist/plopfile.d.ts.map +1 -0
  10. package/dist/plopfile.js +24 -26
  11. package/dist/plopfile.js.map +1 -1
  12. package/dist/plopfile.mjs +25 -0
  13. package/dist/plopfile.mjs.map +1 -0
  14. package/dist/plops/api.d.ts +2 -1
  15. package/dist/plops/api.d.ts.map +1 -0
  16. package/dist/plops/api.js +107 -37
  17. package/dist/plops/api.js.map +1 -1
  18. package/dist/plops/api.mjs +147 -0
  19. package/dist/plops/api.mjs.map +1 -0
  20. package/dist/plops/content-type.d.ts +2 -1
  21. package/dist/plops/content-type.d.ts.map +1 -0
  22. package/dist/plops/content-type.js +170 -83
  23. package/dist/plops/content-type.js.map +1 -1
  24. package/dist/plops/content-type.mjs +243 -0
  25. package/dist/plops/content-type.mjs.map +1 -0
  26. package/dist/plops/controller.d.ts +2 -1
  27. package/dist/plops/controller.d.ts.map +1 -0
  28. package/dist/plops/controller.js +54 -21
  29. package/dist/plops/controller.js.map +1 -1
  30. package/dist/plops/controller.mjs +71 -0
  31. package/dist/plops/controller.mjs.map +1 -0
  32. package/dist/plops/middleware.d.ts +2 -1
  33. package/dist/plops/middleware.d.ts.map +1 -0
  34. package/dist/plops/middleware.js +56 -21
  35. package/dist/plops/middleware.js.map +1 -1
  36. package/dist/plops/middleware.mjs +73 -0
  37. package/dist/plops/middleware.mjs.map +1 -0
  38. package/dist/plops/migration.d.ts +2 -1
  39. package/dist/plops/migration.d.ts.map +1 -0
  40. package/dist/plops/migration.js +19 -19
  41. package/dist/plops/migration.js.map +1 -1
  42. package/dist/plops/migration.mjs +33 -0
  43. package/dist/plops/migration.mjs.map +1 -0
  44. package/dist/plops/policy.d.ts +2 -1
  45. package/dist/plops/policy.d.ts.map +1 -0
  46. package/dist/plops/policy.js +56 -21
  47. package/dist/plops/policy.js.map +1 -1
  48. package/dist/plops/policy.mjs +73 -0
  49. package/dist/plops/policy.mjs.map +1 -0
  50. package/dist/plops/prompts/bootstrap-api-prompts.d.ts +7 -2
  51. package/dist/plops/prompts/bootstrap-api-prompts.d.ts.map +1 -0
  52. package/dist/plops/prompts/bootstrap-api-prompts.js +7 -6
  53. package/dist/plops/prompts/bootstrap-api-prompts.js.map +1 -1
  54. package/dist/plops/prompts/bootstrap-api-prompts.mjs +11 -0
  55. package/dist/plops/prompts/bootstrap-api-prompts.mjs.map +1 -0
  56. package/dist/plops/prompts/ct-names-prompts.d.ts +19 -2
  57. package/dist/plops/prompts/ct-names-prompts.d.ts.map +1 -0
  58. package/dist/plops/prompts/ct-names-prompts.js +19 -43
  59. package/dist/plops/prompts/ct-names-prompts.js.map +1 -1
  60. package/dist/plops/prompts/ct-names-prompts.mjs +42 -0
  61. package/dist/plops/prompts/ct-names-prompts.mjs.map +1 -0
  62. package/dist/plops/prompts/get-attributes-prompts.d.ts +9 -2
  63. package/dist/plops/prompts/get-attributes-prompts.d.ts.map +1 -0
  64. package/dist/plops/prompts/get-attributes-prompts.js +36 -30
  65. package/dist/plops/prompts/get-attributes-prompts.js.map +1 -1
  66. package/dist/plops/prompts/get-attributes-prompts.mjs +99 -0
  67. package/dist/plops/prompts/get-attributes-prompts.mjs.map +1 -0
  68. package/dist/plops/prompts/get-destination-prompts.d.ts +25 -2
  69. package/dist/plops/prompts/get-destination-prompts.d.ts.map +1 -0
  70. package/dist/plops/prompts/get-destination-prompts.js +47 -41
  71. package/dist/plops/prompts/get-destination-prompts.js.map +1 -1
  72. package/dist/plops/prompts/get-destination-prompts.mjs +76 -0
  73. package/dist/plops/prompts/get-destination-prompts.mjs.map +1 -0
  74. package/dist/plops/prompts/kind-prompts.d.ts +12 -2
  75. package/dist/plops/prompts/kind-prompts.d.ts.map +1 -0
  76. package/dist/plops/prompts/kind-prompts.js +17 -12
  77. package/dist/plops/prompts/kind-prompts.js.map +1 -1
  78. package/dist/plops/prompts/kind-prompts.mjs +24 -0
  79. package/dist/plops/prompts/kind-prompts.mjs.map +1 -0
  80. package/dist/plops/service.d.ts +2 -1
  81. package/dist/plops/service.d.ts.map +1 -0
  82. package/dist/plops/service.js +53 -20
  83. package/dist/plops/service.js.map +1 -1
  84. package/dist/plops/service.mjs +69 -0
  85. package/dist/plops/service.mjs.map +1 -0
  86. package/dist/plops/utils/extend-plugin-index-files.d.ts +8 -0
  87. package/dist/plops/utils/extend-plugin-index-files.d.ts.map +1 -0
  88. package/dist/plops/utils/extend-plugin-index-files.js +356 -0
  89. package/dist/plops/utils/extend-plugin-index-files.js.map +1 -0
  90. package/dist/plops/utils/extend-plugin-index-files.mjs +335 -0
  91. package/dist/plops/utils/extend-plugin-index-files.mjs.map +1 -0
  92. package/dist/plops/utils/get-file-path.d.ts +2 -1
  93. package/dist/plops/utils/get-file-path.d.ts.map +1 -0
  94. package/dist/plops/utils/get-file-path.js +9 -7
  95. package/dist/plops/utils/get-file-path.js.map +1 -1
  96. package/dist/plops/utils/get-file-path.mjs +15 -0
  97. package/dist/plops/utils/get-file-path.mjs.map +1 -0
  98. package/dist/plops/utils/get-formatted-date.d.ts +1 -0
  99. package/dist/plops/utils/get-formatted-date.d.ts.map +1 -0
  100. package/dist/plops/utils/get-formatted-date.js +8 -9
  101. package/dist/plops/utils/get-formatted-date.js.map +1 -1
  102. package/dist/plops/utils/get-formatted-date.mjs +6 -0
  103. package/dist/plops/utils/get-formatted-date.mjs.map +1 -0
  104. package/dist/plops/utils/validate-attribute-input.d.ts +1 -0
  105. package/dist/plops/utils/validate-attribute-input.d.ts.map +1 -0
  106. package/dist/plops/utils/validate-attribute-input.js +7 -5
  107. package/dist/plops/utils/validate-attribute-input.js.map +1 -1
  108. package/dist/plops/utils/validate-attribute-input.mjs +10 -0
  109. package/dist/plops/utils/validate-attribute-input.mjs.map +1 -0
  110. package/dist/plops/utils/validate-file-name-input.d.ts +1 -0
  111. package/dist/plops/utils/validate-file-name-input.d.ts.map +1 -0
  112. package/dist/plops/utils/validate-file-name-input.js +7 -5
  113. package/dist/plops/utils/validate-file-name-input.js.map +1 -1
  114. package/dist/plops/utils/validate-file-name-input.mjs +10 -0
  115. package/dist/plops/utils/validate-file-name-input.mjs.map +1 -0
  116. package/dist/plops/utils/validate-input.d.ts +1 -0
  117. package/dist/plops/utils/validate-input.d.ts.map +1 -0
  118. package/dist/plops/utils/validate-input.js +7 -5
  119. package/dist/plops/utils/validate-input.js.map +1 -1
  120. package/dist/plops/utils/validate-input.mjs +10 -0
  121. package/dist/plops/utils/validate-input.mjs.map +1 -0
  122. package/dist/templates/js/content-type.schema.json.hbs +0 -1
  123. package/dist/templates/js/plugin/plugin.routes.index.js.hbs +12 -0
  124. package/dist/templates/js/plugin/plugin.routes.type.index.js.hbs +6 -0
  125. package/dist/templates/ts/content-type.schema.json.hbs +0 -1
  126. package/dist/templates/ts/core-controller.ts.hbs +1 -1
  127. package/dist/templates/ts/middleware.ts.hbs +2 -2
  128. package/dist/templates/ts/plugin/plugin.routes.index.ts.hbs +9 -0
  129. package/dist/templates/ts/plugin/plugin.routes.type.index.ts.hbs +4 -0
  130. package/package.json +25 -17
  131. package/dist/files/js/plugin/.editorconfig +0 -7
  132. package/dist/files/js/plugin/.gitattributes +0 -103
  133. package/dist/files/js/plugin/admin/src/components/Initializer/index.js +0 -26
  134. package/dist/files/js/plugin/admin/src/components/PluginIcon/index.js +0 -12
  135. package/dist/files/js/plugin/admin/src/index.js +0 -63
  136. package/dist/files/js/plugin/admin/src/pages/App/index.js +0 -25
  137. package/dist/files/js/plugin/admin/src/pages/HomePage/index.js +0 -20
  138. package/dist/files/js/plugin/admin/src/pluginId.js +0 -5
  139. package/dist/files/js/plugin/admin/src/translations/en.json +0 -1
  140. package/dist/files/js/plugin/admin/src/translations/fr.json +0 -1
  141. package/dist/files/js/plugin/admin/src/utils/getTrad.js +0 -5
  142. package/dist/files/js/plugin/server/bootstrap.js +0 -5
  143. package/dist/files/js/plugin/server/config/index.js +0 -6
  144. package/dist/files/js/plugin/server/controllers/index.js +0 -7
  145. package/dist/files/js/plugin/server/controllers/my-controller.js.hbs +0 -10
  146. package/dist/files/js/plugin/server/destroy.js +0 -5
  147. package/dist/files/js/plugin/server/index.js +0 -25
  148. package/dist/files/js/plugin/server/middlewares/index.js +0 -3
  149. package/dist/files/js/plugin/server/policies/index.js +0 -3
  150. package/dist/files/js/plugin/server/register.js +0 -5
  151. package/dist/files/js/plugin/server/routes/index.js +0 -10
  152. package/dist/files/js/plugin/server/services/index.js +0 -7
  153. package/dist/files/js/plugin/server/services/my-service.js +0 -7
  154. package/dist/files/js/plugin/strapi-admin.js +0 -3
  155. package/dist/files/js/plugin/strapi-server.js +0 -3
  156. package/dist/files/ts/plugin/.editorconfig +0 -7
  157. package/dist/files/ts/plugin/.gitattributes +0 -103
  158. package/dist/files/ts/plugin/admin/src/components/Initializer/index.tsx +0 -24
  159. package/dist/files/ts/plugin/admin/src/components/PluginIcon/index.tsx +0 -12
  160. package/dist/files/ts/plugin/admin/src/index.tsx +0 -67
  161. package/dist/files/ts/plugin/admin/src/pages/App/index.tsx +0 -25
  162. package/dist/files/ts/plugin/admin/src/pages/HomePage/index.tsx +0 -19
  163. package/dist/files/ts/plugin/admin/src/pluginId.ts +0 -5
  164. package/dist/files/ts/plugin/admin/src/translations/en.json +0 -1
  165. package/dist/files/ts/plugin/admin/src/translations/fr.json +0 -1
  166. package/dist/files/ts/plugin/admin/src/utils/getTrad.ts +0 -5
  167. package/dist/files/ts/plugin/custom.d.ts +0 -5
  168. package/dist/files/ts/plugin/server/bootstrap.ts +0 -5
  169. package/dist/files/ts/plugin/server/config/index.ts +0 -4
  170. package/dist/files/ts/plugin/server/controllers/index.ts +0 -5
  171. package/dist/files/ts/plugin/server/controllers/my-controller.ts.hbs +0 -10
  172. package/dist/files/ts/plugin/server/destroy.ts +0 -5
  173. package/dist/files/ts/plugin/server/index.ts +0 -23
  174. package/dist/files/ts/plugin/server/middlewares/index.ts +0 -1
  175. package/dist/files/ts/plugin/server/policies/index.ts +0 -1
  176. package/dist/files/ts/plugin/server/register.ts +0 -5
  177. package/dist/files/ts/plugin/server/routes/index.ts +0 -10
  178. package/dist/files/ts/plugin/server/services/index.ts +0 -5
  179. package/dist/files/ts/plugin/server/services/my-service.ts +0 -7
  180. package/dist/files/ts/plugin/strapi-admin.js +0 -3
  181. package/dist/files/ts/plugin/strapi-server.js +0 -3
  182. package/dist/files/ts/plugin/tsconfig.json +0 -20
  183. package/dist/files/ts/plugin/tsconfig.server.json +0 -25
  184. package/dist/plops/plugin.d.ts +0 -3
  185. package/dist/plops/plugin.js +0 -107
  186. package/dist/plops/plugin.js.map +0 -1
  187. package/dist/plops/prompts/draft-and-publish-prompts.d.ts +0 -3
  188. package/dist/plops/prompts/draft-and-publish-prompts.js +0 -12
  189. package/dist/plops/prompts/draft-and-publish-prompts.js.map +0 -1
  190. package/dist/templates/js/README.md.hbs +0 -3
  191. package/dist/templates/js/plugin-package.json.hbs +0 -42
  192. package/dist/templates/ts/README.md.hbs +0 -3
  193. package/dist/templates/ts/plugin-package.json.hbs +0 -51
  194. /package/dist/{files/js/plugin/server/content-types/index.js → templates/js/plugin/plugin.index.js.hbs} +0 -0
  195. /package/dist/{files/ts/plugin/server/content-types/index.ts → templates/ts/plugin/plugin.index.ts.hbs} +0 -0
@@ -1,125 +1,140 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- const path_1 = require("path");
30
- const slugify_1 = __importDefault(require("@sindresorhus/slugify"));
31
- const fs_extra_1 = __importDefault(require("fs-extra"));
32
- const utils = __importStar(require("@strapi/utils"));
33
- const typescript_utils_1 = __importDefault(require("@strapi/typescript-utils"));
34
- const get_destination_prompts_1 = __importDefault(require("./prompts/get-destination-prompts"));
35
- const get_file_path_1 = __importDefault(require("./utils/get-file-path"));
36
- const ct_names_prompts_1 = __importDefault(require("./prompts/ct-names-prompts"));
37
- const kind_prompts_1 = __importDefault(require("./prompts/kind-prompts"));
38
- const draft_and_publish_prompts_1 = __importDefault(require("./prompts/draft-and-publish-prompts"));
39
- const get_attributes_prompts_1 = __importDefault(require("./prompts/get-attributes-prompts"));
40
- const bootstrap_api_prompts_1 = __importDefault(require("./prompts/bootstrap-api-prompts"));
41
- exports.default = (plop) => {
1
+ 'use strict';
2
+
3
+ var path = require('path');
4
+ var slugify = require('@sindresorhus/slugify');
5
+ var fs = require('fs-extra');
6
+ var utils = require('@strapi/utils');
7
+ var tsUtils = require('@strapi/typescript-utils');
8
+ var getDestinationPrompts = require('./prompts/get-destination-prompts.js');
9
+ var getFilePath = require('./utils/get-file-path.js');
10
+ var ctNamesPrompts = require('./prompts/ct-names-prompts.js');
11
+ var kindPrompts = require('./prompts/kind-prompts.js');
12
+ var getAttributesPrompts = require('./prompts/get-attributes-prompts.js');
13
+ var bootstrapApiPrompts = require('./prompts/bootstrap-api-prompts.js');
14
+ var extendPluginIndexFiles = require('./utils/extend-plugin-index-files.js');
15
+
16
+ var generateContentType = ((plop)=>{
42
17
  // Model generator
43
18
  plop.setGenerator('content-type', {
44
19
  description: 'Generate a content type for an API',
45
- async prompts(inquirer) {
20
+ async prompts (inquirer) {
46
21
  const config = await inquirer.prompt([
47
- ...ct_names_prompts_1.default,
48
- ...kind_prompts_1.default,
49
- ...draft_and_publish_prompts_1.default,
22
+ ...ctNamesPrompts,
23
+ ...kindPrompts
50
24
  ]);
51
- const attributes = await (0, get_attributes_prompts_1.default)(inquirer);
25
+ const attributes = await getAttributesPrompts(inquirer);
52
26
  const api = await inquirer.prompt([
53
- ...(0, get_destination_prompts_1.default)('model', plop.getDestBasePath()),
27
+ ...getDestinationPrompts('model', plop.getDestBasePath()),
54
28
  {
55
- when: (answers) => answers.destination === 'new',
29
+ when: (answers)=>answers.destination === 'new',
56
30
  type: 'input',
57
31
  name: 'id',
58
32
  default: config.singularName,
59
33
  message: 'Name of the new API?',
60
- async validate(input) {
61
- if (!utils.isKebabCase(input)) {
34
+ async validate (input) {
35
+ if (!utils.strings.isKebabCase(input)) {
62
36
  return 'Value must be in kebab-case';
63
37
  }
64
- const apiPath = (0, path_1.join)(plop.getDestBasePath(), 'api');
65
- const exists = await fs_extra_1.default.pathExists(apiPath);
38
+ const apiPath = path.join(plop.getDestBasePath(), 'api');
39
+ const exists = await fs.pathExists(apiPath);
66
40
  if (!exists) {
67
41
  return true;
68
42
  }
69
- const apiDir = await fs_extra_1.default.readdir(apiPath, { withFileTypes: true });
70
- const apiDirContent = apiDir.filter((fd) => fd.isDirectory());
71
- if (apiDirContent.findIndex((dir) => dir.name === input) !== -1) {
43
+ const apiDir = await fs.readdir(apiPath, {
44
+ withFileTypes: true
45
+ });
46
+ const apiDirContent = apiDir.filter((fd)=>fd.isDirectory());
47
+ if (apiDirContent.findIndex((dir)=>dir.name === input) !== -1) {
72
48
  throw new Error('This name is already taken.');
73
49
  }
74
50
  return true;
75
- },
51
+ }
76
52
  },
77
- ...bootstrap_api_prompts_1.default,
53
+ ...bootstrapApiPrompts
78
54
  ]);
79
55
  return {
80
56
  ...config,
81
57
  ...api,
82
- attributes,
58
+ attributes
83
59
  };
84
60
  },
85
- actions(answers) {
61
+ actions (answers) {
86
62
  if (!answers) {
87
63
  return [];
88
64
  }
89
- const attributes = answers.attributes.reduce((object, answer) => {
90
- const val = { type: answer.attributeType };
65
+ const attributes = answers.attributes.reduce((object, answer)=>{
66
+ const val = {
67
+ type: answer.attributeType
68
+ };
91
69
  if (answer.attributeType === 'enumeration') {
92
- val.enum = answer.enum.split(',').map((item) => item.trim());
70
+ val.enum = answer.enum.split(',').map((item)=>item.trim());
93
71
  }
94
72
  if (answer.attributeType === 'media') {
95
- val.allowedTypes = ['images', 'files', 'videos', 'audios'];
73
+ val.allowedTypes = [
74
+ 'images',
75
+ 'files',
76
+ 'videos',
77
+ 'audios'
78
+ ];
96
79
  val.multiple = answer.multiple;
97
80
  }
98
- return Object.assign(object, { [answer.attributeName]: val }, {});
81
+ return Object.assign(object, {
82
+ [answer.attributeName]: val
83
+ }, {});
99
84
  }, {});
100
- const filePath = (0, get_file_path_1.default)(answers.destination);
101
- // TODO: use basePath instead
85
+ const filePath = getFilePath(answers.destination);
102
86
  const currentDir = process.cwd();
103
- const language = typescript_utils_1.default.isUsingTypeScriptSync(currentDir) ? 'ts' : 'js';
87
+ let language = tsUtils.isUsingTypeScriptSync(currentDir) ? 'ts' : 'js';
88
+ if (answers.plugin) {
89
+ // The tsconfig in plugins is located just outside the server src, not in the root of the plugin.
90
+ const pluginServerDir = path.join(currentDir, 'src', filePath.replace('{{ plugin }}', answers.plugin), '../');
91
+ language = tsUtils.isUsingTypeScriptSync(pluginServerDir) ? 'ts' : 'js';
92
+ }
104
93
  const baseActions = [
105
94
  {
106
95
  type: 'add',
107
96
  path: `${filePath}/content-types/{{ singularName }}/schema.json`,
108
97
  templateFile: `templates/${language}/content-type.schema.json.hbs`,
109
98
  data: {
110
- collectionName: (0, slugify_1.default)(answers.pluralName, { separator: '_' }),
111
- },
112
- },
99
+ collectionName: slugify(answers.pluralName, {
100
+ separator: '_'
101
+ })
102
+ }
103
+ }
113
104
  ];
114
105
  if (Object.entries(attributes).length > 0) {
115
106
  baseActions.push({
116
107
  type: 'modify',
117
108
  path: `${filePath}/content-types/{{ singularName }}/schema.json`,
118
- transform(template) {
109
+ transform (template) {
119
110
  const parsedTemplate = JSON.parse(template);
120
111
  parsedTemplate.attributes = attributes;
121
112
  return JSON.stringify(parsedTemplate, null, 2);
122
- },
113
+ }
114
+ });
115
+ }
116
+ if (answers.plugin) {
117
+ const indexPath = path.join(plop.getDestBasePath(), `${filePath}/content-types/index.${language}`);
118
+ const exists = fs.existsSync(indexPath);
119
+ if (!exists) {
120
+ // Create index file if it doesn't exist
121
+ baseActions.push({
122
+ type: 'add',
123
+ path: `${filePath}/content-types/index.${language}`,
124
+ templateFile: `templates/${language}/plugin/plugin.index.${language}.hbs`,
125
+ skipIfExists: true
126
+ });
127
+ }
128
+ // Append the new content type to the index.ts file
129
+ baseActions.push({
130
+ type: 'modify',
131
+ path: `${filePath}/content-types/index.${language}`,
132
+ transform (template) {
133
+ return extendPluginIndexFiles.appendToFile(template, {
134
+ type: 'content-type',
135
+ singularName: answers.singularName
136
+ });
137
+ }
123
138
  });
124
139
  }
125
140
  if (answers.bootstrapApi) {
@@ -127,32 +142,104 @@ exports.default = (plop) => {
127
142
  let uid;
128
143
  if (answers.destination === 'new') {
129
144
  uid = `api::${answers.id}.${singularName}`;
130
- }
131
- else if (answers.api) {
145
+ } else if (answers.api) {
132
146
  uid = `api::${answers.api}.${singularName}`;
133
- }
134
- else if (answers.plugin) {
147
+ } else if (answers.plugin) {
135
148
  uid = `plugin::${answers.plugin}.${singularName}`;
136
149
  }
137
150
  baseActions.push({
138
151
  type: 'add',
139
152
  path: `${filePath}/controllers/{{ singularName }}.${language}`,
140
153
  templateFile: `templates/${language}/core-controller.${language}.hbs`,
141
- data: { uid },
154
+ data: {
155
+ uid
156
+ }
142
157
  }, {
143
158
  type: 'add',
144
159
  path: `${filePath}/services/{{ singularName }}.${language}`,
145
160
  templateFile: `templates/${language}/core-service.${language}.hbs`,
146
- data: { uid },
161
+ data: {
162
+ uid
163
+ }
147
164
  }, {
148
165
  type: 'add',
149
- path: `${filePath}/routes/{{ singularName }}.${language}`,
166
+ path: `${filePath}/routes/${answers.plugin ? 'content-api/' : ''}{{ singularName }}.${language}`,
150
167
  templateFile: `templates/${language}/core-router.${language}.hbs`,
151
- data: { uid },
168
+ data: {
169
+ uid
170
+ }
152
171
  });
172
+ if (answers.plugin) {
173
+ const indexFiles = [
174
+ 'controllers',
175
+ 'services',
176
+ 'routes'
177
+ ];
178
+ indexFiles.forEach((type)=>{
179
+ const indexPath = path.join(plop.getDestBasePath(), `${filePath}/${type}/index.${language}`);
180
+ const exists = fs.existsSync(indexPath);
181
+ if (!exists && type !== 'routes') {
182
+ baseActions.push({
183
+ type: 'add',
184
+ path: `${filePath}/${type}/index.${language}`,
185
+ templateFile: `templates/${language}/plugin/plugin.index.${language}.hbs`,
186
+ skipIfExists: true
187
+ });
188
+ }
189
+ if (type === 'routes') {
190
+ const indexPath = path.join(plop.getDestBasePath(), `${filePath}/${type}/index.${language}`);
191
+ const exists = fs.existsSync(indexPath);
192
+ if (!exists) {
193
+ baseActions.push({
194
+ type: 'add',
195
+ path: `${filePath}/${type}/index.${language}`,
196
+ templateFile: `templates/${language}/plugin/plugin.routes.index.${language}.hbs`,
197
+ skipIfExists: true
198
+ });
199
+ }
200
+ const routeIndexFiles = [
201
+ 'content-api',
202
+ 'admin'
203
+ ];
204
+ routeIndexFiles.forEach((routeType)=>{
205
+ const routeTypeIndexPath = path.join(plop.getDestBasePath(), `${filePath}/${type}/${routeType}/index.${language}`);
206
+ const routeTypeExists = fs.existsSync(routeTypeIndexPath);
207
+ if (!routeTypeExists) {
208
+ baseActions.push({
209
+ type: 'add',
210
+ path: `${filePath}/${type}/${routeType}/index.${language}`,
211
+ templateFile: `templates/${language}/plugin/plugin.routes.type.index.${language}.hbs`,
212
+ data: {
213
+ type: routeType
214
+ },
215
+ skipIfExists: true
216
+ });
217
+ }
218
+ });
219
+ }
220
+ baseActions.push({
221
+ type: 'modify',
222
+ path: `${filePath}/${type}/${type === 'routes' ? 'content-api/' : ''}index.${language}`,
223
+ transform (template) {
224
+ if (type === 'routes') {
225
+ return extendPluginIndexFiles.appendToFile(template, {
226
+ type: 'routes',
227
+ singularName: answers.singularName
228
+ });
229
+ }
230
+ return extendPluginIndexFiles.appendToFile(template, {
231
+ type: 'index',
232
+ singularName: answers.singularName
233
+ });
234
+ }
235
+ });
236
+ });
237
+ }
153
238
  }
154
239
  return baseActions;
155
- },
240
+ }
156
241
  });
157
- };
158
- //# sourceMappingURL=content-type.js.map
242
+ });
243
+
244
+ module.exports = generateContentType;
245
+ //# sourceMappingURL=content-type.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"content-type.js","sourceRoot":"","sources":["../../src/plops/content-type.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"content-type.js","sources":["../../src/plops/content-type.ts"],"sourcesContent":["import { join } from 'path';\nimport type { NodePlopAPI, ActionType } from 'plop';\nimport slugify from '@sindresorhus/slugify';\nimport fs from 'fs-extra';\nimport { strings } from '@strapi/utils';\nimport tsUtils from '@strapi/typescript-utils';\n\nimport getDestinationPrompts from './prompts/get-destination-prompts';\nimport getFilePath from './utils/get-file-path';\nimport ctNamesPrompts from './prompts/ct-names-prompts';\nimport kindPrompts from './prompts/kind-prompts';\nimport getAttributesPrompts from './prompts/get-attributes-prompts';\nimport bootstrapApiPrompts from './prompts/bootstrap-api-prompts';\nimport { appendToFile } from './utils/extend-plugin-index-files';\n\nexport default (plop: NodePlopAPI) => {\n // Model generator\n plop.setGenerator('content-type', {\n description: 'Generate a content type for an API',\n async prompts(inquirer) {\n const config = await inquirer.prompt([...ctNamesPrompts, ...kindPrompts]);\n const attributes = await getAttributesPrompts(inquirer);\n\n const api = await inquirer.prompt([\n ...getDestinationPrompts('model', plop.getDestBasePath()),\n {\n when: (answers) => answers.destination === 'new',\n type: 'input',\n name: 'id',\n default: config.singularName,\n message: 'Name of the new API?',\n async validate(input) {\n if (!strings.isKebabCase(input)) {\n return 'Value must be in kebab-case';\n }\n\n const apiPath = join(plop.getDestBasePath(), 'api');\n const exists = await fs.pathExists(apiPath);\n\n if (!exists) {\n return true;\n }\n\n const apiDir = await fs.readdir(apiPath, { withFileTypes: true });\n const apiDirContent = apiDir.filter((fd) => fd.isDirectory());\n\n if (apiDirContent.findIndex((dir) => dir.name === input) !== -1) {\n throw new Error('This name is already taken.');\n }\n\n return true;\n },\n },\n ...bootstrapApiPrompts,\n ]);\n\n return {\n ...config,\n ...api,\n attributes,\n };\n },\n actions(answers) {\n if (!answers) {\n return [];\n }\n\n const attributes = answers.attributes.reduce((object: any, answer: any) => {\n const val: any = { type: answer.attributeType };\n\n if (answer.attributeType === 'enumeration') {\n val.enum = answer.enum.split(',').map((item: string) => item.trim());\n }\n\n if (answer.attributeType === 'media') {\n val.allowedTypes = ['images', 'files', 'videos', 'audios'];\n val.multiple = answer.multiple;\n }\n\n return Object.assign(object, { [answer.attributeName]: val }, {});\n }, {});\n\n const filePath = getFilePath(answers.destination);\n const currentDir = process.cwd();\n let language = tsUtils.isUsingTypeScriptSync(currentDir) ? 'ts' : 'js';\n\n if (answers.plugin) {\n // The tsconfig in plugins is located just outside the server src, not in the root of the plugin.\n const pluginServerDir = join(\n currentDir,\n 'src',\n filePath.replace('{{ plugin }}', answers.plugin),\n '../'\n );\n language = tsUtils.isUsingTypeScriptSync(pluginServerDir) ? 'ts' : 'js';\n }\n\n const baseActions: Array<ActionType> = [\n {\n type: 'add',\n path: `${filePath}/content-types/{{ singularName }}/schema.json`,\n templateFile: `templates/${language}/content-type.schema.json.hbs`,\n data: {\n collectionName: slugify(answers.pluralName, { separator: '_' }),\n },\n },\n ];\n\n if (Object.entries(attributes).length > 0) {\n baseActions.push({\n type: 'modify',\n path: `${filePath}/content-types/{{ singularName }}/schema.json`,\n transform(template: string) {\n const parsedTemplate = JSON.parse(template);\n parsedTemplate.attributes = attributes;\n return JSON.stringify(parsedTemplate, null, 2);\n },\n });\n }\n\n if (answers.plugin) {\n const indexPath = join(\n plop.getDestBasePath(),\n `${filePath}/content-types/index.${language}`\n );\n const exists = fs.existsSync(indexPath);\n\n if (!exists) {\n // Create index file if it doesn't exist\n baseActions.push({\n type: 'add',\n path: `${filePath}/content-types/index.${language}`,\n templateFile: `templates/${language}/plugin/plugin.index.${language}.hbs`,\n skipIfExists: true,\n });\n }\n\n // Append the new content type to the index.ts file\n baseActions.push({\n type: 'modify',\n path: `${filePath}/content-types/index.${language}`,\n transform(template: string) {\n return appendToFile(template, {\n type: 'content-type',\n singularName: answers.singularName,\n });\n },\n });\n }\n\n if (answers.bootstrapApi) {\n const { singularName } = answers;\n\n let uid;\n if (answers.destination === 'new') {\n uid = `api::${answers.id}.${singularName}`;\n } else if (answers.api) {\n uid = `api::${answers.api}.${singularName}`;\n } else if (answers.plugin) {\n uid = `plugin::${answers.plugin}.${singularName}`;\n }\n\n baseActions.push(\n {\n type: 'add',\n path: `${filePath}/controllers/{{ singularName }}.${language}`,\n templateFile: `templates/${language}/core-controller.${language}.hbs`,\n data: { uid },\n },\n {\n type: 'add',\n path: `${filePath}/services/{{ singularName }}.${language}`,\n templateFile: `templates/${language}/core-service.${language}.hbs`,\n data: { uid },\n },\n {\n type: 'add',\n path: `${filePath}/routes/${answers.plugin ? 'content-api/' : ''}{{ singularName }}.${language}`,\n templateFile: `templates/${language}/core-router.${language}.hbs`,\n data: { uid },\n }\n );\n\n if (answers.plugin) {\n const indexFiles = ['controllers', 'services', 'routes'];\n\n indexFiles.forEach((type) => {\n const indexPath = join(plop.getDestBasePath(), `${filePath}/${type}/index.${language}`);\n const exists = fs.existsSync(indexPath);\n\n if (!exists && type !== 'routes') {\n baseActions.push({\n type: 'add',\n path: `${filePath}/${type}/index.${language}`,\n templateFile: `templates/${language}/plugin/plugin.index.${language}.hbs`,\n skipIfExists: true,\n });\n }\n\n if (type === 'routes') {\n const indexPath = join(\n plop.getDestBasePath(),\n `${filePath}/${type}/index.${language}`\n );\n const exists = fs.existsSync(indexPath);\n\n if (!exists) {\n baseActions.push({\n type: 'add',\n path: `${filePath}/${type}/index.${language}`,\n templateFile: `templates/${language}/plugin/plugin.routes.index.${language}.hbs`,\n skipIfExists: true,\n });\n }\n\n const routeIndexFiles = ['content-api', 'admin'];\n\n routeIndexFiles.forEach((routeType) => {\n const routeTypeIndexPath = join(\n plop.getDestBasePath(),\n `${filePath}/${type}/${routeType}/index.${language}`\n );\n const routeTypeExists = fs.existsSync(routeTypeIndexPath);\n\n if (!routeTypeExists) {\n baseActions.push({\n type: 'add',\n path: `${filePath}/${type}/${routeType}/index.${language}`,\n templateFile: `templates/${language}/plugin/plugin.routes.type.index.${language}.hbs`,\n data: { type: routeType },\n skipIfExists: true,\n });\n }\n });\n }\n\n baseActions.push({\n type: 'modify',\n path: `${filePath}/${type}/${type === 'routes' ? 'content-api/' : ''}index.${language}`,\n transform(template: string) {\n if (type === 'routes') {\n return appendToFile(template, {\n type: 'routes',\n singularName: answers.singularName,\n });\n }\n\n return appendToFile(template, {\n type: 'index',\n singularName: answers.singularName,\n });\n },\n });\n });\n }\n }\n\n return baseActions;\n },\n });\n};\n"],"names":["plop","setGenerator","description","prompts","inquirer","config","prompt","ctNamesPrompts","kindPrompts","attributes","getAttributesPrompts","api","getDestinationPrompts","getDestBasePath","when","answers","destination","type","name","default","singularName","message","validate","input","strings","isKebabCase","apiPath","join","exists","fs","pathExists","apiDir","readdir","withFileTypes","apiDirContent","filter","fd","isDirectory","findIndex","dir","Error","bootstrapApiPrompts","actions","reduce","object","answer","val","attributeType","enum","split","map","item","trim","allowedTypes","multiple","Object","assign","attributeName","filePath","getFilePath","currentDir","process","cwd","language","tsUtils","isUsingTypeScriptSync","plugin","pluginServerDir","replace","baseActions","path","templateFile","data","collectionName","slugify","pluralName","separator","entries","length","push","transform","template","parsedTemplate","JSON","parse","stringify","indexPath","existsSync","skipIfExists","appendToFile","bootstrapApi","uid","id","indexFiles","forEach","routeIndexFiles","routeType","routeTypeIndexPath","routeTypeExists"],"mappings":"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"}
@@ -0,0 +1,243 @@
1
+ import { join } from 'path';
2
+ import slugify from '@sindresorhus/slugify';
3
+ import fs from 'fs-extra';
4
+ import { strings } from '@strapi/utils';
5
+ import tsUtils from '@strapi/typescript-utils';
6
+ import getDestinationPrompts from './prompts/get-destination-prompts.mjs';
7
+ import getFilePath from './utils/get-file-path.mjs';
8
+ import questions from './prompts/ct-names-prompts.mjs';
9
+ import questions$1 from './prompts/kind-prompts.mjs';
10
+ import getAttributesPrompts from './prompts/get-attributes-prompts.mjs';
11
+ import questions$2 from './prompts/bootstrap-api-prompts.mjs';
12
+ import { appendToFile } from './utils/extend-plugin-index-files.mjs';
13
+
14
+ var generateContentType = ((plop)=>{
15
+ // Model generator
16
+ plop.setGenerator('content-type', {
17
+ description: 'Generate a content type for an API',
18
+ async prompts (inquirer) {
19
+ const config = await inquirer.prompt([
20
+ ...questions,
21
+ ...questions$1
22
+ ]);
23
+ const attributes = await getAttributesPrompts(inquirer);
24
+ const api = await inquirer.prompt([
25
+ ...getDestinationPrompts('model', plop.getDestBasePath()),
26
+ {
27
+ when: (answers)=>answers.destination === 'new',
28
+ type: 'input',
29
+ name: 'id',
30
+ default: config.singularName,
31
+ message: 'Name of the new API?',
32
+ async validate (input) {
33
+ if (!strings.isKebabCase(input)) {
34
+ return 'Value must be in kebab-case';
35
+ }
36
+ const apiPath = join(plop.getDestBasePath(), 'api');
37
+ const exists = await fs.pathExists(apiPath);
38
+ if (!exists) {
39
+ return true;
40
+ }
41
+ const apiDir = await fs.readdir(apiPath, {
42
+ withFileTypes: true
43
+ });
44
+ const apiDirContent = apiDir.filter((fd)=>fd.isDirectory());
45
+ if (apiDirContent.findIndex((dir)=>dir.name === input) !== -1) {
46
+ throw new Error('This name is already taken.');
47
+ }
48
+ return true;
49
+ }
50
+ },
51
+ ...questions$2
52
+ ]);
53
+ return {
54
+ ...config,
55
+ ...api,
56
+ attributes
57
+ };
58
+ },
59
+ actions (answers) {
60
+ if (!answers) {
61
+ return [];
62
+ }
63
+ const attributes = answers.attributes.reduce((object, answer)=>{
64
+ const val = {
65
+ type: answer.attributeType
66
+ };
67
+ if (answer.attributeType === 'enumeration') {
68
+ val.enum = answer.enum.split(',').map((item)=>item.trim());
69
+ }
70
+ if (answer.attributeType === 'media') {
71
+ val.allowedTypes = [
72
+ 'images',
73
+ 'files',
74
+ 'videos',
75
+ 'audios'
76
+ ];
77
+ val.multiple = answer.multiple;
78
+ }
79
+ return Object.assign(object, {
80
+ [answer.attributeName]: val
81
+ }, {});
82
+ }, {});
83
+ const filePath = getFilePath(answers.destination);
84
+ const currentDir = process.cwd();
85
+ let language = tsUtils.isUsingTypeScriptSync(currentDir) ? 'ts' : 'js';
86
+ if (answers.plugin) {
87
+ // The tsconfig in plugins is located just outside the server src, not in the root of the plugin.
88
+ const pluginServerDir = join(currentDir, 'src', filePath.replace('{{ plugin }}', answers.plugin), '../');
89
+ language = tsUtils.isUsingTypeScriptSync(pluginServerDir) ? 'ts' : 'js';
90
+ }
91
+ const baseActions = [
92
+ {
93
+ type: 'add',
94
+ path: `${filePath}/content-types/{{ singularName }}/schema.json`,
95
+ templateFile: `templates/${language}/content-type.schema.json.hbs`,
96
+ data: {
97
+ collectionName: slugify(answers.pluralName, {
98
+ separator: '_'
99
+ })
100
+ }
101
+ }
102
+ ];
103
+ if (Object.entries(attributes).length > 0) {
104
+ baseActions.push({
105
+ type: 'modify',
106
+ path: `${filePath}/content-types/{{ singularName }}/schema.json`,
107
+ transform (template) {
108
+ const parsedTemplate = JSON.parse(template);
109
+ parsedTemplate.attributes = attributes;
110
+ return JSON.stringify(parsedTemplate, null, 2);
111
+ }
112
+ });
113
+ }
114
+ if (answers.plugin) {
115
+ const indexPath = join(plop.getDestBasePath(), `${filePath}/content-types/index.${language}`);
116
+ const exists = fs.existsSync(indexPath);
117
+ if (!exists) {
118
+ // Create index file if it doesn't exist
119
+ baseActions.push({
120
+ type: 'add',
121
+ path: `${filePath}/content-types/index.${language}`,
122
+ templateFile: `templates/${language}/plugin/plugin.index.${language}.hbs`,
123
+ skipIfExists: true
124
+ });
125
+ }
126
+ // Append the new content type to the index.ts file
127
+ baseActions.push({
128
+ type: 'modify',
129
+ path: `${filePath}/content-types/index.${language}`,
130
+ transform (template) {
131
+ return appendToFile(template, {
132
+ type: 'content-type',
133
+ singularName: answers.singularName
134
+ });
135
+ }
136
+ });
137
+ }
138
+ if (answers.bootstrapApi) {
139
+ const { singularName } = answers;
140
+ let uid;
141
+ if (answers.destination === 'new') {
142
+ uid = `api::${answers.id}.${singularName}`;
143
+ } else if (answers.api) {
144
+ uid = `api::${answers.api}.${singularName}`;
145
+ } else if (answers.plugin) {
146
+ uid = `plugin::${answers.plugin}.${singularName}`;
147
+ }
148
+ baseActions.push({
149
+ type: 'add',
150
+ path: `${filePath}/controllers/{{ singularName }}.${language}`,
151
+ templateFile: `templates/${language}/core-controller.${language}.hbs`,
152
+ data: {
153
+ uid
154
+ }
155
+ }, {
156
+ type: 'add',
157
+ path: `${filePath}/services/{{ singularName }}.${language}`,
158
+ templateFile: `templates/${language}/core-service.${language}.hbs`,
159
+ data: {
160
+ uid
161
+ }
162
+ }, {
163
+ type: 'add',
164
+ path: `${filePath}/routes/${answers.plugin ? 'content-api/' : ''}{{ singularName }}.${language}`,
165
+ templateFile: `templates/${language}/core-router.${language}.hbs`,
166
+ data: {
167
+ uid
168
+ }
169
+ });
170
+ if (answers.plugin) {
171
+ const indexFiles = [
172
+ 'controllers',
173
+ 'services',
174
+ 'routes'
175
+ ];
176
+ indexFiles.forEach((type)=>{
177
+ const indexPath = join(plop.getDestBasePath(), `${filePath}/${type}/index.${language}`);
178
+ const exists = fs.existsSync(indexPath);
179
+ if (!exists && type !== 'routes') {
180
+ baseActions.push({
181
+ type: 'add',
182
+ path: `${filePath}/${type}/index.${language}`,
183
+ templateFile: `templates/${language}/plugin/plugin.index.${language}.hbs`,
184
+ skipIfExists: true
185
+ });
186
+ }
187
+ if (type === 'routes') {
188
+ const indexPath = join(plop.getDestBasePath(), `${filePath}/${type}/index.${language}`);
189
+ const exists = fs.existsSync(indexPath);
190
+ if (!exists) {
191
+ baseActions.push({
192
+ type: 'add',
193
+ path: `${filePath}/${type}/index.${language}`,
194
+ templateFile: `templates/${language}/plugin/plugin.routes.index.${language}.hbs`,
195
+ skipIfExists: true
196
+ });
197
+ }
198
+ const routeIndexFiles = [
199
+ 'content-api',
200
+ 'admin'
201
+ ];
202
+ routeIndexFiles.forEach((routeType)=>{
203
+ const routeTypeIndexPath = join(plop.getDestBasePath(), `${filePath}/${type}/${routeType}/index.${language}`);
204
+ const routeTypeExists = fs.existsSync(routeTypeIndexPath);
205
+ if (!routeTypeExists) {
206
+ baseActions.push({
207
+ type: 'add',
208
+ path: `${filePath}/${type}/${routeType}/index.${language}`,
209
+ templateFile: `templates/${language}/plugin/plugin.routes.type.index.${language}.hbs`,
210
+ data: {
211
+ type: routeType
212
+ },
213
+ skipIfExists: true
214
+ });
215
+ }
216
+ });
217
+ }
218
+ baseActions.push({
219
+ type: 'modify',
220
+ path: `${filePath}/${type}/${type === 'routes' ? 'content-api/' : ''}index.${language}`,
221
+ transform (template) {
222
+ if (type === 'routes') {
223
+ return appendToFile(template, {
224
+ type: 'routes',
225
+ singularName: answers.singularName
226
+ });
227
+ }
228
+ return appendToFile(template, {
229
+ type: 'index',
230
+ singularName: answers.singularName
231
+ });
232
+ }
233
+ });
234
+ });
235
+ }
236
+ }
237
+ return baseActions;
238
+ }
239
+ });
240
+ });
241
+
242
+ export { generateContentType as default };
243
+ //# sourceMappingURL=content-type.mjs.map