@40q/40q-cli 1.0.17 → 1.0.18
Sign up to get free protection for your applications and to get access to all the features.
- package/Readme.md +2 -1
- package/dist/src/commands/Codegen/Codegen.command.js +29 -7
- package/dist/src/commands/Codegen/Generators/FetchComponents.js +5 -5
- package/dist/src/commands/Codegen/Generators/GenerateBlock.js +11 -5
- package/dist/src/utils/paths.js +3 -3
- package/dist/src/utils/utils.js +7 -2
- package/package.json +1 -1
- package/templates/blocks/default/tsx.txt +2 -2
- package/dist/165.index.js +0 -1
- package/dist/216.index.js +0 -1
- package/dist/284.index.js +0 -1
- package/dist/350.index.js +0 -1
- package/dist/522.index.js +0 -1
- package/dist/62.index.js +0 -2
- package/dist/62.index.js.LICENSE.txt +0 -9
- package/dist/758.index.js +0 -1
- package/dist/index.js.LICENSE.txt +0 -14
- package/dist/resources/scripts/editor/blocks/default/default.block.js +0 -39
- package/dist/resources/scripts/editor/blocks/hello-today/hello-today.block.js +0 -39
- package/dist/resources/scripts/editor/blocks/here-we-go-again/here-we-go-again.block.js +0 -39
- package/dist/resources/scripts/editor/blocks/section-header/section-header.block.js +0 -39
- package/dist/resources/scripts/editor/blocks/section-header.js +0 -39
- package/dist/src/commands/Codegen/Generator.factory.js +0 -11
- package/dist/src/commands/Codegen/Generator.js +0 -3
- package/dist/src/commands/Codegen/Generators/BaseGeneratorOptions.js +0 -4
- package/dist/src/commands/Codegen/Generators/GeneratorStrategy.factory.js +0 -11
- package/dist/src/commands/Codegen/Generators/GeneratorStrategy.js +0 -2
- package/dist/src/commands/Codegen/Generators/strategies/BlockGenerator.strategy.js +0 -88
- package/dist/src/commands/Codegen/Prompts/PromptSrategy.js +0 -5
- package/dist/src/commands/Codegen/Prompts/PromptStrategy.factory.js +0 -11
- package/dist/src/commands/Codegen/Prompts/PromptStrategy.js +0 -2
- package/dist/src/commands/Codegen/Prompts/strategies/BlockPrompt.strategy.js +0 -43
- package/dist/src/commands/Codegen/StrategyFactory.js +0 -63
- package/dist/src/commands/Setup.command.js +0 -53
package/Readme.md
CHANGED
@@ -29,7 +29,8 @@ Codegen generates code for you.
|
|
29
29
|
```
|
30
30
|
|
31
31
|
Supported Types:
|
32
|
-
* block: generates code for Gutenberg blocks
|
32
|
+
* block: generates code for Gutenberg blocks and allows selecting inner components from block library repo.
|
33
|
+
* get: fetches selected block/s, component/s, and utils from block library repo.
|
33
34
|
|
34
35
|
Templates are optional, if empty, it creates an example boilerplate for a Gutenberg block.
|
35
36
|
|
@@ -98,6 +98,18 @@ function handleBlock(template) {
|
|
98
98
|
message: 'Please enter a name for the block:',
|
99
99
|
default: template || 'section-header',
|
100
100
|
},
|
101
|
+
{
|
102
|
+
type: 'input',
|
103
|
+
name: 'category',
|
104
|
+
message: 'Enter the block category:',
|
105
|
+
default: '40q',
|
106
|
+
},
|
107
|
+
{
|
108
|
+
type: 'input',
|
109
|
+
name: 'icon',
|
110
|
+
message: 'Enter the icon name (dashicons):',
|
111
|
+
default: 'block-default',
|
112
|
+
},
|
101
113
|
{
|
102
114
|
type: 'checkbox',
|
103
115
|
name: 'components',
|
@@ -105,10 +117,10 @@ function handleBlock(template) {
|
|
105
117
|
choices: componentChoices
|
106
118
|
}
|
107
119
|
]);
|
108
|
-
const { name, components } = answers;
|
120
|
+
const { name, category, icon, components } = answers;
|
109
121
|
(0, FetchComponents_1.downloadAndSaveItems)(components, 'component', tempDirs);
|
110
122
|
const componentNames = components.map((component) => component.name);
|
111
|
-
const blockGenerator = new GenerateBlock_1.GenerateBlock(template, name, componentNames);
|
123
|
+
const blockGenerator = new GenerateBlock_1.GenerateBlock(template, name, category, icon, componentNames);
|
112
124
|
return blockGenerator.run();
|
113
125
|
}
|
114
126
|
finally {
|
@@ -123,10 +135,17 @@ function handleGet() {
|
|
123
135
|
type: 'list',
|
124
136
|
name: 'type',
|
125
137
|
message: 'What do you want to get?',
|
126
|
-
choices: ['block', 'component']
|
138
|
+
choices: ['block', 'component', 'utils']
|
139
|
+
},
|
140
|
+
{
|
141
|
+
type: 'confirm',
|
142
|
+
name: 'overwrite',
|
143
|
+
message: 'Overwrite existing files?',
|
144
|
+
default: false,
|
127
145
|
}
|
128
146
|
]);
|
129
147
|
const type = answers.type;
|
148
|
+
const overwrite = answers.overwrite;
|
130
149
|
const tempDirs = (0, paths_1.tempPaths)(`temp-block-library-${(0, uuid_1.v4)()}`);
|
131
150
|
if (fs.existsSync(tempDirs.tempDir))
|
132
151
|
(0, child_process_1.execSync)(`rm -rf ${tempDirs.tempDir}`);
|
@@ -147,9 +166,9 @@ function handleGet() {
|
|
147
166
|
}
|
148
167
|
]);
|
149
168
|
const { blocks } = answers;
|
150
|
-
(0, FetchComponents_1.downloadAndSaveItems)(blocks, 'block', tempDirs);
|
169
|
+
(0, FetchComponents_1.downloadAndSaveItems)(blocks, 'block', tempDirs, overwrite);
|
151
170
|
const innerComponents = getInnerComponents(blocks, tempDirs.tempComponentsDir);
|
152
|
-
(0, FetchComponents_1.downloadAndSaveItems)(innerComponents, 'component', tempDirs);
|
171
|
+
(0, FetchComponents_1.downloadAndSaveItems)(innerComponents, 'component', tempDirs, overwrite);
|
153
172
|
}
|
154
173
|
else if (type === 'component') {
|
155
174
|
const repoComponents = (0, FetchComponents_1.fetchRepoComponents)(tempDirs.tempComponentsDir);
|
@@ -166,9 +185,12 @@ function handleGet() {
|
|
166
185
|
}
|
167
186
|
]);
|
168
187
|
const { components } = answers;
|
169
|
-
(0, FetchComponents_1.downloadAndSaveItems)(components, 'component', tempDirs);
|
188
|
+
(0, FetchComponents_1.downloadAndSaveItems)(components, 'component', tempDirs, overwrite);
|
189
|
+
}
|
190
|
+
else if (type === 'utils') {
|
191
|
+
(0, paths_1.copyDirectory)(tempDirs.tempUtilsDir, paths_1.utilsDir, ['mocks.ts'], overwrite);
|
170
192
|
}
|
171
|
-
console.log(`Selected ${type}s have been added to your project.`);
|
193
|
+
console.log(`Selected ${type}${type.endsWith('s') ? '' : 's'} have been added to your project.`);
|
172
194
|
}
|
173
195
|
finally {
|
174
196
|
(0, child_process_1.execSync)(`rm -rf ${tempDirs.tempDir}`);
|
@@ -41,7 +41,7 @@ function fetchRepoBlocks(tempBlocksDir) {
|
|
41
41
|
return blockFiles;
|
42
42
|
}
|
43
43
|
exports.fetchRepoBlocks = fetchRepoBlocks;
|
44
|
-
function downloadAndSaveItems(items, type, tempDirs) {
|
44
|
+
function downloadAndSaveItems(items, type, tempDirs, overwrite = false) {
|
45
45
|
items.forEach(item => {
|
46
46
|
const paths = (0, paths_1.getPaths)(item.name, type, tempDirs);
|
47
47
|
if (!fs.existsSync(paths.destTsxDir))
|
@@ -50,10 +50,10 @@ function downloadAndSaveItems(items, type, tempDirs) {
|
|
50
50
|
fs.mkdirSync(paths.destPhpDir, { recursive: true });
|
51
51
|
if (!fs.existsSync(paths.destBladeDir))
|
52
52
|
fs.mkdirSync(paths.destBladeDir, { recursive: true });
|
53
|
-
(0, utils_1.writeFile)(paths.destTsxPath, fs.readFileSync(paths.sourceTsxPath, 'utf-8'));
|
54
|
-
(0, utils_1.writeFile)(paths.destPhpPath, fs.readFileSync(paths.sourcePhpPath, 'utf-8'));
|
55
|
-
(0, utils_1.writeFile)(paths.destBladePath, fs.readFileSync(paths.sourceBladePath, 'utf-8'));
|
53
|
+
(0, utils_1.writeFile)(paths.destTsxPath, fs.readFileSync(paths.sourceTsxPath, 'utf-8'), overwrite);
|
54
|
+
(0, utils_1.writeFile)(paths.destPhpPath, fs.readFileSync(paths.sourcePhpPath, 'utf-8'), overwrite);
|
55
|
+
(0, utils_1.writeFile)(paths.destBladePath, fs.readFileSync(paths.sourceBladePath, 'utf-8'), overwrite);
|
56
56
|
});
|
57
|
-
(0, paths_1.copyDirectory)(tempDirs.tempUtilsDir, paths_1.utilsDir, ['mocks.ts']);
|
57
|
+
(0, paths_1.copyDirectory)(tempDirs.tempUtilsDir, paths_1.utilsDir, ['mocks.ts'], overwrite);
|
58
58
|
}
|
59
59
|
exports.downloadAndSaveItems = downloadAndSaveItems;
|
@@ -33,14 +33,18 @@ const child_process_1 = require("child_process");
|
|
33
33
|
const cliRoot_1 = require("../../../lib/cliRoot");
|
34
34
|
const utils_1 = require("../../../utils/utils");
|
35
35
|
class GenerateBlock {
|
36
|
-
constructor(template, name, components) {
|
36
|
+
constructor(template, name, category, icon, components) {
|
37
37
|
this.template = 'default';
|
38
38
|
this.name = '';
|
39
|
+
this.icon = '';
|
40
|
+
this.category = '';
|
39
41
|
this.components = [];
|
40
42
|
this.title = '';
|
41
43
|
this.pascalCaseName = '';
|
42
44
|
this.template = template;
|
43
45
|
this.name = name !== null && name !== void 0 ? name : '';
|
46
|
+
this.category = category !== null && category !== void 0 ? category : '';
|
47
|
+
this.icon = icon !== null && icon !== void 0 ? icon : '';
|
44
48
|
this.pascalCaseName = (0, utils_1.toPascalCase)(this.name);
|
45
49
|
this.title = this.parseName(this.name);
|
46
50
|
this.components = components;
|
@@ -53,7 +57,7 @@ class GenerateBlock {
|
|
53
57
|
(0, child_process_1.execSync)(`mkdir -p resources/scripts/editor/blocks/${this.name}`);
|
54
58
|
}
|
55
59
|
createBlockFiles() {
|
56
|
-
var _a, _b;
|
60
|
+
var _a, _b, _c, _d;
|
57
61
|
let imports = '';
|
58
62
|
let attributes = '';
|
59
63
|
let viewAttributes = '';
|
@@ -77,7 +81,7 @@ class GenerateBlock {
|
|
77
81
|
if (editMatch) {
|
78
82
|
importStatements.push(`Edit as ${componentNamePascal}Edit`);
|
79
83
|
if (editMatch[1].includes('setAttributes')) {
|
80
|
-
editComponent = `<${componentNamePascal}Edit attributes={${componentNameCamel} as ${componentNamePascal}Type} setAttributes={setAttributes} />\n`;
|
84
|
+
editComponent = `<${componentNamePascal}Edit attributes={${componentNameCamel} as ${componentNamePascal}Type} setAttributes={(${componentNameCamel}) => setAttributes({${componentNameCamel}})} />\n`;
|
81
85
|
editProps = '{ attributes, setAttributes }';
|
82
86
|
}
|
83
87
|
else {
|
@@ -87,7 +91,7 @@ class GenerateBlock {
|
|
87
91
|
if (sidebarMatch) {
|
88
92
|
importStatements.push(`Sidebar as ${componentNamePascal}Sidebar`);
|
89
93
|
if (sidebarMatch[1].includes('setAttributes')) {
|
90
|
-
sidebarComponent = `<${componentNamePascal}Sidebar attributes={${componentNameCamel} as ${componentNamePascal}Type} setAttributes={setAttributes} />\n`;
|
94
|
+
sidebarComponent = `<${componentNamePascal}Sidebar attributes={${componentNameCamel} as ${componentNamePascal}Type} setAttributes={(${componentNameCamel}) => setAttributes({${componentNameCamel}})} />\n`;
|
91
95
|
}
|
92
96
|
else {
|
93
97
|
sidebarComponent = `<${componentNamePascal}Sidebar attributes={${componentNameCamel} as ${componentNamePascal}Type} />\n`;
|
@@ -111,6 +115,8 @@ class GenerateBlock {
|
|
111
115
|
const destructuring = attributeNames.join(', ');
|
112
116
|
(0, utils_1.writeFile)(path_1.default.join(process.cwd(), `resources/scripts/editor/blocks/${this.name}/${this.name}.block.tsx`), this.getTemplate('tsx')
|
113
117
|
.replace(/{{name}}/g, (_a = this.name) !== null && _a !== void 0 ? _a : '')
|
118
|
+
.replace(/{{category}}/g, (_b = this.category) !== null && _b !== void 0 ? _b : '')
|
119
|
+
.replace(/{{icon}}/g, (_c = this.icon) !== null && _c !== void 0 ? _c : '')
|
114
120
|
.replace(/{{title}}/g, this.title)
|
115
121
|
.replace(/{{imports}}/g, imports)
|
116
122
|
.replace(/{{attributes}}/g, attributes)
|
@@ -119,7 +125,7 @@ class GenerateBlock {
|
|
119
125
|
.replace(/{{editComponents}}/g, editComponents));
|
120
126
|
(0, utils_1.writeFile)(path_1.default.join(process.cwd(), `resources/views/blocks/${this.name}.blade.php`), this.getTemplate('blade'));
|
121
127
|
(0, utils_1.writeFile)(path_1.default.join(process.cwd(), `app/Blocks/${this.pascalCaseName}.php`), this.getTemplate('php')
|
122
|
-
.replace(/{{name}}/g, (
|
128
|
+
.replace(/{{name}}/g, (_d = this.name) !== null && _d !== void 0 ? _d : '')
|
123
129
|
.replace(/{{pascalCaseName}}/g, this.pascalCaseName)
|
124
130
|
.replace(/{{viewAttributes}}/g, viewAttributes));
|
125
131
|
}
|
package/dist/src/utils/paths.js
CHANGED
@@ -72,7 +72,7 @@ const getPaths = (name, type, tempDirs) => {
|
|
72
72
|
};
|
73
73
|
};
|
74
74
|
exports.getPaths = getPaths;
|
75
|
-
function copyDirectory(sourceDir, destDir, excludeFiles = []) {
|
75
|
+
function copyDirectory(sourceDir, destDir, excludeFiles = [], overwrite = false) {
|
76
76
|
if (!fs.existsSync(destDir)) {
|
77
77
|
fs.mkdirSync(destDir, { recursive: true });
|
78
78
|
}
|
@@ -83,10 +83,10 @@ function copyDirectory(sourceDir, destDir, excludeFiles = []) {
|
|
83
83
|
return;
|
84
84
|
}
|
85
85
|
if (fs.lstatSync(sourcePath).isDirectory()) {
|
86
|
-
copyDirectory(sourcePath, destPath, excludeFiles);
|
86
|
+
copyDirectory(sourcePath, destPath, excludeFiles, overwrite);
|
87
87
|
}
|
88
88
|
else {
|
89
|
-
(0, utils_1.writeFile)(destPath, fs.readFileSync(sourcePath, 'utf-8'));
|
89
|
+
(0, utils_1.writeFile)(destPath, fs.readFileSync(sourcePath, 'utf-8'), overwrite);
|
90
90
|
}
|
91
91
|
});
|
92
92
|
}
|
package/dist/src/utils/utils.js
CHANGED
@@ -25,13 +25,18 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
26
26
|
exports.toPascalCase = exports.toCamelCase = exports.writeFile = void 0;
|
27
27
|
const fs = __importStar(require("fs"));
|
28
|
-
function writeFile(filePath, content) {
|
28
|
+
function writeFile(filePath, content, overwrite = false) {
|
29
29
|
const yellow = "\x1b[33m";
|
30
30
|
const green = "\x1b[32m";
|
31
|
+
const cyan = "\x1b[36m";
|
31
32
|
const reset = "\x1b[0m";
|
32
|
-
if (fs.existsSync(filePath)) {
|
33
|
+
if (fs.existsSync(filePath) && !overwrite) {
|
33
34
|
console.log(`${yellow}File ${filePath} already exists. Skipping file creation.${reset}`);
|
34
35
|
}
|
36
|
+
else if (fs.existsSync(filePath) && overwrite) {
|
37
|
+
fs.writeFileSync(filePath, content);
|
38
|
+
console.log(`${cyan}File ${filePath} has been overwritten.${reset}`);
|
39
|
+
}
|
35
40
|
else {
|
36
41
|
fs.writeFileSync(filePath, content);
|
37
42
|
console.log(`${green}File ${filePath} has been created.${reset}`);
|
package/package.json
CHANGED
@@ -19,10 +19,10 @@ export const name = "by40q/{{name}}";
|
|
19
19
|
export const title = __("{{title}}", "40q");
|
20
20
|
|
21
21
|
/* Block category */
|
22
|
-
export const category = "
|
22
|
+
export const category = "{{category}}";
|
23
23
|
|
24
24
|
/* Block icon */
|
25
|
-
export const icon = "
|
25
|
+
export const icon = "{{icon}}";
|
26
26
|
|
27
27
|
/* Block attributes */
|
28
28
|
export const attributes = {
|
package/dist/165.index.js
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
"use strict";exports.id=165,exports.ids=[165],exports.modules={41165:(s,e,r)=>{r.r(e)}};
|
package/dist/216.index.js
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
"use strict";exports.id=216,exports.ids=[216,522],exports.modules={32522:(e,t,s)=>{s.r(t),s.d(t,{BlockGenerator:()=>l});var r=s(57147),a=s(71017),i=s.n(a),c=s(32081);class l{constructor(e){this.template="",this.name="",this.title="",this.camelCaseName="",console.log(e),this.template=""===e.template?"default":e.template,this.name=e.name||"default",this.camelCaseName=this.toCamelCase(this.name),this.title=this.parseName(this.name)}run(){this.createBlockFolder(),this.createBlockFiles()}createBlockFolder(){(0,c.execSync)(`mkdir -p resources/scripts/editor/blocks/${this.name}`)}createBlockFiles(){r.writeFileSync(i().join(process.cwd(),`resources/scripts/editor/blocks/${this.name}/${this.name}.block.tsx`),this.getTemplate("tsx").replace(/{{name}}/g,this.name??"").replace(/{{title}}/g,this.title)),r.writeFileSync(i().join(process.cwd(),`resources/views/blocks/${this.name}.blade.php`),this.getTemplate("blade")),r.writeFileSync(i().join(process.cwd(),`app/Blocks/${this.camelCaseName}.php`),this.getTemplate("php").replace(/{{name}}/g,this.name??"").replace(/{{camelCaseName}}/g,this.camelCaseName))}parseName(e){return e.split("-").map((e=>e.charAt(0).toUpperCase()+e.slice(1))).join(" ")}toCamelCase(e){return e.split("-").reduce(((e,t)=>e+t.charAt(0).toUpperCase()+t.slice(1)),"")??""}getTemplate(e){try{const t=function(e){let t=__dirname;for(;t!==a.parse(t).root;){if(r.existsSync(a.join(t,".cliroot")))return t;t=a.dirname(t)}throw new Error("CLI root directory with .cliroot marker not found.")}(),s=`templates/blocks/${this.template}`;return r.readFileSync(i().join(t,`${s}/${e}.txt`),"utf8")}catch(e){return""}}}},34216:(e,t,s)=>{s.r(t),s.d(t,{BlockGenerator:()=>r.BlockGenerator});var r=s(32522)}};
|
package/dist/284.index.js
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
"use strict";exports.id=284,exports.ids=[284,350],exports.modules={63350:(e,t,a)=>{a.r(t),a.d(t,{BlockPromptStrategy:()=>o});var m=a(96062),r=a.n(m),s=a(78913);class o{async prompt(){const e=await r().prompt([{type:"list",name:"template",message:"Please select a template:",choices:s.v.templateChoices.block,default:""}]),t=e?.template||"",a=await r().prompt([{type:"input",name:"name",message:"Please enter a name for the block:",default:t||"block-name"}]);return{name:a?.name||"",template:t}}}},79284:(e,t,a)=>{a.r(t),a.d(t,{BlockPromptStrategy:()=>m.BlockPromptStrategy});var m=a(63350)}};
|
package/dist/350.index.js
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
"use strict";exports.id=350,exports.ids=[350],exports.modules={63350:(e,t,a)=>{a.r(t),a.d(t,{BlockPromptStrategy:()=>l});var s=a(96062),m=a.n(s),p=a(78913);class l{async prompt(){const e=await m().prompt([{type:"list",name:"template",message:"Please select a template:",choices:p.v.templateChoices.block,default:""}]),t=e?.template||"",a=await m().prompt([{type:"input",name:"name",message:"Please enter a name for the block:",default:t||"block-name"}]);return{name:a?.name||"",template:t}}}}};
|
package/dist/522.index.js
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
"use strict";exports.id=522,exports.ids=[522],exports.modules={32522:(e,t,s)=>{s.r(t),s.d(t,{BlockGenerator:()=>l});var a=s(57147),r=s(71017),i=s.n(r),c=s(32081);class l{constructor(e){this.template="",this.name="",this.title="",this.camelCaseName="",console.log(e),this.template=""===e.template?"default":e.template,this.name=e.name||"default",this.camelCaseName=this.toCamelCase(this.name),this.title=this.parseName(this.name)}run(){this.createBlockFolder(),this.createBlockFiles()}createBlockFolder(){(0,c.execSync)(`mkdir -p resources/scripts/editor/blocks/${this.name}`)}createBlockFiles(){a.writeFileSync(i().join(process.cwd(),`resources/scripts/editor/blocks/${this.name}/${this.name}.block.tsx`),this.getTemplate("tsx").replace(/{{name}}/g,this.name??"").replace(/{{title}}/g,this.title)),a.writeFileSync(i().join(process.cwd(),`resources/views/blocks/${this.name}.blade.php`),this.getTemplate("blade")),a.writeFileSync(i().join(process.cwd(),`app/Blocks/${this.camelCaseName}.php`),this.getTemplate("php").replace(/{{name}}/g,this.name??"").replace(/{{camelCaseName}}/g,this.camelCaseName))}parseName(e){return e.split("-").map((e=>e.charAt(0).toUpperCase()+e.slice(1))).join(" ")}toCamelCase(e){return e.split("-").reduce(((e,t)=>e+t.charAt(0).toUpperCase()+t.slice(1)),"")??""}getTemplate(e){try{const t=function(e){let t=__dirname;for(;t!==r.parse(t).root;){if(a.existsSync(r.join(t,".cliroot")))return t;t=r.dirname(t)}throw new Error("CLI root directory with .cliroot marker not found.")}(),s=`templates/blocks/${this.template}`;return a.readFileSync(i().join(t,`${s}/${e}.txt`),"utf8")}catch(e){return""}}}}};
|