@pavlos-samaras/react-cli 1.0.1 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/README.md +52 -14
  2. package/dist/bin/ct.js +62 -16
  3. package/dist/bin/ct.js.map +1 -1
  4. package/dist/constants/generator.d.ts +3 -0
  5. package/dist/constants/generator.d.ts.map +1 -0
  6. package/dist/constants/generator.js +6 -0
  7. package/dist/constants/generator.js.map +1 -0
  8. package/dist/types/generator.d.ts +7 -0
  9. package/dist/types/generator.d.ts.map +1 -0
  10. package/dist/types/generator.js +2 -0
  11. package/dist/types/generator.js.map +1 -0
  12. package/dist/utils/applySpinner.d.ts +5 -0
  13. package/dist/utils/applySpinner.d.ts.map +1 -0
  14. package/dist/utils/applySpinner.js +16 -0
  15. package/dist/utils/applySpinner.js.map +1 -0
  16. package/dist/utils/generateComponent.d.ts +7 -6
  17. package/dist/utils/generateComponent.d.ts.map +1 -1
  18. package/dist/utils/generateComponent.js +19 -27
  19. package/dist/utils/generateComponent.js.map +1 -1
  20. package/dist/utils/generateHook.d.ts +7 -0
  21. package/dist/utils/generateHook.d.ts.map +1 -0
  22. package/dist/utils/generateHook.js +12 -0
  23. package/dist/utils/generateHook.js.map +1 -0
  24. package/dist/utils/loadConfig.d.ts +10 -0
  25. package/dist/utils/loadConfig.d.ts.map +1 -0
  26. package/dist/utils/loadConfig.js +16 -0
  27. package/dist/utils/loadConfig.js.map +1 -0
  28. package/dist/utils/validators.d.ts +3 -0
  29. package/dist/utils/validators.d.ts.map +1 -0
  30. package/dist/utils/validators.js +13 -0
  31. package/dist/utils/validators.js.map +1 -0
  32. package/package.json +3 -1
  33. package/dist/types/component.d.ts +0 -6
  34. package/dist/types/component.d.ts.map +0 -1
  35. package/dist/types/component.js +0 -2
  36. package/dist/types/component.js.map +0 -1
package/README.md CHANGED
@@ -1,32 +1,62 @@
1
1
  # React CLI
2
2
 
3
- A simple command-line tool for generating React components.
3
+ A simple command-line tool for generating React components and hooks.
4
4
 
5
- ## Build and link
5
+ ## Install
6
6
 
7
7
  ```bash
8
- npm install
9
- npm run build
10
- npm link
8
+ npm install -g @pavlos-samaras/react-cli
11
9
  ```
12
10
 
13
11
  ## Usage
14
12
 
15
- Generate a component in `src/components/<Name>`:
16
-
17
13
  ```bash
18
- ct generate component Button
14
+ ct generate <type> <name> [options]
19
15
  ```
20
16
 
21
- You can also use the `g` shorthand, choose a different target directory, or
22
- create a TypeScript file:
17
+ `g` is a shorthand for `generate`.
18
+
19
+ ### Types
20
+
21
+ | Type | Output |
22
+ | ----------- | --------------------------------------------------------------------------------------- |
23
+ | `component` | A folder with the component, a CSS/SCSS module, a hook and a test file |
24
+ | `hook` | A single hook file. The name must start with `use` followed by a capital (e.g. `useAuth`) |
25
+
26
+ ### Options
27
+
28
+ | Option | Description |
29
+ | ------------------------- | ------------------------------------------------------------------------ |
30
+ | `-d, --dir <dir>` | Target folder inside `src/` (or inside the feature). Default depends on the type: `components` or `hooks` |
31
+ | `-f, --feature <feature>` | Put the output under `src/features/<feature>/` |
32
+ | `--ts` | Use TypeScript without prompting |
33
+ | `-y, --yes` | Use the defaults (TypeScript, SCSS) and skip all prompts |
34
+
35
+ Without `--ts` or `-y`, the CLI asks whether to use TypeScript and (for
36
+ components) which stylesheet to use.
37
+
38
+ ### Output locations
39
+
40
+ | Command | Output |
41
+ | ---------------------------------------- | -------------------------------------------- |
42
+ | `ct g component Button` | `src/components/Button/` |
43
+ | `ct g component Button -f auth` | `src/features/auth/components/Button/` |
44
+ | `ct g component Button -d ui` | `src/ui/Button/` |
45
+ | `ct g hook useAuth` | `src/shared/hooks/useAuth.ts` |
46
+ | `ct g hook useAuth -f auth` | `src/features/auth/hooks/useAuth.ts` |
47
+
48
+ ### Examples
23
49
 
24
50
  ```bash
25
- ct g component Button --dir src/ui --ts
26
- ```
51
+ # Component with all defaults, no prompts
52
+ ct g component Button -y
53
+
54
+ # TypeScript component under a feature
55
+ ct g component LoginForm --feature auth --ts
27
56
 
28
- Without `--ts`, the CLI asks whether to use TypeScript and creates either a
29
- `.tsx` or `.jsx` file.
57
+ # Hook under a feature
58
+ ct g hook useSession -f auth -y
59
+ ```
30
60
 
31
61
  ## Development
32
62
 
@@ -35,3 +65,11 @@ Run the CLI directly from the TypeScript source:
35
65
  ```bash
36
66
  npm run dev -- generate component Button
37
67
  ```
68
+
69
+ To link the local build globally instead:
70
+
71
+ ```bash
72
+ npm install
73
+ npm run build
74
+ npm link
75
+ ```
package/dist/bin/ct.js CHANGED
@@ -1,35 +1,81 @@
1
1
  #!/usr/bin/env node
2
2
  import fs from "fs";
3
3
  import path from "path";
4
+ import chalk from "chalk";
4
5
  import { createRequire } from "module";
5
6
  import { Command } from "commander";
6
7
  import { generateComponent } from "../utils/generateComponent.js";
8
+ import { applySpinner } from "../utils/applySpinner.js";
9
+ import { DEFAULT_DIRS, TYPES } from "../constants/generator.js";
10
+ import { generateHook } from "../utils/generateHook.js";
11
+ import { isReactProject } from "../utils/validators.js";
12
+ import { loadConfig } from "../utils/loadConfig.js";
7
13
  const require = createRequire(import.meta.url);
8
14
  const { version } = require("../../package.json");
9
15
  const program = new Command();
10
- const TYPES = ["component"];
11
16
  program.name("ct").description("My React CLI").version(version);
12
17
  program
13
18
  .command("generate <type> <name>")
14
19
  .alias("g")
15
- .description("Generate a component, e.g. ct g component Button")
16
- .option("-d, --dir <div>", "target folder", "components")
17
- .option("-f, --feature <feature>", "put component under a feature")
18
- .option("--ts", "create a .tsx file")
19
- .action(async (type, name, options) => {
20
- if (!TYPES.includes(type))
21
- return console.log(`Unknown type: ${type}`);
20
+ .description("Generate a <type>, e.g. ct g component Button")
21
+ .option("-d, --dir <dir>", "target folder")
22
+ .option("-f, --feature <feature>", "put <type> under a feature")
23
+ .option("--ts", "use Typescript")
24
+ .option("--force", "skip safety checks and overwrite")
25
+ .action((type, name, options) => {
26
+ if (!isReactProject() && !options.force) {
27
+ console.log(chalk.yellow("This doesn't look like a React project (no react in package.json)."));
28
+ console.log(chalk.gray("Run ct from your project root, or use --force."));
29
+ process.exitCode = 1;
30
+ return;
31
+ }
32
+ const config = loadConfig() ?? {};
33
+ if (!TYPES.includes(type)) {
34
+ console.log(chalk.red(`Unknown type: ${type}`));
35
+ process.exitCode = 1;
36
+ return;
37
+ }
22
38
  if (type === "component") {
39
+ const dir = options.dir ?? config.dir?.component ?? "components";
23
40
  const pathToComponent = options.feature
24
- ? `src/features/${options.feature}/${options.dir}`
25
- : `src/${options.dir}`;
41
+ ? `src/features/${options.feature}/${dir}`
42
+ : `src/${dir}`;
26
43
  const folder = path.join(process.cwd(), pathToComponent, name);
27
- fs.mkdirSync(folder, { recursive: true });
28
- const { JSX, stylesheet, hook, test } = await generateComponent(name, options);
29
- fs.writeFileSync(path.join(folder, JSX.file), JSX.content);
30
- fs.writeFileSync(path.join(folder, stylesheet.file), stylesheet.content);
31
- fs.writeFileSync(path.join(folder, hook.file), hook.content);
32
- fs.writeFileSync(path.join(folder, test.file), test.content);
44
+ if (fs.existsSync(folder) && !options.force) {
45
+ console.log(chalk.yellow(`${name} already exists. Use --force to overwrite it.`));
46
+ process.exitCode = 1;
47
+ return;
48
+ }
49
+ applySpinner({ name, folder }, async () => {
50
+ fs.mkdirSync(folder, { recursive: true });
51
+ const { JSX, stylesheet, hook, test } = await generateComponent(folder, name, options, config);
52
+ fs.writeFileSync(JSX.pathToFile, JSX.content);
53
+ fs.writeFileSync(stylesheet.pathToFile, stylesheet.content);
54
+ fs.writeFileSync(hook.pathToFile, hook.content);
55
+ fs.writeFileSync(test.pathToFile, test.content);
56
+ });
57
+ }
58
+ if (type === "hook") {
59
+ if (!/^use[A-Z]\w+$/.test(name)) {
60
+ console.log(chalk.red("Hook must start with 'use' followed by a capital letter"));
61
+ process.exitCode = 1;
62
+ return;
63
+ }
64
+ const dir = options.dir ?? config.dir?.hook ?? "hooks";
65
+ const pathToHook = options.feature
66
+ ? `src/features/${options.feature}/${dir}`
67
+ : `src/shared/${dir}`;
68
+ const folder = path.join(process.cwd(), pathToHook);
69
+ if (fs.existsSync(folder) && !options.force) {
70
+ console.log(chalk.yellow(`${name} already exists. Use --force to overwrite it.`));
71
+ process.exitCode = 1;
72
+ return;
73
+ }
74
+ applySpinner({ name, folder }, async () => {
75
+ fs.mkdirSync(folder, { recursive: true });
76
+ const hook = await generateHook(folder, name, options, config);
77
+ fs.writeFileSync(hook.pathToFile, hook.content);
78
+ });
33
79
  }
34
80
  });
35
81
  program.parse();
@@ -1 +1 @@
1
- {"version":3,"file":"ct.js","sourceRoot":"","sources":["../../src/bin/ct.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGlE,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAwB,CAAC;AAEzE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,MAAM,KAAK,GAAG,CAAC,WAAW,CAAC,CAAC;AAE5B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAEhE,OAAO;KACJ,OAAO,CAAC,wBAAwB,CAAC;KACjC,KAAK,CAAC,GAAG,CAAC;KACV,WAAW,CAAC,kDAAkD,CAAC;KAC/D,MAAM,CAAC,iBAAiB,EAAE,eAAe,EAAE,YAAY,CAAC;KACxD,MAAM,CAAC,yBAAyB,EAAE,+BAA+B,CAAC;KAClE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC;KACpC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAY,EAAE,OAAyB,EAAE,EAAE;IACtE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;IAEvE,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QACzB,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO;YACrC,CAAC,CAAC,gBAAgB,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE;YAClD,CAAC,CAAC,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;QAC/D,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1C,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,iBAAiB,CAC7D,IAAI,EACJ,OAAO,CACR,CAAC;QAEF,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3D,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;QACzE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7D,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"ct.js","sourceRoot":"","sources":["../../src/bin/ct.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const TYPES: string[];
2
+ export declare const DEFAULT_DIRS: Record<string, string>;
3
+ //# sourceMappingURL=generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/constants/generator.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,UAAwB,CAAC;AAE3C,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAG/C,CAAC"}
@@ -0,0 +1,6 @@
1
+ export const TYPES = ["component", "hook"];
2
+ export const DEFAULT_DIRS = {
3
+ component: "components",
4
+ hook: "hooks",
5
+ };
6
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/constants/generator.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAE3C,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD,SAAS,EAAE,YAAY;IACvB,IAAI,EAAE,OAAO;CACd,CAAC"}
@@ -0,0 +1,7 @@
1
+ export type GeneratorOptions = {
2
+ dir?: string;
3
+ feature?: string;
4
+ ts?: boolean;
5
+ force?: boolean;
6
+ };
7
+ //# sourceMappingURL=generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/types/generator.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/types/generator.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ export declare const applySpinner: (options: {
2
+ name: string;
3
+ folder: string;
4
+ }, callback: () => void) => void;
5
+ //# sourceMappingURL=applySpinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applySpinner.d.ts","sourceRoot":"","sources":["../../src/utils/applySpinner.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY,YACd;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,YAC/B,MAAM,IAAI,SAarB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import chalk from "chalk";
2
+ import ora from "ora";
3
+ export const applySpinner = (options, callback) => {
4
+ const { name, folder } = options;
5
+ const spinner = ora(`Creating ${name}...`).start();
6
+ try {
7
+ callback();
8
+ spinner.succeed(`Created ${chalk.cyan(name)} in ${chalk.gray(folder)}`);
9
+ }
10
+ catch (error) {
11
+ spinner.fail(chalk.red(`Could not create ${name}`));
12
+ console.error(error);
13
+ process.exitCode = 1;
14
+ }
15
+ };
16
+ //# sourceMappingURL=applySpinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applySpinner.js","sourceRoot":"","sources":["../../src/utils/applySpinner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,OAAyC,EACzC,QAAoB,EACpB,EAAE;IACF,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACjC,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,IAAI,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;IAEnD,IAAI,CAAC;QACH,QAAQ,EAAE,CAAC;QACX,OAAO,CAAC,OAAO,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC,CAAC"}
@@ -1,19 +1,20 @@
1
- import type { ComponentOptions } from "../types/component.js";
2
- export declare const generateComponent: (name: string, options: ComponentOptions) => Promise<{
1
+ import type { GeneratorOptions } from "../types/generator.js";
2
+ import type { CtConfig } from "./loadConfig.js";
3
+ export declare const generateComponent: (folder: string, name: string, options: GeneratorOptions, config: CtConfig) => Promise<{
3
4
  JSX: {
4
- file: string;
5
+ pathToFile: string;
5
6
  content: string;
6
7
  };
7
8
  stylesheet: {
8
- file: string;
9
+ pathToFile: string;
9
10
  content: string;
10
11
  };
11
12
  hook: {
12
- file: string;
13
+ pathToFile: string;
13
14
  content: string;
14
15
  };
15
16
  test: {
16
- file: string;
17
+ pathToFile: string;
17
18
  content: string;
18
19
  };
19
20
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"generateComponent.d.ts","sourceRoot":"","sources":["../../src/utils/generateComponent.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAI9D,eAAO,MAAM,iBAAiB,SACtB,MAAM,WACH,gBAAgB;;QAiCrB,IAAI;QACJ,OAAO;;;QAOP,IAAI;QACJ,OAAO;;;QAGP,IAAI;QACJ,OAAO;;;QAGP,IAAI;QACJ,OAAO;;EAGZ,CAAC"}
1
+ {"version":3,"file":"generateComponent.d.ts","sourceRoot":"","sources":["../../src/utils/generateComponent.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,eAAO,MAAM,iBAAiB,WACpB,MAAM,QACR,MAAM,WACH,gBAAgB,UACjB,QAAQ;;QAqBZ,UAAU;QACV,OAAO;;;QAGP,UAAU;QACV,OAAO;;;QAGP,UAAU;QACV,OAAO;;;QAGP,UAAU;QACV,OAAO;;EAGZ,CAAC"}
@@ -1,48 +1,40 @@
1
+ import path from "path";
1
2
  import prompts from "prompts";
2
3
  import buildComponentTemplate from "../templates/component.js";
3
4
  import buildStylesheetTemplate from "../templates/stylesheet.js";
4
5
  import buildHookTemplate from "../templates/hook.js";
5
- export const generateComponent = async (name, options) => {
6
- let componentExt;
7
- if (options.ts === undefined) {
8
- const answer = await prompts({
6
+ import { isTypescriptUsed } from "./validators.js";
7
+ export const generateComponent = async (folder, name, options, config) => {
8
+ const stylesheetExt = config.stylesheet
9
+ ? { style: config.stylesheet }
10
+ : await prompts({
9
11
  type: "select",
10
- name: "ts",
11
- message: "Use TypeScript?",
12
+ name: "style",
13
+ message: "What stylesheet to use",
12
14
  choices: [
13
- { title: "Yes", value: "tsx" },
14
- { title: "No", value: "jsx" },
15
+ { title: "CSS", value: "css" },
16
+ { title: "SCSS", value: "scss" },
15
17
  ],
16
- initial: 0,
18
+ initial: 1,
17
19
  });
18
- componentExt = answer.ts;
19
- }
20
- const stylesheetExt = await prompts({
21
- type: "select",
22
- name: "style",
23
- message: "What stylesheet to use",
24
- choices: [
25
- { title: "CSS", value: "css" },
26
- { title: "SCSS", value: "scss" },
27
- ],
28
- initial: 1,
29
- });
30
- const componentLanguage = componentExt?.replace("x", "");
20
+ const useTs = options.ts ?? config.typescript ?? isTypescriptUsed();
21
+ const JsxExt = useTs ? "tsx" : "jsx";
22
+ const languageExt = useTs ? "ts" : "js";
31
23
  return {
32
24
  JSX: {
33
- file: `${name}.${componentExt}`,
34
- content: buildComponentTemplate(name, stylesheetExt.style, componentLanguage),
25
+ pathToFile: path.join(folder, `${name}.${JsxExt}`),
26
+ content: buildComponentTemplate(name, stylesheetExt.style, languageExt),
35
27
  },
36
28
  stylesheet: {
37
- file: `${name}.module.${stylesheetExt.style}`,
29
+ pathToFile: path.join(folder, `${name}.module.${stylesheetExt.style}`),
38
30
  content: buildStylesheetTemplate(name),
39
31
  },
40
32
  hook: {
41
- file: `use${name}.${componentLanguage}`,
33
+ pathToFile: path.join(folder, `use${name}.${languageExt}`),
42
34
  content: buildHookTemplate(name),
43
35
  },
44
36
  test: {
45
- file: `${name}.test.${componentLanguage}`,
37
+ pathToFile: path.join(folder, `${name}.test.${languageExt}`),
46
38
  content: "",
47
39
  },
48
40
  };
@@ -1 +1 @@
1
- {"version":3,"file":"generateComponent.js","sourceRoot":"","sources":["../../src/utils/generateComponent.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,sBAAsB,MAAM,2BAA2B,CAAC;AAE/D,OAAO,uBAAuB,MAAM,4BAA4B,CAAC;AACjE,OAAO,iBAAiB,MAAM,sBAAsB,CAAC;AAErD,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EACpC,IAAY,EACZ,OAAyB,EACzB,EAAE;IACF,IAAI,YAAY,CAAC;IAEjB,IAAI,OAAO,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC3B,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,iBAAiB;YAC1B,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;gBAC9B,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;aAC9B;YACD,OAAO,EAAE,CAAC;SACX,CAAC,CAAC;QACH,YAAY,GAAG,MAAM,CAAC,EAAY,CAAC;IACrC,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC;QAClC,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,wBAAwB;QACjC,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;YAC9B,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;SACjC;QACD,OAAO,EAAE,CAAC;KACX,CAAC,CAAC;IAEH,MAAM,iBAAiB,GAAG,YAAY,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAE,CAAC;IAE1D,OAAO;QACL,GAAG,EAAE;YACH,IAAI,EAAE,GAAG,IAAI,IAAI,YAAY,EAAE;YAC/B,OAAO,EAAE,sBAAsB,CAC7B,IAAI,EACJ,aAAa,CAAC,KAAK,EACnB,iBAAiB,CAClB;SACF;QACD,UAAU,EAAE;YACV,IAAI,EAAE,GAAG,IAAI,WAAW,aAAa,CAAC,KAAK,EAAE;YAC7C,OAAO,EAAE,uBAAuB,CAAC,IAAI,CAAC;SACvC;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,MAAM,IAAI,IAAI,iBAAiB,EAAE;YACvC,OAAO,EAAE,iBAAiB,CAAC,IAAI,CAAC;SACjC;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,GAAG,IAAI,SAAS,iBAAiB,EAAE;YACzC,OAAO,EAAE,EAAE;SACZ;KACF,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"generateComponent.js","sourceRoot":"","sources":["../../src/utils/generateComponent.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,sBAAsB,MAAM,2BAA2B,CAAC;AAC/D,OAAO,uBAAuB,MAAM,4BAA4B,CAAC;AACjE,OAAO,iBAAiB,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAInD,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EACpC,MAAc,EACd,IAAY,EACZ,OAAyB,EACzB,MAAgB,EAChB,EAAE;IACF,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU;QACrC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE;QAC9B,CAAC,CAAC,MAAM,OAAO,CAAC;YACZ,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,wBAAwB;YACjC,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;gBAC9B,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;aACjC;YACD,OAAO,EAAE,CAAC;SACX,CAAC,CAAC;IAEP,MAAM,KAAK,GAAG,OAAO,CAAC,EAAE,IAAI,MAAM,CAAC,UAAU,IAAI,gBAAgB,EAAE,CAAC;IACpE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IACrC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAExC,OAAO;QACL,GAAG,EAAE;YACH,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC;YAClD,OAAO,EAAE,sBAAsB,CAAC,IAAI,EAAE,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC;SACxE;QACD,UAAU,EAAE;YACV,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,WAAW,aAAa,CAAC,KAAK,EAAE,CAAC;YACtE,OAAO,EAAE,uBAAuB,CAAC,IAAI,CAAC;SACvC;QACD,IAAI,EAAE;YACJ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC1D,OAAO,EAAE,iBAAiB,CAAC,IAAI,CAAC;SACjC;QACD,IAAI,EAAE;YACJ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,SAAS,WAAW,EAAE,CAAC;YAC5D,OAAO,EAAE,EAAE;SACZ;KACF,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { GeneratorOptions } from "../types/generator.js";
2
+ import type { CtConfig } from "./loadConfig.js";
3
+ export declare const generateHook: (folder: string, name: string, options: GeneratorOptions, config: CtConfig) => Promise<{
4
+ pathToFile: string;
5
+ content: string;
6
+ }>;
7
+ //# sourceMappingURL=generateHook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateHook.d.ts","sourceRoot":"","sources":["../../src/utils/generateHook.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAG9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,eAAO,MAAM,YAAY,WACf,MAAM,QACR,MAAM,WACH,gBAAgB,UACjB,QAAQ;;;EASjB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import path from "path";
2
+ import buildHookTemplate from "../templates/hook.js";
3
+ import { isTypescriptUsed } from "./validators.js";
4
+ export const generateHook = async (folder, name, options, config) => {
5
+ const useTs = options.ts ?? config.typescript ?? isTypescriptUsed();
6
+ const languageExt = useTs ? "ts" : "js";
7
+ return {
8
+ pathToFile: path.join(folder, `${name}.${languageExt}`),
9
+ content: buildHookTemplate(name),
10
+ };
11
+ };
12
+ //# sourceMappingURL=generateHook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateHook.js","sourceRoot":"","sources":["../../src/utils/generateHook.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,iBAAiB,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGnD,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAC/B,MAAc,EACd,IAAY,EACZ,OAAyB,EACzB,MAAgB,EAChB,EAAE;IACF,MAAM,KAAK,GAAG,OAAO,CAAC,EAAE,IAAI,MAAM,CAAC,UAAU,IAAI,gBAAgB,EAAE,CAAC;IACpE,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAExC,OAAO;QACL,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI,WAAW,EAAE,CAAC;QACvD,OAAO,EAAE,iBAAiB,CAAC,IAAI,CAAC;KACjC,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ export interface CtConfig {
2
+ dir?: {
3
+ component: "components";
4
+ hook: "hooks";
5
+ };
6
+ typescript?: boolean;
7
+ stylesheet?: string;
8
+ }
9
+ export declare const loadConfig: () => CtConfig | undefined;
10
+ //# sourceMappingURL=loadConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadConfig.d.ts","sourceRoot":"","sources":["../../src/utils/loadConfig.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,QAAQ;IACvB,GAAG,CAAC,EAAE;QACJ,SAAS,EAAE,YAAY,CAAC;QACxB,IAAI,EAAE,OAAO,CAAC;KACf,CAAC;IACF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,UAAU,QAAO,QAAQ,GAAG,SAUxC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import path from "path";
2
+ import fs from "fs";
3
+ import chalk from "chalk";
4
+ export const loadConfig = () => {
5
+ const configPath = path.join(process.cwd(), "ct.config.json");
6
+ if (!fs.existsSync(configPath))
7
+ return;
8
+ try {
9
+ return JSON.parse(fs.readFileSync(configPath, "utf-8"));
10
+ }
11
+ catch {
12
+ console.log(chalk.yellow("ct.config.json is not valid JSON, ignoring it."));
13
+ return;
14
+ }
15
+ };
16
+ //# sourceMappingURL=loadConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadConfig.js","sourceRoot":"","sources":["../../src/utils/loadConfig.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,KAAK,MAAM,OAAO,CAAC;AAW1B,MAAM,CAAC,MAAM,UAAU,GAAG,GAAyB,EAAE;IACnD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAC9D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO;IAEvC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gDAAgD,CAAC,CAAC,CAAC;QAC5E,OAAO;IACT,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const isReactProject: () => boolean;
2
+ export declare const isTypescriptUsed: () => boolean;
3
+ //# sourceMappingURL=validators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,cAAc,eAM1B,CAAC;AAEF,eAAO,MAAM,gBAAgB,eAE5B,CAAC"}
@@ -0,0 +1,13 @@
1
+ import path from "path";
2
+ import fs from "fs";
3
+ export const isReactProject = () => {
4
+ const pkgPath = path.join(process.cwd(), "package.json");
5
+ if (!fs.existsSync(pkgPath))
6
+ return false;
7
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
8
+ return Boolean(pkg.dependencies?.react || pkg.devDependencies?.react);
9
+ };
10
+ export const isTypescriptUsed = () => {
11
+ return fs.existsSync(path.join(process.cwd(), "tsconfig.json"));
12
+ };
13
+ //# sourceMappingURL=validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE;IACjC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;IACzD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAE1C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1D,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,IAAI,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;AACxE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,EAAE;IACnC,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC;AAClE,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pavlos-samaras/react-cli",
3
- "version": "1.0.1",
3
+ "version": "1.1.1",
4
4
  "author": "sammern-stack",
5
5
  "description": "A CLI to generate React code",
6
6
  "keywords": [
@@ -20,7 +20,9 @@
20
20
  "build:link": "npm run build && npm link"
21
21
  },
22
22
  "dependencies": {
23
+ "chalk": "^6.0.1",
23
24
  "commander": "^15.0.0",
25
+ "ora": "^10.0.0",
24
26
  "prompts": "^2.4.2"
25
27
  },
26
28
  "devDependencies": {
@@ -1,6 +0,0 @@
1
- export type ComponentOptions = {
2
- dir: string;
3
- feature?: string;
4
- ts?: boolean;
5
- };
6
- //# sourceMappingURL=component.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../src/types/component.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,OAAO,CAAC;CACd,CAAA"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=component.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"component.js","sourceRoot":"","sources":["../../src/types/component.ts"],"names":[],"mappings":""}