create-next-pro-cli 0.1.24 → 0.1.25

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/bin.bun.js CHANGED
@@ -4937,7 +4937,7 @@ var require_prompts3 = __commonJS((exports, module) => {
4937
4937
  });
4938
4938
 
4939
4939
  // src/index.ts
4940
- var import_prompts7 = __toESM(require_prompts3(), 1);
4940
+ var import_prompts8 = __toESM(require_prompts3(), 1);
4941
4941
  import fs from "fs";
4942
4942
  import os from "os";
4943
4943
  import path from "path";
@@ -5084,6 +5084,7 @@ async function addComponent(args) {
5084
5084
  }
5085
5085
  current[componentNameUpper] = parsed;
5086
5086
  await writeFile(jsonTarget, JSON.stringify(current, null, 2));
5087
+ console.log(`\uD83D\uDCC4 File updated: ${jsonTarget}`);
5087
5088
  }
5088
5089
  } else {
5089
5090
  console.log("\u2139\uFE0F Skipping translation entries; next-intl not enabled.");
@@ -5257,6 +5258,7 @@ async function addPage(args) {
5257
5258
  current = JSON.parse(replaced);
5258
5259
  }
5259
5260
  await writeFile2(jsonTarget, JSON.stringify(current, null, 2));
5261
+ console.log(`\uD83D\uDCC4 File created: ${jsonTarget}`);
5260
5262
  }
5261
5263
  }
5262
5264
  } else {
@@ -5612,6 +5614,141 @@ Your choices:`);
5612
5614
  await scaffoldProject(response);
5613
5615
  }
5614
5616
 
5617
+ // src/lib/addLanguage.ts
5618
+ var import_prompts7 = __toESM(require_prompts3(), 1);
5619
+ import { join as join8 } from "path";
5620
+ import { existsSync as existsSync8 } from "fs";
5621
+ import { cp as cp2, readFile as readFile7, writeFile as writeFile7 } from "fs/promises";
5622
+ function generateLocales() {
5623
+ const dn = new Intl.DisplayNames(["en"], { type: "language" });
5624
+ const locales = [];
5625
+ for (let i = 0;i < 26; i++) {
5626
+ for (let j = 0;j < 26; j++) {
5627
+ const code = String.fromCharCode(97 + i) + String.fromCharCode(97 + j);
5628
+ try {
5629
+ const name = dn.of(code);
5630
+ if (name && name.toLowerCase() !== code) {
5631
+ locales.push(code);
5632
+ }
5633
+ } catch {}
5634
+ }
5635
+ }
5636
+ return locales.sort();
5637
+ }
5638
+ async function addLanguage(args) {
5639
+ const config = await loadConfig();
5640
+ if (!config?.useI18n) {
5641
+ console.error("\u274C i18n is not enabled in this project.");
5642
+ return;
5643
+ }
5644
+ const messagesPath = join8(process.cwd(), "messages");
5645
+ if (!existsSync8(messagesPath)) {
5646
+ console.error("\u274C Messages directory missing. Ensure i18n was configured.");
5647
+ return;
5648
+ }
5649
+ const available = generateLocales();
5650
+ let locale = args[1];
5651
+ if (!locale || !available.includes(locale)) {
5652
+ const response = await import_prompts7.default({
5653
+ type: "autocomplete",
5654
+ name: "locale",
5655
+ message: "\uD83C\uDF10 Locale to add:",
5656
+ choices: available.map((l) => ({ title: l, value: l }))
5657
+ });
5658
+ locale = response.locale;
5659
+ }
5660
+ if (!locale)
5661
+ return;
5662
+ if (existsSync8(join8(messagesPath, locale))) {
5663
+ console.error(`\u274C Locale ${locale} already exists.`);
5664
+ return;
5665
+ }
5666
+ const routingFile = join8(process.cwd(), "src", "lib", "i18n", "routing.ts");
5667
+ if (!existsSync8(routingFile)) {
5668
+ console.error("\u274C routing.ts not found. Are you in project root?");
5669
+ return;
5670
+ }
5671
+ const routingContent = await readFile7(routingFile, "utf-8");
5672
+ const defaultMatch = routingContent.match(/defaultLocale:\s*"([^"]+)"/);
5673
+ const defaultLocale = defaultMatch ? defaultMatch[1] : null;
5674
+ if (!defaultLocale || !existsSync8(join8(messagesPath, defaultLocale))) {
5675
+ console.error("\u274C Default locale not found.");
5676
+ return;
5677
+ }
5678
+ await cp2(join8(messagesPath, defaultLocale), join8(messagesPath, locale), {
5679
+ recursive: true
5680
+ });
5681
+ console.log(`\uD83D\uDCC4 Directory created: ${join8(messagesPath, locale)}`);
5682
+ const localesMatch = routingContent.match(/locales:\s*\[([^\]]*)\]/);
5683
+ if (localesMatch) {
5684
+ const localesArr = localesMatch[1].split(",").map((s) => s.trim().replace(/["']/g, "")).filter(Boolean);
5685
+ if (!localesArr.includes(locale)) {
5686
+ localesArr.push(locale);
5687
+ const newLocales = `locales: [${localesArr.map((l) => `"${l}"`).join(", ")}]`;
5688
+ const newContent = routingContent.replace(/locales:\s*\[[^\]]*\]/, newLocales);
5689
+ await writeFile7(routingFile, newContent);
5690
+ console.log(`\uD83D\uDCC4 File updated: ${routingFile}`);
5691
+ }
5692
+ }
5693
+ console.log(`\u2705 Locale "${locale}" added and copied from default locale "${defaultLocale}".`);
5694
+ }
5695
+
5696
+ // src/lib/addText.ts
5697
+ import { join as join9 } from "path";
5698
+ import { existsSync as existsSync9 } from "fs";
5699
+ import { readFile as readFile8, writeFile as writeFile8, readdir as readdir4 } from "fs/promises";
5700
+ function defaultText(key) {
5701
+ return key.replace(/_/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
5702
+ }
5703
+ async function addText(args) {
5704
+ const pathArg = args[1];
5705
+ if (!pathArg) {
5706
+ console.error("\u274C Dot path parameter is required.");
5707
+ return;
5708
+ }
5709
+ const providedText = args.slice(2).join(" ");
5710
+ const config = await loadConfig();
5711
+ if (!config?.useI18n) {
5712
+ console.error("\u274C i18n is not enabled in this project.");
5713
+ return;
5714
+ }
5715
+ const messagesPath = join9(process.cwd(), "messages");
5716
+ if (!existsSync9(messagesPath)) {
5717
+ console.error("\u274C Messages directory missing. Ensure i18n was configured.");
5718
+ return;
5719
+ }
5720
+ const entries = await readdir4(messagesPath, { withFileTypes: true });
5721
+ const locales = entries.filter((e) => e.isDirectory()).map((e) => e.name);
5722
+ const [fileName, ...segments] = pathArg.split(".");
5723
+ if (!fileName || segments.length === 0) {
5724
+ console.error("\u274C Invalid dot path provided.");
5725
+ return;
5726
+ }
5727
+ const finalKey = segments[segments.length - 1];
5728
+ const text = providedText || defaultText(finalKey);
5729
+ for (const locale of locales) {
5730
+ const filePath = join9(messagesPath, locale, `${fileName}.json`);
5731
+ let data = {};
5732
+ if (existsSync9(filePath)) {
5733
+ const raw = await readFile8(filePath, "utf-8");
5734
+ try {
5735
+ data = JSON.parse(raw);
5736
+ } catch {}
5737
+ }
5738
+ let cursor = data;
5739
+ for (let i = 0;i < segments.length - 1; i++) {
5740
+ const seg = segments[i];
5741
+ if (!cursor[seg])
5742
+ cursor[seg] = {};
5743
+ cursor = cursor[seg];
5744
+ }
5745
+ cursor[finalKey] = text;
5746
+ await writeFile8(filePath, JSON.stringify(data, null, 2));
5747
+ console.log(`\uD83D\uDCC4 File updated: ${filePath}`);
5748
+ }
5749
+ console.log(`\u2705 Text added at path "${pathArg}" with value "${text}".`);
5750
+ }
5751
+
5615
5752
  // src/index.ts
5616
5753
  var CONFIG_DIR = process.env.XDG_CONFIG_HOME ? path.join(process.env.XDG_CONFIG_HOME, "create-next-pro") : path.join(os.homedir(), ".config", "create-next-pro");
5617
5754
  var CONFIG_FILE = path.join(CONFIG_DIR, "config.json");
@@ -5654,7 +5791,7 @@ async function onboarding() {
5654
5791
  const pkg = JSON.parse(packageJson);
5655
5792
  console.log(`\uD83D\uDE80 Welcome to create-next-pro v${pkg.version}
5656
5793
  `);
5657
- const res = await import_prompts7.default([
5794
+ const res = await import_prompts8.default([
5658
5795
  {
5659
5796
  type: "select",
5660
5797
  name: "shell",
@@ -5704,6 +5841,8 @@ Usage:
5704
5841
  create-next-pro addcomponent [options]
5705
5842
  create-next-pro addlib [name]
5706
5843
  create-next-pro addapi [name]
5844
+ create-next-pro addlanguage [locale]
5845
+ create-next-pro addtext <path> [text]
5707
5846
  create-next-pro rmpage [options]
5708
5847
 
5709
5848
  Options:
@@ -5752,6 +5891,14 @@ async function main() {
5752
5891
  addApi(args);
5753
5892
  return;
5754
5893
  }
5894
+ if (args[0] === "addlanguage") {
5895
+ await addLanguage(args);
5896
+ return;
5897
+ }
5898
+ if (args[0] === "addtext") {
5899
+ await addText(args);
5900
+ return;
5901
+ }
5755
5902
  if (args[0] === "rmpage") {
5756
5903
  rmPage(args);
5757
5904
  return;
package/dist/bin.node.js CHANGED
@@ -4,7 +4,7 @@
4
4
  import fs from "fs";
5
5
  import os from "os";
6
6
  import path from "path";
7
- import prompts7 from "prompts";
7
+ import prompts8 from "prompts";
8
8
  import { fileURLToPath as fileURLToPath2 } from "url";
9
9
  import { dirname, resolve } from "path";
10
10
 
@@ -158,6 +158,7 @@ async function addComponent(args) {
158
158
  }
159
159
  current[componentNameUpper] = parsed;
160
160
  await writeFile(jsonTarget, JSON.stringify(current, null, 2));
161
+ console.log(`\u{1F4C4} File updated: ${jsonTarget}`);
161
162
  }
162
163
  } else {
163
164
  console.log("\u2139\uFE0F Skipping translation entries; next-intl not enabled.");
@@ -342,6 +343,7 @@ async function addPage(args) {
342
343
  current = JSON.parse(replaced);
343
344
  }
344
345
  await writeFile2(jsonTarget, JSON.stringify(current, null, 2));
346
+ console.log(`\u{1F4C4} File created: ${jsonTarget}`);
345
347
  }
346
348
  }
347
349
  } else {
@@ -376,7 +378,7 @@ async function rmPage(args) {
376
378
  if (existsSync4(jsonTarget)) {
377
379
  await writeFile3(jsonTarget, "");
378
380
  await import("child_process").then(
379
- (cp2) => cp2.execSync(`rm -f '${jsonTarget}'`)
381
+ (cp3) => cp3.execSync(`rm -f '${jsonTarget}'`)
380
382
  );
381
383
  console.log(`\u{1F5D1}\uFE0F Deleted: ${jsonTarget}`);
382
384
  }
@@ -384,14 +386,14 @@ async function rmPage(args) {
384
386
  const uiPageDir = join4(process.cwd(), "src", "ui", pageName);
385
387
  if (existsSync4(uiPageDir)) {
386
388
  await import("child_process").then(
387
- (cp2) => cp2.execSync(`rm -rf '${uiPageDir}'`)
389
+ (cp3) => cp3.execSync(`rm -rf '${uiPageDir}'`)
388
390
  );
389
391
  console.log(`\u{1F5D1}\uFE0F Deleted: ${uiPageDir}`);
390
392
  }
391
393
  const appLocaleDir = join4(process.cwd(), "src", "app", "[locale]", pageName);
392
394
  if (existsSync4(appLocaleDir)) {
393
395
  await import("child_process").then(
394
- (cp2) => cp2.execSync(`rm -rf '${appLocaleDir}'`)
396
+ (cp3) => cp3.execSync(`rm -rf '${appLocaleDir}'`)
395
397
  );
396
398
  console.log(`\u{1F5D1}\uFE0F Deleted: ${appLocaleDir}`);
397
399
  }
@@ -739,6 +741,143 @@ async function createProjectWithPrompt() {
739
741
  await scaffoldProject(response);
740
742
  }
741
743
 
744
+ // src/lib/addLanguage.ts
745
+ import { join as join8 } from "path";
746
+ import { existsSync as existsSync8 } from "fs";
747
+ import { cp as cp2, readFile as readFile7, writeFile as writeFile7 } from "fs/promises";
748
+ import prompts7 from "prompts";
749
+ function generateLocales() {
750
+ const dn = new Intl.DisplayNames(["en"], { type: "language" });
751
+ const locales = [];
752
+ for (let i = 0; i < 26; i++) {
753
+ for (let j = 0; j < 26; j++) {
754
+ const code = String.fromCharCode(97 + i) + String.fromCharCode(97 + j);
755
+ try {
756
+ const name = dn.of(code);
757
+ if (name && name.toLowerCase() !== code) {
758
+ locales.push(code);
759
+ }
760
+ } catch {
761
+ }
762
+ }
763
+ }
764
+ return locales.sort();
765
+ }
766
+ async function addLanguage(args) {
767
+ const config = await loadConfig();
768
+ if (!config?.useI18n) {
769
+ console.error("\u274C i18n is not enabled in this project.");
770
+ return;
771
+ }
772
+ const messagesPath = join8(process.cwd(), "messages");
773
+ if (!existsSync8(messagesPath)) {
774
+ console.error("\u274C Messages directory missing. Ensure i18n was configured.");
775
+ return;
776
+ }
777
+ const available = generateLocales();
778
+ let locale = args[1];
779
+ if (!locale || !available.includes(locale)) {
780
+ const response = await prompts7({
781
+ type: "autocomplete",
782
+ name: "locale",
783
+ message: "\u{1F310} Locale to add:",
784
+ choices: available.map((l) => ({ title: l, value: l }))
785
+ });
786
+ locale = response.locale;
787
+ }
788
+ if (!locale) return;
789
+ if (existsSync8(join8(messagesPath, locale))) {
790
+ console.error(`\u274C Locale ${locale} already exists.`);
791
+ return;
792
+ }
793
+ const routingFile = join8(process.cwd(), "src", "lib", "i18n", "routing.ts");
794
+ if (!existsSync8(routingFile)) {
795
+ console.error("\u274C routing.ts not found. Are you in project root?");
796
+ return;
797
+ }
798
+ const routingContent = await readFile7(routingFile, "utf-8");
799
+ const defaultMatch = routingContent.match(/defaultLocale:\s*"([^"]+)"/);
800
+ const defaultLocale = defaultMatch ? defaultMatch[1] : null;
801
+ if (!defaultLocale || !existsSync8(join8(messagesPath, defaultLocale))) {
802
+ console.error("\u274C Default locale not found.");
803
+ return;
804
+ }
805
+ await cp2(join8(messagesPath, defaultLocale), join8(messagesPath, locale), {
806
+ recursive: true
807
+ });
808
+ console.log(`\u{1F4C4} Directory created: ${join8(messagesPath, locale)}`);
809
+ const localesMatch = routingContent.match(/locales:\s*\[([^\]]*)\]/);
810
+ if (localesMatch) {
811
+ const localesArr = localesMatch[1].split(",").map((s) => s.trim().replace(/["']/g, "")).filter(Boolean);
812
+ if (!localesArr.includes(locale)) {
813
+ localesArr.push(locale);
814
+ const newLocales = `locales: [${localesArr.map((l) => `"${l}"`).join(", ")}]`;
815
+ const newContent = routingContent.replace(/locales:\s*\[[^\]]*\]/, newLocales);
816
+ await writeFile7(routingFile, newContent);
817
+ console.log(`\u{1F4C4} File updated: ${routingFile}`);
818
+ }
819
+ }
820
+ console.log(
821
+ `\u2705 Locale "${locale}" added and copied from default locale "${defaultLocale}".`
822
+ );
823
+ }
824
+
825
+ // src/lib/addText.ts
826
+ import { join as join9 } from "path";
827
+ import { existsSync as existsSync9 } from "fs";
828
+ import { readFile as readFile8, writeFile as writeFile8, readdir as readdir4 } from "fs/promises";
829
+ function defaultText(key) {
830
+ return key.replace(/_/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
831
+ }
832
+ async function addText(args) {
833
+ const pathArg = args[1];
834
+ if (!pathArg) {
835
+ console.error("\u274C Dot path parameter is required.");
836
+ return;
837
+ }
838
+ const providedText = args.slice(2).join(" ");
839
+ const config = await loadConfig();
840
+ if (!config?.useI18n) {
841
+ console.error("\u274C i18n is not enabled in this project.");
842
+ return;
843
+ }
844
+ const messagesPath = join9(process.cwd(), "messages");
845
+ if (!existsSync9(messagesPath)) {
846
+ console.error("\u274C Messages directory missing. Ensure i18n was configured.");
847
+ return;
848
+ }
849
+ const entries = await readdir4(messagesPath, { withFileTypes: true });
850
+ const locales = entries.filter((e) => e.isDirectory()).map((e) => e.name);
851
+ const [fileName, ...segments] = pathArg.split(".");
852
+ if (!fileName || segments.length === 0) {
853
+ console.error("\u274C Invalid dot path provided.");
854
+ return;
855
+ }
856
+ const finalKey = segments[segments.length - 1];
857
+ const text = providedText || defaultText(finalKey);
858
+ for (const locale of locales) {
859
+ const filePath = join9(messagesPath, locale, `${fileName}.json`);
860
+ let data = {};
861
+ if (existsSync9(filePath)) {
862
+ const raw = await readFile8(filePath, "utf-8");
863
+ try {
864
+ data = JSON.parse(raw);
865
+ } catch {
866
+ }
867
+ }
868
+ let cursor = data;
869
+ for (let i = 0; i < segments.length - 1; i++) {
870
+ const seg = segments[i];
871
+ if (!cursor[seg]) cursor[seg] = {};
872
+ cursor = cursor[seg];
873
+ }
874
+ cursor[finalKey] = text;
875
+ await writeFile8(filePath, JSON.stringify(data, null, 2));
876
+ console.log(`\u{1F4C4} File updated: ${filePath}`);
877
+ }
878
+ console.log(`\u2705 Text added at path "${pathArg}" with value "${text}".`);
879
+ }
880
+
742
881
  // src/index.ts
743
882
  var CONFIG_DIR = process.env.XDG_CONFIG_HOME ? path.join(process.env.XDG_CONFIG_HOME, "create-next-pro") : path.join(os.homedir(), ".config", "create-next-pro");
744
883
  var CONFIG_FILE = path.join(CONFIG_DIR, "config.json");
@@ -784,7 +923,7 @@ async function onboarding() {
784
923
  const pkg = JSON.parse(packageJson);
785
924
  console.log(`\u{1F680} Welcome to create-next-pro v${pkg.version}
786
925
  `);
787
- const res = await prompts7(
926
+ const res = await prompts8(
788
927
  [
789
928
  {
790
929
  type: "select",
@@ -837,6 +976,8 @@ Usage:
837
976
  create-next-pro addcomponent [options]
838
977
  create-next-pro addlib [name]
839
978
  create-next-pro addapi [name]
979
+ create-next-pro addlanguage [locale]
980
+ create-next-pro addtext <path> [text]
840
981
  create-next-pro rmpage [options]
841
982
 
842
983
  Options:
@@ -883,6 +1024,14 @@ async function main() {
883
1024
  addApi(args);
884
1025
  return;
885
1026
  }
1027
+ if (args[0] === "addlanguage") {
1028
+ await addLanguage(args);
1029
+ return;
1030
+ }
1031
+ if (args[0] === "addtext") {
1032
+ await addText(args);
1033
+ return;
1034
+ }
886
1035
  if (args[0] === "rmpage") {
887
1036
  rmPage(args);
888
1037
  return;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/lib/addComponent.ts","../src/lib/utils.ts","../src/lib/addPage.ts","../src/lib/rmPage.ts","../src/lib/addLib.ts","../src/lib/addApi.ts","../src/scaffold.ts","../src/lib/helper/consoleColor.ts","../src/lib/createProject.ts","../src/lib/createProjectWithPrompt.ts","../bin.node.ts"],"sourcesContent":["// src/index.ts\n\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport prompts from \"prompts\";\nimport { fileURLToPath } from \"node:url\";\nimport { dirname, resolve } from \"node:path\";\n\nimport { addComponent } from \"./lib/addComponent\";\nimport { addPage } from \"./lib/addPage\";\nimport { rmPage } from \"./lib/rmPage\";\nimport { addLib } from \"./lib/addLib\";\nimport { addApi } from \"./lib/addApi\";\nimport { createProject } from \"./lib/createProject\";\nimport { createProjectWithPrompt } from \"./lib/createProjectWithPrompt\";\n\ntype Cfg = {\n version: 1;\n shell: \"bash\" | \"zsh\";\n completionInstalled: boolean;\n createdAt: string;\n updatedAt: string;\n};\n\nconst CONFIG_DIR = process.env.XDG_CONFIG_HOME\n ? path.join(process.env.XDG_CONFIG_HOME, \"create-next-pro\")\n : path.join(os.homedir(), \".config\", \"create-next-pro\");\nconst CONFIG_FILE = path.join(CONFIG_DIR, \"config.json\");\n\nfunction readCfg(): Cfg | null {\n try {\n return JSON.parse(fs.readFileSync(CONFIG_FILE, \"utf8\")) as Cfg;\n } catch {\n return null;\n }\n}\nfunction writeCfg(cfg: Cfg) {\n fs.mkdirSync(CONFIG_DIR, { recursive: true });\n fs.writeFileSync(CONFIG_FILE, JSON.stringify(cfg, null, 2));\n}\nfunction rcFile(shell: \"bash\" | \"zsh\") {\n return path.join(os.homedir(), shell === \"zsh\" ? \".zshrc\" : \".bashrc\");\n}\nfunction ensureLineInRc(file: string, line: string) {\n try {\n const cur = fs.existsSync(file) ? fs.readFileSync(file, \"utf8\") : \"\";\n if (!cur.includes(line)) fs.appendFileSync(file, `\\n${line}\\n`);\n } catch {\n /* ignore */\n }\n}\nasync function installCompletion(shell: \"bash\" | \"zsh\") {\n // read script from package\n const __dirname = path.dirname(fileURLToPath(import.meta.url));\n const completionSrc = path.resolve(\n __dirname,\n \"../create-next-pro-completion.sh\",\n );\n const completionDst = path.join(CONFIG_DIR, \"completion.sh\");\n fs.mkdirSync(CONFIG_DIR, { recursive: true });\n fs.copyFileSync(completionSrc, completionDst);\n ensureLineInRc(rcFile(shell), `source \"${completionDst}\"`);\n}\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\nconst packageJsonPath = resolve(__dirname, \"../package.json\");\nconst packageJson = fs.readFileSync(packageJsonPath, \"utf8\");\n\nasync function onboarding(): Promise<Cfg> {\n const pkg = JSON.parse(packageJson);\n console.log(`🚀 Welcome to create-next-pro v${pkg.version}\\n`);\n const res = await prompts(\n [\n {\n type: \"select\",\n name: \"shell\",\n message: \"Which shell do you use?\",\n choices: [\n { title: \"zsh\", value: \"zsh\" },\n { title: \"bash\", value: \"bash\" },\n ],\n initial: (os.userInfo().shell || \"\").includes(\"zsh\") ? 0 : 1,\n },\n {\n type: \"toggle\",\n name: \"completion\",\n message: \"Install autocompletion?\",\n initial: true,\n active: \"Yes\",\n inactive: \"No\",\n },\n ],\n { onCancel: () => process.exit(1) },\n );\n\n const cfg: Cfg = {\n version: 1,\n shell: res.shell,\n completionInstalled: !!res.completion,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n };\n if (cfg.completionInstalled) await installCompletion(cfg.shell);\n writeCfg(cfg);\n console.log(\"\\n✅ Configuration saved.\");\n console.log(\"you can now use the CLI ! ex : \");\n console.log(\" Without prompt (will change in future) :\");\n console.log(\" create-next-pro my-next-project\");\n console.log(\" With prompt :\");\n console.log(\" create-next-pro\");\n console.log(\n \"For more information, visit: https://github.com/Rising-Corporation/create-next-pro-cli\",\n );\n console.log(\"Happy coding! 🎉\");\n return cfg;\n}\nfunction showHelp() {\n console.log(`create-next-pro\n\nUsage:\n create-next-pro <project-name> [--force]\n create-next-pro addpage [options]\n create-next-pro addcomponent [options]\n create-next-pro addlib [name]\n create-next-pro addapi [name]\n create-next-pro rmpage [options]\n\nOptions:\n --help Show this help message\n --reconfigure Run the configuration assistant again\n`);\n}\n\nfunction showVersion() {\n const pkg = JSON.parse(packageJson);\n console.log(`v${pkg.version}`);\n}\n\n/**\n * Main CLI entry point for create-next-pro.\n *\n * Note: For now, the project behaves as if --force is always enabled and no creation prompt is taken into account.\n * All actions are performed directly without confirmation.\n */\nexport async function main() {\n let args: string[];\n if (typeof Bun !== \"undefined\") {\n args = Bun.argv.slice(2);\n } else if (typeof process !== \"undefined\" && process.argv) {\n args = process.argv.slice(2);\n } else {\n args = [];\n }\n\n if (args.includes(\"--help\")) return showHelp();\n if (args.includes(\"--version\") || args.includes(\"-v\")) return showVersion();\n if (args.includes(\"--reconfigure\") || !readCfg()) {\n await onboarding();\n return;\n }\n\n const force = args.includes(\"--force\");\n // For now, --force is always considered enabled but do not overwrite existing projects\n // WARNING: if you enable --force it will overwrite existing projects. This is a temporary setting for development purposes.\n // const force = true;\n\n // If addpage is called without options, add default flags -LPl\n if (args[0] === \"addpage\" && args.length === 1) {\n args.push(\"-LPl\");\n }\n\n /**\n * Handle addcomponent command: create a component in the correct location and update translation JSON.\n */\n if (args[0] === \"addcomponent\") {\n addComponent(args);\n return;\n }\n\n /**\n * Handle addpage command: create a page (nested or not) and update translation JSON.\n */\n if (args[0] === \"addpage\") {\n addPage(args);\n return;\n }\n\n /**\n * Handle addlib command: scaffold a library folder and files.\n */\n if (args[0] === \"addlib\") {\n addLib(args);\n return;\n }\n\n /**\n * Handle addapi command: scaffold an API route.\n */\n if (args[0] === \"addapi\") {\n addApi(args);\n return;\n }\n\n /**\n * Handle rmpage command: remove a page and all related files/folders.\n */\n if (args[0] === \"rmpage\") {\n rmPage(args);\n return;\n }\n\n /**\n * Handle direct project creation if a name argument is provided.\n */\n const nameArg = args.find((arg) => !arg.startsWith(\"--\"));\n\n if (nameArg) {\n createProject(nameArg, force);\n return;\n }\n\n /**\n * Interactive prompt for project creation (not currently used, see note above).\n */\n await createProjectWithPrompt();\n}\n","import { join } from \"node:path\";\nimport { mkdir, readFile, writeFile, readdir } from \"node:fs/promises\";\nimport prompts from \"prompts\";\n\nimport { capitalize, loadConfig } from \"./utils\";\n\nimport { existsSync, statSync } from \"node:fs\";\n\nexport async function addComponent(args: string[]) {\n let componentName = args[1];\n let pageScope = null;\n let pageIndex = args.findIndex((arg) => arg === \"-P\" || arg === \"--page\");\n if (pageIndex !== -1 && args[pageIndex + 1]) {\n pageScope = args[pageIndex + 1];\n }\n\n // Handle nested pageScope (e.g. ParentPage.ChildPage)\n let nestedPath = null;\n if (pageScope && pageScope.includes(\".\")) {\n nestedPath = join(...pageScope.split(\".\"));\n }\n\n if (!componentName || componentName.startsWith(\"-\")) {\n // Si le nom n'est pas fourni ou est une option, demander via prompt\n const response = await prompts.prompt({\n type: \"text\",\n name: \"componentName\",\n message: \"🧩 Component name to add:\",\n validate: (name: string) => (name ? true : \"Component name is required\"),\n });\n componentName = response.componentName;\n }\n\n const config = await loadConfig();\n if (!config) {\n console.error(\n \"❌ Configuration file cnp.config.json not found. Run this command from the project root.\",\n );\n return;\n }\n const useI18n = !!config.useI18n;\n\n const componentNameUpper = capitalize(componentName);\n const templatePath = join(\n new URL(\"..\", import.meta.url).pathname,\n \"templates\",\n \"Component\",\n );\n let messagesPath: string | null = null;\n if (useI18n) {\n messagesPath = join(process.cwd(), \"messages\");\n if (!existsSync(messagesPath)) {\n console.error(\n \"❌ Messages directory missing. Ensure i18n was configured.\",\n );\n return;\n }\n }\n\n // Determine target path for the component\n let componentTargetPath;\n let translationKey;\n if (pageScope) {\n if (nestedPath) {\n componentTargetPath = join(process.cwd(), \"src\", \"ui\", nestedPath);\n translationKey = pageScope;\n } else {\n componentTargetPath = join(process.cwd(), \"src\", \"ui\", pageScope);\n translationKey = pageScope;\n }\n } else {\n componentTargetPath = join(process.cwd(), \"src\", \"ui\", \"_global\");\n translationKey = \"_global_ui\";\n }\n if (!existsSync(componentTargetPath)) {\n await mkdir(componentTargetPath, { recursive: true });\n }\n const componentFile = join(componentTargetPath, `${componentNameUpper}.tsx`);\n\n // Read and adapt the TSX template\n const templateComponentPath = join(templatePath, \"Component.tsx\");\n if (existsSync(templateComponentPath)) {\n let content = await readFile(templateComponentPath, \"utf-8\");\n // Remplacement du nom du component et de la clé de traduction\n content = content\n .replace(/Component/g, componentNameUpper)\n .replace(/componentPage/g, translationKey);\n await writeFile(componentFile, content);\n console.log(`📄 File created: ${componentFile}`);\n } else {\n console.error(\n \"❌ Template Component.tsx introuvable :\",\n templateComponentPath,\n );\n }\n\n if (useI18n && messagesPath) {\n const entries = await readdir(messagesPath, { withFileTypes: true });\n const langDirs = entries.filter((e) => e.isDirectory()).map((e) => e.name);\n const jsonTemplate = join(templatePath, \"component.json\");\n if (!existsSync(jsonTemplate)) {\n console.error(\"❌ Template component.json not found:\", jsonTemplate);\n return;\n }\n const jsonContent = await readFile(jsonTemplate, \"utf-8\");\n const parsed = JSON.parse(jsonContent);\n\n for (const locale of langDirs) {\n // Only process if messages/<locale> is a directory\n const localeDir = join(messagesPath, locale);\n if (!existsSync(localeDir) || !statSync(localeDir).isDirectory())\n continue;\n let jsonTarget;\n if (pageScope) {\n jsonTarget = join(messagesPath, locale, `${pageScope}.json`);\n } else {\n jsonTarget = join(messagesPath, locale, `_global_ui.json`);\n }\n\n let current: Record<string, any> = {};\n if (existsSync(jsonTarget)) {\n const jsonFile = await readFile(jsonTarget, \"utf-8\");\n current = JSON.parse(jsonFile) as Record<string, any>;\n }\n current[componentNameUpper] = parsed;\n await writeFile(jsonTarget, JSON.stringify(current, null, 2));\n }\n } else {\n console.log(\"ℹ️ Skipping translation entries; next-intl not enabled.\");\n }\n\n console.log(\n `✅ Component \"${componentNameUpper}\" added ${\n pageScope ? `to page ${pageScope}` : \"globally\"\n }${useI18n ? \" with localized messages\" : \"\"}.`,\n );\n}\n","import { readFile } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\n/**\n * Capitalize the first letter of a string.\n */\nexport function capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nexport interface CNPConfig {\n useI18n?: boolean;\n [key: string]: any;\n}\n\n/**\n * Load CLI configuration from the project root.\n * Returns null if the configuration file is missing or invalid.\n */\nexport async function loadConfig(): Promise<CNPConfig | null> {\n const configPath = join(process.cwd(), \"cnp.config.json\");\n if (!existsSync(configPath)) return null;\n try {\n const raw = await readFile(configPath, \"utf-8\");\n return JSON.parse(raw) as CNPConfig;\n } catch {\n return null;\n }\n}\n\n/**\n * Map a key to its corresponding file name for page/component templates.\n * @param key string\n * @returns file name string\n */\nexport function toFileName(key: string): string {\n switch (key) {\n case \"layout\":\n return \"layout.tsx\";\n case \"page\":\n return \"page.tsx\";\n case \"loading\":\n return \"loading.tsx\";\n case \"not-found\":\n return \"not-found.tsx\";\n case \"error\":\n return \"error.tsx\";\n case \"global-error\":\n return \"global-error.tsx\";\n case \"route\":\n return \"route.ts\";\n case \"template\":\n return \"template.tsx\";\n case \"default\":\n return \"default.tsx\";\n default:\n return `${key}.tsx`;\n }\n}\n","import { join } from \"node:path\";\nimport { mkdir, readFile, writeFile, readdir } from \"node:fs/promises\";\nimport prompts from \"prompts\";\n\nimport { capitalize, toFileName, loadConfig } from \"./utils\";\n\nimport { existsSync, statSync } from \"node:fs\";\n\nexport async function addPage(args: string[]) {\n let pageName = args[1];\n if (!pageName || pageName.startsWith(\"-\")) {\n const response = await prompts.prompt({\n type: \"text\",\n name: \"pageName\",\n message: \"📝 Page name to add:\",\n validate: (name: string) => (name ? true : \"Page name is required\"),\n });\n pageName = response.pageName;\n }\n\n // Handle nested pages\n let parentName = null;\n let childName = null;\n if (pageName.includes(\".\")) {\n [parentName, childName] = pageName.split(\".\");\n }\n\n let shortFlags = args.find((arg) => /^-[A-Za-z]+$/.test(arg));\n let longFlags = new Set(args.filter((a) => a.startsWith(\"--\")));\n const flags = new Set<string>();\n\n if (!shortFlags && Array.from(longFlags).length === 0) {\n shortFlags = \"-LPl\";\n }\n\n if (shortFlags) {\n for (const char of shortFlags.slice(1)) {\n switch (char) {\n case \"L\":\n flags.add(\"layout\");\n break;\n case \"P\":\n flags.add(\"page\");\n break;\n case \"l\":\n flags.add(\"loading\");\n break;\n case \"n\":\n flags.add(\"not-found\");\n break;\n case \"e\":\n flags.add(\"error\");\n break;\n case \"g\":\n flags.add(\"global-error\");\n break;\n case \"r\":\n flags.add(\"route\");\n break;\n case \"t\":\n flags.add(\"template\");\n break;\n case \"d\":\n flags.add(\"default\");\n break;\n }\n }\n }\n\n for (const flag of [\n \"layout\",\n \"page\",\n \"loading\",\n \"not-found\",\n \"error\",\n \"global-error\",\n \"route\",\n \"template\",\n \"default\",\n ]) {\n if (longFlags.has(\"--\" + flag)) flags.add(flag);\n }\n\n const config = await loadConfig();\n if (!config) {\n console.error(\n \"❌ Configuration file cnp.config.json not found. Run this command from the project root.\",\n );\n return;\n }\n const useI18n = !!config.useI18n;\n\n const srcSegments = [\"src\", \"app\"];\n if (useI18n) srcSegments.push(\"[locale]\");\n const srcPath = join(process.cwd(), ...srcSegments);\n if (!existsSync(srcPath)) {\n console.error(`❌ Expected directory not found: ${srcPath}`);\n return;\n }\n\n let messagesPath: string | null = null;\n let locales: string[] = [];\n if (useI18n) {\n messagesPath = join(process.cwd(), \"messages\");\n if (!existsSync(messagesPath)) {\n console.error(\n \"❌ Messages directory missing. Ensure i18n was configured.\",\n );\n return;\n }\n const entries = await readdir(messagesPath, { withFileTypes: true });\n locales = entries.filter((e) => e.isDirectory()).map((e) => e.name);\n }\n\n const templatePath = join(\n new URL(\"..\", import.meta.url).pathname,\n \"templates\",\n \"Page\",\n );\n\n // Create folders/files for nested or simple page\n let uiPageDir, localePagePath, jsonFileName;\n if (parentName && childName) {\n uiPageDir = join(process.cwd(), \"src\", \"ui\", parentName, childName);\n localePagePath = join(srcPath, parentName, childName);\n jsonFileName = parentName;\n } else {\n uiPageDir = join(process.cwd(), \"src\", \"ui\", pageName);\n localePagePath = join(srcPath, pageName);\n jsonFileName = pageName;\n }\n if (!existsSync(uiPageDir)) {\n await mkdir(uiPageDir, { recursive: true });\n }\n const uiPageFile = join(uiPageDir, \"page-ui.tsx\");\n const uiPageTemplate = join(templatePath, \"page-ui.tsx\");\n if (existsSync(uiPageTemplate)) {\n let uiContent = await readFile(uiPageTemplate, \"utf-8\");\n uiContent = uiContent\n .replace(/template/g, childName || pageName)\n .replace(/Template/g, capitalize(childName || pageName));\n await writeFile(uiPageFile, uiContent);\n console.log(`📄 File created: ${uiPageFile}`);\n } else {\n console.warn(\n \"⚠️ Missing template file: page-ui.tsx at path:\",\n uiPageTemplate,\n );\n }\n if (!existsSync(localePagePath)) {\n await mkdir(localePagePath, { recursive: true });\n }\n for (const flag of flags) {\n const filename = toFileName(flag);\n const src = join(templatePath, filename);\n const dst = join(localePagePath, filename);\n if (!existsSync(src)) {\n console.warn(`⚠️ Missing template file: ${filename} at path: ${src}`);\n continue;\n }\n const content = await readFile(src, \"utf-8\");\n const replaced = content\n .replace(/template/g, childName || pageName)\n .replace(/Template/g, capitalize(childName || pageName));\n await writeFile(dst, replaced);\n console.log(`📄 File created: ${dst}`);\n }\n\n if (useI18n && messagesPath) {\n const jsonTemplate = join(templatePath, \"page.json\");\n if (!existsSync(jsonTemplate)) {\n console.warn(\"⚠️ Missing template: page.json at path:\", jsonTemplate);\n } else {\n const content = await readFile(jsonTemplate, \"utf-8\");\n const replaced = content\n .replace(/template/g, childName || pageName)\n .replace(/Template/g, capitalize(childName || pageName));\n for (const locale of locales) {\n // Only process if messages/<locale> is a directory\n const localeDir = join(messagesPath, locale);\n if (!existsSync(localeDir) || !statSync(localeDir).isDirectory())\n continue;\n const jsonTarget = join(messagesPath, locale, `${jsonFileName}.json`);\n let current: Record<string, any> = {};\n if (existsSync(jsonTarget)) {\n const jsonFile = await readFile(jsonTarget, \"utf-8\");\n try {\n current = JSON.parse(jsonFile) as Record<string, any>;\n } catch {\n current = {};\n }\n }\n if (parentName && childName) {\n current[childName] = JSON.parse(replaced);\n } else {\n // fichier simple\n current = JSON.parse(replaced);\n }\n await writeFile(jsonTarget, JSON.stringify(current, null, 2));\n }\n }\n } else {\n console.log(\"ℹ️ Skipping translation templates; next-intl not enabled.\");\n }\n\n console.log(\n `✅ Page \"${pageName}\" with templates added${\n useI18n ? \" for each locale\" : \"\"\n }.`,\n );\n}\n","import { join } from \"node:path\";\nimport { writeFile, readdir } from \"node:fs/promises\";\nimport prompts from \"prompts\";\nimport { existsSync } from \"node:fs\";\n\nexport async function rmPage(args: string[]) {\n let pageName = args[1];\n if (!pageName || pageName.startsWith(\"-\")) {\n const response = await prompts.prompt({\n type: \"text\",\n name: \"pageName\",\n message: \"🗑️ Page name to remove:\",\n validate: (name: string) => (name ? true : \"Page name is required\"),\n });\n pageName = response.pageName;\n }\n\n // Remove translation files messages/<lang>/<PageName>.json\n const messagesPath = join(process.cwd(), \"messages\"); // No template path used here, so no change needed\n const entries = await readdir(messagesPath, { withFileTypes: true });\n const langDirs = entries.filter((e) => e.isDirectory()).map((e) => e.name);\n for (const locale of langDirs) {\n const jsonTarget = join(messagesPath, locale, `${pageName}.json`);\n if (existsSync(jsonTarget)) {\n await writeFile(jsonTarget, \"\");\n await import(\"node:child_process\").then((cp) =>\n cp.execSync(`rm -f '${jsonTarget}'`),\n );\n console.log(`🗑️ Deleted: ${jsonTarget}`);\n }\n }\n\n // Remove folder src/ui/<PageName>\n const uiPageDir = join(process.cwd(), \"src\", \"ui\", pageName);\n if (existsSync(uiPageDir)) {\n await import(\"node:child_process\").then((cp) =>\n cp.execSync(`rm -rf '${uiPageDir}'`),\n );\n console.log(`🗑️ Deleted: ${uiPageDir}`);\n }\n\n // Remove folder src/app/[locale]/<PageName>\n const appLocaleDir = join(process.cwd(), \"src\", \"app\", \"[locale]\", pageName);\n if (existsSync(appLocaleDir)) {\n await import(\"node:child_process\").then((cp) =>\n cp.execSync(`rm -rf '${appLocaleDir}'`),\n );\n console.log(`🗑️ Deleted: ${appLocaleDir}`);\n }\n\n console.log(`✅ Page \"${pageName}\" deleted.`);\n}\n","import { join } from \"node:path\";\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport prompts from \"prompts\";\nimport { existsSync } from \"node:fs\";\n\nimport { loadConfig, capitalize } from \"./utils\";\n\nexport async function addLib(args: string[]) {\n let libArg = args[1];\n if (!libArg || libArg.startsWith(\"-\")) {\n const response = await prompts.prompt({\n type: \"text\",\n name: \"libArg\",\n message: \"📦 Lib name to add:\",\n validate: (name: string) => (name ? true : \"Lib name is required\"),\n });\n libArg = response.libArg;\n }\n\n let libName = libArg;\n let fileName: string | null = null;\n if (libArg.includes(\".\")) {\n [libName, fileName] = libArg.split(\".\");\n }\n\n const config = await loadConfig();\n if (!config) {\n console.error(\n \"❌ Configuration file cnp.config.json not found. Run this command from the project root.\",\n );\n return;\n }\n\n const libDir = join(process.cwd(), \"src\", \"lib\", libName);\n if (!existsSync(libDir)) {\n await mkdir(libDir, { recursive: true });\n }\n\n const templateDir = join(\n new URL(\"..\", import.meta.url).pathname,\n \"templates\",\n \"Lib\",\n );\n const indexTemplate = join(templateDir, \"index.ts\");\n const fileTemplate = join(templateDir, \"item.ts\");\n\n const indexPath = join(libDir, \"index.ts\");\n if (!existsSync(indexPath)) {\n if (existsSync(indexTemplate)) {\n const content = await readFile(indexTemplate, \"utf-8\");\n await writeFile(indexPath, content);\n } else {\n await writeFile(indexPath, \"export {}\\n\");\n }\n console.log(`📄 File created: ${indexPath}`);\n }\n\n if (fileName) {\n const filePath = join(libDir, `${fileName}.ts`);\n if (!existsSync(filePath)) {\n if (existsSync(fileTemplate)) {\n let content = await readFile(fileTemplate, \"utf-8\");\n content = content\n .replace(/template/g, fileName)\n .replace(/Template/g, capitalize(fileName));\n await writeFile(filePath, content);\n } else {\n await writeFile(\n filePath,\n `export function ${fileName}() {\\n // TODO: implement\\n}\\n`,\n );\n }\n console.log(`📄 File created: ${filePath}`);\n }\n\n let indexContent = await readFile(indexPath, \"utf-8\");\n const importLine = `import { ${fileName} } from \"./${fileName}\";`;\n const importRegex = new RegExp(\n `import\\\\s*{\\\\s*${fileName}\\\\s*}\\\\s*from\\\\s*\"\\\\./${fileName}\";`,\n );\n const exportRegex = /export\\s*{([^}]*)}/m;\n\n const imports: string[] = [];\n const exportsSet: string[] = [];\n for (const line of indexContent.split(\"\\n\")) {\n if (line.startsWith(\"import\")) {\n imports.push(line);\n } else if (line.startsWith(\"export\")) {\n const match = line.match(exportRegex);\n if (match && match[1]) {\n exportsSet.push(\n ...match[1]\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean),\n );\n }\n }\n }\n\n if (!imports.some((l) => importRegex.test(l))) {\n imports.push(importLine);\n }\n if (!exportsSet.includes(fileName)) {\n exportsSet.push(fileName);\n }\n\n indexContent =\n imports.join(\"\\n\") + \"\\n\\nexport { \" + exportsSet.join(\", \") + \" };\\n\";\n await writeFile(indexPath, indexContent);\n console.log(`✏️ Updated index: ${indexPath}`);\n }\n\n console.log(\n `✅ Lib \"${libName}\"${fileName ? ` with module ${fileName}` : \"\"} added.`,\n );\n}\n","import { join } from \"node:path\";\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport prompts from \"prompts\";\nimport { existsSync } from \"node:fs\";\n\nimport { loadConfig } from \"./utils\";\n\nexport async function addApi(args: string[]) {\n let apiName = args[1];\n if (!apiName || apiName.startsWith(\"-\")) {\n const response = await prompts.prompt({\n type: \"text\",\n name: \"apiName\",\n message: \"🔌 API route name to add:\",\n validate: (name: string) => (name ? true : \"API route name is required\"),\n });\n apiName = response.apiName;\n }\n\n const config = await loadConfig();\n if (!config) {\n console.error(\n \"❌ Configuration file cnp.config.json not found. Run this command from the project root.\",\n );\n return;\n }\n\n const apiDir = join(process.cwd(), \"src\", \"app\", \"api\", apiName);\n if (!existsSync(apiDir)) {\n await mkdir(apiDir, { recursive: true });\n }\n\n const templateDir = join(\n new URL(\"..\", import.meta.url).pathname,\n \"templates\",\n \"Api\",\n );\n const routeTemplate = join(templateDir, \"route.ts\");\n const routePath = join(apiDir, \"route.ts\");\n\n if (!existsSync(routePath)) {\n if (existsSync(routeTemplate)) {\n let content = await readFile(routeTemplate, \"utf-8\");\n content = content.replace(/template/g, apiName);\n await writeFile(routePath, content);\n } else {\n await writeFile(\n routePath,\n `import { NextResponse } from \\\"next/server\\\";\\n\\nexport async function GET() {\\n return NextResponse.json({ message: \\\"Hello from ${apiName}\\\" });\\n}\\n`,\n );\n }\n console.log(`📄 File created: ${routePath}`);\n } else {\n console.log(`ℹ️ File already exists: ${routePath}`);\n }\n\n console.log(`✅ API route \"${apiName}\" added.`);\n}\n","// src/scaffold.ts\n\nimport { cp, mkdir, rm, writeFile, readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { existsSync } from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\nimport { red, green, yellow, blue, cyan } from \"./lib/helper/consoleColor\";\n\n/**\n * Options for scaffolding a Next.js project.\n */\ninterface ScaffoldOptions {\n projectName: string;\n useTypescript: boolean;\n useEslint: boolean;\n useTailwind: boolean;\n useSrcDir: boolean;\n useTurbopack: boolean;\n useI18n: boolean;\n customAlias: boolean;\n importAlias: string;\n force?: boolean;\n}\n\n/**\n * Scaffold a new Next.js project based on provided options.\n *\n * - Copies the default template to the target directory\n * - Removes the target directory if it exists and --force is set\n * - Optionally customizes the structure in future (e.g. remove unused files)\n *\n * @param options ScaffoldOptions for the project\n */\nexport async function scaffoldProject(options: ScaffoldOptions) {\n const targetPath = join(process.cwd(), options.projectName);\n\n const __dirname = new URL(\".\", import.meta.url); // or :\n // const __dirname = path.dirname(fileURLToPath(import.meta.url));\n const templatePath = join(\n fileURLToPath(__dirname),\n \"..\",\n \"templates\",\n \"Projects\",\n \"default\",\n );\n\n // Check if target directory exists\n if (existsSync(targetPath)) {\n if (options.force) {\n console.warn(\"⚠️ Target directory already exists, removing...\");\n await rm(targetPath, { recursive: true, force: true });\n } else {\n console.error(\n red(\"[X] Target directory already exists. Use --force to overwrite.\"),\n );\n process.exit(1);\n }\n }\n\n try {\n console.log(\"Creating project directory...\");\n await mkdir(targetPath, { recursive: true });\n\n console.log(\"Copying files from template...\");\n await cp(templatePath, targetPath, { recursive: true });\n\n // Apply configuration: add dependencies or files based on prompt choices\n const pkgPath = join(targetPath, \"package.json\");\n if (existsSync(pkgPath)) {\n const pkg = JSON.parse(await readFile(pkgPath, \"utf-8\"));\n pkg.dependencies = pkg.dependencies || {};\n if (options.useI18n) {\n pkg.dependencies[\"next-intl\"] =\n pkg.dependencies[\"next-intl\"] || \"^4.3.5\";\n }\n await writeFile(pkgPath, JSON.stringify(pkg, null, 2));\n }\n\n // Write CLI configuration to project root\n await writeFile(\n join(targetPath, \"cnp.config.json\"),\n JSON.stringify(options, null, 2),\n );\n\n console.log(\"Project setup complete!\");\n console.log(\"\");\n console.log(\"To get started:\");\n console.log(\" \" + green(`cd ${options.projectName}`));\n console.log(\"\");\n console.log(\n \"Then install dependencies and launch the dev server with your preferred tool:\",\n );\n\n console.log(\" \" + green(`bun install && bun dev`));\n console.log(\" \" + green(`npm install && npm run dev`));\n console.log(\" \" + green(`pnpm install && pnpm run dev`));\n console.log(\"\");\n console.log(\"Documentation and examples can be found at:\");\n console.log(\n \" \" +\n cyan(\"https://github.com/Rising-Corporation/create-next-pro-cli\"),\n );\n console.log(\n \"_-`'-_-'`_`'-_-'`_`'-_-'`_`'-_-'`_`'-_-'`_`'-_-'`_`'-_-'`_`'-_-'`-_\",\n );\n } catch (err) {\n // Affiche une croix ASCII et le texte en rouge si le terminal le supporte\n\n console.error(red(\"[X] Error during project creation:\"), err);\n process.exit(1);\n }\n}\n","const RED = \"\\x1b[31m\";\nconst GREEN = \"\\x1b[32m\";\nconst YELLOW = \"\\x1b[33m\";\nconst BLUE = \"\\x1b[34m\";\nconst CYAN = \"\\x1b[36m\";\nconst RESET = \"\\x1b[0m\";\n\nexport function red(text: string) {\n return RED + text + RESET;\n}\nexport function green(text: string) {\n return GREEN + text + RESET;\n}\nexport function yellow(text: string) {\n return YELLOW + text + RESET;\n}\nexport function blue(text: string) {\n return BLUE + text + RESET;\n}\nexport function cyan(text: string) {\n return CYAN + text + RESET;\n}\n","import { scaffoldProject } from \"../scaffold\";\nexport async function createProject(nameArg: string, force: boolean) {\n const response = {\n projectName: nameArg,\n useTypescript: true,\n useEslint: true,\n useTailwind: true,\n useSrcDir: true,\n useTurbopack: true,\n useI18n: true,\n customAlias: true,\n importAlias: \"@/*\",\n force,\n };\n\n console.log(`Creating project \"${response.projectName}\"...`);\n await scaffoldProject(response);\n}\n","import { scaffoldProject } from \"../scaffold\";\nimport prompts from \"prompts\";\nexport async function createProjectWithPrompt() {\n const response = await prompts.prompt([\n {\n type: \"text\",\n name: \"projectName\",\n message: \"Project name:\",\n initial: \"my-next-app\",\n },\n {\n type: \"toggle\",\n name: \"useTypescript\",\n message: \"✔ Use TypeScript?\",\n initial: true,\n active: \"Yes\",\n inactive: \"No\",\n },\n {\n type: \"toggle\",\n name: \"useEslint\",\n message: \"✔ Use ESLint?\",\n initial: true,\n active: \"Yes\",\n inactive: \"No\",\n },\n {\n type: \"toggle\",\n name: \"useTailwind\",\n message: \"✔ Use Tailwind CSS?\",\n initial: true,\n active: \"Yes\",\n inactive: \"No\",\n },\n {\n type: \"toggle\",\n name: \"useSrcDir\",\n message: \"✔ Use `src/` directory?\",\n initial: true,\n active: \"Yes\",\n inactive: \"No\",\n },\n {\n type: \"toggle\",\n name: \"useTurbopack\",\n message: \"✔ Use Turbopack for `next dev`?\",\n initial: true,\n active: \"Yes\",\n inactive: \"No\",\n },\n {\n type: \"toggle\",\n name: \"useI18n\",\n message: \"✔ Use i18n with next-intl for translations?\",\n initial: true,\n active: \"Yes\",\n inactive: \"No\",\n },\n {\n type: \"toggle\",\n name: \"customAlias\",\n message: \"✔ Customize import alias (`@/*` by default)?\",\n initial: true,\n active: \"Yes\",\n inactive: \"No\",\n },\n {\n type: (prev: boolean) => (prev ? \"text\" : null),\n name: \"importAlias\",\n message: \"✔ What import alias would you like?\",\n initial: \"@core/*\",\n },\n ]);\n\n console.log(\"\\nYour choices:\");\n console.log(response);\n\n await scaffoldProject(response);\n}\n","#!/usr/bin/env node\nimport { main } from \"./src/index\";\nmain();\n"],"mappings":"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","names":["prompts","fileURLToPath","join","readFile","existsSync","join","readFile","join","mkdir","readFile","writeFile","readdir","prompts","existsSync","statSync","prompts","join","readdir","mkdir","readFile","writeFile","join","writeFile","readdir","prompts","existsSync","cp","join","mkdir","readFile","writeFile","prompts","existsSync","prompts","join","existsSync","mkdir","readFile","writeFile","join","mkdir","readFile","writeFile","prompts","existsSync","prompts","join","existsSync","mkdir","readFile","writeFile","mkdir","writeFile","readFile","join","existsSync","join","__dirname","existsSync","mkdir","readFile","writeFile","prompts","__dirname","fileURLToPath","prompts"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/lib/addComponent.ts","../src/lib/utils.ts","../src/lib/addPage.ts","../src/lib/rmPage.ts","../src/lib/addLib.ts","../src/lib/addApi.ts","../src/scaffold.ts","../src/lib/helper/consoleColor.ts","../src/lib/createProject.ts","../src/lib/createProjectWithPrompt.ts","../src/lib/addLanguage.ts","../src/lib/addText.ts","../bin.node.ts"],"sourcesContent":["// src/index.ts\n\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport prompts from \"prompts\";\nimport { fileURLToPath } from \"node:url\";\nimport { dirname, resolve } from \"node:path\";\n\nimport { addComponent } from \"./lib/addComponent\";\nimport { addPage } from \"./lib/addPage\";\nimport { rmPage } from \"./lib/rmPage\";\nimport { addLib } from \"./lib/addLib\";\nimport { addApi } from \"./lib/addApi\";\nimport { createProject } from \"./lib/createProject\";\nimport { createProjectWithPrompt } from \"./lib/createProjectWithPrompt\";\nimport { addLanguage } from \"./lib/addLanguage\";\nimport { addText } from \"./lib/addText\";\n\ntype Cfg = {\n version: 1;\n shell: \"bash\" | \"zsh\";\n completionInstalled: boolean;\n createdAt: string;\n updatedAt: string;\n};\n\nconst CONFIG_DIR = process.env.XDG_CONFIG_HOME\n ? path.join(process.env.XDG_CONFIG_HOME, \"create-next-pro\")\n : path.join(os.homedir(), \".config\", \"create-next-pro\");\nconst CONFIG_FILE = path.join(CONFIG_DIR, \"config.json\");\n\nfunction readCfg(): Cfg | null {\n try {\n return JSON.parse(fs.readFileSync(CONFIG_FILE, \"utf8\")) as Cfg;\n } catch {\n return null;\n }\n}\nfunction writeCfg(cfg: Cfg) {\n fs.mkdirSync(CONFIG_DIR, { recursive: true });\n fs.writeFileSync(CONFIG_FILE, JSON.stringify(cfg, null, 2));\n}\nfunction rcFile(shell: \"bash\" | \"zsh\") {\n return path.join(os.homedir(), shell === \"zsh\" ? \".zshrc\" : \".bashrc\");\n}\nfunction ensureLineInRc(file: string, line: string) {\n try {\n const cur = fs.existsSync(file) ? fs.readFileSync(file, \"utf8\") : \"\";\n if (!cur.includes(line)) fs.appendFileSync(file, `\\n${line}\\n`);\n } catch {\n /* ignore */\n }\n}\nasync function installCompletion(shell: \"bash\" | \"zsh\") {\n // read script from package\n const __dirname = path.dirname(fileURLToPath(import.meta.url));\n const completionSrc = path.resolve(\n __dirname,\n \"../create-next-pro-completion.sh\",\n );\n const completionDst = path.join(CONFIG_DIR, \"completion.sh\");\n fs.mkdirSync(CONFIG_DIR, { recursive: true });\n fs.copyFileSync(completionSrc, completionDst);\n ensureLineInRc(rcFile(shell), `source \"${completionDst}\"`);\n}\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\nconst packageJsonPath = resolve(__dirname, \"../package.json\");\nconst packageJson = fs.readFileSync(packageJsonPath, \"utf8\");\n\nasync function onboarding(): Promise<Cfg> {\n const pkg = JSON.parse(packageJson);\n console.log(`🚀 Welcome to create-next-pro v${pkg.version}\\n`);\n const res = await prompts(\n [\n {\n type: \"select\",\n name: \"shell\",\n message: \"Which shell do you use?\",\n choices: [\n { title: \"zsh\", value: \"zsh\" },\n { title: \"bash\", value: \"bash\" },\n ],\n initial: (os.userInfo().shell || \"\").includes(\"zsh\") ? 0 : 1,\n },\n {\n type: \"toggle\",\n name: \"completion\",\n message: \"Install autocompletion?\",\n initial: true,\n active: \"Yes\",\n inactive: \"No\",\n },\n ],\n { onCancel: () => process.exit(1) },\n );\n\n const cfg: Cfg = {\n version: 1,\n shell: res.shell,\n completionInstalled: !!res.completion,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n };\n if (cfg.completionInstalled) await installCompletion(cfg.shell);\n writeCfg(cfg);\n console.log(\"\\n✅ Configuration saved.\");\n console.log(\"you can now use the CLI ! ex : \");\n console.log(\" Without prompt (will change in future) :\");\n console.log(\" create-next-pro my-next-project\");\n console.log(\" With prompt :\");\n console.log(\" create-next-pro\");\n console.log(\n \"For more information, visit: https://github.com/Rising-Corporation/create-next-pro-cli\",\n );\n console.log(\"Happy coding! 🎉\");\n return cfg;\n}\nfunction showHelp() {\n console.log(`create-next-pro\n\nUsage:\n create-next-pro <project-name> [--force]\n create-next-pro addpage [options]\n create-next-pro addcomponent [options]\n create-next-pro addlib [name]\n create-next-pro addapi [name]\n create-next-pro addlanguage [locale]\n create-next-pro addtext <path> [text]\n create-next-pro rmpage [options]\n\nOptions:\n --help Show this help message\n --reconfigure Run the configuration assistant again\n`);\n}\n\nfunction showVersion() {\n const pkg = JSON.parse(packageJson);\n console.log(`v${pkg.version}`);\n}\n\n/**\n * Main CLI entry point for create-next-pro.\n *\n * Note: For now, the project behaves as if --force is always enabled and no creation prompt is taken into account.\n * All actions are performed directly without confirmation.\n */\nexport async function main() {\n let args: string[];\n if (typeof Bun !== \"undefined\") {\n args = Bun.argv.slice(2);\n } else if (typeof process !== \"undefined\" && process.argv) {\n args = process.argv.slice(2);\n } else {\n args = [];\n }\n\n if (args.includes(\"--help\")) return showHelp();\n if (args.includes(\"--version\") || args.includes(\"-v\")) return showVersion();\n if (args.includes(\"--reconfigure\") || !readCfg()) {\n await onboarding();\n return;\n }\n\n const force = args.includes(\"--force\");\n // For now, --force is always considered enabled but do not overwrite existing projects\n // WARNING: if you enable --force it will overwrite existing projects. This is a temporary setting for development purposes.\n // const force = true;\n\n // If addpage is called without options, add default flags -LPl\n if (args[0] === \"addpage\" && args.length === 1) {\n args.push(\"-LPl\");\n }\n\n /**\n * Handle addcomponent command: create a component in the correct location and update translation JSON.\n */\n if (args[0] === \"addcomponent\") {\n addComponent(args);\n return;\n }\n\n /**\n * Handle addpage command: create a page (nested or not) and update translation JSON.\n */\n if (args[0] === \"addpage\") {\n addPage(args);\n return;\n }\n\n /**\n * Handle addlib command: scaffold a library folder and files.\n */\n if (args[0] === \"addlib\") {\n addLib(args);\n return;\n }\n\n /**\n * Handle addapi command: scaffold an API route.\n */\n if (args[0] === \"addapi\") {\n addApi(args);\n return;\n }\n\n if (args[0] === \"addlanguage\") {\n await addLanguage(args);\n return;\n }\n\n if (args[0] === \"addtext\") {\n await addText(args);\n return;\n }\n\n /**\n * Handle rmpage command: remove a page and all related files/folders.\n */\n if (args[0] === \"rmpage\") {\n rmPage(args);\n return;\n }\n\n /**\n * Handle direct project creation if a name argument is provided.\n */\n const nameArg = args.find((arg) => !arg.startsWith(\"--\"));\n\n if (nameArg) {\n createProject(nameArg, force);\n return;\n }\n\n /**\n * Interactive prompt for project creation (not currently used, see note above).\n */\n await createProjectWithPrompt();\n}\n","import { join } from \"node:path\";\nimport { mkdir, readFile, writeFile, readdir } from \"node:fs/promises\";\nimport prompts from \"prompts\";\n\nimport { capitalize, loadConfig } from \"./utils\";\n\nimport { existsSync, statSync } from \"node:fs\";\n\nexport async function addComponent(args: string[]) {\n let componentName = args[1];\n let pageScope = null;\n let pageIndex = args.findIndex((arg) => arg === \"-P\" || arg === \"--page\");\n if (pageIndex !== -1 && args[pageIndex + 1]) {\n pageScope = args[pageIndex + 1];\n }\n\n // Handle nested pageScope (e.g. ParentPage.ChildPage)\n let nestedPath = null;\n if (pageScope && pageScope.includes(\".\")) {\n nestedPath = join(...pageScope.split(\".\"));\n }\n\n if (!componentName || componentName.startsWith(\"-\")) {\n // Si le nom n'est pas fourni ou est une option, demander via prompt\n const response = await prompts.prompt({\n type: \"text\",\n name: \"componentName\",\n message: \"🧩 Component name to add:\",\n validate: (name: string) => (name ? true : \"Component name is required\"),\n });\n componentName = response.componentName;\n }\n\n const config = await loadConfig();\n if (!config) {\n console.error(\n \"❌ Configuration file cnp.config.json not found. Run this command from the project root.\",\n );\n return;\n }\n const useI18n = !!config.useI18n;\n\n const componentNameUpper = capitalize(componentName);\n const templatePath = join(\n new URL(\"..\", import.meta.url).pathname,\n \"templates\",\n \"Component\",\n );\n let messagesPath: string | null = null;\n if (useI18n) {\n messagesPath = join(process.cwd(), \"messages\");\n if (!existsSync(messagesPath)) {\n console.error(\n \"❌ Messages directory missing. Ensure i18n was configured.\",\n );\n return;\n }\n }\n\n // Determine target path for the component\n let componentTargetPath;\n let translationKey;\n if (pageScope) {\n if (nestedPath) {\n componentTargetPath = join(process.cwd(), \"src\", \"ui\", nestedPath);\n translationKey = pageScope;\n } else {\n componentTargetPath = join(process.cwd(), \"src\", \"ui\", pageScope);\n translationKey = pageScope;\n }\n } else {\n componentTargetPath = join(process.cwd(), \"src\", \"ui\", \"_global\");\n translationKey = \"_global_ui\";\n }\n if (!existsSync(componentTargetPath)) {\n await mkdir(componentTargetPath, { recursive: true });\n }\n const componentFile = join(componentTargetPath, `${componentNameUpper}.tsx`);\n\n // Read and adapt the TSX template\n const templateComponentPath = join(templatePath, \"Component.tsx\");\n if (existsSync(templateComponentPath)) {\n let content = await readFile(templateComponentPath, \"utf-8\");\n // Remplacement du nom du component et de la clé de traduction\n content = content\n .replace(/Component/g, componentNameUpper)\n .replace(/componentPage/g, translationKey);\n await writeFile(componentFile, content);\n console.log(`📄 File created: ${componentFile}`);\n } else {\n console.error(\n \"❌ Template Component.tsx introuvable :\",\n templateComponentPath,\n );\n }\n\n if (useI18n && messagesPath) {\n const entries = await readdir(messagesPath, { withFileTypes: true });\n const langDirs = entries.filter((e) => e.isDirectory()).map((e) => e.name);\n const jsonTemplate = join(templatePath, \"component.json\");\n if (!existsSync(jsonTemplate)) {\n console.error(\"❌ Template component.json not found:\", jsonTemplate);\n return;\n }\n const jsonContent = await readFile(jsonTemplate, \"utf-8\");\n const parsed = JSON.parse(jsonContent);\n\n for (const locale of langDirs) {\n // Only process if messages/<locale> is a directory\n const localeDir = join(messagesPath, locale);\n if (!existsSync(localeDir) || !statSync(localeDir).isDirectory())\n continue;\n let jsonTarget;\n if (pageScope) {\n jsonTarget = join(messagesPath, locale, `${pageScope}.json`);\n } else {\n jsonTarget = join(messagesPath, locale, `_global_ui.json`);\n }\n\n let current: Record<string, any> = {};\n if (existsSync(jsonTarget)) {\n const jsonFile = await readFile(jsonTarget, \"utf-8\");\n current = JSON.parse(jsonFile) as Record<string, any>;\n }\n current[componentNameUpper] = parsed;\n await writeFile(jsonTarget, JSON.stringify(current, null, 2));\n console.log(`📄 File updated: ${jsonTarget}`);\n }\n } else {\n console.log(\"ℹ️ Skipping translation entries; next-intl not enabled.\");\n }\n\n console.log(\n `✅ Component \"${componentNameUpper}\" added ${\n pageScope ? `to page ${pageScope}` : \"globally\"\n }${useI18n ? \" with localized messages\" : \"\"}.`,\n );\n}\n","import { readFile } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\n/**\n * Capitalize the first letter of a string.\n */\nexport function capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nexport interface CNPConfig {\n useI18n?: boolean;\n [key: string]: any;\n}\n\n/**\n * Load CLI configuration from the project root.\n * Returns null if the configuration file is missing or invalid.\n */\nexport async function loadConfig(): Promise<CNPConfig | null> {\n const configPath = join(process.cwd(), \"cnp.config.json\");\n if (!existsSync(configPath)) return null;\n try {\n const raw = await readFile(configPath, \"utf-8\");\n return JSON.parse(raw) as CNPConfig;\n } catch {\n return null;\n }\n}\n\n/**\n * Map a key to its corresponding file name for page/component templates.\n * @param key string\n * @returns file name string\n */\nexport function toFileName(key: string): string {\n switch (key) {\n case \"layout\":\n return \"layout.tsx\";\n case \"page\":\n return \"page.tsx\";\n case \"loading\":\n return \"loading.tsx\";\n case \"not-found\":\n return \"not-found.tsx\";\n case \"error\":\n return \"error.tsx\";\n case \"global-error\":\n return \"global-error.tsx\";\n case \"route\":\n return \"route.ts\";\n case \"template\":\n return \"template.tsx\";\n case \"default\":\n return \"default.tsx\";\n default:\n return `${key}.tsx`;\n }\n}\n","import { join } from \"node:path\";\nimport { mkdir, readFile, writeFile, readdir } from \"node:fs/promises\";\nimport prompts from \"prompts\";\n\nimport { capitalize, toFileName, loadConfig } from \"./utils\";\n\nimport { existsSync, statSync } from \"node:fs\";\n\nexport async function addPage(args: string[]) {\n let pageName = args[1];\n if (!pageName || pageName.startsWith(\"-\")) {\n const response = await prompts.prompt({\n type: \"text\",\n name: \"pageName\",\n message: \"📝 Page name to add:\",\n validate: (name: string) => (name ? true : \"Page name is required\"),\n });\n pageName = response.pageName;\n }\n\n // Handle nested pages\n let parentName = null;\n let childName = null;\n if (pageName.includes(\".\")) {\n [parentName, childName] = pageName.split(\".\");\n }\n\n let shortFlags = args.find((arg) => /^-[A-Za-z]+$/.test(arg));\n let longFlags = new Set(args.filter((a) => a.startsWith(\"--\")));\n const flags = new Set<string>();\n\n if (!shortFlags && Array.from(longFlags).length === 0) {\n shortFlags = \"-LPl\";\n }\n\n if (shortFlags) {\n for (const char of shortFlags.slice(1)) {\n switch (char) {\n case \"L\":\n flags.add(\"layout\");\n break;\n case \"P\":\n flags.add(\"page\");\n break;\n case \"l\":\n flags.add(\"loading\");\n break;\n case \"n\":\n flags.add(\"not-found\");\n break;\n case \"e\":\n flags.add(\"error\");\n break;\n case \"g\":\n flags.add(\"global-error\");\n break;\n case \"r\":\n flags.add(\"route\");\n break;\n case \"t\":\n flags.add(\"template\");\n break;\n case \"d\":\n flags.add(\"default\");\n break;\n }\n }\n }\n\n for (const flag of [\n \"layout\",\n \"page\",\n \"loading\",\n \"not-found\",\n \"error\",\n \"global-error\",\n \"route\",\n \"template\",\n \"default\",\n ]) {\n if (longFlags.has(\"--\" + flag)) flags.add(flag);\n }\n\n const config = await loadConfig();\n if (!config) {\n console.error(\n \"❌ Configuration file cnp.config.json not found. Run this command from the project root.\",\n );\n return;\n }\n const useI18n = !!config.useI18n;\n\n const srcSegments = [\"src\", \"app\"];\n if (useI18n) srcSegments.push(\"[locale]\");\n const srcPath = join(process.cwd(), ...srcSegments);\n if (!existsSync(srcPath)) {\n console.error(`❌ Expected directory not found: ${srcPath}`);\n return;\n }\n\n let messagesPath: string | null = null;\n let locales: string[] = [];\n if (useI18n) {\n messagesPath = join(process.cwd(), \"messages\");\n if (!existsSync(messagesPath)) {\n console.error(\n \"❌ Messages directory missing. Ensure i18n was configured.\",\n );\n return;\n }\n const entries = await readdir(messagesPath, { withFileTypes: true });\n locales = entries.filter((e) => e.isDirectory()).map((e) => e.name);\n }\n\n const templatePath = join(\n new URL(\"..\", import.meta.url).pathname,\n \"templates\",\n \"Page\",\n );\n\n // Create folders/files for nested or simple page\n let uiPageDir, localePagePath, jsonFileName;\n if (parentName && childName) {\n uiPageDir = join(process.cwd(), \"src\", \"ui\", parentName, childName);\n localePagePath = join(srcPath, parentName, childName);\n jsonFileName = parentName;\n } else {\n uiPageDir = join(process.cwd(), \"src\", \"ui\", pageName);\n localePagePath = join(srcPath, pageName);\n jsonFileName = pageName;\n }\n if (!existsSync(uiPageDir)) {\n await mkdir(uiPageDir, { recursive: true });\n }\n const uiPageFile = join(uiPageDir, \"page-ui.tsx\");\n const uiPageTemplate = join(templatePath, \"page-ui.tsx\");\n if (existsSync(uiPageTemplate)) {\n let uiContent = await readFile(uiPageTemplate, \"utf-8\");\n uiContent = uiContent\n .replace(/template/g, childName || pageName)\n .replace(/Template/g, capitalize(childName || pageName));\n await writeFile(uiPageFile, uiContent);\n console.log(`📄 File created: ${uiPageFile}`);\n } else {\n console.warn(\n \"⚠️ Missing template file: page-ui.tsx at path:\",\n uiPageTemplate,\n );\n }\n if (!existsSync(localePagePath)) {\n await mkdir(localePagePath, { recursive: true });\n }\n for (const flag of flags) {\n const filename = toFileName(flag);\n const src = join(templatePath, filename);\n const dst = join(localePagePath, filename);\n if (!existsSync(src)) {\n console.warn(`⚠️ Missing template file: ${filename} at path: ${src}`);\n continue;\n }\n const content = await readFile(src, \"utf-8\");\n const replaced = content\n .replace(/template/g, childName || pageName)\n .replace(/Template/g, capitalize(childName || pageName));\n await writeFile(dst, replaced);\n console.log(`📄 File created: ${dst}`);\n }\n\n if (useI18n && messagesPath) {\n const jsonTemplate = join(templatePath, \"page.json\");\n if (!existsSync(jsonTemplate)) {\n console.warn(\"⚠️ Missing template: page.json at path:\", jsonTemplate);\n } else {\n const content = await readFile(jsonTemplate, \"utf-8\");\n const replaced = content\n .replace(/template/g, childName || pageName)\n .replace(/Template/g, capitalize(childName || pageName));\n for (const locale of locales) {\n // Only process if messages/<locale> is a directory\n const localeDir = join(messagesPath, locale);\n if (!existsSync(localeDir) || !statSync(localeDir).isDirectory())\n continue;\n const jsonTarget = join(messagesPath, locale, `${jsonFileName}.json`);\n let current: Record<string, any> = {};\n if (existsSync(jsonTarget)) {\n const jsonFile = await readFile(jsonTarget, \"utf-8\");\n try {\n current = JSON.parse(jsonFile) as Record<string, any>;\n } catch {\n current = {};\n }\n }\n if (parentName && childName) {\n current[childName] = JSON.parse(replaced);\n } else {\n // fichier simple\n current = JSON.parse(replaced);\n }\n await writeFile(jsonTarget, JSON.stringify(current, null, 2));\n console.log(`📄 File created: ${jsonTarget}`);\n }\n }\n } else {\n console.log(\"ℹ️ Skipping translation templates; next-intl not enabled.\");\n }\n\n console.log(\n `✅ Page \"${pageName}\" with templates added${\n useI18n ? \" for each locale\" : \"\"\n }.`,\n );\n}\n","import { join } from \"node:path\";\nimport { writeFile, readdir } from \"node:fs/promises\";\nimport prompts from \"prompts\";\nimport { existsSync } from \"node:fs\";\n\nexport async function rmPage(args: string[]) {\n let pageName = args[1];\n if (!pageName || pageName.startsWith(\"-\")) {\n const response = await prompts.prompt({\n type: \"text\",\n name: \"pageName\",\n message: \"🗑️ Page name to remove:\",\n validate: (name: string) => (name ? true : \"Page name is required\"),\n });\n pageName = response.pageName;\n }\n\n // Remove translation files messages/<lang>/<PageName>.json\n const messagesPath = join(process.cwd(), \"messages\"); // No template path used here, so no change needed\n const entries = await readdir(messagesPath, { withFileTypes: true });\n const langDirs = entries.filter((e) => e.isDirectory()).map((e) => e.name);\n for (const locale of langDirs) {\n const jsonTarget = join(messagesPath, locale, `${pageName}.json`);\n if (existsSync(jsonTarget)) {\n await writeFile(jsonTarget, \"\");\n await import(\"node:child_process\").then((cp) =>\n cp.execSync(`rm -f '${jsonTarget}'`),\n );\n console.log(`🗑️ Deleted: ${jsonTarget}`);\n }\n }\n\n // Remove folder src/ui/<PageName>\n const uiPageDir = join(process.cwd(), \"src\", \"ui\", pageName);\n if (existsSync(uiPageDir)) {\n await import(\"node:child_process\").then((cp) =>\n cp.execSync(`rm -rf '${uiPageDir}'`),\n );\n console.log(`🗑️ Deleted: ${uiPageDir}`);\n }\n\n // Remove folder src/app/[locale]/<PageName>\n const appLocaleDir = join(process.cwd(), \"src\", \"app\", \"[locale]\", pageName);\n if (existsSync(appLocaleDir)) {\n await import(\"node:child_process\").then((cp) =>\n cp.execSync(`rm -rf '${appLocaleDir}'`),\n );\n console.log(`🗑️ Deleted: ${appLocaleDir}`);\n }\n\n console.log(`✅ Page \"${pageName}\" deleted.`);\n}\n","import { join } from \"node:path\";\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport prompts from \"prompts\";\nimport { existsSync } from \"node:fs\";\n\nimport { loadConfig, capitalize } from \"./utils\";\n\nexport async function addLib(args: string[]) {\n let libArg = args[1];\n if (!libArg || libArg.startsWith(\"-\")) {\n const response = await prompts.prompt({\n type: \"text\",\n name: \"libArg\",\n message: \"📦 Lib name to add:\",\n validate: (name: string) => (name ? true : \"Lib name is required\"),\n });\n libArg = response.libArg;\n }\n\n let libName = libArg;\n let fileName: string | null = null;\n if (libArg.includes(\".\")) {\n [libName, fileName] = libArg.split(\".\");\n }\n\n const config = await loadConfig();\n if (!config) {\n console.error(\n \"❌ Configuration file cnp.config.json not found. Run this command from the project root.\",\n );\n return;\n }\n\n const libDir = join(process.cwd(), \"src\", \"lib\", libName);\n if (!existsSync(libDir)) {\n await mkdir(libDir, { recursive: true });\n }\n\n const templateDir = join(\n new URL(\"..\", import.meta.url).pathname,\n \"templates\",\n \"Lib\",\n );\n const indexTemplate = join(templateDir, \"index.ts\");\n const fileTemplate = join(templateDir, \"item.ts\");\n\n const indexPath = join(libDir, \"index.ts\");\n if (!existsSync(indexPath)) {\n if (existsSync(indexTemplate)) {\n const content = await readFile(indexTemplate, \"utf-8\");\n await writeFile(indexPath, content);\n } else {\n await writeFile(indexPath, \"export {}\\n\");\n }\n console.log(`📄 File created: ${indexPath}`);\n }\n\n if (fileName) {\n const filePath = join(libDir, `${fileName}.ts`);\n if (!existsSync(filePath)) {\n if (existsSync(fileTemplate)) {\n let content = await readFile(fileTemplate, \"utf-8\");\n content = content\n .replace(/template/g, fileName)\n .replace(/Template/g, capitalize(fileName));\n await writeFile(filePath, content);\n } else {\n await writeFile(\n filePath,\n `export function ${fileName}() {\\n // TODO: implement\\n}\\n`,\n );\n }\n console.log(`📄 File created: ${filePath}`);\n }\n\n let indexContent = await readFile(indexPath, \"utf-8\");\n const importLine = `import { ${fileName} } from \"./${fileName}\";`;\n const importRegex = new RegExp(\n `import\\\\s*{\\\\s*${fileName}\\\\s*}\\\\s*from\\\\s*\"\\\\./${fileName}\";`,\n );\n const exportRegex = /export\\s*{([^}]*)}/m;\n\n const imports: string[] = [];\n const exportsSet: string[] = [];\n for (const line of indexContent.split(\"\\n\")) {\n if (line.startsWith(\"import\")) {\n imports.push(line);\n } else if (line.startsWith(\"export\")) {\n const match = line.match(exportRegex);\n if (match && match[1]) {\n exportsSet.push(\n ...match[1]\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean),\n );\n }\n }\n }\n\n if (!imports.some((l) => importRegex.test(l))) {\n imports.push(importLine);\n }\n if (!exportsSet.includes(fileName)) {\n exportsSet.push(fileName);\n }\n\n indexContent =\n imports.join(\"\\n\") + \"\\n\\nexport { \" + exportsSet.join(\", \") + \" };\\n\";\n await writeFile(indexPath, indexContent);\n console.log(`✏️ Updated index: ${indexPath}`);\n }\n\n console.log(\n `✅ Lib \"${libName}\"${fileName ? ` with module ${fileName}` : \"\"} added.`,\n );\n}\n","import { join } from \"node:path\";\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport prompts from \"prompts\";\nimport { existsSync } from \"node:fs\";\n\nimport { loadConfig } from \"./utils\";\n\nexport async function addApi(args: string[]) {\n let apiName = args[1];\n if (!apiName || apiName.startsWith(\"-\")) {\n const response = await prompts.prompt({\n type: \"text\",\n name: \"apiName\",\n message: \"🔌 API route name to add:\",\n validate: (name: string) => (name ? true : \"API route name is required\"),\n });\n apiName = response.apiName;\n }\n\n const config = await loadConfig();\n if (!config) {\n console.error(\n \"❌ Configuration file cnp.config.json not found. Run this command from the project root.\",\n );\n return;\n }\n\n const apiDir = join(process.cwd(), \"src\", \"app\", \"api\", apiName);\n if (!existsSync(apiDir)) {\n await mkdir(apiDir, { recursive: true });\n }\n\n const templateDir = join(\n new URL(\"..\", import.meta.url).pathname,\n \"templates\",\n \"Api\",\n );\n const routeTemplate = join(templateDir, \"route.ts\");\n const routePath = join(apiDir, \"route.ts\");\n\n if (!existsSync(routePath)) {\n if (existsSync(routeTemplate)) {\n let content = await readFile(routeTemplate, \"utf-8\");\n content = content.replace(/template/g, apiName);\n await writeFile(routePath, content);\n } else {\n await writeFile(\n routePath,\n `import { NextResponse } from \\\"next/server\\\";\\n\\nexport async function GET() {\\n return NextResponse.json({ message: \\\"Hello from ${apiName}\\\" });\\n}\\n`,\n );\n }\n console.log(`📄 File created: ${routePath}`);\n } else {\n console.log(`ℹ️ File already exists: ${routePath}`);\n }\n\n console.log(`✅ API route \"${apiName}\" added.`);\n}\n","// src/scaffold.ts\n\nimport { cp, mkdir, rm, writeFile, readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { existsSync } from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\nimport { red, green, yellow, blue, cyan } from \"./lib/helper/consoleColor\";\n\n/**\n * Options for scaffolding a Next.js project.\n */\ninterface ScaffoldOptions {\n projectName: string;\n useTypescript: boolean;\n useEslint: boolean;\n useTailwind: boolean;\n useSrcDir: boolean;\n useTurbopack: boolean;\n useI18n: boolean;\n customAlias: boolean;\n importAlias: string;\n force?: boolean;\n}\n\n/**\n * Scaffold a new Next.js project based on provided options.\n *\n * - Copies the default template to the target directory\n * - Removes the target directory if it exists and --force is set\n * - Optionally customizes the structure in future (e.g. remove unused files)\n *\n * @param options ScaffoldOptions for the project\n */\nexport async function scaffoldProject(options: ScaffoldOptions) {\n const targetPath = join(process.cwd(), options.projectName);\n\n const __dirname = new URL(\".\", import.meta.url); // or :\n // const __dirname = path.dirname(fileURLToPath(import.meta.url));\n const templatePath = join(\n fileURLToPath(__dirname),\n \"..\",\n \"templates\",\n \"Projects\",\n \"default\",\n );\n\n // Check if target directory exists\n if (existsSync(targetPath)) {\n if (options.force) {\n console.warn(\"⚠️ Target directory already exists, removing...\");\n await rm(targetPath, { recursive: true, force: true });\n } else {\n console.error(\n red(\"[X] Target directory already exists. Use --force to overwrite.\"),\n );\n process.exit(1);\n }\n }\n\n try {\n console.log(\"Creating project directory...\");\n await mkdir(targetPath, { recursive: true });\n\n console.log(\"Copying files from template...\");\n await cp(templatePath, targetPath, { recursive: true });\n\n // Apply configuration: add dependencies or files based on prompt choices\n const pkgPath = join(targetPath, \"package.json\");\n if (existsSync(pkgPath)) {\n const pkg = JSON.parse(await readFile(pkgPath, \"utf-8\"));\n pkg.dependencies = pkg.dependencies || {};\n if (options.useI18n) {\n pkg.dependencies[\"next-intl\"] =\n pkg.dependencies[\"next-intl\"] || \"^4.3.5\";\n }\n await writeFile(pkgPath, JSON.stringify(pkg, null, 2));\n }\n\n // Write CLI configuration to project root\n await writeFile(\n join(targetPath, \"cnp.config.json\"),\n JSON.stringify(options, null, 2),\n );\n\n console.log(\"Project setup complete!\");\n console.log(\"\");\n console.log(\"To get started:\");\n console.log(\" \" + green(`cd ${options.projectName}`));\n console.log(\"\");\n console.log(\n \"Then install dependencies and launch the dev server with your preferred tool:\",\n );\n\n console.log(\" \" + green(`bun install && bun dev`));\n console.log(\" \" + green(`npm install && npm run dev`));\n console.log(\" \" + green(`pnpm install && pnpm run dev`));\n console.log(\"\");\n console.log(\"Documentation and examples can be found at:\");\n console.log(\n \" \" +\n cyan(\"https://github.com/Rising-Corporation/create-next-pro-cli\"),\n );\n console.log(\n \"_-`'-_-'`_`'-_-'`_`'-_-'`_`'-_-'`_`'-_-'`_`'-_-'`_`'-_-'`_`'-_-'`-_\",\n );\n } catch (err) {\n // Affiche une croix ASCII et le texte en rouge si le terminal le supporte\n\n console.error(red(\"[X] Error during project creation:\"), err);\n process.exit(1);\n }\n}\n","const RED = \"\\x1b[31m\";\nconst GREEN = \"\\x1b[32m\";\nconst YELLOW = \"\\x1b[33m\";\nconst BLUE = \"\\x1b[34m\";\nconst CYAN = \"\\x1b[36m\";\nconst RESET = \"\\x1b[0m\";\n\nexport function red(text: string) {\n return RED + text + RESET;\n}\nexport function green(text: string) {\n return GREEN + text + RESET;\n}\nexport function yellow(text: string) {\n return YELLOW + text + RESET;\n}\nexport function blue(text: string) {\n return BLUE + text + RESET;\n}\nexport function cyan(text: string) {\n return CYAN + text + RESET;\n}\n","import { scaffoldProject } from \"../scaffold\";\nexport async function createProject(nameArg: string, force: boolean) {\n const response = {\n projectName: nameArg,\n useTypescript: true,\n useEslint: true,\n useTailwind: true,\n useSrcDir: true,\n useTurbopack: true,\n useI18n: true,\n customAlias: true,\n importAlias: \"@/*\",\n force,\n };\n\n console.log(`Creating project \"${response.projectName}\"...`);\n await scaffoldProject(response);\n}\n","import { scaffoldProject } from \"../scaffold\";\nimport prompts from \"prompts\";\nexport async function createProjectWithPrompt() {\n const response = await prompts.prompt([\n {\n type: \"text\",\n name: \"projectName\",\n message: \"Project name:\",\n initial: \"my-next-app\",\n },\n {\n type: \"toggle\",\n name: \"useTypescript\",\n message: \"✔ Use TypeScript?\",\n initial: true,\n active: \"Yes\",\n inactive: \"No\",\n },\n {\n type: \"toggle\",\n name: \"useEslint\",\n message: \"✔ Use ESLint?\",\n initial: true,\n active: \"Yes\",\n inactive: \"No\",\n },\n {\n type: \"toggle\",\n name: \"useTailwind\",\n message: \"✔ Use Tailwind CSS?\",\n initial: true,\n active: \"Yes\",\n inactive: \"No\",\n },\n {\n type: \"toggle\",\n name: \"useSrcDir\",\n message: \"✔ Use `src/` directory?\",\n initial: true,\n active: \"Yes\",\n inactive: \"No\",\n },\n {\n type: \"toggle\",\n name: \"useTurbopack\",\n message: \"✔ Use Turbopack for `next dev`?\",\n initial: true,\n active: \"Yes\",\n inactive: \"No\",\n },\n {\n type: \"toggle\",\n name: \"useI18n\",\n message: \"✔ Use i18n with next-intl for translations?\",\n initial: true,\n active: \"Yes\",\n inactive: \"No\",\n },\n {\n type: \"toggle\",\n name: \"customAlias\",\n message: \"✔ Customize import alias (`@/*` by default)?\",\n initial: true,\n active: \"Yes\",\n inactive: \"No\",\n },\n {\n type: (prev: boolean) => (prev ? \"text\" : null),\n name: \"importAlias\",\n message: \"✔ What import alias would you like?\",\n initial: \"@core/*\",\n },\n ]);\n\n console.log(\"\\nYour choices:\");\n console.log(response);\n\n await scaffoldProject(response);\n}\n","import { join } from \"node:path\";\nimport { existsSync } from \"node:fs\";\nimport { cp, readFile, writeFile } from \"node:fs/promises\";\nimport prompts from \"prompts\";\n\nimport { loadConfig } from \"./utils\";\n\nfunction generateLocales(): string[] {\n const dn = new Intl.DisplayNames([\"en\"], { type: \"language\" });\n const locales: string[] = [];\n for (let i = 0; i < 26; i++) {\n for (let j = 0; j < 26; j++) {\n const code = String.fromCharCode(97 + i) + String.fromCharCode(97 + j);\n try {\n const name = dn.of(code);\n if (name && name.toLowerCase() !== code) {\n locales.push(code);\n }\n } catch {}\n }\n }\n return locales.sort();\n}\n\nexport async function addLanguage(args: string[]) {\n const config = await loadConfig();\n if (!config?.useI18n) {\n console.error(\"❌ i18n is not enabled in this project.\");\n return;\n }\n const messagesPath = join(process.cwd(), \"messages\");\n if (!existsSync(messagesPath)) {\n console.error(\"❌ Messages directory missing. Ensure i18n was configured.\");\n return;\n }\n\n const available = generateLocales();\n let locale = args[1];\n if (!locale || !available.includes(locale)) {\n const response = await prompts({\n type: \"autocomplete\",\n name: \"locale\",\n message: \"🌐 Locale to add:\",\n choices: available.map((l) => ({ title: l, value: l })),\n });\n locale = response.locale;\n }\n if (!locale) return;\n if (existsSync(join(messagesPath, locale))) {\n console.error(`❌ Locale ${locale} already exists.`);\n return;\n }\n\n const routingFile = join(process.cwd(), \"src\", \"lib\", \"i18n\", \"routing.ts\");\n if (!existsSync(routingFile)) {\n console.error(\"❌ routing.ts not found. Are you in project root?\");\n return;\n }\n const routingContent = await readFile(routingFile, \"utf-8\");\n const defaultMatch = routingContent.match(/defaultLocale:\\s*\"([^\"]+)\"/);\n const defaultLocale = defaultMatch ? defaultMatch[1] : null;\n if (!defaultLocale || !existsSync(join(messagesPath, defaultLocale))) {\n console.error(\"❌ Default locale not found.\");\n return;\n }\n\n await cp(join(messagesPath, defaultLocale), join(messagesPath, locale), {\n recursive: true,\n });\n console.log(`📄 Directory created: ${join(messagesPath, locale)}`);\n\n const localesMatch = routingContent.match(/locales:\\s*\\[([^\\]]*)\\]/);\n if (localesMatch) {\n const localesArr = localesMatch[1]\n .split(\",\")\n .map((s) => s.trim().replace(/[\"']/g, \"\"))\n .filter(Boolean);\n if (!localesArr.includes(locale)) {\n localesArr.push(locale);\n const newLocales = `locales: [${localesArr.map((l) => `\"${l}\"`).join(\", \" )}]`;\n const newContent = routingContent.replace(/locales:\\s*\\[[^\\]]*\\]/, newLocales);\n await writeFile(routingFile, newContent);\n console.log(`📄 File updated: ${routingFile}`);\n }\n }\n\n console.log(\n `✅ Locale \"${locale}\" added and copied from default locale \"${defaultLocale}\".`,\n );\n}\n","import { join } from \"node:path\";\nimport { existsSync } from \"node:fs\";\nimport { readFile, writeFile, readdir } from \"node:fs/promises\";\n\nimport { loadConfig } from \"./utils\";\n\nfunction defaultText(key: string) {\n return key\n .replace(/_/g, \" \")\n .replace(/\\b\\w/g, (c) => c.toUpperCase());\n}\n\nexport async function addText(args: string[]) {\n const pathArg = args[1];\n if (!pathArg) {\n console.error(\"❌ Dot path parameter is required.\");\n return;\n }\n const providedText = args.slice(2).join(\" \");\n\n const config = await loadConfig();\n if (!config?.useI18n) {\n console.error(\"❌ i18n is not enabled in this project.\");\n return;\n }\n const messagesPath = join(process.cwd(), \"messages\");\n if (!existsSync(messagesPath)) {\n console.error(\"❌ Messages directory missing. Ensure i18n was configured.\");\n return;\n }\n\n const entries = await readdir(messagesPath, { withFileTypes: true });\n const locales = entries.filter((e) => e.isDirectory()).map((e) => e.name);\n\n const [fileName, ...segments] = pathArg.split(\".\");\n if (!fileName || segments.length === 0) {\n console.error(\"❌ Invalid dot path provided.\");\n return;\n }\n const finalKey = segments[segments.length - 1];\n const text = providedText || defaultText(finalKey);\n\n for (const locale of locales) {\n const filePath = join(messagesPath, locale, `${fileName}.json`);\n let data: Record<string, any> = {};\n if (existsSync(filePath)) {\n const raw = await readFile(filePath, \"utf-8\");\n try {\n data = JSON.parse(raw) as Record<string, any>;\n } catch {}\n }\n let cursor = data;\n for (let i = 0; i < segments.length - 1; i++) {\n const seg = segments[i];\n if (!cursor[seg]) cursor[seg] = {};\n cursor = cursor[seg];\n }\n cursor[finalKey] = text;\n await writeFile(filePath, JSON.stringify(data, null, 2));\n console.log(`📄 File updated: ${filePath}`);\n }\n\n console.log(`✅ Text added at path \"${pathArg}\" with value \"${text}\".`);\n}\n","#!/usr/bin/env node\nimport { main } from \"./src/index\";\nmain();\n"],"mappings":"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","names":["prompts","fileURLToPath","join","readFile","existsSync","join","readFile","join","mkdir","readFile","writeFile","readdir","prompts","existsSync","statSync","prompts","join","readdir","mkdir","readFile","writeFile","join","writeFile","readdir","prompts","existsSync","cp","join","mkdir","readFile","writeFile","prompts","existsSync","prompts","join","existsSync","mkdir","readFile","writeFile","join","mkdir","readFile","writeFile","prompts","existsSync","prompts","join","existsSync","mkdir","readFile","writeFile","mkdir","writeFile","readFile","join","existsSync","join","__dirname","existsSync","mkdir","readFile","writeFile","prompts","join","existsSync","cp","readFile","writeFile","prompts","join","existsSync","prompts","readFile","cp","writeFile","join","existsSync","readFile","writeFile","readdir","join","existsSync","readdir","readFile","writeFile","__dirname","fileURLToPath","prompts"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-next-pro-cli",
3
- "version": "0.1.24",
3
+ "version": "0.1.25",
4
4
  "description": "Advanced Next.js project scaffolder with i18n, Tailwind, App Router and more.",
5
5
  "repository": {
6
6
  "type": "git",