create-next-pro-cli 0.1.22 → 0.1.24
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/create-next-pro-completion.sh +1 -1
- package/dist/bin.bun.js +29 -12
- package/dist/bin.node.js +35 -12
- package/dist/bin.node.js.map +1 -1
- package/package.json +1 -1
|
@@ -4,7 +4,7 @@ _create_next_pro_complete() {
|
|
|
4
4
|
COMPREPLY=()
|
|
5
5
|
cur="${COMP_WORDS[COMP_CWORD]}"
|
|
6
6
|
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
|
7
|
-
opts="addpage addcomponent addlib addapi rmpage"
|
|
7
|
+
opts="addpage addcomponent addlib addapi rmpage --help --version --reconfigure"
|
|
8
8
|
|
|
9
9
|
# Autocomplete commands
|
|
10
10
|
if [[ ${COMP_CWORD} == 1 ]]; then
|
package/dist/bin.bun.js
CHANGED
|
@@ -5021,7 +5021,7 @@ async function addComponent(args) {
|
|
|
5021
5021
|
}
|
|
5022
5022
|
const useI18n = !!config.useI18n;
|
|
5023
5023
|
const componentNameUpper = capitalize(componentName);
|
|
5024
|
-
const templatePath = join2(new URL("..", import.meta.url).pathname, "
|
|
5024
|
+
const templatePath = join2(new URL("..", import.meta.url).pathname, "templates", "Component");
|
|
5025
5025
|
let messagesPath = null;
|
|
5026
5026
|
if (useI18n) {
|
|
5027
5027
|
messagesPath = join2(process.cwd(), "messages");
|
|
@@ -5190,7 +5190,7 @@ async function addPage(args) {
|
|
|
5190
5190
|
const entries = await readdir2(messagesPath, { withFileTypes: true });
|
|
5191
5191
|
locales = entries.filter((e) => e.isDirectory()).map((e) => e.name);
|
|
5192
5192
|
}
|
|
5193
|
-
const templatePath = join3(new URL("..", import.meta.url).pathname, "
|
|
5193
|
+
const templatePath = join3(new URL("..", import.meta.url).pathname, "templates", "Page");
|
|
5194
5194
|
let uiPageDir, localePagePath, jsonFileName;
|
|
5195
5195
|
if (parentName && childName) {
|
|
5196
5196
|
uiPageDir = join3(process.cwd(), "src", "ui", parentName, childName);
|
|
@@ -5335,7 +5335,7 @@ async function addLib(args) {
|
|
|
5335
5335
|
if (!existsSync5(libDir)) {
|
|
5336
5336
|
await mkdir3(libDir, { recursive: true });
|
|
5337
5337
|
}
|
|
5338
|
-
const templateDir = join5(
|
|
5338
|
+
const templateDir = join5(new URL("..", import.meta.url).pathname, "templates", "Lib");
|
|
5339
5339
|
const indexTemplate = join5(templateDir, "index.ts");
|
|
5340
5340
|
const fileTemplate = join5(templateDir, "item.ts");
|
|
5341
5341
|
const indexPath = join5(libDir, "index.ts");
|
|
@@ -5423,7 +5423,7 @@ async function addApi(args) {
|
|
|
5423
5423
|
if (!existsSync6(apiDir)) {
|
|
5424
5424
|
await mkdir4(apiDir, { recursive: true });
|
|
5425
5425
|
}
|
|
5426
|
-
const templateDir = join6(
|
|
5426
|
+
const templateDir = join6(new URL("..", import.meta.url).pathname, "templates", "Api");
|
|
5427
5427
|
const routeTemplate = join6(templateDir, "route.ts");
|
|
5428
5428
|
const routePath = join6(apiDir, "route.ts");
|
|
5429
5429
|
if (!existsSync6(routePath)) {
|
|
@@ -5451,10 +5451,23 @@ import { cp, mkdir as mkdir5, rm, writeFile as writeFile6, readFile as readFile6
|
|
|
5451
5451
|
import { join as join7 } from "path";
|
|
5452
5452
|
import { existsSync as existsSync7 } from "fs";
|
|
5453
5453
|
import { fileURLToPath } from "url";
|
|
5454
|
+
|
|
5455
|
+
// src/lib/helper/consoleColor.ts
|
|
5454
5456
|
var RED = "\x1B[31m";
|
|
5455
5457
|
var GREEN = "\x1B[32m";
|
|
5456
5458
|
var CYAN = "\x1B[36m";
|
|
5457
5459
|
var RESET = "\x1B[0m";
|
|
5460
|
+
function red(text) {
|
|
5461
|
+
return RED + text + RESET;
|
|
5462
|
+
}
|
|
5463
|
+
function green(text) {
|
|
5464
|
+
return GREEN + text + RESET;
|
|
5465
|
+
}
|
|
5466
|
+
function cyan(text) {
|
|
5467
|
+
return CYAN + text + RESET;
|
|
5468
|
+
}
|
|
5469
|
+
|
|
5470
|
+
// src/scaffold.ts
|
|
5458
5471
|
async function scaffoldProject(options) {
|
|
5459
5472
|
const targetPath = join7(process.cwd(), options.projectName);
|
|
5460
5473
|
const __dirname2 = new URL(".", import.meta.url);
|
|
@@ -5464,7 +5477,7 @@ async function scaffoldProject(options) {
|
|
|
5464
5477
|
console.warn("\u26A0\uFE0F Target directory already exists, removing...");
|
|
5465
5478
|
await rm(targetPath, { recursive: true, force: true });
|
|
5466
5479
|
} else {
|
|
5467
|
-
console.error(
|
|
5480
|
+
console.error(red("[X] Target directory already exists. Use --force to overwrite."));
|
|
5468
5481
|
process.exit(1);
|
|
5469
5482
|
}
|
|
5470
5483
|
}
|
|
@@ -5486,18 +5499,18 @@ async function scaffoldProject(options) {
|
|
|
5486
5499
|
console.log("Project setup complete!");
|
|
5487
5500
|
console.log("");
|
|
5488
5501
|
console.log("To get started:");
|
|
5489
|
-
console.log(`
|
|
5502
|
+
console.log(" " + green(`cd ${options.projectName}`));
|
|
5490
5503
|
console.log("");
|
|
5491
5504
|
console.log("Then install dependencies and launch the dev server with your preferred tool:");
|
|
5492
|
-
console.log(`
|
|
5493
|
-
console.log(`
|
|
5494
|
-
console.log(`
|
|
5505
|
+
console.log(" " + green(`bun install && bun dev`));
|
|
5506
|
+
console.log(" " + green(`npm install && npm run dev`));
|
|
5507
|
+
console.log(" " + green(`pnpm install && pnpm run dev`));
|
|
5495
5508
|
console.log("");
|
|
5496
5509
|
console.log("Documentation and examples can be found at:");
|
|
5497
|
-
console.log(
|
|
5510
|
+
console.log(" " + cyan("https://github.com/Rising-Corporation/create-next-pro-cli"));
|
|
5498
5511
|
console.log("_-`'-_-'`_`'-_-'`_`'-_-'`_`'-_-'`_`'-_-'`_`'-_-'`_`'-_-'`_`'-_-'`-_");
|
|
5499
5512
|
} catch (err) {
|
|
5500
|
-
console.error(
|
|
5513
|
+
console.error(red("[X] Error during project creation:"), err);
|
|
5501
5514
|
process.exit(1);
|
|
5502
5515
|
}
|
|
5503
5516
|
}
|
|
@@ -5673,7 +5686,11 @@ async function onboarding() {
|
|
|
5673
5686
|
writeCfg(cfg);
|
|
5674
5687
|
console.log(`
|
|
5675
5688
|
\u2705 Configuration saved.`);
|
|
5676
|
-
console.log("you can now use the CLI ! ex :
|
|
5689
|
+
console.log("you can now use the CLI ! ex : ");
|
|
5690
|
+
console.log(" Without prompt (will change in future) :");
|
|
5691
|
+
console.log(" create-next-pro my-next-project");
|
|
5692
|
+
console.log(" With prompt :");
|
|
5693
|
+
console.log(" create-next-pro");
|
|
5677
5694
|
console.log("For more information, visit: https://github.com/Rising-Corporation/create-next-pro-cli");
|
|
5678
5695
|
console.log("Happy coding! \uD83C\uDF89");
|
|
5679
5696
|
return cfg;
|
package/dist/bin.node.js
CHANGED
|
@@ -88,7 +88,6 @@ async function addComponent(args) {
|
|
|
88
88
|
const componentNameUpper = capitalize(componentName);
|
|
89
89
|
const templatePath = join2(
|
|
90
90
|
new URL("..", import.meta.url).pathname,
|
|
91
|
-
"..",
|
|
92
91
|
"templates",
|
|
93
92
|
"Component"
|
|
94
93
|
);
|
|
@@ -271,7 +270,6 @@ async function addPage(args) {
|
|
|
271
270
|
}
|
|
272
271
|
const templatePath = join3(
|
|
273
272
|
new URL("..", import.meta.url).pathname,
|
|
274
|
-
"..",
|
|
275
273
|
"templates",
|
|
276
274
|
"Page"
|
|
277
275
|
);
|
|
@@ -432,7 +430,11 @@ async function addLib(args) {
|
|
|
432
430
|
if (!existsSync5(libDir)) {
|
|
433
431
|
await mkdir3(libDir, { recursive: true });
|
|
434
432
|
}
|
|
435
|
-
const templateDir = join5(
|
|
433
|
+
const templateDir = join5(
|
|
434
|
+
new URL("..", import.meta.url).pathname,
|
|
435
|
+
"templates",
|
|
436
|
+
"Lib"
|
|
437
|
+
);
|
|
436
438
|
const indexTemplate = join5(templateDir, "index.ts");
|
|
437
439
|
const fileTemplate = join5(templateDir, "item.ts");
|
|
438
440
|
const indexPath = join5(libDir, "index.ts");
|
|
@@ -525,7 +527,11 @@ async function addApi(args) {
|
|
|
525
527
|
if (!existsSync6(apiDir)) {
|
|
526
528
|
await mkdir4(apiDir, { recursive: true });
|
|
527
529
|
}
|
|
528
|
-
const templateDir = join6(
|
|
530
|
+
const templateDir = join6(
|
|
531
|
+
new URL("..", import.meta.url).pathname,
|
|
532
|
+
"templates",
|
|
533
|
+
"Api"
|
|
534
|
+
);
|
|
529
535
|
const routeTemplate = join6(templateDir, "route.ts");
|
|
530
536
|
const routePath = join6(apiDir, "route.ts");
|
|
531
537
|
if (!existsSync6(routePath)) {
|
|
@@ -556,10 +562,23 @@ import { cp, mkdir as mkdir5, rm, writeFile as writeFile6, readFile as readFile6
|
|
|
556
562
|
import { join as join7 } from "path";
|
|
557
563
|
import { existsSync as existsSync7 } from "fs";
|
|
558
564
|
import { fileURLToPath } from "url";
|
|
565
|
+
|
|
566
|
+
// src/lib/helper/consoleColor.ts
|
|
559
567
|
var RED = "\x1B[31m";
|
|
560
568
|
var GREEN = "\x1B[32m";
|
|
561
569
|
var CYAN = "\x1B[36m";
|
|
562
570
|
var RESET = "\x1B[0m";
|
|
571
|
+
function red(text) {
|
|
572
|
+
return RED + text + RESET;
|
|
573
|
+
}
|
|
574
|
+
function green(text) {
|
|
575
|
+
return GREEN + text + RESET;
|
|
576
|
+
}
|
|
577
|
+
function cyan(text) {
|
|
578
|
+
return CYAN + text + RESET;
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
// src/scaffold.ts
|
|
563
582
|
async function scaffoldProject(options) {
|
|
564
583
|
const targetPath = join7(process.cwd(), options.projectName);
|
|
565
584
|
const __dirname2 = new URL(".", import.meta.url);
|
|
@@ -576,7 +595,7 @@ async function scaffoldProject(options) {
|
|
|
576
595
|
await rm(targetPath, { recursive: true, force: true });
|
|
577
596
|
} else {
|
|
578
597
|
console.error(
|
|
579
|
-
|
|
598
|
+
red("[X] Target directory already exists. Use --force to overwrite.")
|
|
580
599
|
);
|
|
581
600
|
process.exit(1);
|
|
582
601
|
}
|
|
@@ -602,24 +621,24 @@ async function scaffoldProject(options) {
|
|
|
602
621
|
console.log("Project setup complete!");
|
|
603
622
|
console.log("");
|
|
604
623
|
console.log("To get started:");
|
|
605
|
-
console.log(`
|
|
624
|
+
console.log(" " + green(`cd ${options.projectName}`));
|
|
606
625
|
console.log("");
|
|
607
626
|
console.log(
|
|
608
627
|
"Then install dependencies and launch the dev server with your preferred tool:"
|
|
609
628
|
);
|
|
610
|
-
console.log(`
|
|
611
|
-
console.log(`
|
|
612
|
-
console.log(`
|
|
629
|
+
console.log(" " + green(`bun install && bun dev`));
|
|
630
|
+
console.log(" " + green(`npm install && npm run dev`));
|
|
631
|
+
console.log(" " + green(`pnpm install && pnpm run dev`));
|
|
613
632
|
console.log("");
|
|
614
633
|
console.log("Documentation and examples can be found at:");
|
|
615
634
|
console.log(
|
|
616
|
-
|
|
635
|
+
" " + cyan("https://github.com/Rising-Corporation/create-next-pro-cli")
|
|
617
636
|
);
|
|
618
637
|
console.log(
|
|
619
638
|
"_-`'-_-'`_`'-_-'`_`'-_-'`_`'-_-'`_`'-_-'`_`'-_-'`_`'-_-'`_`'-_-'`-_"
|
|
620
639
|
);
|
|
621
640
|
} catch (err) {
|
|
622
|
-
console.error(
|
|
641
|
+
console.error(red("[X] Error during project creation:"), err);
|
|
623
642
|
process.exit(1);
|
|
624
643
|
}
|
|
625
644
|
}
|
|
@@ -798,7 +817,11 @@ async function onboarding() {
|
|
|
798
817
|
if (cfg.completionInstalled) await installCompletion(cfg.shell);
|
|
799
818
|
writeCfg(cfg);
|
|
800
819
|
console.log("\n\u2705 Configuration saved.");
|
|
801
|
-
console.log("you can now use the CLI ! ex :
|
|
820
|
+
console.log("you can now use the CLI ! ex : ");
|
|
821
|
+
console.log(" Without prompt (will change in future) :");
|
|
822
|
+
console.log(" create-next-pro my-next-project");
|
|
823
|
+
console.log(" With prompt :");
|
|
824
|
+
console.log(" create-next-pro");
|
|
802
825
|
console.log(
|
|
803
826
|
"For more information, visit: https://github.com/Rising-Corporation/create-next-pro-cli"
|
|
804
827
|
);
|
package/dist/bin.node.js.map
CHANGED
|
@@ -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/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 // Lit le script d’auto-complétion depuis le package (racine du 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 : create-next-pro <project-name>\");\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 \"..\",\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 \"..\",\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\");\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(import.meta.dir, \"..\", \"..\", \"templates\", \"Lib\");\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 \"\\n\\nexport { \" +\n exportsSet.join(\", \") +\n \" };\\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(import.meta.dir, \"..\", \"..\", \"templates\", \"Api\");\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\";\n\nconst RED = \"\\x1b[31m\";\nconst GREEN = \"\\x1b[32m\";\nconst YELLOW = \"\\x1b[33m\";\nconst BLUE = \"\\x1b[34m\";\nconst CYAN = \"\\x1b[36m\";\nconst RESET = \"\\x1b[0m\";\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.${RESET}`,\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}${RESET}`);\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${RESET}`);\n console.log(` ${GREEN}npm install && npm run dev${RESET}`);\n console.log(` ${GREEN}pnpm install && pnpm run dev${RESET}`);\n console.log(\"\");\n console.log(\"Documentation and examples can be found at:\");\n console.log(\n ` ${CYAN}https://github.com/Rising-Corporation/create-next-pro-cli${RESET}`,\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:${RESET}`, err);\n process.exit(1);\n }\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","../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"]}
|