nextjs-paths
Version:
Generate path helpers for Next.js App Router
97 lines (96 loc) • 5.22 kB
JavaScript
#!/usr/bin/env node
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const commander_1 = require("commander");
const generatePaths_js_1 = require("./generatePaths.js");
const path_1 = __importDefault(require("path"));
const fs_1 = require("fs");
const program = new commander_1.Command();
program
.name("nextjs-paths")
.description("Generate strongly typed path utilities from your Next.js App Router\n\n" +
"Global options:\n" +
" -v, --version Show version number\n" +
" -h, --help Show help information\n\n" +
"Commands:\n" +
" generate Generate paths.ts file with options\n\n" +
"Generate Command Options:\n" +
" -d, --appDir <dir> Specify the app router root directory (default: src/app)\n" +
" -e, --env <var> Set environment variable key for base URL (default: NEXT_PUBLIC_APP_BASE_URL)\n" +
" -c, --caseStyle <style> Set the case style for path keys\n" +
" Options: camelCase (default), lowerSnake, upperSnake, pascalCase\n" +
" -o, --outputDir <dir> Specify output directory for generated file\n" +
" Default: same as appDir\n" +
" -f, --fileName <name> Specify output file name (must end with .ts)\n" +
" Default: paths.ts\n\n" +
"Examples:\n" +
" nextjs-paths generate # Generate with default options\n" +
" nextjs-paths generate --appDir ./app # Generate from custom app directory\n" +
" nextjs-paths generate --caseStyle lowerSnake # Generate with snake_case keys\n" +
" nextjs-paths generate --outputDir ./lib # Generate to custom output directory\n" +
" nextjs-paths generate --fileName routes.ts # Generate with custom file name")
.version("1.0.1", "-v, --version")
.helpOption("-h, --help", "Display help for command");
program
.command("generate")
.description("Generate paths.ts file with options\n\n" +
"Available Options:\n" +
" -d, --appDir <dir> Specify the app router root directory\n" +
" Default: src/app\n\n" +
" -e, --env <var> Set environment variable key for base URL\n" +
" Default: NEXT_PUBLIC_APP_BASE_URL\n\n" +
" -c, --caseStyle <style> Set the case style for path keys\n" +
" Options: camelCase (default), lowerSnake, upperSnake, pascalCase\n\n" +
" -o, --outputDir <dir> Specify output directory for generated file\n" +
" Default: same as appDir\n\n" +
" -f, --fileName <name> Specify output file name (must end with .ts)\n" +
" Default: paths.ts\n\n" +
"Examples:\n" +
" nextjs-paths generate # Generate with default options\n" +
" nextjs-paths generate --appDir ./app # Generate from custom app directory\n" +
" nextjs-paths generate --caseStyle lowerSnake # Generate with snake_case keys\n" +
" nextjs-paths generate --outputDir ./lib # Generate to custom output directory\n" +
" nextjs-paths generate --fileName routes.ts # Generate with custom file name")
.option("-d, --appDir <dir>", "App router root directory (default: src/app)")
.option("-e, --env <var>", "Environment variable key for base URL (default: NEXT_PUBLIC_APP_BASE_URL)")
.option("-c, --caseStyle <style>", "Case style for path keys (camelCase, lowerSnake, upperSnake, pascalCase)", "camelCase")
.option("-o, --outputDir <dir>", "Output directory for generated file")
.option("-f, --fileName <name>", "Output file name (must end with .ts)", "paths.ts")
.action((options) => {
console.log("Starting path generation...");
console.log("Current working directory:", process.cwd());
console.log("Options:", options);
const appDir = options.appDir
? path_1.default.isAbsolute(options.appDir)
? options.appDir
: path_1.default.join(process.cwd(), options.appDir)
: path_1.default.join(process.cwd(), "src", "app");
console.log("Target app directory:", appDir);
console.log("Will generate paths.ts in:", path_1.default.join(process.cwd(), options.outputDir ?? appDir, options.fileName));
if (!(0, fs_1.existsSync)(appDir)) {
console.error(`Error: App directory does not exist: ${appDir}`);
process.exit(1);
}
if (!options.fileName.endsWith(".ts")) {
console.error(`Error: File name must end with .ts: ${options.fileName}`);
process.exit(1);
}
try {
(0, generatePaths_js_1.generatePaths)({
appDir,
envKey: options.env || "NEXT_PUBLIC_APP_BASE_URL",
caseStyle: options.caseStyle,
outputDir: options.outputDir,
fileName: options.fileName,
});
console.log("Path generation completed successfully!");
}
catch (error) {
console.error("Error during path generation:", error);
process.exit(1);
}
});
program.parse(process.argv);