@40q/40q-cli 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@40q/40q-cli",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "40q CLI tool",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -1,6 +1,6 @@
1
1
  import { ArgumentsCamelCase, Argv } from 'yargs';
2
2
  import { Command } from '../Command';
3
- import inquirer, { QuestionCollection } from 'inquirer';
3
+ import inquirer from 'inquirer';
4
4
  import { GenerateBlock } from './Generators/GenerateBlock';
5
5
  import { Templates, Types, templateChoices, typeChoices } from './Codegen.types';
6
6
 
@@ -26,27 +26,21 @@ export class CodegenCommand implements Command {
26
26
  const template = (argv.template ?? 'default') as Templates;
27
27
 
28
28
  if (type === 'block') {
29
- const answers = await CodegenCommand.prompt(
29
+ const answers = await inquirer.prompt(
30
30
  [
31
31
  {
32
32
  type: 'input',
33
33
  name: 'name',
34
34
  message: 'Please enter a name for the block:',
35
- default: 'section-header',
35
+ default: template || 'section-header',
36
36
  },
37
37
  ],
38
- template === 'default'
39
38
  );
40
39
 
41
40
  const name = (answers?.name as string) || null;
42
41
 
43
- return GenerateBlock.run(template, name);
42
+ const blockGenerator = new GenerateBlock(template, name);
43
+ return blockGenerator.run();
44
44
  }
45
45
  }
46
-
47
- static async prompt(prompts: QuestionCollection, condition: boolean) {
48
- if (!condition) return null;
49
-
50
- return await inquirer.prompt(prompts);
51
- }
52
46
  }
@@ -1,36 +1,81 @@
1
- import { execSync } from 'child_process';
2
1
  import * as fs from 'fs';
3
2
  import path from 'path';
3
+ import { execSync } from 'child_process';
4
4
  import { Templates } from '../Codegen.types';
5
5
  import { findCliRoot } from '../../../lib/cliRoot';
6
6
 
7
7
  export class GenerateBlock {
8
- static run(template: Templates, name: string | null) {
9
- const title =
10
- name
11
- ?.split('-')
12
- .map((word) => {
13
- return word.charAt(0).toUpperCase() + word.slice(1);
14
- })
15
- .join(' ') ?? '';
16
- const dirAndFileName = name || template;
17
-
18
- execSync(`mkdir -p resources/scripts/editor/blocks/${dirAndFileName}`);
8
+ private template: Templates = 'default';
9
+ private name: string = '';
10
+ private title: string = '';
11
+ private camelCaseName: string = '';
19
12
 
20
- const cliRoot = findCliRoot(__dirname);
21
- const templateContent = fs.readFileSync(
22
- path.join(cliRoot, 'templates/blocks/', `${template}.txt`),
23
- 'utf8'
13
+ constructor(template: Templates, name: string | null) {
14
+ this.template = template;
15
+ this.name = name ?? '';
16
+ this.camelCaseName = this.toCamelCase(this.name);
17
+ this.title = this.parseName(this.name);
18
+ }
19
+
20
+ public run() {
21
+ this.createBlockFolder();
22
+ this.createBlockFiles();
23
+ }
24
+
25
+ private createBlockFolder() {
26
+ execSync(`mkdir -p resources/scripts/editor/blocks/${this.name}`);
27
+ }
28
+
29
+ private createBlockFiles() {
30
+ fs.writeFileSync(
31
+ path.join(
32
+ process.cwd(),
33
+ `resources/scripts/editor/blocks/${this.name}/${this.name}.tsx`
34
+ ),
35
+ this.getTemplate('tsx')
36
+ .replace(/{{name}}/g, this.name ?? '')
37
+ .replace(/{{title}}/g, this.title)
24
38
  );
25
39
 
26
40
  fs.writeFileSync(
27
41
  path.join(
28
42
  process.cwd(),
29
- `resources/scripts/editor/blocks/${dirAndFileName}/${dirAndFileName}.tsx`
43
+ `resources/views/blocks/${this.name}.blade.php`
30
44
  ),
31
- templateContent
32
- .replace(/{{name}}/g, name ?? '')
33
- .replace(/{{title}}/g, title)
45
+ ''
46
+ );
47
+
48
+ fs.writeFileSync(
49
+ path.join(process.cwd(), `app/Blocks/${this.camelCaseName}.php`),
50
+ this.getTemplate('php')
51
+ .replace(/{{name}}/g, this.name ?? '')
52
+ .replace(/{{camelCaseName}}/g, this.camelCaseName)
53
+ );
54
+ }
55
+
56
+ private parseName(name: string) {
57
+ return name
58
+ .split('-')
59
+ .map((word) => {
60
+ return word.charAt(0).toUpperCase() + word.slice(1);
61
+ })
62
+ .join(' ');
63
+ }
64
+
65
+ private toCamelCase(name: string) {
66
+ return (
67
+ name.split('-').reduce((acc, word) => {
68
+ return acc + word.charAt(0).toUpperCase() + word.slice(1);
69
+ }, '') ?? ''
70
+ );
71
+ }
72
+
73
+ private getTemplate(name: string) {
74
+ const cliRoot = findCliRoot(__dirname);
75
+ const templateFolder = `templates/blocks/${this.template}`;
76
+ return fs.readFileSync(
77
+ path.join(cliRoot, `${templateFolder}/${name}.txt`),
78
+ 'utf8'
34
79
  );
35
80
  }
36
81
  }
@@ -0,0 +1,13 @@
1
+ <?php
2
+
3
+ namespace App\Blocks;
4
+
5
+ class {{camelCaseName}} extends BlockHandler
6
+ {
7
+ public function __invoke($block_content, $block)
8
+ {
9
+ return view('blocks.{{name}}', [
10
+ 'title' => $block['attrs']['title'] ?? null,
11
+ ]);
12
+ }
13
+ }
package/dist/index.js DELETED
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- const _40qCli_1 = require("./src/40qCli");
5
- _40qCli_1.q40Cli.init();
@@ -1,39 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.styles = exports.save = exports.edit = exports.attributes = exports.category = exports.title = exports.name = void 0;
4
- const i18n_1 = require("@wordpress/i18n");
5
- const components_1 = require("@wordpress/components");
6
- const block_editor_1 = require("@wordpress/block-editor");
7
- /* Block name */
8
- exports.name = "by40q/section-header";
9
- /* Block title */
10
- exports.title = (0, i18n_1.__)("Section Header", "40q");
11
- /* Block category */
12
- exports.category = "text";
13
- /* Block attributes */
14
- exports.attributes = {
15
- title: {
16
- type: "string",
17
- default: "40Q",
18
- },
19
- };
20
- /* Block edit */
21
- const edit = ({ attributes, setAttributes }) => {
22
- const { title } = attributes;
23
- const blockProps = (0, block_editor_1.useBlockProps)();
24
- return (<>
25
- <block_editor_1.InspectorControls>
26
- <components_1.PanelBody title={(0, i18n_1.__)("Section Header Settings")} initialOpen></components_1.PanelBody>
27
- </block_editor_1.InspectorControls>
28
-
29
- <div {...blockProps}>
30
- <block_editor_1.RichText tagName="h2" placeholder={(0, i18n_1.__)("40Q")} value={title} onChange={(title) => setAttributes({ title })}/>
31
- </div>
32
- </>);
33
- };
34
- exports.edit = edit;
35
- /* Block save */
36
- const save = ({ attributes }) => <></>;
37
- exports.save = save;
38
- /* Block styles */
39
- exports.styles = [];
@@ -1,19 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.q40Cli = void 0;
7
- const yargs_1 = __importDefault(require("yargs"));
8
- const helpers_1 = require("yargs/helpers");
9
- const Setup_command_1 = require("./commands/Setup/Setup.command");
10
- const Codegen_command_1 = require("./commands/Codegen/Codegen.command");
11
- class q40Cli {
12
- static init() {
13
- (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
14
- .command('setup [tool]', 'Setup a tool', Setup_command_1.SetupCommand.builder, Setup_command_1.SetupCommand.handler)
15
- .command('codegen [type] [template]', 'Generate code from a template', Codegen_command_1.CodegenCommand.builder, Codegen_command_1.CodegenCommand.handler)
16
- .help().argv;
17
- }
18
- }
19
- exports.q40Cli = q40Cli;
@@ -1,61 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.CodegenCommand = void 0;
16
- const inquirer_1 = __importDefault(require("inquirer"));
17
- const GenerateBlock_1 = require("./Generators/GenerateBlock");
18
- const Codegen_types_1 = require("./Codegen.types");
19
- class CodegenCommand {
20
- static builder(yargs) {
21
- yargs.positional('type', {
22
- describe: 'Type of code piece to generate',
23
- choices: Codegen_types_1.typeChoices,
24
- demandOption: true,
25
- type: 'string',
26
- });
27
- yargs.positional('template', {
28
- describe: 'Template to use for code generation',
29
- choices: Codegen_types_1.templateChoices,
30
- demandOption: false,
31
- type: 'string',
32
- });
33
- }
34
- static handler(argv) {
35
- var _a;
36
- return __awaiter(this, void 0, void 0, function* () {
37
- const type = argv.type;
38
- const template = ((_a = argv.template) !== null && _a !== void 0 ? _a : 'default');
39
- if (type === 'block') {
40
- const answers = yield CodegenCommand.prompt([
41
- {
42
- type: 'input',
43
- name: 'name',
44
- message: 'Please enter a name for the block:',
45
- default: 'section-header',
46
- },
47
- ], template === 'default');
48
- const name = (answers === null || answers === void 0 ? void 0 : answers.name) || null;
49
- return GenerateBlock_1.GenerateBlock.run(template, name);
50
- }
51
- });
52
- }
53
- static prompt(prompts, condition) {
54
- return __awaiter(this, void 0, void 0, function* () {
55
- if (!condition)
56
- return null;
57
- return yield inquirer_1.default.prompt(prompts);
58
- });
59
- }
60
- }
61
- exports.CodegenCommand = CodegenCommand;
@@ -1,5 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.templateChoices = exports.typeChoices = void 0;
4
- exports.typeChoices = ['block'];
5
- exports.templateChoices = ['section-header'];
@@ -1,49 +0,0 @@
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
- exports.GenerateBlock = void 0;
30
- const child_process_1 = require("child_process");
31
- const fs = __importStar(require("fs"));
32
- const path_1 = __importDefault(require("path"));
33
- const cliRoot_1 = require("../../../lib/cliRoot");
34
- class GenerateBlock {
35
- static run(template, name) {
36
- var _a;
37
- const title = (_a = name === null || name === void 0 ? void 0 : name.split('-').map((word) => {
38
- return word.charAt(0).toUpperCase() + word.slice(1);
39
- }).join(' ')) !== null && _a !== void 0 ? _a : '';
40
- const dirAndFileName = name || template;
41
- (0, child_process_1.execSync)(`mkdir -p resources/scripts/editor/blocks/${dirAndFileName}`);
42
- const cliRoot = (0, cliRoot_1.findCliRoot)(__dirname);
43
- const templateContent = fs.readFileSync(path_1.default.join(cliRoot, 'templates/blocks/', `${template}.txt`), 'utf8');
44
- fs.writeFileSync(path_1.default.join(process.cwd(), `resources/scripts/editor/blocks/${dirAndFileName}/${dirAndFileName}.tsx`), templateContent
45
- .replace(/{{name}}/g, name !== null && name !== void 0 ? name : '')
46
- .replace(/{{title}}/g, title));
47
- }
48
- }
49
- exports.GenerateBlock = GenerateBlock;
@@ -1,8 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Command = void 0;
4
- class Command {
5
- static builder(yargs) { }
6
- static handler(argv) { }
7
- }
8
- exports.Command = Command;
@@ -1,53 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SetupCommand = void 0;
4
- const child_process_1 = require("child_process");
5
- const eslintrc = `
6
- {
7
- "extends": ["@40q/eslint-config"]
8
- }
9
- `;
10
- const huskyrc = `
11
- {
12
- "hooks": {
13
- "pre-commit": "lint-staged"
14
- }
15
- }
16
- `;
17
- const lintstagedrc = `
18
- {
19
- "*.{js,jsx,ts,tsx}": ["eslint --fix"]
20
- }
21
- `;
22
- class SetupCommand {
23
- static builder(yargs) {
24
- yargs.positional('tool', {
25
- describe: 'Name of the tool to setup',
26
- type: 'string',
27
- });
28
- }
29
- static handler(argv) {
30
- SetupCommand.setupTool(argv.tool);
31
- }
32
- static setupTool(tool) {
33
- switch (tool) {
34
- case 'eslint':
35
- this.setupEslint();
36
- break;
37
- default:
38
- console.error(`Unknown tool: ${tool}. Please specify a supported tool.`);
39
- }
40
- }
41
- static setupEslint() {
42
- console.log('Installing dependencies...');
43
- (0, child_process_1.execSync)('yarn add --dev eslint @40q/eslint-config husky lint-staged');
44
- console.log('Creating .eslintrc.json...');
45
- (0, child_process_1.execSync)(`echo '${eslintrc}' > .eslintrc.json`);
46
- console.log('Creating .huskyrc.json...');
47
- (0, child_process_1.execSync)(`echo '${huskyrc}' > .huskyrc.json`);
48
- console.log('Creating .lintstagedrc.json...');
49
- (0, child_process_1.execSync)(`echo '${lintstagedrc}' > .lintstagedrc.json`);
50
- console.log('Done!');
51
- }
52
- }
53
- exports.SetupCommand = SetupCommand;
@@ -1,53 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SetupCommand = void 0;
4
- const child_process_1 = require("child_process");
5
- const eslintrc = `
6
- {
7
- "extends": ["@40q/eslint-config"]
8
- }
9
- `;
10
- const huskyrc = `
11
- {
12
- "hooks": {
13
- "pre-commit": "lint-staged"
14
- }
15
- }
16
- `;
17
- const lintstagedrc = `
18
- {
19
- "*.{js,jsx,ts,tsx}": ["eslint --fix"]
20
- }
21
- `;
22
- class SetupCommand {
23
- static builder(yargs) {
24
- yargs.positional('tool', {
25
- describe: 'Name of the tool to setup',
26
- type: 'string',
27
- });
28
- }
29
- static handler(argv) {
30
- SetupCommand.setupTool(argv.tool);
31
- }
32
- static setupTool(tool) {
33
- switch (tool) {
34
- case 'eslint':
35
- this.setupEslint();
36
- break;
37
- default:
38
- console.error(`Unknown tool: ${tool}. Please specify a supported tool.`);
39
- }
40
- }
41
- static setupEslint() {
42
- console.log('Installing dependencies...');
43
- (0, child_process_1.execSync)('yarn add --dev eslint @40q/eslint-config husky lint-staged');
44
- console.log('Creating .eslintrc.json...');
45
- (0, child_process_1.execSync)(`echo '${eslintrc}' > .eslintrc.json`);
46
- console.log('Creating .huskyrc.json...');
47
- (0, child_process_1.execSync)(`echo '${huskyrc}' > .huskyrc.json`);
48
- console.log('Creating .lintstagedrc.json...');
49
- (0, child_process_1.execSync)(`echo '${lintstagedrc}' > .lintstagedrc.json`);
50
- console.log('Done!');
51
- }
52
- }
53
- exports.SetupCommand = SetupCommand;
@@ -1,39 +0,0 @@
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
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.findCliRoot = void 0;
27
- const fs = __importStar(require("fs"));
28
- const path = __importStar(require("path"));
29
- function findCliRoot(startDir) {
30
- let currentDir = startDir;
31
- while (currentDir !== path.parse(currentDir).root) {
32
- if (fs.existsSync(path.join(currentDir, '.cliroot'))) {
33
- return currentDir;
34
- }
35
- currentDir = path.dirname(currentDir);
36
- }
37
- throw new Error('CLI root directory with .cliroot marker not found.');
38
- }
39
- exports.findCliRoot = findCliRoot;