@strapi/generators 5.48.1 → 5.49.0
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.
- package/dist/index.js +14 -9
- package/dist/index.js.map +1 -1
- package/dist/plopfile.js +5 -1
- package/dist/plopfile.js.map +1 -1
- package/dist/plops/api.js +12 -7
- package/dist/plops/api.js.map +1 -1
- package/dist/plops/content-type.js +15 -9
- package/dist/plops/content-type.js.map +1 -1
- package/dist/plops/controller.js +8 -3
- package/dist/plops/controller.js.map +1 -1
- package/dist/plops/middleware.js +8 -3
- package/dist/plops/middleware.js.map +1 -1
- package/dist/plops/migration.js +5 -1
- package/dist/plops/migration.js.map +1 -1
- package/dist/plops/policy.js +8 -3
- package/dist/plops/policy.js.map +1 -1
- package/dist/plops/prompts/ct-names-prompts.js +7 -2
- package/dist/plops/prompts/ct-names-prompts.js.map +1 -1
- package/dist/plops/prompts/get-destination-prompts.js +9 -5
- package/dist/plops/prompts/get-destination-prompts.js.map +1 -1
- package/dist/plops/service.js +8 -3
- package/dist/plops/service.js.map +1 -1
- package/dist/plops/utils/extend-plugin-index-files.js +10 -6
- package/dist/plops/utils/extend-plugin-index-files.js.map +1 -1
- package/dist/plops/utils/extend-plugin-index-files.mjs.map +1 -1
- package/package.json +5 -5
package/dist/plops/policy.js
CHANGED
|
@@ -8,6 +8,11 @@ var validateInput = require('./utils/validate-input.js');
|
|
|
8
8
|
var getFilePath = require('./utils/get-file-path.js');
|
|
9
9
|
var extendPluginIndexFiles = require('./utils/extend-plugin-index-files.js');
|
|
10
10
|
|
|
11
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
+
|
|
13
|
+
var tsUtils__default = /*#__PURE__*/_interopDefault(tsUtils);
|
|
14
|
+
var fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
15
|
+
|
|
11
16
|
var generatePolicy = ((plop)=>{
|
|
12
17
|
// Policy generator
|
|
13
18
|
plop.setGenerator('policy', {
|
|
@@ -29,11 +34,11 @@ var generatePolicy = ((plop)=>{
|
|
|
29
34
|
}
|
|
30
35
|
const currentDir = process.cwd();
|
|
31
36
|
const filePath = getFilePath(answers.destination);
|
|
32
|
-
let language =
|
|
37
|
+
let language = tsUtils__default.default.isUsingTypeScriptSync(currentDir) ? 'ts' : 'js';
|
|
33
38
|
if (answers.plugin) {
|
|
34
39
|
// The tsconfig in plugins is located just outside the server src, not in the root of the plugin.
|
|
35
40
|
const pluginServerDir = path.join(currentDir, 'src', filePath.replace('{{ plugin }}', answers.plugin), '../');
|
|
36
|
-
language =
|
|
41
|
+
language = tsUtils__default.default.isUsingTypeScriptSync(pluginServerDir) ? 'ts' : 'js';
|
|
37
42
|
}
|
|
38
43
|
const baseActions = [
|
|
39
44
|
{
|
|
@@ -44,7 +49,7 @@ var generatePolicy = ((plop)=>{
|
|
|
44
49
|
];
|
|
45
50
|
if (answers.plugin) {
|
|
46
51
|
const indexPath = path.join(plop.getDestBasePath(), `${filePath}/policies/index.${language}`);
|
|
47
|
-
const exists =
|
|
52
|
+
const exists = fs__default.default.existsSync(indexPath);
|
|
48
53
|
if (!exists) {
|
|
49
54
|
// Create index file if it doesn't exist
|
|
50
55
|
baseActions.push({
|
package/dist/plops/policy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.js","sources":["../../src/plops/policy.ts"],"sourcesContent":["import type { ActionType, NodePlopAPI } from 'plop';\nimport tsUtils from '@strapi/typescript-utils';\nimport { join } from 'path';\nimport fs from 'fs';\n\nimport getDestinationPrompts from './prompts/get-destination-prompts';\nimport validateInput from './utils/validate-input';\nimport getFilePath from './utils/get-file-path';\nimport { appendToFile } from './utils/extend-plugin-index-files';\n\nexport default (plop: NodePlopAPI) => {\n // Policy generator\n plop.setGenerator('policy', {\n description: 'Generate a policy for an API',\n prompts: [\n {\n type: 'input',\n name: 'id',\n message: 'Policy name',\n validate: (input) => validateInput(input),\n },\n ...getDestinationPrompts('policy', plop.getDestBasePath(), { rootFolder: true }),\n ],\n actions(answers) {\n if (!answers) {\n return [];\n }\n\n const currentDir = process.cwd();\n const filePath = getFilePath(answers.destination);\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}/policies/{{ id }}.${language}`,\n templateFile: `templates/${language}/policy.${language}.hbs`,\n },\n ];\n\n if (answers.plugin) {\n const indexPath = join(plop.getDestBasePath(), `${filePath}/policies/index.${language}`);\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}/policies/index.${language}`,\n templateFile: `templates/${language}/plugin/plugin.index.${language}.hbs`,\n skipIfExists: true,\n });\n }\n\n // Append the new policy to the index.ts file\n baseActions.push({\n type: 'modify',\n path: `${filePath}/policies/index.${language}`,\n transform(template: string) {\n return appendToFile(template, { type: 'index', singularName: answers.id });\n },\n });\n }\n\n return baseActions;\n },\n });\n};\n"],"names":["plop","setGenerator","description","prompts","type","name","message","validate","input","validateInput","getDestinationPrompts","getDestBasePath","rootFolder","actions","answers","currentDir","process","cwd","filePath","getFilePath","destination","language","tsUtils","isUsingTypeScriptSync","plugin","pluginServerDir","join","replace","baseActions","path","templateFile","indexPath","exists","fs","existsSync","push","skipIfExists","transform","template","appendToFile","singularName","id"],"mappings":"
|
|
1
|
+
{"version":3,"file":"policy.js","sources":["../../src/plops/policy.ts"],"sourcesContent":["import type { ActionType, NodePlopAPI } from 'plop';\nimport tsUtils from '@strapi/typescript-utils';\nimport { join } from 'path';\nimport fs from 'fs';\n\nimport getDestinationPrompts from './prompts/get-destination-prompts';\nimport validateInput from './utils/validate-input';\nimport getFilePath from './utils/get-file-path';\nimport { appendToFile } from './utils/extend-plugin-index-files';\n\nexport default (plop: NodePlopAPI) => {\n // Policy generator\n plop.setGenerator('policy', {\n description: 'Generate a policy for an API',\n prompts: [\n {\n type: 'input',\n name: 'id',\n message: 'Policy name',\n validate: (input) => validateInput(input),\n },\n ...getDestinationPrompts('policy', plop.getDestBasePath(), { rootFolder: true }),\n ],\n actions(answers) {\n if (!answers) {\n return [];\n }\n\n const currentDir = process.cwd();\n const filePath = getFilePath(answers.destination);\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}/policies/{{ id }}.${language}`,\n templateFile: `templates/${language}/policy.${language}.hbs`,\n },\n ];\n\n if (answers.plugin) {\n const indexPath = join(plop.getDestBasePath(), `${filePath}/policies/index.${language}`);\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}/policies/index.${language}`,\n templateFile: `templates/${language}/plugin/plugin.index.${language}.hbs`,\n skipIfExists: true,\n });\n }\n\n // Append the new policy to the index.ts file\n baseActions.push({\n type: 'modify',\n path: `${filePath}/policies/index.${language}`,\n transform(template: string) {\n return appendToFile(template, { type: 'index', singularName: answers.id });\n },\n });\n }\n\n return baseActions;\n },\n });\n};\n"],"names":["plop","setGenerator","description","prompts","type","name","message","validate","input","validateInput","getDestinationPrompts","getDestBasePath","rootFolder","actions","answers","currentDir","process","cwd","filePath","getFilePath","destination","language","tsUtils","isUsingTypeScriptSync","plugin","pluginServerDir","join","replace","baseActions","path","templateFile","indexPath","exists","fs","existsSync","push","skipIfExists","transform","template","appendToFile","singularName","id"],"mappings":"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"}
|
|
@@ -4,6 +4,11 @@ var pluralize = require('pluralize');
|
|
|
4
4
|
var slugify = require('@sindresorhus/slugify');
|
|
5
5
|
var utils = require('@strapi/utils');
|
|
6
6
|
|
|
7
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
|
+
|
|
9
|
+
var pluralize__default = /*#__PURE__*/_interopDefault(pluralize);
|
|
10
|
+
var slugify__default = /*#__PURE__*/_interopDefault(slugify);
|
|
11
|
+
|
|
7
12
|
const questions = [
|
|
8
13
|
{
|
|
9
14
|
type: 'input',
|
|
@@ -15,7 +20,7 @@ const questions = [
|
|
|
15
20
|
type: 'input',
|
|
16
21
|
name: 'singularName',
|
|
17
22
|
message: 'Content type singular name',
|
|
18
|
-
default: (answers)=>
|
|
23
|
+
default: (answers)=>slugify__default.default(answers.displayName),
|
|
19
24
|
validate (input) {
|
|
20
25
|
if (!utils.strings.isKebabCase(input)) {
|
|
21
26
|
return 'Value must be in kebab-case';
|
|
@@ -27,7 +32,7 @@ const questions = [
|
|
|
27
32
|
type: 'input',
|
|
28
33
|
name: 'pluralName',
|
|
29
34
|
message: 'Content type plural name',
|
|
30
|
-
default: (answers)=>
|
|
35
|
+
default: (answers)=>pluralize__default.default(answers.singularName),
|
|
31
36
|
validate (input, answers) {
|
|
32
37
|
if (answers.singularName === input) {
|
|
33
38
|
return 'Singular and plural names cannot be the same';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ct-names-prompts.js","sources":["../../../src/plops/prompts/ct-names-prompts.ts"],"sourcesContent":["import pluralize from 'pluralize';\nimport slugify from '@sindresorhus/slugify';\nimport { strings } from '@strapi/utils';\n\ninterface Answers {\n displayName: string;\n singularName: string;\n pluralName: string;\n}\n\nconst questions = [\n {\n type: 'input',\n name: 'displayName',\n message: 'Content type display name',\n validate: (input: string) => !!input,\n },\n {\n type: 'input',\n name: 'singularName',\n message: 'Content type singular name',\n default: (answers: Answers) => slugify(answers.displayName),\n validate(input: string) {\n if (!strings.isKebabCase(input)) {\n return 'Value must be in kebab-case';\n }\n\n return true;\n },\n },\n {\n type: 'input',\n name: 'pluralName',\n message: 'Content type plural name',\n default: (answers: Answers) => pluralize(answers.singularName),\n validate(input: string, answers: Answers) {\n if (answers.singularName === input) {\n return 'Singular and plural names cannot be the same';\n }\n\n if (!strings.isKebabCase(input)) {\n return 'Value must be in kebab-case';\n }\n\n return true;\n },\n },\n];\n\nexport default questions;\n"],"names":["questions","type","name","message","validate","input","default","answers","slugify","displayName","strings","isKebabCase","pluralize","singularName"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ct-names-prompts.js","sources":["../../../src/plops/prompts/ct-names-prompts.ts"],"sourcesContent":["import pluralize from 'pluralize';\nimport slugify from '@sindresorhus/slugify';\nimport { strings } from '@strapi/utils';\n\ninterface Answers {\n displayName: string;\n singularName: string;\n pluralName: string;\n}\n\nconst questions = [\n {\n type: 'input',\n name: 'displayName',\n message: 'Content type display name',\n validate: (input: string) => !!input,\n },\n {\n type: 'input',\n name: 'singularName',\n message: 'Content type singular name',\n default: (answers: Answers) => slugify(answers.displayName),\n validate(input: string) {\n if (!strings.isKebabCase(input)) {\n return 'Value must be in kebab-case';\n }\n\n return true;\n },\n },\n {\n type: 'input',\n name: 'pluralName',\n message: 'Content type plural name',\n default: (answers: Answers) => pluralize(answers.singularName),\n validate(input: string, answers: Answers) {\n if (answers.singularName === input) {\n return 'Singular and plural names cannot be the same';\n }\n\n if (!strings.isKebabCase(input)) {\n return 'Value must be in kebab-case';\n }\n\n return true;\n },\n },\n];\n\nexport default questions;\n"],"names":["questions","type","name","message","validate","input","default","answers","slugify","displayName","strings","isKebabCase","pluralize","singularName"],"mappings":";;;;;;;;;;;AAUA,MAAMA,SAAAA,GAAY;AAChB,IAAA;QACEC,IAAAA,EAAM,OAAA;QACNC,IAAAA,EAAM,aAAA;QACNC,OAAAA,EAAS,2BAAA;QACTC,QAAAA,EAAU,CAACC,KAAAA,GAAkB,CAAC,CAACA;AACjC,KAAA;AACA,IAAA;QACEJ,IAAAA,EAAM,OAAA;QACNC,IAAAA,EAAM,cAAA;QACNC,OAAAA,EAAS,4BAAA;AACTG,QAAAA,OAAAA,EAAS,CAACC,OAAAA,GAAqBC,wBAAAA,CAAQD,OAAAA,CAAQE,WAAW,CAAA;AAC1DL,QAAAA,QAAAA,CAAAA,CAASC,KAAa,EAAA;AACpB,YAAA,IAAI,CAACK,aAAAA,CAAQC,WAAW,CAACN,KAAAA,CAAAA,EAAQ;gBAC/B,OAAO,6BAAA;AACT,YAAA;YAEA,OAAO,IAAA;AACT,QAAA;AACF,KAAA;AACA,IAAA;QACEJ,IAAAA,EAAM,OAAA;QACNC,IAAAA,EAAM,YAAA;QACNC,OAAAA,EAAS,0BAAA;AACTG,QAAAA,OAAAA,EAAS,CAACC,OAAAA,GAAqBK,0BAAAA,CAAUL,OAAAA,CAAQM,YAAY,CAAA;QAC7DT,QAAAA,CAAAA,CAASC,KAAa,EAAEE,OAAgB,EAAA;YACtC,IAAIA,OAAAA,CAAQM,YAAY,KAAKR,KAAAA,EAAO;gBAClC,OAAO,8CAAA;AACT,YAAA;AAEA,YAAA,IAAI,CAACK,aAAAA,CAAQC,WAAW,CAACN,KAAAA,CAAAA,EAAQ;gBAC/B,OAAO,6BAAA;AACT,YAAA;YAEA,OAAO,IAAA;AACT,QAAA;AACF;AACD;;;;"}
|
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
var path = require('path');
|
|
4
4
|
var fs = require('fs-extra');
|
|
5
5
|
|
|
6
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
7
|
+
|
|
8
|
+
var fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
9
|
+
|
|
6
10
|
var getDestinationPrompts = ((action, basePath, { rootFolder = false } = {})=>{
|
|
7
11
|
return [
|
|
8
12
|
{
|
|
@@ -38,11 +42,11 @@ var getDestinationPrompts = ((action, basePath, { rootFolder = false } = {})=>{
|
|
|
38
42
|
name: 'api',
|
|
39
43
|
async choices () {
|
|
40
44
|
const apiPath = path.join(basePath, 'api');
|
|
41
|
-
const exists = await
|
|
45
|
+
const exists = await fs__default.default.pathExists(apiPath);
|
|
42
46
|
if (!exists) {
|
|
43
47
|
throw Error('Couldn\'t find an "api" directory');
|
|
44
48
|
}
|
|
45
|
-
const apiDir = await
|
|
49
|
+
const apiDir = await fs__default.default.readdir(apiPath, {
|
|
46
50
|
withFileTypes: true
|
|
47
51
|
});
|
|
48
52
|
const apiDirContent = apiDir.filter((fd)=>fd.isDirectory());
|
|
@@ -59,12 +63,12 @@ var getDestinationPrompts = ((action, basePath, { rootFolder = false } = {})=>{
|
|
|
59
63
|
name: 'plugin',
|
|
60
64
|
async choices () {
|
|
61
65
|
const pluginsPath = path.join(basePath, 'plugins');
|
|
62
|
-
const exists = await
|
|
66
|
+
const exists = await fs__default.default.pathExists(pluginsPath);
|
|
63
67
|
if (!exists) {
|
|
64
68
|
throw Error('Couldn\'t find a "plugins" directory');
|
|
65
69
|
}
|
|
66
|
-
const pluginsDir = await
|
|
67
|
-
const pluginsDirContent = pluginsDir.filter((api)=>
|
|
70
|
+
const pluginsDir = await fs__default.default.readdir(pluginsPath);
|
|
71
|
+
const pluginsDirContent = pluginsDir.filter((api)=>fs__default.default.lstatSync(path.join(pluginsPath, api)).isDirectory());
|
|
68
72
|
if (pluginsDirContent.length === 0) {
|
|
69
73
|
throw Error('The "plugins" directory is empty');
|
|
70
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-destination-prompts.js","sources":["../../../src/plops/prompts/get-destination-prompts.ts"],"sourcesContent":["import { join } from 'path';\nimport fs from 'fs-extra';\n\nexport default (action: string, basePath: string, { rootFolder = false } = {}) => {\n return [\n {\n type: 'list',\n name: 'destination',\n message: `Where do you want to add this ${action}?`,\n choices: [\n ...(rootFolder\n ? [\n {\n name: `Add ${action} to root of project`,\n value: 'root',\n },\n ]\n : [\n {\n name: `Add ${action} to new API`,\n value: 'new',\n },\n ]),\n { name: `Add ${action} to an existing API`, value: 'api' },\n { name: `Add ${action} to an existing plugin`, value: 'plugin' },\n ],\n },\n {\n when: (answers: any) => answers.destination === 'api',\n type: 'list',\n message: 'Which API is this for?',\n name: 'api',\n async choices() {\n const apiPath = join(basePath, 'api');\n const exists = await fs.pathExists(apiPath);\n\n if (!exists) {\n throw Error('Couldn\\'t find an \"api\" directory');\n }\n\n const apiDir = await fs.readdir(apiPath, { withFileTypes: true });\n const apiDirContent = apiDir.filter((fd) => fd.isDirectory());\n\n if (apiDirContent.length === 0) {\n throw Error('The \"api\" directory is empty');\n }\n\n return apiDirContent;\n },\n },\n {\n when: (answers: any) => answers.destination === 'plugin',\n type: 'list',\n message: 'Which plugin is this for?',\n name: 'plugin',\n async choices() {\n const pluginsPath = join(basePath, 'plugins');\n const exists = await fs.pathExists(pluginsPath);\n\n if (!exists) {\n throw Error('Couldn\\'t find a \"plugins\" directory');\n }\n\n const pluginsDir = await fs.readdir(pluginsPath);\n const pluginsDirContent = pluginsDir.filter((api) =>\n fs.lstatSync(join(pluginsPath, api)).isDirectory()\n );\n\n if (pluginsDirContent.length === 0) {\n throw Error('The \"plugins\" directory is empty');\n }\n\n return pluginsDirContent;\n },\n },\n ];\n};\n"],"names":["action","basePath","rootFolder","type","name","message","choices","value","when","answers","destination","apiPath","join","exists","fs","pathExists","Error","apiDir","readdir","withFileTypes","apiDirContent","filter","fd","isDirectory","length","pluginsPath","pluginsDir","pluginsDirContent","api","lstatSync"],"mappings":"
|
|
1
|
+
{"version":3,"file":"get-destination-prompts.js","sources":["../../../src/plops/prompts/get-destination-prompts.ts"],"sourcesContent":["import { join } from 'path';\nimport fs from 'fs-extra';\n\nexport default (action: string, basePath: string, { rootFolder = false } = {}) => {\n return [\n {\n type: 'list',\n name: 'destination',\n message: `Where do you want to add this ${action}?`,\n choices: [\n ...(rootFolder\n ? [\n {\n name: `Add ${action} to root of project`,\n value: 'root',\n },\n ]\n : [\n {\n name: `Add ${action} to new API`,\n value: 'new',\n },\n ]),\n { name: `Add ${action} to an existing API`, value: 'api' },\n { name: `Add ${action} to an existing plugin`, value: 'plugin' },\n ],\n },\n {\n when: (answers: any) => answers.destination === 'api',\n type: 'list',\n message: 'Which API is this for?',\n name: 'api',\n async choices() {\n const apiPath = join(basePath, 'api');\n const exists = await fs.pathExists(apiPath);\n\n if (!exists) {\n throw Error('Couldn\\'t find an \"api\" directory');\n }\n\n const apiDir = await fs.readdir(apiPath, { withFileTypes: true });\n const apiDirContent = apiDir.filter((fd) => fd.isDirectory());\n\n if (apiDirContent.length === 0) {\n throw Error('The \"api\" directory is empty');\n }\n\n return apiDirContent;\n },\n },\n {\n when: (answers: any) => answers.destination === 'plugin',\n type: 'list',\n message: 'Which plugin is this for?',\n name: 'plugin',\n async choices() {\n const pluginsPath = join(basePath, 'plugins');\n const exists = await fs.pathExists(pluginsPath);\n\n if (!exists) {\n throw Error('Couldn\\'t find a \"plugins\" directory');\n }\n\n const pluginsDir = await fs.readdir(pluginsPath);\n const pluginsDirContent = pluginsDir.filter((api) =>\n fs.lstatSync(join(pluginsPath, api)).isDirectory()\n );\n\n if (pluginsDirContent.length === 0) {\n throw Error('The \"plugins\" directory is empty');\n }\n\n return pluginsDirContent;\n },\n },\n ];\n};\n"],"names":["action","basePath","rootFolder","type","name","message","choices","value","when","answers","destination","apiPath","join","exists","fs","pathExists","Error","apiDir","readdir","withFileTypes","apiDirContent","filter","fd","isDirectory","length","pluginsPath","pluginsDir","pluginsDirContent","api","lstatSync"],"mappings":"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"}
|
package/dist/plops/service.js
CHANGED
|
@@ -7,6 +7,11 @@ var getDestinationPrompts = require('./prompts/get-destination-prompts.js');
|
|
|
7
7
|
var getFilePath = require('./utils/get-file-path.js');
|
|
8
8
|
var extendPluginIndexFiles = require('./utils/extend-plugin-index-files.js');
|
|
9
9
|
|
|
10
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
+
|
|
12
|
+
var tsUtils__default = /*#__PURE__*/_interopDefault(tsUtils);
|
|
13
|
+
var fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
14
|
+
|
|
10
15
|
var generateService = ((plop)=>{
|
|
11
16
|
// Service generator
|
|
12
17
|
plop.setGenerator('service', {
|
|
@@ -25,11 +30,11 @@ var generateService = ((plop)=>{
|
|
|
25
30
|
}
|
|
26
31
|
const filePath = getFilePath(answers?.destination);
|
|
27
32
|
const currentDir = process.cwd();
|
|
28
|
-
let language =
|
|
33
|
+
let language = tsUtils__default.default.isUsingTypeScriptSync(currentDir) ? 'ts' : 'js';
|
|
29
34
|
if (answers.plugin) {
|
|
30
35
|
// The tsconfig in plugins is located just outside the server src, not in the root of the plugin.
|
|
31
36
|
const pluginServerDir = path.join(currentDir, 'src', filePath.replace('{{ plugin }}', answers.plugin), '../');
|
|
32
|
-
language =
|
|
37
|
+
language = tsUtils__default.default.isUsingTypeScriptSync(pluginServerDir) ? 'ts' : 'js';
|
|
33
38
|
}
|
|
34
39
|
const baseActions = [
|
|
35
40
|
{
|
|
@@ -40,7 +45,7 @@ var generateService = ((plop)=>{
|
|
|
40
45
|
];
|
|
41
46
|
if (answers.plugin) {
|
|
42
47
|
const indexPath = path.join(plop.getDestBasePath(), `${filePath}/services/index.${language}`);
|
|
43
|
-
const exists =
|
|
48
|
+
const exists = fs__default.default.existsSync(indexPath);
|
|
44
49
|
if (!exists) {
|
|
45
50
|
// Create index file if it doesn't exist
|
|
46
51
|
baseActions.push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sources":["../../src/plops/service.ts"],"sourcesContent":["import type { ActionType, NodePlopAPI } from 'plop';\nimport tsUtils from '@strapi/typescript-utils';\nimport { join } from 'path';\nimport fs from 'fs';\n\nimport getDestinationPrompts from './prompts/get-destination-prompts';\nimport getFilePath from './utils/get-file-path';\nimport { appendToFile } from './utils/extend-plugin-index-files';\n\nexport default (plop: NodePlopAPI) => {\n // Service generator\n plop.setGenerator('service', {\n description: 'Generate a service for an API',\n prompts: [\n {\n type: 'input',\n name: 'id',\n message: 'Service name',\n },\n ...getDestinationPrompts('service', plop.getDestBasePath()),\n ],\n actions(answers) {\n if (!answers) {\n return [];\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}/services/{{ id }}.${language}`,\n templateFile: `templates/${language}/service.${language}.hbs`,\n },\n ];\n\n if (answers.plugin) {\n const indexPath = join(plop.getDestBasePath(), `${filePath}/services/index.${language}`);\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}/services/index.${language}`,\n templateFile: `templates/${language}/plugin/plugin.index.${language}.hbs`,\n skipIfExists: true,\n });\n }\n\n // Append the new service to the index.ts file\n baseActions.push({\n type: 'modify',\n path: `${filePath}/services/index.${language}`,\n transform(template: string) {\n return appendToFile(template, { type: 'index', singularName: answers.id });\n },\n });\n }\n\n return baseActions;\n },\n });\n};\n"],"names":["plop","setGenerator","description","prompts","type","name","message","getDestinationPrompts","getDestBasePath","actions","answers","filePath","getFilePath","destination","currentDir","process","cwd","language","tsUtils","isUsingTypeScriptSync","plugin","pluginServerDir","join","replace","baseActions","path","templateFile","indexPath","exists","fs","existsSync","push","skipIfExists","transform","template","appendToFile","singularName","id"],"mappings":"
|
|
1
|
+
{"version":3,"file":"service.js","sources":["../../src/plops/service.ts"],"sourcesContent":["import type { ActionType, NodePlopAPI } from 'plop';\nimport tsUtils from '@strapi/typescript-utils';\nimport { join } from 'path';\nimport fs from 'fs';\n\nimport getDestinationPrompts from './prompts/get-destination-prompts';\nimport getFilePath from './utils/get-file-path';\nimport { appendToFile } from './utils/extend-plugin-index-files';\n\nexport default (plop: NodePlopAPI) => {\n // Service generator\n plop.setGenerator('service', {\n description: 'Generate a service for an API',\n prompts: [\n {\n type: 'input',\n name: 'id',\n message: 'Service name',\n },\n ...getDestinationPrompts('service', plop.getDestBasePath()),\n ],\n actions(answers) {\n if (!answers) {\n return [];\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}/services/{{ id }}.${language}`,\n templateFile: `templates/${language}/service.${language}.hbs`,\n },\n ];\n\n if (answers.plugin) {\n const indexPath = join(plop.getDestBasePath(), `${filePath}/services/index.${language}`);\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}/services/index.${language}`,\n templateFile: `templates/${language}/plugin/plugin.index.${language}.hbs`,\n skipIfExists: true,\n });\n }\n\n // Append the new service to the index.ts file\n baseActions.push({\n type: 'modify',\n path: `${filePath}/services/index.${language}`,\n transform(template: string) {\n return appendToFile(template, { type: 'index', singularName: answers.id });\n },\n });\n }\n\n return baseActions;\n },\n });\n};\n"],"names":["plop","setGenerator","description","prompts","type","name","message","getDestinationPrompts","getDestBasePath","actions","answers","filePath","getFilePath","destination","currentDir","process","cwd","language","tsUtils","isUsingTypeScriptSync","plugin","pluginServerDir","join","replace","baseActions","path","templateFile","indexPath","exists","fs","existsSync","push","skipIfExists","transform","template","appendToFile","singularName","id"],"mappings":";;;;;;;;;;;;;;AASA,sBAAe,CAAA,CAACA,IAAAA,GAAAA;;IAEdA,IAAAA,CAAKC,YAAY,CAAC,SAAA,EAAW;QAC3BC,WAAAA,EAAa,+BAAA;QACbC,OAAAA,EAAS;AACP,YAAA;gBACEC,IAAAA,EAAM,OAAA;gBACNC,IAAAA,EAAM,IAAA;gBACNC,OAAAA,EAAS;AACX,aAAA;eACGC,qBAAAA,CAAsB,SAAA,EAAWP,KAAKQ,eAAe,EAAA;AACzD,SAAA;AACDC,QAAAA,OAAAA,CAAAA,CAAQC,OAAO,EAAA;AACb,YAAA,IAAI,CAACA,OAAAA,EAAS;AACZ,gBAAA,OAAO,EAAE;AACX,YAAA;YAEA,MAAMC,QAAAA,GAAWC,YAAYF,OAAAA,EAASG,WAAAA,CAAAA;YACtC,MAAMC,UAAAA,GAAaC,QAAQC,GAAG,EAAA;AAC9B,YAAA,IAAIC,QAAAA,GAAWC,wBAAAA,CAAQC,qBAAqB,CAACL,cAAc,IAAA,GAAO,IAAA;YAElE,IAAIJ,OAAAA,CAAQU,MAAM,EAAE;;gBAElB,MAAMC,eAAAA,GAAkBC,SAAAA,CACtBR,UAAAA,EACA,KAAA,EACAH,QAAAA,CAASY,OAAO,CAAC,cAAA,EAAgBb,OAAAA,CAAQU,MAAM,CAAA,EAC/C,KAAA,CAAA;AAEFH,gBAAAA,QAAAA,GAAWC,wBAAAA,CAAQC,qBAAqB,CAACE,eAAAA,CAAAA,GAAmB,IAAA,GAAO,IAAA;AACrE,YAAA;AAEA,YAAA,MAAMG,WAAAA,GAAiC;AACrC,gBAAA;oBACEpB,IAAAA,EAAM,KAAA;AACNqB,oBAAAA,IAAAA,EAAM,CAAA,EAAGd,QAAAA,CAAS,mBAAmB,EAAEM,QAAAA,CAAAA,CAAU;oBACjDS,YAAAA,EAAc,CAAC,UAAU,EAAET,QAAAA,CAAS,SAAS,EAAEA,QAAAA,CAAS,IAAI;AAC9D;AACD,aAAA;YAED,IAAIP,OAAAA,CAAQU,MAAM,EAAE;gBAClB,MAAMO,SAAAA,GAAYL,UAAKtB,IAAAA,CAAKQ,eAAe,IAAI,CAAA,EAAGG,QAAAA,CAAS,gBAAgB,EAAEM,QAAAA,CAAAA,CAAU,CAAA;gBACvF,MAAMW,MAAAA,GAASC,mBAAAA,CAAGC,UAAU,CAACH,SAAAA,CAAAA;AAE7B,gBAAA,IAAI,CAACC,MAAAA,EAAQ;;AAEXJ,oBAAAA,WAAAA,CAAYO,IAAI,CAAC;wBACf3B,IAAAA,EAAM,KAAA;AACNqB,wBAAAA,IAAAA,EAAM,CAAA,EAAGd,QAAAA,CAAS,gBAAgB,EAAEM,QAAAA,CAAAA,CAAU;wBAC9CS,YAAAA,EAAc,CAAC,UAAU,EAAET,QAAAA,CAAS,qBAAqB,EAAEA,QAAAA,CAAS,IAAI,CAAC;wBACzEe,YAAAA,EAAc;AAChB,qBAAA,CAAA;AACF,gBAAA;;AAGAR,gBAAAA,WAAAA,CAAYO,IAAI,CAAC;oBACf3B,IAAAA,EAAM,QAAA;AACNqB,oBAAAA,IAAAA,EAAM,CAAA,EAAGd,QAAAA,CAAS,gBAAgB,EAAEM,QAAAA,CAAAA,CAAU;AAC9CgB,oBAAAA,SAAAA,CAAAA,CAAUC,QAAgB,EAAA;AACxB,wBAAA,OAAOC,oCAAaD,QAAAA,EAAU;4BAAE9B,IAAAA,EAAM,OAAA;AAASgC,4BAAAA,YAAAA,EAAc1B,QAAQ2B;AAAG,yBAAA,CAAA;AAC1E,oBAAA;AACF,iBAAA,CAAA;AACF,YAAA;YAEA,OAAOb,WAAAA;AACT,QAAA;AACF,KAAA,CAAA;AACF,CAAA;;;;"}
|
|
@@ -3,7 +3,10 @@
|
|
|
3
3
|
var jscodeshift = require('jscodeshift');
|
|
4
4
|
var camelCase = require('lodash/camelCase');
|
|
5
5
|
|
|
6
|
-
function
|
|
6
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
7
|
+
|
|
8
|
+
function _interopNamespace(e) {
|
|
9
|
+
if (e && e.__esModule) return e;
|
|
7
10
|
var n = Object.create(null);
|
|
8
11
|
if (e) {
|
|
9
12
|
Object.keys(e).forEach(function (k) {
|
|
@@ -20,7 +23,8 @@ function _interopNamespaceDefault(e) {
|
|
|
20
23
|
return Object.freeze(n);
|
|
21
24
|
}
|
|
22
25
|
|
|
23
|
-
var jscodeshift__namespace = /*#__PURE__*/
|
|
26
|
+
var jscodeshift__namespace = /*#__PURE__*/_interopNamespace(jscodeshift);
|
|
27
|
+
var camelCase__default = /*#__PURE__*/_interopDefault(camelCase);
|
|
24
28
|
|
|
25
29
|
const j = jscodeshift__namespace.withParser('tsx');
|
|
26
30
|
// Helper to check if a string is a valid JavaScript identifier
|
|
@@ -30,7 +34,7 @@ const isValidIdentifier = (str)=>{
|
|
|
30
34
|
// Helper to create the appropriate property based on type
|
|
31
35
|
const createProperty = (config)=>{
|
|
32
36
|
const { type, singularName } = config;
|
|
33
|
-
const camelCaseName =
|
|
37
|
+
const camelCaseName = camelCase__default.default(singularName);
|
|
34
38
|
const varName = type === 'content-type' ? `${camelCaseName}Schema` : camelCaseName;
|
|
35
39
|
// Use string literal for key only if singularName is not a valid identifier
|
|
36
40
|
const keyNode = isValidIdentifier(singularName) ? j.identifier(singularName) : j.literal(singularName);
|
|
@@ -55,7 +59,7 @@ const hasExistingProperty = (obj, config)=>{
|
|
|
55
59
|
if (!elements) return false;
|
|
56
60
|
if (type === 'routes') {
|
|
57
61
|
// Check for spread elements ...camelCaseName.routes
|
|
58
|
-
const camelCaseName =
|
|
62
|
+
const camelCaseName = camelCase__default.default(singularName);
|
|
59
63
|
return elements.some((element)=>j.SpreadElement.check(element) && j.MemberExpression.check(element.argument) && j.Identifier.check(element.argument.object) && element.argument.object.name === camelCaseName && j.Identifier.check(element.argument.property) && element.argument.property.name === 'routes');
|
|
60
64
|
}
|
|
61
65
|
// For content-type and index, check for object property (both identifier and literal keys)
|
|
@@ -87,7 +91,7 @@ const handleRoutesArray = (obj, config)=>{
|
|
|
87
91
|
// Helper to create routes array element (always returns SpreadElement for routes)
|
|
88
92
|
const createRoutesElement = (config)=>{
|
|
89
93
|
const { singularName } = config;
|
|
90
|
-
const camelCaseName =
|
|
94
|
+
const camelCaseName = camelCase__default.default(singularName);
|
|
91
95
|
return j.spreadElement(j.memberExpression(j.identifier(camelCaseName), j.identifier('routes')));
|
|
92
96
|
};
|
|
93
97
|
// Helper to create new export for routes
|
|
@@ -108,7 +112,7 @@ const appendToFile = (template, config)=>{
|
|
|
108
112
|
const root = normalizedTemplate ? j(normalizedTemplate) : j(j.program([]));
|
|
109
113
|
const { type, singularName } = config;
|
|
110
114
|
const isEsm = detectModuleFormat(normalizedTemplate) === 'esm';
|
|
111
|
-
const camelCaseName =
|
|
115
|
+
const camelCaseName = camelCase__default.default(singularName);
|
|
112
116
|
const varName = type === 'content-type' ? `${camelCaseName}Schema` : camelCaseName;
|
|
113
117
|
const source = type === 'content-type' ? `./${singularName}/schema.json` : `./${singularName}`;
|
|
114
118
|
addImportIfMissing(root, varName, source, isEsm);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extend-plugin-index-files.js","sources":["../../../src/plops/utils/extend-plugin-index-files.ts"],"sourcesContent":["import * as jscodeshift from 'jscodeshift';\nimport camelCase from 'lodash/camelCase';\n\nconst j = jscodeshift.withParser('tsx');\n\ntype AppendType = 'content-type' | 'index' | 'routes';\n\ninterface AppendConfig {\n type: AppendType;\n singularName: string;\n}\n\n// Helper to check if a string is a valid JavaScript identifier\nconst isValidIdentifier = (str: string): boolean => {\n return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(str);\n};\n\n// Helper to create the appropriate property based on type\nconst createProperty = (config: AppendConfig) => {\n const { type, singularName } = config;\n const camelCaseName = camelCase(singularName);\n const varName = type === 'content-type' ? `${camelCaseName}Schema` : camelCaseName;\n\n // Use string literal for key only if singularName is not a valid identifier\n const keyNode = isValidIdentifier(singularName)\n ? j.identifier(singularName)\n : j.literal(singularName);\n\n switch (type) {\n case 'content-type':\n return j.objectProperty(\n keyNode,\n j.objectExpression([j.objectProperty(j.identifier('schema'), j.identifier(varName))])\n );\n case 'index':\n return j.objectProperty(keyNode, j.identifier(varName));\n case 'routes':\n return j.spreadElement(j.memberExpression(j.identifier(varName), j.identifier('routes')));\n default:\n throw new Error(`Unknown append type: ${type}`);\n }\n};\n\n// Helper to check if property already exists\nconst hasExistingProperty = (obj: any, config: AppendConfig): boolean => {\n const { type, singularName } = config;\n if (!obj?.properties && !j.ArrayExpression.check(obj)) return false;\n\n const elements = j.ArrayExpression.check(obj) ? obj.elements : obj.properties;\n if (!elements) return false;\n\n if (type === 'routes') {\n // Check for spread elements ...camelCaseName.routes\n const camelCaseName = camelCase(singularName);\n return elements.some(\n (element: any) =>\n j.SpreadElement.check(element) &&\n j.MemberExpression.check(element.argument) &&\n j.Identifier.check(element.argument.object) &&\n element.argument.object.name === camelCaseName &&\n j.Identifier.check(element.argument.property) &&\n element.argument.property.name === 'routes'\n );\n }\n\n // For content-type and index, check for object property (both identifier and literal keys)\n return elements.some(\n (prop: any) =>\n j.ObjectProperty.check(prop) &&\n ((j.Identifier.check(prop.key) && prop.key.name === singularName) ||\n (j.Literal.check(prop.key) && prop.key.value === singularName))\n );\n};\n\n// Helper to add property to object if it doesn't exist\nconst addPropertyToObject = (obj: any, config: AppendConfig) => {\n if (!obj || hasExistingProperty(obj, config)) return;\n\n if (config.type === 'routes' && j.ArrayExpression.check(obj)) {\n obj.elements.push(createRoutesElement(config));\n } else if (obj.properties?.length >= 0) {\n obj.properties.push(createProperty(config));\n }\n};\n\n// Helper to find and add to routes array\nconst handleRoutesArray = (obj: any, config: AppendConfig) => {\n if (!obj?.properties) return false;\n\n const routesProp = obj.properties.find(\n (prop: any) =>\n j.ObjectProperty.check(prop) &&\n ((j.Identifier.check(prop.key) && prop.key.name === 'routes') ||\n (j.Literal.check(prop.key) && prop.key.value === 'routes')) &&\n j.ArrayExpression.check(prop.value)\n );\n\n if (routesProp?.value) {\n const routesArray = routesProp.value;\n if (!hasExistingProperty(routesArray, config)) {\n routesArray.elements = routesArray.elements || [];\n routesArray.elements.push(createRoutesElement(config));\n }\n return true;\n }\n\n return false;\n};\n\n// Helper to create routes array element (always returns SpreadElement for routes)\nconst createRoutesElement = (config: AppendConfig) => {\n const { singularName } = config;\n const camelCaseName = camelCase(singularName);\n return j.spreadElement(j.memberExpression(j.identifier(camelCaseName), j.identifier('routes')));\n};\n\n// Helper to create new export for routes\nconst createRoutesExport = (config: AppendConfig) => {\n return j.arrowFunctionExpression(\n [],\n j.objectExpression([\n j.objectProperty(j.identifier('type'), j.literal('content-api')),\n j.objectProperty(j.identifier('routes'), j.arrayExpression([createRoutesElement(config)])),\n ])\n );\n};\n\n// Unified append function for all types\nexport const appendToFile = (template: string, config: AppendConfig): string => {\n if (!config?.singularName || !config?.type) {\n throw new Error('Invalid config: singularName and type are required');\n }\n\n const normalizedTemplate = template?.trim() || '';\n const root = normalizedTemplate ? j(normalizedTemplate) : j(j.program([]));\n const { type, singularName } = config;\n const isEsm = detectModuleFormat(normalizedTemplate) === 'esm';\n\n const camelCaseName = camelCase(singularName);\n const varName = type === 'content-type' ? `${camelCaseName}Schema` : camelCaseName;\n const source = type === 'content-type' ? `./${singularName}/schema.json` : `./${singularName}`;\n\n addImportIfMissing(root, varName, source, isEsm);\n\n if (isEsm) {\n handleEsmExport(root, config, type);\n } else {\n handleCjsExport(root, config, type);\n }\n\n return root.toSource({ quote: 'single' });\n};\n\n// Helper to detect module format\nconst detectModuleFormat = (template: string): 'esm' | 'cjs' => {\n const hasImport = /^import\\s/.test(template) || template.includes('import ');\n const hasExportDefault = template.includes('export default');\n const hasRequire = template.includes('require(');\n const hasModuleExports = template.includes('module.exports');\n\n if (hasImport || hasExportDefault) return 'esm';\n if (hasRequire || hasModuleExports) return 'cjs';\n return 'esm'; // Default to ESM\n};\n\n// Helper to insert statement at appropriate location\nconst insertStatement = (\n root: jscodeshift.Collection<any>,\n statement: any,\n preferredLocation?: jscodeshift.Collection<any>\n) => {\n if (preferredLocation && preferredLocation.length > 0) {\n preferredLocation.at(-1).insertAfter(statement);\n } else {\n const firstStatement = root.find(j.Statement).at(0);\n if (firstStatement.length > 0) {\n firstStatement.insertBefore(statement);\n } else {\n handleEmptyFile(root, statement);\n }\n }\n};\n\n// Helper to add import/require if missing\nconst addImportIfMissing = (\n root: jscodeshift.Collection<any>,\n varName: string,\n source: string,\n isEsm: boolean\n) => {\n if (isEsm) {\n if (root.find(j.ImportDeclaration, { source: { value: source } }).length === 0) {\n const importDecl = j.importDeclaration(\n [j.importDefaultSpecifier(j.identifier(varName))],\n j.literal(source)\n );\n insertStatement(root, importDecl, root.find(j.ImportDeclaration));\n }\n } else if (\n root.find(j.VariableDeclarator, {\n id: { name: varName },\n init: { type: 'CallExpression', callee: { name: 'require' }, arguments: [{ value: source }] },\n }).length === 0\n ) {\n const requireStmt = j.variableDeclaration('const', [\n j.variableDeclarator(\n j.identifier(varName),\n j.callExpression(j.identifier('require'), [j.literal(source)])\n ),\n ]);\n\n const requires = root\n .find(j.VariableDeclaration)\n .filter((path) =>\n path.value.declarations.some(\n (decl: any) => j.CallExpression.check(decl.init) && decl.init.callee?.name === 'require'\n )\n );\n\n const useStrict = root\n .find(j.ExpressionStatement)\n .filter(\n (path: any) =>\n j.Literal.check(path.value.expression) &&\n /use strict/.test(String(path.value.expression.value))\n );\n\n insertStatement(root, requireStmt, requires.length > 0 ? requires : useStrict);\n }\n};\n\n// Helper to safely handle empty files\nconst handleEmptyFile = (root: jscodeshift.Collection<any>, firstStatement: any) => {\n try {\n // Check if we have any paths in the collection\n const paths = root.paths();\n if (paths.length === 0) {\n // Completely empty collection - create new program\n const newProgram = j.program([firstStatement]);\n // Replace the entire root with new program\n return root.replaceWith(newProgram);\n }\n\n // Get the first path (should be the program)\n const rootPath = paths[0];\n if (!rootPath || !rootPath.value) {\n // Invalid root path - create new program\n const newProgram = j.program([firstStatement]);\n return root.replaceWith(newProgram);\n }\n\n // Check if it's a valid program node\n if (j.Program.check(rootPath.value)) {\n // Ensure body exists and add statement\n if (!rootPath.value.body) {\n rootPath.value.body = [];\n }\n rootPath.value.body.push(firstStatement);\n } else {\n // Not a program node - replace with new program\n const newProgram = j.program([firstStatement]);\n rootPath.replace(newProgram);\n }\n } catch (error: any) {\n // Ultimate fallback - create a minimal working file\n console.warn('Failed to handle empty file, creating new program:', error.message);\n const newProgram = j.program([firstStatement]);\n try {\n root.replaceWith(newProgram);\n } catch (replaceError) {\n // Last resort - throw descriptive error\n throw new Error(\n `Unable to add statement to empty file: ${error.message}. Root collection may be invalid.`\n );\n }\n }\n};\n\n// Helper to find the exported object regardless of export pattern\nconst findExportedObject = (root: jscodeshift.Collection<any>, exportedValue: any): any => {\n // Case 1: Direct object export\n if (j.ObjectExpression.check(exportedValue)) {\n return exportedValue;\n }\n\n // Case 2: Function that returns an object\n if (\n j.FunctionExpression.check(exportedValue) ||\n j.ArrowFunctionExpression.check(exportedValue) ||\n j.FunctionDeclaration.check(exportedValue)\n ) {\n const body = exportedValue.body;\n // Arrow function with object expression body: () => ({...})\n if (j.ObjectExpression.check(body)) {\n return body;\n }\n // Function with return statement in block\n if (j.BlockStatement.check(body)) {\n for (const stmt of body.body) {\n if (j.ReturnStatement.check(stmt) && j.ObjectExpression.check(stmt.argument)) {\n return stmt.argument;\n }\n }\n }\n }\n\n // Case 3: Identifier reference to a variable\n if (j.Identifier.check(exportedValue)) {\n const varName = exportedValue.name;\n\n // Find the variable declaration\n const varDeclaration = root.find(j.VariableDeclarator, {\n id: { name: varName },\n });\n\n if (varDeclaration.length > 0) {\n const init = varDeclaration.get().value.init;\n\n // If it's an object, return it\n if (j.ObjectExpression.check(init)) {\n return init;\n }\n\n // If it's a function, recursively check its return value\n if (j.FunctionExpression.check(init) || j.ArrowFunctionExpression.check(init)) {\n return findExportedObject(root, init);\n }\n }\n }\n\n return null;\n};\n\n// Helper to handle object export (common logic for ESM and CJS)\nconst handleObjectExport = (\n obj: any,\n config: AppendConfig,\n type: AppendType,\n setExport: (newExport: any) => void\n) => {\n if (type === 'routes') {\n if (!handleRoutesArray(obj, config)) {\n setExport(createRoutesExport(config));\n }\n } else {\n addPropertyToObject(obj, config);\n }\n};\n\n// Handle ESM export default\nconst handleEsmExport = (\n root: jscodeshift.Collection<any>,\n config: AppendConfig,\n type: AppendType\n) => {\n const exports = root.find(j.ExportDefaultDeclaration);\n\n if (exports.length === 0) {\n const newExport =\n type === 'routes' ? createRoutesExport(config) : j.objectExpression([createProperty(config)]);\n insertStatement(root, j.exportDefaultDeclaration(newExport), root.find(j.Statement));\n } else {\n exports.forEach((path: any) => {\n const decl = path.value.declaration;\n\n // Find the actual object being exported\n const exportedObject = findExportedObject(root, decl);\n\n if (exportedObject) {\n handleObjectExport(exportedObject, config, type, (newExport) => {\n path.value.declaration = newExport;\n });\n } else {\n // Fallback: replace the entire export\n path.value.declaration =\n type === 'routes'\n ? createRoutesExport(config)\n : j.objectExpression([createProperty(config)]);\n }\n });\n }\n};\n\n// Handle CJS module.exports\nconst handleCjsExport = (\n root: jscodeshift.Collection<any>,\n config: AppendConfig,\n type: AppendType\n) => {\n const exports = root.find(j.AssignmentExpression, {\n left: { type: 'MemberExpression', object: { name: 'module' }, property: { name: 'exports' } },\n });\n\n if (exports.length === 0) {\n const newExport =\n type === 'routes' ? createRoutesExport(config) : j.objectExpression([createProperty(config)]);\n const moduleExportStmt = j.expressionStatement(\n j.assignmentExpression(\n '=',\n j.memberExpression(j.identifier('module'), j.identifier('exports')),\n newExport\n )\n );\n insertStatement(root, moduleExportStmt, root.find(j.Statement));\n } else {\n exports.forEach((path: any) => {\n const right = path.value.right;\n\n // Find the actual object being exported\n const exportedObject = findExportedObject(root, right);\n\n if (exportedObject) {\n handleObjectExport(exportedObject, config, type, (newExport) => {\n path.value.right = newExport;\n });\n } else {\n // Fallback: replace the entire export\n path.value.right =\n type === 'routes'\n ? createRoutesExport(config)\n : j.objectExpression([createProperty(config)]);\n }\n });\n }\n};\n"],"names":["j","jscodeshift","withParser","isValidIdentifier","str","test","createProperty","config","type","singularName","camelCaseName","camelCase","varName","keyNode","identifier","literal","objectProperty","objectExpression","spreadElement","memberExpression","Error","hasExistingProperty","obj","properties","ArrayExpression","check","elements","some","element","SpreadElement","MemberExpression","argument","Identifier","object","name","property","prop","ObjectProperty","key","Literal","value","addPropertyToObject","push","createRoutesElement","length","handleRoutesArray","routesProp","find","routesArray","createRoutesExport","arrowFunctionExpression","arrayExpression","appendToFile","template","normalizedTemplate","trim","root","program","isEsm","detectModuleFormat","source","addImportIfMissing","handleEsmExport","handleCjsExport","toSource","quote","hasImport","includes","hasExportDefault","hasRequire","hasModuleExports","insertStatement","statement","preferredLocation","at","insertAfter","firstStatement","Statement","insertBefore","handleEmptyFile","ImportDeclaration","importDecl","importDeclaration","importDefaultSpecifier","VariableDeclarator","id","init","callee","arguments","requireStmt","variableDeclaration","variableDeclarator","callExpression","requires","VariableDeclaration","filter","path","declarations","decl","CallExpression","useStrict","ExpressionStatement","expression","String","paths","newProgram","replaceWith","rootPath","Program","body","replace","error","console","warn","message","replaceError","findExportedObject","exportedValue","ObjectExpression","FunctionExpression","ArrowFunctionExpression","FunctionDeclaration","BlockStatement","stmt","ReturnStatement","varDeclaration","get","handleObjectExport","setExport","exports","ExportDefaultDeclaration","newExport","exportDefaultDeclaration","forEach","declaration","exportedObject","AssignmentExpression","left","moduleExportStmt","expressionStatement","assignmentExpression","right"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"extend-plugin-index-files.js","sources":["../../../src/plops/utils/extend-plugin-index-files.ts"],"sourcesContent":["import * as jscodeshift from 'jscodeshift';\nimport camelCase from 'lodash/camelCase';\n\nconst j = jscodeshift.withParser('tsx');\n\ntype AppendType = 'content-type' | 'index' | 'routes';\n\ninterface AppendConfig {\n type: AppendType;\n singularName: string;\n}\n\n// Helper to check if a string is a valid JavaScript identifier\nconst isValidIdentifier = (str: string): boolean => {\n return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(str);\n};\n\n// Helper to create the appropriate property based on type\nconst createProperty = (config: AppendConfig) => {\n const { type, singularName } = config;\n const camelCaseName = camelCase(singularName);\n const varName = type === 'content-type' ? `${camelCaseName}Schema` : camelCaseName;\n\n // Use string literal for key only if singularName is not a valid identifier\n const keyNode = isValidIdentifier(singularName)\n ? j.identifier(singularName)\n : j.literal(singularName);\n\n switch (type) {\n case 'content-type':\n return j.objectProperty(\n keyNode,\n j.objectExpression([j.objectProperty(j.identifier('schema'), j.identifier(varName))])\n );\n case 'index':\n return j.objectProperty(keyNode, j.identifier(varName));\n case 'routes':\n return j.spreadElement(j.memberExpression(j.identifier(varName), j.identifier('routes')));\n default:\n throw new Error(`Unknown append type: ${type}`);\n }\n};\n\n// Helper to check if property already exists\nconst hasExistingProperty = (obj: any, config: AppendConfig): boolean => {\n const { type, singularName } = config;\n if (!obj?.properties && !j.ArrayExpression.check(obj)) return false;\n\n const elements = j.ArrayExpression.check(obj) ? obj.elements : obj.properties;\n if (!elements) return false;\n\n if (type === 'routes') {\n // Check for spread elements ...camelCaseName.routes\n const camelCaseName = camelCase(singularName);\n return elements.some(\n (element: any) =>\n j.SpreadElement.check(element) &&\n j.MemberExpression.check(element.argument) &&\n j.Identifier.check(element.argument.object) &&\n element.argument.object.name === camelCaseName &&\n j.Identifier.check(element.argument.property) &&\n element.argument.property.name === 'routes'\n );\n }\n\n // For content-type and index, check for object property (both identifier and literal keys)\n return elements.some(\n (prop: any) =>\n j.ObjectProperty.check(prop) &&\n ((j.Identifier.check(prop.key) && prop.key.name === singularName) ||\n (j.Literal.check(prop.key) && prop.key.value === singularName))\n );\n};\n\n// Helper to add property to object if it doesn't exist\nconst addPropertyToObject = (obj: any, config: AppendConfig) => {\n if (!obj || hasExistingProperty(obj, config)) return;\n\n if (config.type === 'routes' && j.ArrayExpression.check(obj)) {\n obj.elements.push(createRoutesElement(config));\n } else if (obj.properties?.length >= 0) {\n obj.properties.push(createProperty(config));\n }\n};\n\n// Helper to find and add to routes array\nconst handleRoutesArray = (obj: any, config: AppendConfig) => {\n if (!obj?.properties) return false;\n\n const routesProp = obj.properties.find(\n (prop: any) =>\n j.ObjectProperty.check(prop) &&\n ((j.Identifier.check(prop.key) && prop.key.name === 'routes') ||\n (j.Literal.check(prop.key) && prop.key.value === 'routes')) &&\n j.ArrayExpression.check(prop.value)\n );\n\n if (routesProp?.value) {\n const routesArray = routesProp.value;\n if (!hasExistingProperty(routesArray, config)) {\n routesArray.elements = routesArray.elements || [];\n routesArray.elements.push(createRoutesElement(config));\n }\n return true;\n }\n\n return false;\n};\n\n// Helper to create routes array element (always returns SpreadElement for routes)\nconst createRoutesElement = (config: AppendConfig) => {\n const { singularName } = config;\n const camelCaseName = camelCase(singularName);\n return j.spreadElement(j.memberExpression(j.identifier(camelCaseName), j.identifier('routes')));\n};\n\n// Helper to create new export for routes\nconst createRoutesExport = (config: AppendConfig) => {\n return j.arrowFunctionExpression(\n [],\n j.objectExpression([\n j.objectProperty(j.identifier('type'), j.literal('content-api')),\n j.objectProperty(j.identifier('routes'), j.arrayExpression([createRoutesElement(config)])),\n ])\n );\n};\n\n// Unified append function for all types\nexport const appendToFile = (template: string, config: AppendConfig): string => {\n if (!config?.singularName || !config?.type) {\n throw new Error('Invalid config: singularName and type are required');\n }\n\n const normalizedTemplate = template?.trim() || '';\n const root = normalizedTemplate ? j(normalizedTemplate) : j(j.program([]));\n const { type, singularName } = config;\n const isEsm = detectModuleFormat(normalizedTemplate) === 'esm';\n\n const camelCaseName = camelCase(singularName);\n const varName = type === 'content-type' ? `${camelCaseName}Schema` : camelCaseName;\n const source = type === 'content-type' ? `./${singularName}/schema.json` : `./${singularName}`;\n\n addImportIfMissing(root, varName, source, isEsm);\n\n if (isEsm) {\n handleEsmExport(root, config, type);\n } else {\n handleCjsExport(root, config, type);\n }\n\n return root.toSource({ quote: 'single' });\n};\n\n// Helper to detect module format\nconst detectModuleFormat = (template: string): 'esm' | 'cjs' => {\n const hasImport = /^import\\s/.test(template) || template.includes('import ');\n const hasExportDefault = template.includes('export default');\n const hasRequire = template.includes('require(');\n const hasModuleExports = template.includes('module.exports');\n\n if (hasImport || hasExportDefault) return 'esm';\n if (hasRequire || hasModuleExports) return 'cjs';\n return 'esm'; // Default to ESM\n};\n\n// Helper to insert statement at appropriate location\nconst insertStatement = (\n root: jscodeshift.Collection<any>,\n statement: any,\n preferredLocation?: jscodeshift.Collection<any>\n) => {\n if (preferredLocation && preferredLocation.length > 0) {\n preferredLocation.at(-1).insertAfter(statement);\n } else {\n const firstStatement = root.find(j.Statement).at(0);\n if (firstStatement.length > 0) {\n firstStatement.insertBefore(statement);\n } else {\n handleEmptyFile(root, statement);\n }\n }\n};\n\n// Helper to add import/require if missing\nconst addImportIfMissing = (\n root: jscodeshift.Collection<any>,\n varName: string,\n source: string,\n isEsm: boolean\n) => {\n if (isEsm) {\n if (root.find(j.ImportDeclaration, { source: { value: source } }).length === 0) {\n const importDecl = j.importDeclaration(\n [j.importDefaultSpecifier(j.identifier(varName))],\n j.literal(source)\n );\n insertStatement(root, importDecl, root.find(j.ImportDeclaration));\n }\n } else if (\n root.find(j.VariableDeclarator, {\n id: { name: varName },\n init: { type: 'CallExpression', callee: { name: 'require' }, arguments: [{ value: source }] },\n }).length === 0\n ) {\n const requireStmt = j.variableDeclaration('const', [\n j.variableDeclarator(\n j.identifier(varName),\n j.callExpression(j.identifier('require'), [j.literal(source)])\n ),\n ]);\n\n const requires = root\n .find(j.VariableDeclaration)\n .filter((path) =>\n path.value.declarations.some(\n (decl: any) => j.CallExpression.check(decl.init) && decl.init.callee?.name === 'require'\n )\n );\n\n const useStrict = root\n .find(j.ExpressionStatement)\n .filter(\n (path: any) =>\n j.Literal.check(path.value.expression) &&\n /use strict/.test(String(path.value.expression.value))\n );\n\n insertStatement(root, requireStmt, requires.length > 0 ? requires : useStrict);\n }\n};\n\n// Helper to safely handle empty files\nconst handleEmptyFile = (root: jscodeshift.Collection<any>, firstStatement: any) => {\n try {\n // Check if we have any paths in the collection\n const paths = root.paths();\n if (paths.length === 0) {\n // Completely empty collection - create new program\n const newProgram = j.program([firstStatement]);\n // Replace the entire root with new program\n return root.replaceWith(newProgram);\n }\n\n // Get the first path (should be the program)\n const rootPath = paths[0];\n if (!rootPath || !rootPath.value) {\n // Invalid root path - create new program\n const newProgram = j.program([firstStatement]);\n return root.replaceWith(newProgram);\n }\n\n // Check if it's a valid program node\n if (j.Program.check(rootPath.value)) {\n // Ensure body exists and add statement\n if (!rootPath.value.body) {\n rootPath.value.body = [];\n }\n rootPath.value.body.push(firstStatement);\n } else {\n // Not a program node - replace with new program\n const newProgram = j.program([firstStatement]);\n rootPath.replace(newProgram);\n }\n } catch (error: any) {\n // Ultimate fallback - create a minimal working file\n console.warn('Failed to handle empty file, creating new program:', error.message);\n const newProgram = j.program([firstStatement]);\n try {\n root.replaceWith(newProgram);\n } catch (replaceError) {\n // Last resort - throw descriptive error\n throw new Error(\n `Unable to add statement to empty file: ${error.message}. Root collection may be invalid.`\n );\n }\n }\n};\n\n// Helper to find the exported object regardless of export pattern\nconst findExportedObject = (\n root: jscodeshift.Collection<any>,\n exportedValue: any\n): jscodeshift.ObjectExpression | null => {\n // Case 1: Direct object export\n if (j.ObjectExpression.check(exportedValue)) {\n return exportedValue;\n }\n\n // Case 2: Function that returns an object\n if (\n j.FunctionExpression.check(exportedValue) ||\n j.ArrowFunctionExpression.check(exportedValue) ||\n j.FunctionDeclaration.check(exportedValue)\n ) {\n const body = exportedValue.body;\n // Arrow function with object expression body: () => ({...})\n if (j.ObjectExpression.check(body)) {\n return body;\n }\n // Function with return statement in block\n if (j.BlockStatement.check(body)) {\n for (const stmt of body.body) {\n if (j.ReturnStatement.check(stmt) && j.ObjectExpression.check(stmt.argument)) {\n return stmt.argument;\n }\n }\n }\n }\n\n // Case 3: Identifier reference to a variable\n if (j.Identifier.check(exportedValue)) {\n const varName = exportedValue.name;\n\n // Find the variable declaration\n const varDeclaration = root.find(j.VariableDeclarator, {\n id: { name: varName },\n });\n\n if (varDeclaration.length > 0) {\n const init = varDeclaration.get().value.init;\n\n // If it's an object, return it\n if (j.ObjectExpression.check(init)) {\n return init;\n }\n\n // If it's a function, recursively check its return value\n if (j.FunctionExpression.check(init) || j.ArrowFunctionExpression.check(init)) {\n return findExportedObject(root, init);\n }\n }\n }\n\n return null;\n};\n\n// Helper to handle object export (common logic for ESM and CJS)\nconst handleObjectExport = (\n obj: any,\n config: AppendConfig,\n type: AppendType,\n setExport: (newExport: any) => void\n) => {\n if (type === 'routes') {\n if (!handleRoutesArray(obj, config)) {\n setExport(createRoutesExport(config));\n }\n } else {\n addPropertyToObject(obj, config);\n }\n};\n\n// Handle ESM export default\nconst handleEsmExport = (\n root: jscodeshift.Collection<any>,\n config: AppendConfig,\n type: AppendType\n) => {\n const exports = root.find(j.ExportDefaultDeclaration);\n\n if (exports.length === 0) {\n const newExport =\n type === 'routes' ? createRoutesExport(config) : j.objectExpression([createProperty(config)]);\n insertStatement(root, j.exportDefaultDeclaration(newExport), root.find(j.Statement));\n } else {\n exports.forEach((path: any) => {\n const decl = path.value.declaration;\n\n // Find the actual object being exported\n const exportedObject = findExportedObject(root, decl);\n\n if (exportedObject) {\n handleObjectExport(exportedObject, config, type, (newExport) => {\n path.value.declaration = newExport;\n });\n } else {\n // Fallback: replace the entire export\n path.value.declaration =\n type === 'routes'\n ? createRoutesExport(config)\n : j.objectExpression([createProperty(config)]);\n }\n });\n }\n};\n\n// Handle CJS module.exports\nconst handleCjsExport = (\n root: jscodeshift.Collection<any>,\n config: AppendConfig,\n type: AppendType\n) => {\n const exports = root.find(j.AssignmentExpression, {\n left: { type: 'MemberExpression', object: { name: 'module' }, property: { name: 'exports' } },\n });\n\n if (exports.length === 0) {\n const newExport =\n type === 'routes' ? createRoutesExport(config) : j.objectExpression([createProperty(config)]);\n const moduleExportStmt = j.expressionStatement(\n j.assignmentExpression(\n '=',\n j.memberExpression(j.identifier('module'), j.identifier('exports')),\n newExport\n )\n );\n insertStatement(root, moduleExportStmt, root.find(j.Statement));\n } else {\n exports.forEach((path: any) => {\n const right = path.value.right;\n\n // Find the actual object being exported\n const exportedObject = findExportedObject(root, right);\n\n if (exportedObject) {\n handleObjectExport(exportedObject, config, type, (newExport) => {\n path.value.right = newExport;\n });\n } else {\n // Fallback: replace the entire export\n path.value.right =\n type === 'routes'\n ? createRoutesExport(config)\n : j.objectExpression([createProperty(config)]);\n }\n });\n }\n};\n"],"names":["j","jscodeshift","withParser","isValidIdentifier","str","test","createProperty","config","type","singularName","camelCaseName","camelCase","varName","keyNode","identifier","literal","objectProperty","objectExpression","spreadElement","memberExpression","Error","hasExistingProperty","obj","properties","ArrayExpression","check","elements","some","element","SpreadElement","MemberExpression","argument","Identifier","object","name","property","prop","ObjectProperty","key","Literal","value","addPropertyToObject","push","createRoutesElement","length","handleRoutesArray","routesProp","find","routesArray","createRoutesExport","arrowFunctionExpression","arrayExpression","appendToFile","template","normalizedTemplate","trim","root","program","isEsm","detectModuleFormat","source","addImportIfMissing","handleEsmExport","handleCjsExport","toSource","quote","hasImport","includes","hasExportDefault","hasRequire","hasModuleExports","insertStatement","statement","preferredLocation","at","insertAfter","firstStatement","Statement","insertBefore","handleEmptyFile","ImportDeclaration","importDecl","importDeclaration","importDefaultSpecifier","VariableDeclarator","id","init","callee","arguments","requireStmt","variableDeclaration","variableDeclarator","callExpression","requires","VariableDeclaration","filter","path","declarations","decl","CallExpression","useStrict","ExpressionStatement","expression","String","paths","newProgram","replaceWith","rootPath","Program","body","replace","error","console","warn","message","replaceError","findExportedObject","exportedValue","ObjectExpression","FunctionExpression","ArrowFunctionExpression","FunctionDeclaration","BlockStatement","stmt","ReturnStatement","varDeclaration","get","handleObjectExport","setExport","exports","ExportDefaultDeclaration","newExport","exportDefaultDeclaration","forEach","declaration","exportedObject","AssignmentExpression","left","moduleExportStmt","expressionStatement","assignmentExpression","right"],"mappings":"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"}
|