@nexusts/cli 0.9.9 → 0.9.10
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/index.js.map
CHANGED
|
@@ -4,14 +4,14 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"/**\n * `nx info` — print the resolved project configuration.\n *\n * Useful for debugging the config layer: shows which `nx.config.ts`\n * file was loaded, the resolved config (with env overrides), and the\n * current environment values that affect the CLI.\n */\n\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport { colors, logger } from \"../core/index.js\";\n\nexport const infoCommand: Command = {\n\tname: \"info\",\n\taliases: [\"i\"],\n\tsummary: \"Show project configuration\",\n\tdescription: \"Prints the resolved nx.config.ts plus relevant env vars.\",\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tlogger.heading(\"NexusTS CLI — Project Info\");\n\n\t\tlogger.info(colors.bold(\"Resolved configuration\"));\n\t\tlogger.blank();\n\t\tlogger.table([\n\t\t\t[\"routing\", String(ctx.config.routing)],\n\t\t\t[\"view\", String(ctx.config.view)],\n\t\t\t[\"orm\", String(ctx.config.orm)],\n\t\t\t[\"dialect\", String(ctx.config.dialect ?? \"(none)\")],\n\t\t\t[\"database.driver\", String(ctx.config.database.driver)],\n\t\t\t[\"database.url\", String(ctx.config.database.url)],\n\t\t\t[\"inertia.frontend\", String(ctx.config.inertia.frontend)],\n\t\t\t[\"inertia.ssr\", String(ctx.config.inertia.ssr)],\n\t\t\t[\"inertia.version\", String(ctx.config.inertia.version)],\n\t\t]);\n\n\t\tlogger.blank();\n\t\tlogger.info(colors.bold(\"Paths\"));\n\t\tlogger.blank();\n\t\tfor (const [k, v] of Object.entries(ctx.config.paths)) {\n\t\t\tlogger.table([[k, v]]);\n\t\t}\n\n\t\tlogger.blank();\n\t\tlogger.info(colors.bold(\"Environment\"));\n\t\tlogger.blank();\n\t\tconst envKeys = [\n\t\t\t\"NODE_ENV\",\n\t\t\t\"PORT\",\n\t\t\t\"NEXUS_DEBUG\",\n\t\t\t\"NO_COLOR\",\n\t\t\t\"FORCE_COLOR\",\n\t\t\t\"NX_ROUTING\",\n\t\t\t\"NX_VIEW\",\n\t\t\t\"NX_ORM\",\n\t\t\t\"NX_DATABASE_DRIVER\",\n\t\t\t\"NX_DATABASE_URL\",\n\t\t\t\"NX_INERTIA_FRONTEND\",\n\t\t\t\"NX_INERTIA_SSR\",\n\t\t];\n\t\tfor (const k of envKeys) {\n\t\t\tconst v = process.env[k];\n\t\t\tlogger.table([[k, v === undefined ? colors.dim(\"(unset)\") : v]]);\n\t\t}\n\n\t\tlogger.blank();\n\t\tlogger.info(colors.bold(\"Working directory\"));\n\t\tlogger.blank();\n\t\tlogger.info(` ${resolve(ctx.cwd)}`);\n\t\tlogger.blank();\n\n\t\treturn 0;\n\t},\n};\n\nexport default infoCommand;\n",
|
|
6
6
|
"/**\n * Minimal argv parser for the `nx` CLI.\n *\n * Supports:\n * - positional args\n * - short flags (-v, -p 3000)\n * - long flags (--verbose, --port=3000, --port 3000)\n * - boolean toggles (--no-color / --color)\n * - `--` end-of-options marker\n *\n * Usage:\n * const { command, positional, flags } = parseArgs(process.argv.slice(2));\n */\n\nexport interface ParsedArgs {\n\t/** Subcommand name (first positional arg, e.g. `make:controller`). */\n\tcommand: string | undefined;\n\t/** Remaining positional args after the command. */\n\tpositional: string[];\n\t/** Flag map: long → string | boolean | string[]. */\n\tflags: Record<string, string | boolean | string[]>;\n}\n\nconst LONG_RE = /^--([^=]+)(?:=(.*))?$/;\nconst SHORT_RE = /^-([A-Za-z])$/;\n\nexport function parseArgs(argv: string[]): ParsedArgs {\n\tconst positional: string[] = [];\n\tconst flags: Record<string, string | boolean | string[]> = {};\n\tlet endOfOptions = false;\n\n\tlet i = 0;\n\twhile (i < argv.length) {\n\t\tconst arg = argv[i] as string;\n\n\t\tif (arg === \"--\") {\n\t\t\tendOfOptions = true;\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (endOfOptions || !arg.startsWith(\"-\")) {\n\t\t\tpositional.push(arg);\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst longMatch = LONG_RE.exec(arg);\n\t\tif (longMatch) {\n\t\t\tconst [, name, inline] = longMatch;\n\t\t\tconst flagName = name as string;\n\n\t\t\t// `--no-foo` → immediately set foo=false, never consume next arg.\n\t\t\tif (flagName.startsWith(\"no-\")) {\n\t\t\t\tconst key = flagName.slice(3);\n\t\t\t\tsetFlag(flags, key, false);\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (inline !== undefined) {\n\t\t\t\tsetFlag(flags, flagName, inline);\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// `--flag` (boolean) or `--flag value` (consume next arg if no leading dash)\n\t\t\tconst next = argv[i + 1];\n\t\t\tif (next !== undefined && !next.startsWith(\"-\")) {\n\t\t\t\tsetFlag(flags, flagName, next);\n\t\t\t\ti += 2;\n\t\t\t} else {\n\t\t\t\tsetFlag(flags, flagName, true);\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst shortMatch = SHORT_RE.exec(arg);\n\t\tif (shortMatch) {\n\t\t\tconst flagName = shortMatch[1] as string;\n\t\t\tconst next = argv[i + 1];\n\t\t\tif (next !== undefined && !next.startsWith(\"-\")) {\n\t\t\t\tsetFlag(flags, flagName, next);\n\t\t\t\ti += 2;\n\t\t\t} else {\n\t\t\t\tsetFlag(flags, flagName, true);\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Unknown flag shape — treat as positional.\n\t\tpositional.push(arg);\n\t\ti++;\n\t}\n\n\tconst command = positional.shift();\n\treturn { command, positional, flags };\n}\n\nfunction setFlag(\n\tflags: Record<string, string | boolean | string[]>,\n\tname: string,\n\tvalue: string | boolean,\n) {\n\t// `--no-foo` toggles `foo` to false.\n\tif (name.startsWith(\"no-\") && value === true) {\n\t\tconst key = name.slice(3);\n\t\tflags[key] = false;\n\t\treturn;\n\t}\n\n\tconst existing = flags[name];\n\tif (existing === undefined) {\n\t\tflags[name] = value;\n\t} else if (Array.isArray(existing)) {\n\t\texisting.push(typeof value === \"string\" ? value : String(value));\n\t} else {\n\t\tflags[name] = [\n\t\t\tString(existing),\n\t\t\ttypeof value === \"string\" ? value : String(value),\n\t\t];\n\t}\n}\n\n/** Coerce a flag value to string with a default. */\nexport function flagString(\n\tflags: Record<string, string | boolean | string[]>,\n\tname: string,\n\tfallback?: string,\n): string | undefined {\n\tconst v = flags[name];\n\tif (v === undefined || v === false) return fallback;\n\tif (typeof v === \"string\") return v;\n\tif (Array.isArray(v)) return v[0];\n\treturn String(v);\n}\n\n/** Coerce a flag value to boolean with a default. */\nexport function flagBool(\n\tflags: Record<string, string | boolean | string[]>,\n\tname: string,\n\tfallback = false,\n): boolean {\n\tconst v = flags[name];\n\tif (v === undefined) return fallback;\n\tif (typeof v === \"boolean\") return v;\n\treturn v !== \"false\" && v !== \"0\" && v !== \"no\";\n}\n\n/** Read a flag list (each occurrence appends). */\nexport function flagList(\n\tflags: Record<string, string | boolean | string[]>,\n\tname: string,\n): string[] {\n\tconst v = flags[name];\n\tif (v === undefined) return [];\n\tif (Array.isArray(v)) return v;\n\tif (typeof v === \"string\") return [v];\n\treturn [String(v)];\n}\n",
|
|
7
|
-
"/**\n * `nx.config.ts` loader.\n *\n * Reads the project's `nx.config.ts` (or `.nxrc.json`) and merges it\n * with environment overrides (`NX_ROUTING`, `NX_VIEW`, `NX_ORM`,\n * `NX_DATABASE_URL`, etc.).\n *\n * The config file is dynamically imported so users can write it in\n * TypeScript with full type checking.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\n\nexport type RoutingStyle = \"nest\" | \"adonis\" | \"functional\" | \"mixed\";\nexport type ViewEngine = \"rendu\" | \"edge\" | \"inertia\" | \"none\";\nexport type OrmDriver = \"drizzle\" | \"kysely\" | \"none\";\nexport type InertiaFrontend = \"react\" | \"vue\" | \"svelte\" | \"solid\";\nexport type DatabaseDriver =\n\t| \"bun-sqlite\"\n\t| \"
|
|
7
|
+
"/**\n * `nx.config.ts` loader.\n *\n * Reads the project's `nx.config.ts` (or `.nxrc.json`) and merges it\n * with environment overrides (`NX_ROUTING`, `NX_VIEW`, `NX_ORM`,\n * `NX_DATABASE_URL`, etc.).\n *\n * The config file is dynamically imported so users can write it in\n * TypeScript with full type checking.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\n\nexport type RoutingStyle = \"nest\" | \"adonis\" | \"functional\" | \"mixed\";\nexport type ViewEngine = \"rendu\" | \"edge\" | \"inertia\" | \"none\";\nexport type OrmDriver = \"drizzle\" | \"kysely\" | \"none\";\nexport type InertiaFrontend = \"react\" | \"vue\" | \"svelte\" | \"solid\";\nexport type DatabaseDriver =\n\t| \"bun-sqlite\"\n\t| \"sqlite\"\n\t| \"postgres\"\n\t| \"mysql\"\n\t| \"none\";\nexport type QueueBackendKind = \"bullmq\" | \"cloudflare\" | \"memory\";\n\n/** Authentication surface. Mirrors `src/auth/types.ts` (kept inline so\n * the CLI doesn't depend on the auth module). */\nexport interface NxAuthConfig {\n\t/** Mount path for better-auth handler. Default: `/api/auth`. */\n\tbasePath?: string;\n\t/** Email + password authentication. */\n\temailAndPassword?: {\n\t\tenabled?: boolean;\n\t\trequireEmailVerification?: boolean;\n\t\tminPasswordLength?: number;\n\t\tmaxPasswordLength?: number;\n\t};\n\t/** Social providers keyed by name (github, google, discord, ...). */\n\tsocialProviders?: Record<\n\t\tstring,\n\t\t{\n\t\t\tclientId: string;\n\t\t\tclientSecret: string;\n\t\t\tscope?: string[];\n\t\t\tredirectURI?: string;\n\t\t}\n\t>;\n\t/** JWT plugin (token + JWKS endpoint). */\n\tjwt?: {\n\t\tenabled: boolean;\n\t\tjwksPath?: string;\n\t\tissuer?: string;\n\t\taudience?: string;\n\t\texpiresIn?: number;\n\t};\n\t/** Passkey plugin (WebAuthn). */\n\tpasskey?: {\n\t\tenabled: boolean;\n\t\trpName: string;\n\t\trpId: string;\n\t\torigin: string | string[];\n\t};\n\t/** Session TTL in seconds. Default: 7 days. */\n\tsessionExpiresInSeconds?: number;\n\t/** Cookie domain for subdomains. */\n\tcookieDomain?: string;\n\t/** Cross-subdomain cookies. */\n\tcrossSubDomainCookies?: {\n\t\tenabled: boolean;\n\t\tdomain?: string;\n\t};\n\t/** Cookie `SameSite` attribute. */\n\tcookieSameSite?: \"lax\" | \"strict\" | \"none\";\n\t/** Cookie `Secure` flag. Default: true in production. */\n\tcookieSecure?: boolean;\n}\n\nexport interface NxConfig {\n\t/** Routing style for `make:controller` templates. */\n\trouting: RoutingStyle;\n\t/** View engine for view templates. */\n\tview: ViewEngine;\n\t/** ORM driver. */\n\torm: OrmDriver;\n\t/** Drizzle dialect (when `orm === 'drizzle'`). */\n\tdialect?: \"postgres\" | \"mysql\" | \"sqlite\" | \"bun-sqlite\" | \"d1\";\n\t/** Database driver. */\n\tdatabase: {\n\t\tdriver: DatabaseDriver;\n\t\turl: string;\n\t};\n\t/** Inertia-specific config (only consulted when `view === 'inertia'`). */\n\tinertia: {\n\t\tfrontend: InertiaFrontend;\n\t\tssr: boolean;\n\t\tversion: string;\n\t};\n\t/** Where to scaffold files. */\n\tpaths: {\n\t\tapp: string;\n\t\tcontrollers: string;\n\t\tservices: string;\n\t\tmodules: string;\n\t\tmodels: string;\n\t\tmigrations: string;\n\t\tseeds?: string;\n\t\tmiddleware: string;\n\t\tdto: string;\n\t};\n\t/** Names that get auto-included in `@Module({ controllers: [...] })`. */\n\tmoduleStyle: \"nest\" | \"adonis\";\n\n\t/** Authentication (better-auth) configuration. Optional. */\n\tauth?: NxAuthConfig;\n\n\t/** Queue (BullMQ / Cloudflare Queues) configuration. Optional. */\n\tqueue?: {\n\t\tbackend: QueueBackendKind;\n\t\tbullmq?: {\n\t\t\tconnection: string | { host: string; port: number; password?: string };\n\t\t\tprefix?: string;\n\t\t};\n\t\tcloudflare?: {\n\t\t\t/** Name of the Queue binding on the Worker (e.g. 'MY_QUEUE'). */\n\t\t\tbindingName: string;\n\t\t\tqueueName?: string;\n\t\t};\n\t\tdefaults?: {\n\t\t\tdelaySeconds?: number;\n\t\t\tattempts?: number;\n\t\t\tbackoff?: { type: \"fixed\" | \"exponential\"; delayMs: number };\n\t\t};\n\t};\n}\n\nexport const DEFAULT_CONFIG: NxConfig = {\n\trouting: \"nest\",\n\tview: \"inertia\",\n\torm: \"drizzle\",\n\tdatabase: {\n\t\tdriver: \"sqlite\",\n\t\turl: \"app.db\",\n\t},\n\tinertia: {\n\t\tfrontend: \"react\",\n\t\tssr: true,\n\t\tversion: \"1.0.0\",\n\t},\n\tpaths: {\n\t\tapp: \"app\",\n\t\tcontrollers: \"app/controllers\",\n\t\tservices: \"app/services\",\n\t\tmodules: \"app/modules\",\n\t\tmodels: \"app/models\",\n\t\tmigrations: \"app/database/migrations\",\n\t\tseeds: \"db/seeds\",\n\t\tmiddleware: \"app/middleware\",\n\t\tdto: \"app/dto\",\n\t},\n\tmoduleStyle: \"nest\",\n\tauth: undefined,\n\tqueue: undefined,\n};\n\nconst CONFIG_CANDIDATES = [\n\t\"nx.config.ts\",\n\t\"nx.config.js\",\n\t\"nx.config.mjs\",\n\t\".nxrc.json\",\n];\n\n/**\n * Load the project's nx.config file, falling back to defaults.\n * Merges with environment overrides.\n *\n * Missing / unloadable config files are not fatal — we log a debug\n * message and use defaults so the CLI works in fresh projects where\n * `nexusts` hasn't been installed yet.\n */\nexport async function loadConfig(\n\tcwd: string = process.cwd(),\n): Promise<NxConfig> {\n\tlet config: Partial<NxConfig> = {};\n\tlet configSource = \"<defaults>\";\n\n\tfor (const candidate of CONFIG_CANDIDATES) {\n\t\tconst path = resolve(cwd, candidate);\n\t\tif (!existsSync(path)) continue;\n\n\t\ttry {\n\t\t\tif (candidate.endsWith(\".json\")) {\n\t\t\t\tconst raw = readFileSync(path, \"utf8\");\n\t\t\t\tconfig = JSON.parse(raw) as Partial<NxConfig>;\n\t\t\t} else {\n\t\t\t\t// Dynamic import — works under Bun and Node (tsx).\n\t\t\t\t// Some nx.config.ts files import from `@nexusts/cli` for\n\t\t\t\t// type-safety. When NexusTS isn't installed yet (e.g. in\n\t\t\t\t// a fresh project after `nx new`), swallow the import\n\t\t\t\t// failure and fall back to defaults.\n\t\t\t\ttry {\n\t\t\t\t\tconst mod: { default?: unknown } = await import(path);\n\t\t\t\t\tconfig = (mod.default ?? mod) as Partial<NxConfig>;\n\t\t\t\t} catch (importErr: unknown) {\n\t\t\t\t\t// If the file imports from NexusTS and NexusTS isn't installed,\n\t\t\t\t\t// try to extract the config by evaluating the export with a\n\t\t\t\t\t// simple regex (last resort). For now, just log and fall back.\n\t\t\t\t\t// Use a direct console.warn here to avoid circular import with logger (config is loaded before logger is ready).\n\t\t\t\t\tprocess.stderr.write(`[nx] Could not dynamically import ${candidate}: ${importErr instanceof Error ? importErr.message : String(importErr)}. Falling back to defaults.\\n`);\n\t\t\t\t\tconfig = {};\n\t\t\t\t}\n\t\t\t}\n\t\t\tconfigSource = candidate;\n\t\t\tbreak;\n\t\t} catch (err: unknown) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to load ${candidate}: ${err instanceof Error ? err.message : String(err)}`,\n\t\t\t);\n\t\t}\n\t}\n\n\tconst merged = mergeWithEnv(DEFAULT_CONFIG, config);\n\n\t// Sanity-check enum values.\n\tassertEnum(\"routing\", merged.routing, [\n\t\t\"nest\",\n\t\t\"adonis\",\n\t\t\"functional\",\n\t\t\"mixed\",\n\t]);\n\tassertEnum(\"view\", merged.view, [\"rendu\", \"edge\", \"inertia\", \"none\"]);\n\tassertEnum(\"orm\", merged.orm, [\"drizzle\", \"kysely\", \"none\"]);\n\tassertEnum(\"database.driver\", merged.database.driver, [\n\t\t\"bun-sqlite\",\n\t\t\n\t\t\"postgres\",\n\t\t\"mysql\",\n\t\t\"none\",\n\t]);\n\tassertEnum(\"inertia.frontend\", merged.inertia.frontend, [\n\t\t\"react\",\n\t\t\"vue\",\n\t\t\"svelte\",\n\t\t\"solid\",\n\t]);\n\n\tif (process.env.NX_DEBUG === \"1\") {\n\t\tconsole.log(`[nx] config source: ${configSource}`);\n\t}\n\n\treturn merged;\n}\n\n/**\n * Apply environment overrides on top of a config object.\n * Recognized env vars:\n * NX_ROUTING, NX_VIEW, NX_ORM, NX_DATABASE_DRIVER, NX_DATABASE_URL,\n * NX_INERTIA_FRONTEND, NX_INERTIA_SSR, NX_INERTIA_VERSION\n */\nfunction mergeWithEnv(base: NxConfig, override: Partial<NxConfig>): NxConfig {\n\tconst env = process.env;\n\tconst merged: NxConfig = {\n\t\t...base,\n\t\t...override,\n\t\tdatabase: { ...base.database, ...(override.database ?? {}) },\n\t\tinertia: { ...base.inertia, ...(override.inertia ?? {}) },\n\t\tpaths: { ...base.paths, ...(override.paths ?? {}) },\n\t};\n\n\tif (env.NX_ROUTING) merged.routing = env.NX_ROUTING as RoutingStyle;\n\tif (env.NX_VIEW) merged.view = env.NX_VIEW as ViewEngine;\n\tif (env.NX_ORM) merged.orm = env.NX_ORM as OrmDriver;\n\tif (env.NX_DATABASE_DRIVER)\n\t\tmerged.database.driver = env.NX_DATABASE_DRIVER as DatabaseDriver;\n\tif (env.NX_DATABASE_URL) merged.database.url = env.NX_DATABASE_URL as string;\n\tif (env.NX_INERTIA_FRONTEND)\n\t\tmerged.inertia.frontend = env.NX_INERTIA_FRONTEND as InertiaFrontend;\n\tif (env.NX_INERTIA_SSR)\n\t\tmerged.inertia.ssr =\n\t\t\tenv.NX_INERTIA_SSR !== \"false\" && env.NX_INERTIA_SSR !== \"0\";\n\tif (env.NX_INERTIA_VERSION)\n\t\tmerged.inertia.version = env.NX_INERTIA_VERSION as string;\n\n\treturn merged;\n}\n\nfunction assertEnum<K extends string>(\n\tkey: string,\n\tvalue: string,\n\tallowed: readonly K[],\n): asserts value is K {\n\tif (!allowed.includes(value as K)) {\n\t\tthrow new Error(\n\t\t\t`Invalid value for ${key}: \"${value}\". Allowed: ${allowed.join(\", \")}.`,\n\t\t);\n\t}\n}\n",
|
|
8
8
|
"/**\n * Filesystem helpers for the CLI.\n */\n\nimport {\n\texistsSync,\n\tmkdirSync,\n\treadFileSync,\n\tstatSync,\n\twriteFileSync,\n} from \"node:fs\";\nimport { dirname, isAbsolute, relative, resolve } from \"node:path\";\nimport { pluralize } from \"./template.js\";\n\nexport interface WriteOptions {\n\t/** Skip writing if the file exists. Default `false` (overwrite OK). */\n\tskipIfExists?: boolean;\n\t/** Make the path absolute relative to this directory. Default cwd. */\n\tbase?: string;\n}\n\n/**\n * Write a file, creating parent directories as needed.\n * Throws if `skipIfExists` is `true` and the file already exists.\n */\nexport function writeFile(\n\tpath: string,\n\tcontents: string,\n\topts: WriteOptions = {},\n): boolean {\n\tconst base = opts.base ?? process.cwd();\n\tconst target = isAbsolute(path) ? path : resolve(base, path);\n\n\tif (opts.skipIfExists && existsSync(target)) {\n\t\treturn false;\n\t}\n\n\tmkdirSync(dirname(target), { recursive: true });\n\twriteFileSync(target, contents);\n\treturn true;\n}\n\n/**\n * Read a file, or return `undefined` if missing.\n */\nexport function readFile(path: string): string | undefined {\n\tif (!existsSync(path)) return undefined;\n\treturn readFileSync(path, \"utf8\");\n}\n\n/** True if a file exists at the given path. */\nexport function fileExists(path: string): boolean {\n\treturn existsSync(path);\n}\n\n/** True if a directory exists at the given path. */\nexport function directoryExists(path: string): boolean {\n\ttry {\n\t\treturn existsSync(path) && statSync(path).isDirectory();\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/** Compute a project-relative path. */\nexport function relativePath(from: string, to: string): string {\n\tconst r = relative(from, to);\n\treturn r.startsWith(\".\") ? r : `./${r}`;\n}\n\n/**\n * Convert a name like \"User\", \"user\", \"users\", \"user_profile\" into a\n * consistent set of variants used by templates.\n */\nexport function nameVariants(input: string) {\n\tconst trimmed = input.replace(/\\.(ts|js|tsx|jsx)$/, \"\");\n\n\t// PascalCase.\n\tconst pascal =\n\t\ttrimmed\n\t\t\t.split(/[\\s_-]+/)\n\t\t\t.map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())\n\t\t\t.filter(Boolean)\n\t\t\t.join(\"\") || input;\n\n\t// camelCase.\n\tconst camel = pascal.charAt(0).toLowerCase() + pascal.slice(1);\n\n\t// snake_case.\n\tconst snake = pascal\n\t\t.split(/(?=[A-Z])/)\n\t\t.map((w) => w.toLowerCase())\n\t\t.filter(Boolean)\n\t\t.join(\"_\");\n\n\t// kebab-case.\n\tconst kebab = snake.replace(/_/g, \"-\");\n\n\treturn {\n\t\tpascal,\n\t\tcamel,\n\t\tsnake,\n\t\tkebab,\n\t\tplural: pluralize(pascal),\n\t\tpluralSnake: pluralize(snake),\n\t\tpluralKebab: pluralize(kebab),\n\t};\n}\n\n// pluralize is imported from core/template.ts — see that file for the implementation.\n",
|
|
9
9
|
"/**\n * Minimal template engine for code generation.\n *\n * Supports:\n * - `{{ key }}` substitution\n * - `{{ key | filter }}` filters (upper/lower/pascal/camel/snake/kebab/plural/singular)\n * - `{{# flag }} ... {{/ flag }}` truthy sections (include if `flag` is truthy)\n * - `{{^ flag }} ... {{/ flag }}` falsy sections (include if `flag` is falsy)\n * - dotted lookup (`{{ user.name }}`)\n *\n * Multi-line templates are fine; placeholders can span any whitespace.\n */\n\nexport type Filter =\n\t| \"raw\"\n\t| \"upper\"\n\t| \"lower\"\n\t| \"pascal\"\n\t| \"camel\"\n\t| \"snake\"\n\t| \"kebab\"\n\t| \"plural\"\n\t| \"singular\";\n\nexport interface RenderObject {\n\t[key: string]: RenderValue;\n}\nexport type RenderValue =\n\t| string\n\t| number\n\t| boolean\n\t| undefined\n\t| null\n\t| RenderObject\n\t| RenderValue[];\nexport type RenderContext = RenderObject;\n\nconst VAR_RE = /\\{\\{\\s*([\\w.]+)(?:\\s*\\|\\s*(\\w+))?\\s*\\}\\}/;\nconst SECTION_RE =\n\t/\\{\\{\\s*([#^])\\s*([\\w.]+)\\s*\\}\\}([\\s\\S]*?)\\{\\{\\s*\\/\\s*\\2\\s*\\}\\}/g;\n\nexport function render(template: string, context: RenderContext): string {\n\t// 1. Expand sections (truthy / falsy).\n\tlet out = template.replace(\n\t\tSECTION_RE,\n\t\t(_, kind: \"#\" | \"^\", key: string, body: string) => {\n\t\t\tconst v = lookup(context, key);\n\t\t\tconst truthy = isTruthy(v);\n\t\t\tif (kind === \"#\") return truthy ? body : \"\";\n\t\t\treturn truthy ? \"\" : body;\n\t\t},\n\t);\n\n\t// 2. Substitute variables (repeatedly, in case substitutions introduce\n\t// more variables — unusual but safe).\n\tlet prev: string;\n\tdo {\n\t\tprev = out;\n\t\tout = out.replace(VAR_RE, (_, key: string, filter?: string) => {\n\t\t\tconst v = lookup(context, key);\n\t\t\treturn applyFilter(\n\t\t\t\tv === undefined || v === null ? \"\" : String(v),\n\t\t\t\tfilter,\n\t\t\t);\n\t\t});\n\t} while (out !== prev);\n\n\treturn out;\n}\n\nfunction lookup(ctx: RenderContext, dotted: string): RenderValue {\n\tif (dotted in ctx) return ctx[dotted] as RenderValue;\n\tconst parts = dotted.split(\".\");\n\tlet cur: unknown = ctx;\n\tfor (const p of parts) {\n\t\tif (cur == null || typeof cur !== \"object\") return undefined;\n\t\tcur = (cur as Record<string, unknown>)[p];\n\t}\n\treturn cur === undefined || cur === null ? undefined : cur as RenderValue;\n}\n\nfunction isTruthy(v: RenderValue): boolean {\n\tif (v === undefined || v === null) return false;\n\tif (typeof v === \"string\") return v.length > 0 && v !== \"false\" && v !== \"0\";\n\tif (typeof v === \"number\") return v !== 0;\n\tif (typeof v === \"boolean\") return v;\n\t// Object → truthy if it has any keys.\n\tif (Array.isArray(v)) return v.length > 0;\n\treturn Object.keys(v).length > 0;\n}\n\nfunction applyFilter(value: string, filter: string | undefined): string {\n\tswitch (filter as Filter | undefined) {\n\t\tcase undefined:\n\t\tcase \"raw\":\n\t\t\treturn value;\n\t\tcase \"upper\":\n\t\t\treturn value.toUpperCase();\n\t\tcase \"lower\":\n\t\t\treturn value.toLowerCase();\n\t\tcase \"pascal\":\n\t\t\treturn toPascal(value);\n\t\tcase \"camel\":\n\t\t\treturn toCamel(value);\n\t\tcase \"snake\":\n\t\t\treturn toSnake(value);\n\t\tcase \"kebab\":\n\t\t\treturn toKebab(value);\n\t\tcase \"plural\":\n\t\t\treturn pluralize(value);\n\t\tcase \"singular\":\n\t\t\treturn singularize(value);\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown template filter: ${filter}`);\n\t}\n}\n\n// ---------------------------------------------------------------------------\n// Case-conversion helpers\n// ---------------------------------------------------------------------------\n\nfunction splitWords(s: string): string[] {\n\treturn s\n\t\t.replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n\t\t.split(/[\\s_-]+/)\n\t\t.filter(Boolean);\n}\n\nexport function toPascal(s: string): string {\n\treturn splitWords(s)\n\t\t.map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())\n\t\t.join(\"\");\n}\n\nexport function toCamel(s: string): string {\n\tconst p = toPascal(s);\n\treturn p.charAt(0).toLowerCase() + p.slice(1);\n}\n\nexport function toSnake(s: string): string {\n\treturn splitWords(s)\n\t\t.map((w) => w.toLowerCase())\n\t\t.join(\"_\");\n}\n\nexport function toKebab(s: string): string {\n\treturn splitWords(s)\n\t\t.map((w) => w.toLowerCase())\n\t\t.join(\"-\");\n}\n\n// ---------------------------------------------------------------------------\n// Pluralization (English-only; matches Adonis/Rails conventions)\n// ---------------------------------------------------------------------------\n\nexport function pluralize(s: string): string {\n\tif (!s) return s;\n\tif (/(s|x|z|ch|sh)$/i.test(s)) return `${s}es`;\n\tif (/[^aeiou]y$/i.test(s)) return `${s.slice(0, -1)}ies`;\n\tif (/y$/i.test(s)) return `${s}s`;\n\treturn `${s}s`;\n}\n\nexport function singularize(s: string): string {\n\tif (!s) return s;\n\tif (/(ses|xes|zes|ches|shes)$/i.test(s)) return s.slice(0, -2);\n\tif (/ies$/i.test(s)) return `${s.slice(0, -3)}y`;\n\tif (/s$/i.test(s) && s.length > 1) return s.slice(0, -1);\n\treturn s;\n}\n",
|
|
10
10
|
"/**\n * Colored logger for the `nx` CLI.\n *\n * Mirrors the look-and-feel of Adonis ACE / Rails:\n * - info → cyan\n * - success → green\n * - warn → yellow\n * - error → red\n * - debug → dim gray\n *\n * Honors the `NO_COLOR` env var and disables color when stdout is not a\n * TTY (so logs piped into a file don't contain escape codes).\n */\n\nconst USE_COLOR =\n\tprocess.env.NO_COLOR === undefined &&\n\tprocess.env.FORCE_COLOR !== \"0\" &&\n\tprocess.stdout.isTTY === true;\n\nconst wrap = (open: number, close: number) => (s: string) =>\n\tUSE_COLOR ? `\\x1b[${open}m${s}\\x1b[${close}m` : s;\n\nconst c = {\n\treset: wrap(0, 0),\n\tbold: wrap(1, 22),\n\tdim: wrap(2, 22),\n\tred: wrap(31, 39),\n\tgreen: wrap(32, 39),\n\tyellow: wrap(33, 39),\n\tblue: wrap(34, 39),\n\tmagenta: wrap(35, 39),\n\tcyan: wrap(36, 39),\n\tgray: wrap(90, 39),\n};\n\nconst PREFIXES = {\n\tinfo: `${c.cyan(\"ℹ\")}`,\n\tsuccess: `${c.green(\"✔\")}`,\n\twarn: `${c.yellow(\"⚠\")}`,\n\terror: `${c.red(\"✖\")}`,\n\tdebug: `${c.gray(\"·\")}`,\n\tfinger: `${c.magenta(\"➜\")}`,\n};\n\nexport type LoggerLevel = \"info\" | \"success\" | \"warn\" | \"error\" | \"debug\";\n\nexport class Logger {\n\tprivate verbose = false;\n\n\tsetVerbose(v: boolean) {\n\t\tthis.verbose = v;\n\t}\n\n\tinfo(message: string) {\n\t\tconsole.log(`${PREFIXES.info} ${message}`);\n\t}\n\n\tsuccess(message: string) {\n\t\tconsole.log(`${PREFIXES.success} ${message}`);\n\t}\n\n\twarn(message: string) {\n\t\tconsole.warn(`${PREFIXES.warn} ${c.yellow(message)}`);\n\t}\n\n\terror(message: string) {\n\t\tconsole.error(`${PREFIXES.error} ${c.red(message)}`);\n\t}\n\n\tdebug(message: string) {\n\t\tif (!this.verbose) return;\n\t\tconsole.log(`${PREFIXES.debug} ${c.gray(message)}`);\n\t}\n\n\tfinger(message: string) {\n\t\tconsole.log(`${PREFIXES.finger} ${c.magenta(message)}`);\n\t}\n\n\t/**\n\t * Render a small table. `rows` is an array of `[label, value]`\n\t * tuples; the label column is dimmed.\n\t */\n\ttable(rows: Array<[string, string]>) {\n\t\tconst labelWidth = Math.max(...rows.map(([l]) => l.length));\n\t\tfor (const [label, value] of rows) {\n\t\t\tconst padded = label.padEnd(labelWidth);\n\t\t\tconsole.log(` ${c.dim(padded)} ${value}`);\n\t\t}\n\t}\n\n\theading(text: string) {\n\t\tconst bar = \"─\".repeat(text.length + 4);\n\t\tconsole.log(`\\n${c.bold(c.cyan(bar))}`);\n\t\tconsole.log(`${c.bold(c.cyan(` ${text} `))}`);\n\t\tconsole.log(`${c.bold(c.cyan(bar))}\\n`);\n\t}\n\n\tblank() {\n\t\tconsole.log(\"\");\n\t}\n}\n\nexport const logger = new Logger();\n\n/** ANSI helpers (exported for templates that want colored output). */\nexport const colors = c;\n",
|
|
11
11
|
"/**\n * Lenient JSON parser.\n *\n * Standard `JSON.parse` rejects three things that show up regularly\n * in hand-edited `package.json` / `tsconfig.json` files:\n *\n * 1. Line comments: `// like this`\n * 2. Block comments: `/* like this *\\/`\n * 3. Trailing commas: `\\{ \"a\": 1, \\}` or `[ 1, 2, ]`\n *\n * `bun init` and several other generators emit files with at least\n * some of these (the user's `package.json` had `//` comments and\n * tripped the CLI with `Unrecognized token '/'`).\n *\n * Bun has full JSON5 support built in (`Bun.JSON5.parse()`,\n * `Bun.JSON5.stringify()` — see\n * https://bun.sh/docs/runtime/json5#bun-json5-parse), so this\n * module is a thin pass-through rather than a reimplementation.\n * The CLI runs in Bun >= 1.1.0 (see `engines` in package.json).\n *\n * Use this anywhere the CLI reads a user-owned `package.json` or\n * `tsconfig.json`. For framework-owned files (like the templates\n * we render), use plain `JSON.parse` — they're always strict.\n */\nexport function parseJsonLoose<T = Record<string, unknown>>(text: string): T {\n\treturn Bun.JSON5.parse(text) as T;\n}\n",
|
|
12
|
-
"/**\n * Lightweight interactive prompts.\n *\n * Avoids a runtime dependency on a TTY prompt library — we only need\n * confirm / select / text prompts, all of which can be done with\n * `readline` and a fallback to defaults when stdin is not a TTY.\n *\n * Every prompt can be skipped with `--no-interaction` or by passing the\n * answer via flags. This mirrors Adonis ACE and Symfony Console.\n */\n\nimport { createInterface } from \"node:readline\";\nimport { logger } from \"./logger.js\";\n\nexport interface PromptOptions {\n\t/** Default value when the user just presses enter. */\n\tdefault?: string;\n\t/** Choices for select. The first one is the default. */\n\tchoices?: string[];\n\t/** When false, stdin must be a TTY — otherwise the default is used. */\n\tinteractive?: boolean;\n}\n\nexport async function prompt(\n\tmessage: string,\n\toptions: PromptOptions = {},\n): Promise<string> {\n\tconst interactive = options.interactive ?? true;\n\tconst fallback = options.default ?? options.choices?.[0];\n\n\tif (!interactive || !process.stdin.isTTY) {\n\t\tif (fallback === undefined) {\n\t\t\tthrow new Error(\n\t\t\t\t`No default provided for non-interactive prompt: ${message}`,\n\t\t\t);\n\t\t}\n\t\treturn fallback;\n\t}\n\n\tconst rl = createInterface({ input: process.stdin, output: process.stdout });\n\treturn new Promise((resolve) => {\n\t\tconst suffix = options.choices ? ` [${options.choices.join(\"/\")}]` : \"\";\n\t\tconst def = options.default ?? options.choices?.[0] ?? \"\";\n\t\tconst promptStr = ` ${message}${suffix} (${def}): `;\n\t\trl.question(promptStr, (answer) => {\n\t\t\trl.close();\n\t\t\tconst trimmed = answer.trim();\n\t\t\tresolve(trimmed === \"\" ? def : trimmed);\n\t\t});\n\t});\n}\n\nexport async function confirm(\n\tmessage: string,\n\tdefaultYes = false,\n\toptions: PromptOptions = {},\n): Promise<boolean> {\n\tconst interactive = options.interactive ?? true;\n\tif (!interactive || !process.stdin.isTTY) return defaultYes;\n\n\tconst rl = createInterface({ input: process.stdin, output: process.stdout });\n\treturn new Promise((resolve) => {\n\t\tconst suffix = defaultYes ? \" [Y/n]\" : \" [y/N]\";\n\t\trl.question(` ${message}${suffix}: `, (answer) => {\n\t\t\trl.close();\n\t\t\tconst v = answer.trim().toLowerCase();\n\t\t\tif (v === \"\") resolve(defaultYes);\n\t\t\telse resolve(v === \"y\" || v === \"yes\");\n\t\t});\n\t});\n}\n\nexport async function select(\n\tmessage: string,\n\tchoices: string[],\n\toptions: PromptOptions = {},\n): Promise<string> {\n\treturn prompt(message, { ...options, choices });\n}\n\n// ---------------------------------------------------------------------------\n// Shared project scaffolding options (used by both `new` and `init`)\n// ---------------------------------------------------------------------------\n\n/** Valid values for each interactive project-scaffold prompt. */\nexport const VALID_PROJECT_OPTIONS = {\n\tstyle: [\"nest\", \"adonis\", \"functional\"] as const,\n\tview: [\"rendu\", \"edge\", \"eta\", \"inertia\", \"none\"] as const,\n\torm: [\"drizzle\", \"kysely\", \"none\"] as const,\n\tdb: [\"
|
|
12
|
+
"/**\n * Lightweight interactive prompts.\n *\n * Avoids a runtime dependency on a TTY prompt library — we only need\n * confirm / select / text prompts, all of which can be done with\n * `readline` and a fallback to defaults when stdin is not a TTY.\n *\n * Every prompt can be skipped with `--no-interaction` or by passing the\n * answer via flags. This mirrors Adonis ACE and Symfony Console.\n */\n\nimport { createInterface } from \"node:readline\";\nimport { logger } from \"./logger.js\";\n\nexport interface PromptOptions {\n\t/** Default value when the user just presses enter. */\n\tdefault?: string;\n\t/** Choices for select. The first one is the default. */\n\tchoices?: string[];\n\t/** When false, stdin must be a TTY — otherwise the default is used. */\n\tinteractive?: boolean;\n}\n\nexport async function prompt(\n\tmessage: string,\n\toptions: PromptOptions = {},\n): Promise<string> {\n\tconst interactive = options.interactive ?? true;\n\tconst fallback = options.default ?? options.choices?.[0];\n\n\tif (!interactive || !process.stdin.isTTY) {\n\t\tif (fallback === undefined) {\n\t\t\tthrow new Error(\n\t\t\t\t`No default provided for non-interactive prompt: ${message}`,\n\t\t\t);\n\t\t}\n\t\treturn fallback;\n\t}\n\n\tconst rl = createInterface({ input: process.stdin, output: process.stdout });\n\treturn new Promise((resolve) => {\n\t\tconst suffix = options.choices ? ` [${options.choices.join(\"/\")}]` : \"\";\n\t\tconst def = options.default ?? options.choices?.[0] ?? \"\";\n\t\tconst promptStr = ` ${message}${suffix} (${def}): `;\n\t\trl.question(promptStr, (answer) => {\n\t\t\trl.close();\n\t\t\tconst trimmed = answer.trim();\n\t\t\tresolve(trimmed === \"\" ? def : trimmed);\n\t\t});\n\t});\n}\n\nexport async function confirm(\n\tmessage: string,\n\tdefaultYes = false,\n\toptions: PromptOptions = {},\n): Promise<boolean> {\n\tconst interactive = options.interactive ?? true;\n\tif (!interactive || !process.stdin.isTTY) return defaultYes;\n\n\tconst rl = createInterface({ input: process.stdin, output: process.stdout });\n\treturn new Promise((resolve) => {\n\t\tconst suffix = defaultYes ? \" [Y/n]\" : \" [y/N]\";\n\t\trl.question(` ${message}${suffix}: `, (answer) => {\n\t\t\trl.close();\n\t\t\tconst v = answer.trim().toLowerCase();\n\t\t\tif (v === \"\") resolve(defaultYes);\n\t\t\telse resolve(v === \"y\" || v === \"yes\");\n\t\t});\n\t});\n}\n\nexport async function select(\n\tmessage: string,\n\tchoices: string[],\n\toptions: PromptOptions = {},\n): Promise<string> {\n\treturn prompt(message, { ...options, choices });\n}\n\n// ---------------------------------------------------------------------------\n// Shared project scaffolding options (used by both `new` and `init`)\n// ---------------------------------------------------------------------------\n\n/** Valid values for each interactive project-scaffold prompt. */\nexport const VALID_PROJECT_OPTIONS = {\n\tstyle: [\"nest\", \"adonis\", \"functional\"] as const,\n\tview: [\"rendu\", \"edge\", \"eta\", \"inertia\", \"none\"] as const,\n\torm: [\"drizzle\", \"kysely\", \"none\"] as const,\n\tdb: [\"sqlite\", \"postgres\", \"mysql\", \"none\"] as const,\n\tfrontend: [\"react\", \"vue\", \"svelte\", \"solid\"] as const,\n} as const;\n\n/**\n * Resolve a project option from flags or interactive prompt.\n * Validates flag values against the allowed list and re-prompts on invalid input.\n * Shared between `nx new` and `nx init`.\n */\nexport async function resolveProjectOption(\n\tflags: Record<string, unknown>,\n\tkey: string,\n\tvalid: readonly string[],\n\tdefaultVal: string,\n\tinteractive: boolean,\n): Promise<string> {\n\tconst flagVal = flags[key] as string | undefined;\n\tif (flagVal) {\n\t\tif (valid.includes(flagVal)) return flagVal;\n\t\tif (!interactive) {\n\t\t\tlogger.error(`Invalid --${key} \"${flagVal}\". Valid values: ${valid.join(\", \")}`);\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tlogger.warn(`\"${flagVal}\" is not valid for --${key}. Please choose from the list.`);\n\t}\n\n\tconst label = key === \"style\"\n\t\t? \"Routing style\" as const\n\t\t: key === \"view\"\n\t\t\t? \"View engine\" as const\n\t\t\t: key === \"orm\"\n\t\t\t\t? \"ORM driver\" as const\n\t\t\t\t: key === \"db\"\n\t\t\t\t\t? \"Database driver\" as const\n\t\t\t\t\t: \"Inertia frontend\" as const;\n\n\t// Loop until the user provides a valid value (interactive only).\n\tfor (;;) {\n\t\tconst answer = await select(label, [...valid], { default: defaultVal });\n\t\tif (valid.includes(answer)) return answer;\n\t\tlogger.warn(`\"${answer}\" is not valid. Please choose from: ${valid.join(\", \")}`);\n\t}\n}\n",
|
|
13
13
|
"/**\n * CLI version — read from the CLI's own package.json at import time.\n *\n * Uses `readFileSync` + `JSON.parse` because the CLI is bundled into a\n * single `dist/index.js` by Bun.build, and dynamic `import()` of\n * `package.json` would resolve relative to the bundle file at runtime\n * (which is correct here — the package.json always sits one level up\n * from `dist/`).\n */\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { resolve, dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\n// Resolve relative to this source file: ../package.json\n// In the bundled dist/index.js, __dirname = packages/cli/dist/\n// So ../package.json = packages/cli/package.json ✓\nconst PKG_JSON = resolve(__dirname, \"..\", \"package.json\");\n\nfunction loadVersion(): string {\n\ttry {\n\t\tif (!existsSync(PKG_JSON)) return \"0.0.0\";\n\t\tconst raw = readFileSync(PKG_JSON, \"utf-8\");\n\t\tconst pkg = JSON.parse(raw) as { version?: string };\n\t\treturn pkg.version ?? \"0.0.0\";\n\t} catch {\n\t\treturn \"0.0.0\";\n\t}\n}\n\nexport const VERSION: string = loadVersion();\n",
|
|
14
|
-
"/**\n * Shared scaffold logic for `nx init` and `nx new`.\n *\n * Both commands generate the same set of files (main.ts, controller,\n * module, Inertia pages, etc.). This module centralises that logic so\n * the two command files only handle flag parsing, prompting, and\n * merge-vs-fresh semantics.\n */\nimport { mkdirSync, writeFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { render } from \"./template.js\";\nimport { templates } from \"../templates/index.js\";\n\nexport interface ScaffoldOptions {\n\ttarget: string;\n\tname: string;\n\trouting: string;\n\tview: string;\n\torm: string;\n\tdb: string;\n\tfrontend: string;\n\tssr: boolean;\n\tdbUrl: string;\n}\n\n/**\n * Create the directory structure for a new NexusTS project.\n */\nexport function ensureDirectories(target: string, view: string): void {\n\tmkdirSync(resolve(target, \"app/controllers\"), { recursive: true });\n\tmkdirSync(resolve(target, \"app/modules\"), { recursive: true });\n\tmkdirSync(resolve(target, \"app/services\"), { recursive: true });\n\tmkdirSync(resolve(target, \"app/models\"), { recursive: true });\n\tmkdirSync(resolve(target, \"app/repositories\"), { recursive: true });\n\tmkdirSync(resolve(target, \"app/dto\"), { recursive: true });\n\tmkdirSync(resolve(target, \"public\"), { recursive: true });\n\tif (view === \"inertia\") {\n\t\tmkdirSync(resolve(target, \"resources/js/Pages\"), { recursive: true });\n\t} else if (view !== \"none\") {\n\t\tmkdirSync(resolve(target, \"resources/views\"), { recursive: true });\n\t}\n}\n\n/**\n * Compute dependencies based on project options.\n */\nexport function computeDeps(\n\tview: string,\n\torm: string,\n\tdb: string,\n\tfrontend: string,\n): { deps: Record<string, string>; devDeps: Record<string, string> } {\n\tconst deps: Record<string, string> = {\n\t\t\"@nexusts/core\": \"*\",\n\t\thono: \"^4.6.0\",\n\t\tzod: \"^3.23.8\",\n\t};\n\tconst devDeps: Record<string, string> = {};\n\n\tif (orm === \"drizzle\") {\n\t\tdeps[\"@nexusts/drizzle\"] = \"*\";\n\t\tdeps[\"drizzle-orm\"] = \"^0.45.0\";\n\t\tif (db === \"postgres\") deps.pg = \"^8.13.0\";\n\t\tif (db === \"mysql\") deps.mysql2 = \"^3.11.0\";\n\t\tif (db === \"sqlite\" || db === \"node-sqlite\" || db === \"bun-sqlite\") deps[\"better-sqlite3\"] = \"^12.0.0\";\n\t\tdevDeps[\"drizzle-kit\"] = \"^0.31.0\";\n\t}\n\tif (orm === \"kysely\") {\n\t\tdeps[\"@nexusts/kysely\"] = \"*\";\n\t\tdeps.kysely = \"^0.27.0\";\n\t}\n\tif (view !== \"none\") {\n\t\tdeps[\"@nexusts/static\"] = \"*\";\n\t}\n\tdeps[\"@nexusts/view\"] = \"*\";\n\tif (view === \"inertia\") {\n\t\tif (frontend === \"vue\") {\n\t\t\tdeps[\"@inertiajs/vue3\"] = \"^3.0.0\";\n\t\t\tdeps.vue = \"^3.5.0\";\n\t\t} else {\n\t\t\tdeps[\"@inertiajs/react\"] = \"^3.0.0\";\n\t\t\tdeps.react = \"^19.0.0\";\n\t\t\tdeps[\"react-dom\"] = \"^19.0.0\";\n\t\t}\n\t}\n\treturn { deps, devDeps };\n}\n\n/**\n * Build a default package.json object.\n */\nexport function buildPackageJson(\n\tname: string,\n\tdeps: Record<string, string>,\n\tdevDeps: Record<string, string>,\n\tview?: string,\n\tfrontend?: string,\n): Record<string, unknown> {\n\tconst scripts: Record<string, string> = {\n\t\tdev: \"bun --hot app/main.ts\",\n\t\tbuild: \"bun run build.ts\",\n\t\tstart: \"bun app/main.ts\",\n\t\ttest: \"vitest\",\n\t\tnx: \"nx\",\n\t};\n\tif (view === \"inertia\") {\n\t\tconst ext = frontend === \"vue\" ? \"ts\" : \"tsx\";\n\t\tscripts[\"build:frontend\"] = `bun build ./resources/js/app.${ext} --outdir=./public --target=browser --format=esm --minify`;\n\t\tscripts.dev = `bun run build:frontend && bun --hot app/main.ts`;\n\t}\n\tconst pkg: Record<string, unknown> = {\n\t\tname,\n\t\tversion: \"0.1.0\",\n\t\ttype: \"module\",\n\t\tprivate: true,\n\t\tscripts,\n\t\tdependencies: deps,\n\t};\n\tif (Object.keys(devDeps).length > 0) {\n\t\tpkg.devDependencies = devDeps;\n\t}\n\treturn pkg;\n}\n\n/**\n * Generate an nx.config.ts file.\n */\nexport function generateNxConfig(target: string, opts: ScaffoldOptions): void {\n\tconst code = render(templates.project[\"nx.config.ts\"], {\n\t\trouting: opts.routing,\n\t\tview: opts.view,\n\t\tviewPaths: opts.view === \"none\" ? \"\" : \"resources/views\",\n\t\torm: opts.orm,\n\t\tdbDriver: opts.db,\n\t\tdbUrl: opts.dbUrl,\n\t\tinertiaFrontend: opts.frontend,\n\t\tinertiaSSR: opts.ssr,\n\t\tinertiaVersion: \"1.0.0\",\n\t});\n\twriteFileSync(resolve(target, \"nx.config.ts\"), code);\n}\n\n/**\n * Generate a drizzle.config.ts file (only when ORM is drizzle).\n */\nexport function generateDrizzleConfig(target: string, db: string, dbUrl: string): void {\n\tif (db !== \"bun-sqlite\" && db !== \"node-sqlite\" && db !== \"libsql\" && db !== \"postgres\" && db !== \"mysql\") return;\n\tconst dialect = db === \"bun-sqlite\" || db === \"node-sqlite\" || db === \"libsql\"\n\t\t? \"sqlite\"\n\t\t: db === \"postgres\"\n\t\t\t? \"postgresql\"\n\t\t\t: \"mysql\";\n\tconst code = render(templates.project[\"drizzle.config.ts\"], {\n\t\tdialect,\n\t\tdbUrl: dbUrl || \"app.db\",\n\t});\n\twriteFileSync(resolve(target, \"drizzle.config.ts\"), code);\n}\n\nfunction generateEnvFile(): string {\n\treturn `${[\n\t\t\"# ──────────────────────────────────────────────────────\",\n\t\t\"# NexusTS — Environment Variables (committed to git)\",\n\t\t\"#\",\n\t\t\"# Shared defaults for all environments. Override locally via\",\n\t\t\"# .env.local (gitignored) or by environment via .env.{NODE_ENV}\",\n\t\t\"# (e.g. .env.production, .env.development).\",\n\t\t\"# ──────────────────────────────────────────────────────\",\n\t\t\"\",\n\t\t\"# ── App ──\",\n\t\t\"NODE_ENV=development\",\n\t\t\"PORT=3000\",\n\t\t\"\",\n\t\t\"# ── Session secret (REQUIRED) ──\",\n\t\t\"# Generate with: openssl rand -base64 32\",\n\t\t\"SESSION_SECRET=change-me-in-production\",\n\t\t\"\",\n\t\t\"# ── Database: SQLite (default, zero config) ──\",\n\t\t\"DATABASE_URL=app.db\",\n\t\t\"\",\n\t\t\"# ── Database: PostgreSQL ──\",\n\t\t\"# DATABASE_URL=postgres://user:password@localhost:5432/myapp\",\n\t\t\"\",\n\t\t\"# ── Database: MySQL ──\",\n\t\t\"# DATABASE_URL=mysql://user:password@localhost:3306/myapp\",\n\t\t\"\",\n\t\t\"# ── Better Auth (if using @nexusts/auth) ──\",\n\t\t\"# BETTER_AUTH_SECRET=\",\n\t\t\"# BETTER_AUTH_URL=http://localhost:3000\",\n\t].join(\"\\n\")}\\n`;\n}\n\nfunction generateEnvLocalFile(): string {\n\treturn `${[\n\t\t\"# ──────────────────────────────────────────────────────\",\n\t\t\"# NexusTS — Local Overrides (DO NOT COMMIT to git)\",\n\t\t\"#\",\n\t\t\"# This file is gitignored. Use it for secrets and local\",\n\t\t\"# configuration that should never be checked in.\",\n\t\t\"# ──────────────────────────────────────────────────────\",\n\t\t\"\",\n\t\t\"# Override any value from .env here:\",\n\t\t\"# DATABASE_URL=postgres://user:password@localhost:5432/myapp\",\n\t\t\"# SESSION_SECRET=my-local-secret\",\n\t].join(\"\\n\")}\\n`;\n}\n\nfunction generateGitIgnore(): string {\n\treturn \"# NexusTS\\nnode_modules/\\napp.db\\n*.db\\n.env.local\\ndist/\\n\";\n}\n\n/**\n * Generate all project template files.\n */\nexport function generateProjectFiles(target: string, opts: ScaffoldOptions): string[] {\n\tconst created: string[] = [];\n\tconst write = (path: string, content: string) => {\n\t\twriteFileSync(resolve(target, path), content);\n\t\tcreated.push(path);\n\t};\n\n\tgenerateNxConfig(target, opts);\n\twrite(\"public/.gitkeep\", \"\");\n\n\t// View files\n\tif (opts.view === \"inertia\") {\n\t\tif (opts.frontend === \"vue\") {\n\t\t\twrite(\"resources/js/Pages/Welcome.vue\",\n\t\t\t\t`<template>\\n <main style=\"font-family: system-ui, sans-serif; max-width: 560px; margin: 2em auto\">\\n <h1>Hello, {{ name }}!</h1>\\n </main>\\n</template>\\n\\n<script setup lang=\"ts\">\\ndefineProps<{ name: string }>();\\n</script>\\n`);\n\t\t\twrite(\"resources/js/app.ts\",\n\t\t\t\t`import { createInertiaApp } from \"@inertiajs/vue3\";\\nimport { createApp, h } from \"vue\";\\nimport Welcome from \"./Pages/Welcome.vue\";\\n\\ncreateInertiaApp({\\n resolve: (name: string) => {\\n if (name === \"Welcome\") return Welcome;\\n throw new Error(\"Unknown page: \" + name);\\n },\\n setup({ el, App, props }: any) {\\n createApp({ render: () => h(App, props) }).mount(el);\\n },\\n});\\n`);\n\t\t} else {\n\t\t\twrite(\"resources/js/Pages/Welcome.tsx\",\n\t\t\t\t`import { useState } from \"react\";\\n\\nexport default function Welcome({ name }: { name: string }) {\\n const [count, setCount] = useState(0);\\n return (\\n <main style={{ fontFamily: \"system-ui, sans-serif\", maxWidth: 560, margin: \"2em auto\" }}>\\n <h1>Hello, {name}!</h1>\\n <p>Counter: <strong>{count}</strong></p>\\n <button onClick={() => setCount((c) => c + 1)} style={{ padding: \"0.5em 1em\" }}>\\n +1\\n </button>\\n </main>\\n );\\n}\\n`);\n\t\t\twrite(\"resources/js/app.tsx\",\n\t\t\t\t`import { createInertiaApp } from \"@inertiajs/react\";\\nimport { createRoot } from \"react-dom/client\";\\nimport Welcome from \"./Pages/Welcome.js\";\\n\\ncreateInertiaApp({\\n resolve: (name: string) => {\\n if (name === \"Welcome\") return Welcome;\\n throw new Error(\"Unknown page: \" + name);\\n },\\n setup({ el, App, props }: any) {\\n createRoot(el).render(<App {...props} />);\\n },\\n});\\n`);\n\t\t}\n\t} else if (opts.view !== \"none\") {\n\t\twrite(\"resources/views/welcome.html\",\n\t\t\t`<h1>Welcome to ${opts.name}</h1>\\n<p>This is a sample Rendu template.</p>\\n<p>Founded <?= year ?>.</p>\\n`);\n\t}\n\n\twrite(\".env\", generateEnvFile());\n\twrite(\".env.local\", generateEnvLocalFile());\n\twrite(\".gitignore\", generateGitIgnore());\n\n\t// app/main.ts\n\t{\n\t\tconst hasView = opts.view !== \"none\";\n\t\tconst staticMw = hasView\n\t\t\t? `import { StaticModule } from '@nexusts/static';\\nconst staticMiddleware = StaticModule.mount({ root: './public', prefix: '/static' });\\n`\n\t\t\t: '';\n\t\tconst staticOpt = hasView ? '\\n middleware: [staticMiddleware],' : '';\n\t\twrite(\"app/main.ts\",\n\t\t\t`import { Application } from '@nexusts/core';\\n${staticMw}import { AppModule } from './app.module.js';\\n\\nconst app = new Application(AppModule, {\\n logging: true,\\n port: Number(process.env['PORT'] ?? 3000),${staticOpt}\\n});\\n\\nawait app.listen();\\nconsole.log('[nexus] Listening on http://localhost:' + (process.env['PORT'] ?? 3000));\\n`);\n\t}\n\n\t// app/app.module.ts\n\t{\n\t\tconst isDrizzle = opts.orm === \"drizzle\";\n\t\tconst isKysely = opts.orm === \"kysely\";\n\t\tconst hasOrm = isDrizzle || isKysely;\n\t\tlet ormImport = '';\n\t\tlet ormBlock = '';\n\t\tif (isDrizzle) {\n\t\t\tormImport = `import { DrizzleModule } from '@nexusts/drizzle';\\n`;\n\t\t\tconst d = opts.db === 'bun-sqlite' ? 'bun-sqlite' : 'sqlite';\n\t\t\tormBlock = \" DrizzleModule.forRoot({\\n dialect: '\" + d + \"',\\n connection: { filename: '\" + (opts.dbUrl || \"app.db\") + \"' },\\n logging: true,\\n })\";\n\t\t} else if (isKysely) {\n\t\t\tormImport = \"import { KyselyModule, BunSqliteDialect } from '@nexusts/kysely';\\nimport { SqliteDialect } from 'kysely';\\nimport { Database } from 'bun:sqlite';\\n\";\n\t\t\tormBlock = \" KyselyModule.forRoot({\\n config: {\\n dialect: new SqliteDialect({\\n database: BunSqliteDialect.wrap(new Database('\" + (opts.dbUrl || \"app.db\") + \"')),\\n }),\\n },\\n logging: true,\\n })\";\n\t\t}\n\t\tconst isInertia = opts.view === \"inertia\";\n\t\tconst inertiaImport = isInertia ? `import { Inertia } from '@nexusts/view';\\n` : '';\n\t\tconst inertiaProvider = isInertia\n\t\t\t? ` providers: [{ provide: Inertia.TOKEN, useValue: new Inertia({ scripts: ['/static/app.js'] }) }],\\n`\n\t\t\t: '';\n\t\twrite(\"app/app.module.ts\",\n\t\t\t`${ormImport}${inertiaImport}import { Module } from '@nexusts/core';\\nimport { HomeController } from './controllers/home.controller.js';\\n\\n@Module({\\n imports: [${hasOrm ? `\\n${ormBlock},\\n` : ''} ],\\n${inertiaProvider} controllers: [HomeController],\\n})\\nexport class AppModule {}\\n`);\n\t}\n\t\tif (opts.view === \"inertia\") {\n\t\t\twrite(\"app/controllers/home.controller.ts\",\n\t\t\t\t`import { Controller, Get, Inject } from '@nexusts/core';\\nimport { Inertia } from '@nexusts/view';\\n\\n@Controller('/')\\nexport class HomeController {\\n @Inject(Inertia.TOKEN) private inertia!: Inertia;\\n\\n @Get('/')\\n index() {\\n return this.inertia.render('Welcome', { name: 'NexusTS' });\\n }\\n}\\n`);\n\t\t} else if (opts.view !== \"none\") {\n\t\t\twrite(\"app/controllers/home.controller.ts\",\n\t\t\t\t`import { Controller, Get } from '@nexusts/core';\\n\\n@Controller('/')\\nexport class HomeController {\\n @Get('/')\\n index() {\\n return {\\n view: 'welcome.html',\\n data: { year: new Date().getFullYear() },\\n };\\n }\\n}\\n`);\n\t\t} else {\n\t\t\twrite(\"app/controllers/home.controller.ts\",\n\t\t\t\t`import { Controller, Get } from '@nexusts/core';\\n\\n@Controller('/')\\nexport class HomeController {\\n @Get('/')\\n index() {\\n return { status: 200, body: { message: 'Hello from NexusTS!' } };\\n }\\n}\\n`);\n\t\t}\n\n\tif (opts.orm === \"drizzle\") {\n\t\tgenerateDrizzleConfig(target, opts.db, opts.dbUrl);\n\t}\n\n\twrite(\"README.md\",\n\t\t`# ${opts.name}\\n\\nA NexusTS project.\\n\\n## Run\\n\\n\\`\\`\\`bash\\nbun install\\nbun run dev\\n\\`\\`\\`\\n\\n## Scaffolding\\n\\n\\`\\`\\`bash\\nbunx nx make:crud Post\\n\\`\\`\\`\\n`);\n\n\treturn created;\n}\n",
|
|
14
|
+
"/**\n * Shared scaffold logic for `nx init` and `nx new`.\n *\n * Both commands generate the same set of files (main.ts, controller,\n * module, Inertia pages, etc.). This module centralises that logic so\n * the two command files only handle flag parsing, prompting, and\n * merge-vs-fresh semantics.\n */\nimport { mkdirSync, writeFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { render } from \"./template.js\";\nimport { templates } from \"../templates/index.js\";\n\nexport interface ScaffoldOptions {\n\ttarget: string;\n\tname: string;\n\trouting: string;\n\tview: string;\n\torm: string;\n\tdb: string;\n\tfrontend: string;\n\tssr: boolean;\n\tdbUrl: string;\n}\n\n/**\n * Create the directory structure for a new NexusTS project.\n */\nexport function ensureDirectories(target: string, view: string): void {\n\tmkdirSync(resolve(target, \"app/controllers\"), { recursive: true });\n\tmkdirSync(resolve(target, \"app/modules\"), { recursive: true });\n\tmkdirSync(resolve(target, \"app/services\"), { recursive: true });\n\tmkdirSync(resolve(target, \"app/models\"), { recursive: true });\n\tmkdirSync(resolve(target, \"app/repositories\"), { recursive: true });\n\tmkdirSync(resolve(target, \"app/dto\"), { recursive: true });\n\tmkdirSync(resolve(target, \"public\"), { recursive: true });\n\tif (view === \"inertia\") {\n\t\tmkdirSync(resolve(target, \"resources/js/Pages\"), { recursive: true });\n\t} else if (view !== \"none\") {\n\t\tmkdirSync(resolve(target, \"resources/views\"), { recursive: true });\n\t}\n}\n\n/**\n * Compute dependencies based on project options.\n */\nexport function computeDeps(\n\tview: string,\n\torm: string,\n\tdb: string,\n\tfrontend: string,\n): { deps: Record<string, string>; devDeps: Record<string, string> } {\n\tconst deps: Record<string, string> = {\n\t\t\"@nexusts/core\": \"*\",\n\t\thono: \"^4.6.0\",\n\t\tzod: \"^3.23.8\",\n\t};\n\tconst devDeps: Record<string, string> = {};\n\n\tif (orm === \"drizzle\") {\n\t\tdeps[\"@nexusts/drizzle\"] = \"*\";\n\t\tdeps[\"drizzle-orm\"] = \"^0.45.0\";\n\t\tif (db === \"postgres\") deps.pg = \"^8.13.0\";\n\t\tif (db === \"mysql\") deps.mysql2 = \"^3.11.0\";\n\t\tif (db === \"sqlite\" || db === \"sqlite\" || db === \"bun-sqlite\") deps[\"better-sqlite3\"] = \"^12.0.0\";\n\t\tdevDeps[\"drizzle-kit\"] = \"^0.31.0\";\n\t}\n\tif (orm === \"kysely\") {\n\t\tdeps[\"@nexusts/kysely\"] = \"*\";\n\t\tdeps.kysely = \"^0.27.0\";\n\t}\n\tif (view !== \"none\") {\n\t\tdeps[\"@nexusts/static\"] = \"*\";\n\t}\n\tdeps[\"@nexusts/view\"] = \"*\";\n\tif (view === \"inertia\") {\n\t\tif (frontend === \"vue\") {\n\t\t\tdeps[\"@inertiajs/vue3\"] = \"^3.0.0\";\n\t\t\tdeps.vue = \"^3.5.0\";\n\t\t} else {\n\t\t\tdeps[\"@inertiajs/react\"] = \"^3.0.0\";\n\t\t\tdeps.react = \"^19.0.0\";\n\t\t\tdeps[\"react-dom\"] = \"^19.0.0\";\n\t\t}\n\t}\n\treturn { deps, devDeps };\n}\n\n/**\n * Build a default package.json object.\n */\nexport function buildPackageJson(\n\tname: string,\n\tdeps: Record<string, string>,\n\tdevDeps: Record<string, string>,\n\tview?: string,\n\tfrontend?: string,\n): Record<string, unknown> {\n\tconst scripts: Record<string, string> = {\n\t\tdev: \"bun --hot app/main.ts\",\n\t\tbuild: \"bun run build.ts\",\n\t\tstart: \"bun app/main.ts\",\n\t\ttest: \"vitest\",\n\t\tnx: \"nx\",\n\t};\n\tif (view === \"inertia\") {\n\t\tconst ext = frontend === \"vue\" ? \"ts\" : \"tsx\";\n\t\tscripts[\"build:frontend\"] = `bun build ./resources/js/app.${ext} --outdir=./public --target=browser --format=esm --minify`;\n\t\tscripts.dev = `bun run build:frontend && bun --hot app/main.ts`;\n\t}\n\tconst pkg: Record<string, unknown> = {\n\t\tname,\n\t\tversion: \"0.1.0\",\n\t\ttype: \"module\",\n\t\tprivate: true,\n\t\tscripts,\n\t\tdependencies: deps,\n\t};\n\tif (Object.keys(devDeps).length > 0) {\n\t\tpkg.devDependencies = devDeps;\n\t}\n\treturn pkg;\n}\n\n/**\n * Generate an nx.config.ts file.\n */\nexport function generateNxConfig(target: string, opts: ScaffoldOptions): void {\n\tconst code = render(templates.project[\"nx.config.ts\"], {\n\t\trouting: opts.routing,\n\t\tview: opts.view,\n\t\tviewPaths: opts.view === \"none\" ? \"\" : \"resources/views\",\n\t\torm: opts.orm,\n\t\tdbDriver: opts.db,\n\t\tdbUrl: opts.dbUrl,\n\t\tinertiaFrontend: opts.frontend,\n\t\tinertiaSSR: opts.ssr,\n\t\tinertiaVersion: \"1.0.0\",\n\t});\n\twriteFileSync(resolve(target, \"nx.config.ts\"), code);\n}\n\n/**\n * Generate a drizzle.config.ts file (only when ORM is drizzle).\n */\nexport function generateDrizzleConfig(target: string, db: string, dbUrl: string): void {\n\tconst dialect = db === \"bun-sqlite\" || db === \"sqlite\" \n\t\t? \"sqlite\"\n\t\t: db === \"postgres\"\n\t\t\t? \"postgresql\"\n\t\t\t: \"mysql\";\n\tconst code = render(templates.project[\"drizzle.config.ts\"], {\n\t\tdialect,\n\t\tdbUrl: dbUrl || \"app.db\",\n\t});\n\twriteFileSync(resolve(target, \"drizzle.config.ts\"), code);\n}\n\nfunction generateEnvFile(): string {\n\treturn `${[\n\t\t\"# ──────────────────────────────────────────────────────\",\n\t\t\"# NexusTS — Environment Variables (committed to git)\",\n\t\t\"#\",\n\t\t\"# Shared defaults for all environments. Override locally via\",\n\t\t\"# .env.local (gitignored) or by environment via .env.{NODE_ENV}\",\n\t\t\"# (e.g. .env.production, .env.development).\",\n\t\t\"# ──────────────────────────────────────────────────────\",\n\t\t\"\",\n\t\t\"# ── App ──\",\n\t\t\"NODE_ENV=development\",\n\t\t\"PORT=3000\",\n\t\t\"\",\n\t\t\"# ── Session secret (REQUIRED) ──\",\n\t\t\"# Generate with: openssl rand -base64 32\",\n\t\t\"SESSION_SECRET=change-me-in-production\",\n\t\t\"\",\n\t\t\"# ── Database: SQLite (default, zero config) ──\",\n\t\t\"DATABASE_URL=app.db\",\n\t\t\"\",\n\t\t\"# ── Database: PostgreSQL ──\",\n\t\t\"# DATABASE_URL=postgres://user:password@localhost:5432/myapp\",\n\t\t\"\",\n\t\t\"# ── Database: MySQL ──\",\n\t\t\"# DATABASE_URL=mysql://user:password@localhost:3306/myapp\",\n\t\t\"\",\n\t\t\"# ── Better Auth (if using @nexusts/auth) ──\",\n\t\t\"# BETTER_AUTH_SECRET=\",\n\t\t\"# BETTER_AUTH_URL=http://localhost:3000\",\n\t].join(\"\\n\")}\\n`;\n}\n\nfunction generateEnvLocalFile(): string {\n\treturn `${[\n\t\t\"# ──────────────────────────────────────────────────────\",\n\t\t\"# NexusTS — Local Overrides (DO NOT COMMIT to git)\",\n\t\t\"#\",\n\t\t\"# This file is gitignored. Use it for secrets and local\",\n\t\t\"# configuration that should never be checked in.\",\n\t\t\"# ──────────────────────────────────────────────────────\",\n\t\t\"\",\n\t\t\"# Override any value from .env here:\",\n\t\t\"# DATABASE_URL=postgres://user:password@localhost:5432/myapp\",\n\t\t\"# SESSION_SECRET=my-local-secret\",\n\t].join(\"\\n\")}\\n`;\n}\n\nfunction generateGitIgnore(): string {\n\treturn \"# NexusTS\\nnode_modules/\\napp.db\\n*.db\\n.env.local\\ndist/\\n\";\n}\n\n/**\n * Generate all project template files.\n */\nexport function generateProjectFiles(target: string, opts: ScaffoldOptions): string[] {\n\tconst created: string[] = [];\n\tconst write = (path: string, content: string) => {\n\t\twriteFileSync(resolve(target, path), content);\n\t\tcreated.push(path);\n\t};\n\n\tgenerateNxConfig(target, opts);\n\twrite(\"public/.gitkeep\", \"\");\n\n\t// View files\n\tif (opts.view === \"inertia\") {\n\t\tif (opts.frontend === \"vue\") {\n\t\t\twrite(\"resources/js/Pages/Welcome.vue\",\n\t\t\t\t`<template>\\n <main style=\"font-family: system-ui, sans-serif; max-width: 560px; margin: 2em auto\">\\n <h1>Hello, {{ name }}!</h1>\\n </main>\\n</template>\\n\\n<script setup lang=\"ts\">\\ndefineProps<{ name: string }>();\\n</script>\\n`);\n\t\t\twrite(\"resources/js/app.ts\",\n\t\t\t\t`import { createInertiaApp } from \"@inertiajs/vue3\";\\nimport { createApp, h } from \"vue\";\\nimport Welcome from \"./Pages/Welcome.vue\";\\n\\ncreateInertiaApp({\\n resolve: (name: string) => {\\n if (name === \"Welcome\") return Welcome;\\n throw new Error(\"Unknown page: \" + name);\\n },\\n setup({ el, App, props }: any) {\\n createApp({ render: () => h(App, props) }).mount(el);\\n },\\n});\\n`);\n\t\t} else {\n\t\t\twrite(\"resources/js/Pages/Welcome.tsx\",\n\t\t\t\t`import { useState } from \"react\";\\n\\nexport default function Welcome({ name }: { name: string }) {\\n const [count, setCount] = useState(0);\\n return (\\n <main style={{ fontFamily: \"system-ui, sans-serif\", maxWidth: 560, margin: \"2em auto\" }}>\\n <h1>Hello, {name}!</h1>\\n <p>Counter: <strong>{count}</strong></p>\\n <button onClick={() => setCount((c) => c + 1)} style={{ padding: \"0.5em 1em\" }}>\\n +1\\n </button>\\n </main>\\n );\\n}\\n`);\n\t\t\twrite(\"resources/js/app.tsx\",\n\t\t\t\t`import { createInertiaApp } from \"@inertiajs/react\";\\nimport { createRoot } from \"react-dom/client\";\\nimport Welcome from \"./Pages/Welcome.js\";\\n\\ncreateInertiaApp({\\n resolve: (name: string) => {\\n if (name === \"Welcome\") return Welcome;\\n throw new Error(\"Unknown page: \" + name);\\n },\\n setup({ el, App, props }: any) {\\n createRoot(el).render(<App {...props} />);\\n },\\n});\\n`);\n\t\t}\n\t} else if (opts.view !== \"none\") {\n\t\twrite(\"resources/views/welcome.html\",\n\t\t\t`<h1>Welcome to ${opts.name}</h1>\\n<p>This is a sample Rendu template.</p>\\n<p>Founded <?= year ?>.</p>\\n`);\n\t}\n\n\twrite(\".env\", generateEnvFile());\n\twrite(\".env.local\", generateEnvLocalFile());\n\twrite(\".gitignore\", generateGitIgnore());\n\n\t// app/main.ts\n\t{\n\t\tconst hasView = opts.view !== \"none\";\n\t\tconst staticMw = hasView\n\t\t\t? `import { StaticModule } from '@nexusts/static';\\nconst staticMiddleware = StaticModule.mount({ root: './public', prefix: '/static' });\\n`\n\t\t\t: '';\n\t\tconst staticOpt = hasView ? '\\n middleware: [staticMiddleware],' : '';\n\t\twrite(\"app/main.ts\",\n\t\t\t`import { Application } from '@nexusts/core';\\n${staticMw}import { AppModule } from './app.module.js';\\n\\nconst app = new Application(AppModule, {\\n logging: true,\\n port: Number(process.env['PORT'] ?? 3000),${staticOpt}\\n});\\n\\nawait app.listen();\\nconsole.log('[nexus] Listening on http://localhost:' + (process.env['PORT'] ?? 3000));\\n`);\n\t}\n\n\t// app/app.module.ts\n\t{\n\t\tconst isDrizzle = opts.orm === \"drizzle\";\n\t\tconst isKysely = opts.orm === \"kysely\";\n\t\tconst hasOrm = isDrizzle || isKysely;\n\t\tlet ormImport = '';\n\t\tlet ormBlock = '';\n\t\tif (isDrizzle) {\n\t\t\tormImport = `import { DrizzleModule } from '@nexusts/drizzle';\\n`;\n\t\t\tconst d = opts.db === 'bun-sqlite' ? 'bun-sqlite' : 'sqlite';\n\t\t\tormBlock = \" DrizzleModule.forRoot({\\n dialect: '\" + d + \"',\\n connection: { filename: '\" + (opts.dbUrl || \"app.db\") + \"' },\\n logging: true,\\n })\";\n\t\t} else if (isKysely) {\n\t\t\tormImport = \"import { KyselyModule, BunSqliteDialect } from '@nexusts/kysely';\\nimport { SqliteDialect } from 'kysely';\\nimport { Database } from 'bun:sqlite';\\n\";\n\t\t\tormBlock = \" KyselyModule.forRoot({\\n config: {\\n dialect: new SqliteDialect({\\n database: BunSqliteDialect.wrap(new Database('\" + (opts.dbUrl || \"app.db\") + \"')),\\n }),\\n },\\n logging: true,\\n })\";\n\t\t}\n\t\tconst isInertia = opts.view === \"inertia\";\n\t\tconst inertiaImport = isInertia ? `import { Inertia } from '@nexusts/view';\\n` : '';\n\t\tconst inertiaProvider = isInertia\n\t\t\t? ` providers: [{ provide: Inertia.TOKEN, useValue: new Inertia({ scripts: ['/static/app.js'] }) }],\\n`\n\t\t\t: '';\n\t\twrite(\"app/app.module.ts\",\n\t\t\t`${ormImport}${inertiaImport}import { Module } from '@nexusts/core';\\nimport { HomeController } from './controllers/home.controller.js';\\n\\n@Module({\\n imports: [${hasOrm ? `\\n${ormBlock},\\n` : ''} ],\\n${inertiaProvider} controllers: [HomeController],\\n})\\nexport class AppModule {}\\n`);\n\t}\n\t\tif (opts.view === \"inertia\") {\n\t\t\twrite(\"app/controllers/home.controller.ts\",\n\t\t\t\t`import { Controller, Get, Inject } from '@nexusts/core';\\nimport { Inertia } from '@nexusts/view';\\n\\n@Controller('/')\\nexport class HomeController {\\n @Inject(Inertia.TOKEN) private inertia!: Inertia;\\n\\n @Get('/')\\n index() {\\n return this.inertia.render('Welcome', { name: 'NexusTS' });\\n }\\n}\\n`);\n\t\t} else if (opts.view !== \"none\") {\n\t\t\twrite(\"app/controllers/home.controller.ts\",\n\t\t\t\t`import { Controller, Get } from '@nexusts/core';\\n\\n@Controller('/')\\nexport class HomeController {\\n @Get('/')\\n index() {\\n return {\\n view: 'welcome.html',\\n data: { year: new Date().getFullYear() },\\n };\\n }\\n}\\n`);\n\t\t} else {\n\t\t\twrite(\"app/controllers/home.controller.ts\",\n\t\t\t\t`import { Controller, Get } from '@nexusts/core';\\n\\n@Controller('/')\\nexport class HomeController {\\n @Get('/')\\n index() {\\n return { status: 200, body: { message: 'Hello from NexusTS!' } };\\n }\\n}\\n`);\n\t\t}\n\n\tif (opts.orm === \"drizzle\") {\n\t\tgenerateDrizzleConfig(target, opts.db, opts.dbUrl);\n\t}\n\n\twrite(\"README.md\",\n\t\t`# ${opts.name}\\n\\nA NexusTS project.\\n\\n## Run\\n\\n\\`\\`\\`bash\\nbun install\\nbun run dev\\n\\`\\`\\`\\n\\n## Scaffolding\\n\\n\\`\\`\\`bash\\nbunx nx make:crud Post\\n\\`\\`\\`\\n`);\n\n\treturn created;\n}\n",
|
|
15
15
|
"/**\n * AdonisJS-style controller template (no decorators, just methods).\n *\n * Use when `nx.config.ts` has `routing: 'adonis'`. Routes are added\n * separately by the user (or by the `make:crud` command) to a route\n * table; this controller is just a plain class.\n */\n\nexport default `\n{{# hasService }}\nimport { {{ service }} } from '../services/{{ kebab }}.service.js';\n{{/ hasService }}\n\nexport class {{ name }}Controller {\n async index() {\n return new {{ service }}().findAll();\n }\n\n async show({ params }: { params: { id: string } }) {\n return new {{ service }}().findOne(Number(params.id));\n }\n\n async create({ body }: { body: any }) {\n return { status: 201, body: new {{ service }}().create(body) };\n }\n\n async update({ params, body }: { params: { id: string }; body: any }) {\n return new {{ service }}().update(Number(params.id), body);\n }\n\n async destroy({ params }: { params: { id: string } }) {\n return new {{ service }}().delete(Number(params.id));\n }\n}\n\nexport const {{ camel }}Controller = new {{ name }}Controller();\n`.trimStart();\n",
|
|
16
16
|
"/**\n * Functional (Hono-native) controller template.\n *\n * Each route is a plain function `(c) => Response`. Useful for\n * webhooks, SSE endpoints, or anything that doesn't fit a class shape.\n */\n\nexport default `\nimport type { Context } from 'hono';\n\nexport const {{ camel }}Routes = {\n list: async (c: Context) => {\n return c.json([]);\n },\n\n show: async (c: Context) => {\n const id = c.req.param('id');\n return c.json({ id });\n },\n\n create: async (c: Context) => {\n const body = await c.req.json();\n return c.json({ created: body }, 201);\n },\n\n update: async (c: Context) => {\n const id = c.req.param('id');\n const body = await c.req.json();\n return c.json({ id, body });\n },\n\n destroy: async (c: Context) => {\n const id = c.req.param('id');\n return c.json({ removed: id });\n },\n};\n`.trimStart();\n",
|
|
17
17
|
"/**\n * NestJS-style controller template (standard decorator mode).\n *\n * Uses field injection (@Inject on fields) instead of constructor params,\n * and the method receives `ctx` (Hono Context) instead of @Param/@Body.\n *\n * Context keys used:\n * name — PascalCase class name (e.g. \"User\")\n * kebab — kebab-case URL segment (e.g. \"user\")\n * pascal — alias for name (template convenience)\n * camel — camelCase variable name (e.g. \"userService\")\n * service — PascalCase service name (e.g. \"UserService\")\n * serviceCamel — camelCase service variable (e.g. \"userService\")\n */\n\nexport default `\nimport { Controller, Delete, Get, Inject, Post, Put, inputValue } from '@nexusts/core';\nimport type { Context } from 'hono';\n{{# hasService }}\nimport { {{ service }} } from '../services/{{ kebab }}.service.js';\n{{/ hasService }}\n\n@Controller('/{{ kebab }}s')\nexport class {{ name }}Controller {\n @Inject({{ service }}) declare {{ serviceCamel }}: {{ service }};\n\n @Get('/')\n async index(ctx: Context) {\n return this.{{ serviceCamel }}.findAll();\n }\n\n @Get('/:id')\n async show(ctx: Context) {\n const id = inputValue(ctx.req.param('id')).number().required().value();\n return this.{{ serviceCamel }}.findOne(id);\n }\n\n @Post('/')\n async create(ctx: Context) {\n const body = await ctx.req.json();\n return { status: 201, body: await this.{{ serviceCamel }}.create(body) };\n }\n\n @Put('/:id')\n async update(ctx: Context) {\n const id = inputValue(ctx.req.param('id')).number().required().value();\n const body = await ctx.req.json();\n return this.{{ serviceCamel }}.update(id, body);\n }\n\n @Delete('/:id')\n async destroy(ctx: Context) {\n const id = inputValue(ctx.req.param('id')).number().required().value();\n return this.{{ serviceCamel }}.delete(id);\n }\n}\n`.trimStart();",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"/**\n * Kysely model template.\n *\n * Generates a typed table interface + KyselyRepository subclass\n * using `@nexusts/kysely`'s `KyselyRepository` and `KyselyService`.\n *\n * Context:\n * name — PascalCase (e.g. \"User\")\n * camel — camelCase (e.g. \"user\")\n * snake — snake_case (e.g. \"user\")\n * tableName — snake_case plural (e.g. \"users\")\n * columns — rendered column definitions\n */\n\nexport default `\nimport type { Generated, Insertable, Selectable, Updateable } from 'kysely';\nimport { Inject, Injectable } from '@nexusts/core';\nimport { KyselyService, KyselyRepository } from '@nexusts/kysely';\n\n/**\n * Table interface for {{ tableName }}.\n */\nexport interface {{ name }}Table {\n id: Generated<number>;\n{{ columns }}\n created_at: Generated<string>;\n updated_at: Generated<string>;\n}\n\n/** Row types derived from the table interface. */\nexport type {{ name }} = Selectable<{{ name }}Table>;\nexport type New{{ name }} = Insertable<{{ name }}Table>;\nexport type {{ name }}Update = Updateable<{{ name }}Table>;\n\n/**\n * Repository for {{ tableName }} — Lucid-style CRUD via KyselyRepository.\n */\n@Injectable()\nexport class {{ name }}Repository extends KyselyRepository<any, '{{ tableName }}'> {\n @Inject(KyselyService.TOKEN) declare db: KyselyService<any>;\n protected readonly tableName = '{{ tableName }}' as const;\n}\n`.trimStart();\n",
|
|
28
28
|
"/**\n * Module template.\n *\n * Aggregates controllers, services, and repositories for a feature\n * folder. Mirrors NestJS `@Module({ controllers, providers, exports })`.\n *\n * Context:\n * name — PascalCase module name (e.g. \"User\")\n * controller — PascalCase controller (e.g. \"UserController\")\n * service — PascalCase service (e.g. \"UserService\")\n * repository — PascalCase repository (e.g. \"UserRepository\") — optional\n * exports — comma-separated tokens to re-export (e.g. \"UserService\")\n */\n\nexport default `\nimport { Module } from '@nexusts/core';\nimport { {{ controller }} } from '../controllers/{{ kebab }}.controller.js';\n{{#hasService}}import { {{ service }} } from '../services/{{ kebab }}.service.js';{{/hasService}}\n{{#hasRepo}}import { {{ repository }} } from '../repositories/{{ kebab }}.repository.js';{{/hasRepo}}\n\n@Module({\n controllers: [{{ controller }}],\n providers: [\n {{#hasService}}{{ service }},{{/hasService}}\n {{#hasRepo}}{{ repository }},{{/hasRepo}}\n ],\n exports: [\n {{#hasService}}{{ service }},{{/hasService}}\n ],\n})\nexport class {{ name }}Module {}\n`.trimStart();\n",
|
|
29
29
|
"/**\n * nx.config.ts template — placed at the project root by `nx init` /\n * `nx new`.\n */\n\nexport default `/**\n * NexusTS project configuration.\n * Run \\`nx info\\` to see the resolved values.\n */\n\nexport default {\n // ---------------------------------------------------------------------------\n // Core\n // ---------------------------------------------------------------------------\n\n /** Routing style used by \\`make:controller\\` / \\`make:crud\\`. */\n routing: '{{ routing }}',\n\n /** View engine — \\`inertia\\`, \\`rendu\\`, \\`edge\\`, or \\`none\\`. */\n view: '{{ view }}',\n\n /**\n * Directory searched when a controller returns a view file name\n * (e.g. \\`about.html\\`). Empty string = inline templates only.\n * Typical: \\`'resources/views'\\`. On edge runtimes\n * (Cloudflare Workers), leave empty and pass inline strings.\n */\n viewPaths: '{{ viewPaths }}',\n\n /** ORM driver — \\`drizzle\\`, \\`kysely\\`, or \\`none\\`. */\n orm: '{{ orm }}',\n\n // ---------------------------------------------------------------------------\n // Database\n // ---------------------------------------------------------------------------\n\n database: {\n driver: '{{ dbDriver }}',\n url: process.env.DATABASE_URL ?? '{{ dbUrl }}',\n },\n\n // ---------------------------------------------------------------------------\n // Inertia (only consulted when \\`view === 'inertia'\\`)\n // ---------------------------------------------------------------------------\n\n inertia: {\n frontend: '{{ inertiaFrontend }}',\n ssr: {{ inertiaSSR }},\n version: '{{ inertiaVersion }}',\n },\n\n // ---------------------------------------------------------------------------\n // Paths\n // ---------------------------------------------------------------------------\n\n paths: {\n app: 'app',\n controllers: 'app/controllers',\n services: 'app/services',\n modules: 'app/modules',\n models: 'app/models',\n migrations: 'app/database/migrations',\n seeds: 'db/seeds',\n middleware: 'app/middleware',\n dto: 'app/dto',\n },\n};\n`;\n",
|
|
30
|
-
"/**\n * drizzle.config.ts template — placed at the project root by\n * `nx config` when the project's ORM is set to `drizzle`.\n *\n * The dialect is derived from the project's `db` driver:\n *
|
|
30
|
+
"/**\n * drizzle.config.ts template — placed at the project root by\n * `nx config` when the project's ORM is set to `drizzle`.\n *\n * The dialect is derived from the project's `db` driver:\n * sqlite / bun-sqlite → sqlite\n * postgres → postgresql\n * mysql → mysql\n */\n\nexport default `\nimport { defineConfig } from \"drizzle-kit\";\n\nexport default defineConfig({\n dialect: \"{{ dialect }}\",\n schema: \"./app/models/*.model.ts\",\n out: \"./drizzle\",\n dbCredentials: {\n url: process.env.DATABASE_URL ?? \"{{ dbUrl }}\",\n },\n verbose: true,\n strict: true,\n});\n`;\n",
|
|
31
31
|
"/**\n * Repository template (standard decorator mode).\n *\n * Uses field injection (@Inject on fields) instead of constructor params.\n * The parent DrizzleRepository accepts optional constructor args, so\n * `super()` is safe with no arguments — fields are injected by the DI\n * container after construction.\n *\n * Context:\n * name — PascalCase class name\n * camel — camelCase variable\n * kebab — kebab-case\n * tableName — plural snake_case table name\n * repository — PascalCase repository name\n */\n\nexport default `\nimport { Injectable, Inject } from '@nexusts/core';\nimport { DrizzleRepository, DrizzleService } from '@nexusts/drizzle';\nimport { {{ snake }} } from '../models/{{ kebab }}.model.js';\nimport type { {{ name }}, New{{ name }} } from '../models/{{ kebab }}.model.js';\n\n@Injectable()\nexport class {{ repository }} extends DrizzleRepository<typeof {{ snake }}, {{ name }}> {\n @Inject(DrizzleService.TOKEN) declare db: DrizzleService;\n protected readonly table = {{ snake }};\n}\n`.trimStart();\n",
|
|
32
32
|
"/**\n * Kysely repository template.\n *\n * Uses `@nexusts/kysely`'s `KyselyRepository` with field injection.\n *\n * Context:\n * name — PascalCase class name\n * camel — camelCase variable\n * kebab — kebab-case\n * tableName — plural snake_case table name\n * snake — singular snake_case\n * repository — PascalCase repository name\n */\n\nexport default `\nimport { Injectable, Inject } from '@nexusts/core';\nimport { KyselyService, KyselyRepository } from '@nexusts/kysely';\n\n@Injectable()\nexport class {{ repository }} extends KyselyRepository<any, '{{ tableName }}'> {\n @Inject(KyselyService.TOKEN) declare db: KyselyService<any>;\n protected readonly tableName = '{{ tableName }}' as const;\n}\n`.trimStart();\n",
|
|
33
33
|
"/**\n * Auth instance template — used by `nx make:auth`.\n *\n * Context keys:\n * jwt — boolean, enable JWT plugin\n * passkey — boolean, enable passkey (WebAuthn) plugin\n * passkeyRpName — string, passkey relying party name\n * passkeyRpId — string, passkey relying party ID\n * passkeyOrigin — string, passkey origin URL\n * providers — boolean, whether social providers are included\n * entries — array of { name, envVar } objects\n */\nexport default `/**\n * Better-auth instance — generated by \\`nx make:auth\\`.\n *\n * Edit \\`nx.config.ts\\` (\\`auth\\` section) instead of this file when possible.\n */\nimport { createAuth } from '@nexusts/auth';\n\nexport const auth = createAuth({\n{{^jwt}}\n jwt: { enabled: false },\n{{/jwt}}\n{{#jwt}}\n jwt: { enabled: true },\n{{/jwt}}\n{{#passkey}}\n passkey: {\n enabled: true,\n rpName: '{{ passkeyRpName }}',\n rpId: '{{ passkeyRpId }}',\n origin: '{{ passkeyOrigin }}',\n },\n{{/passkey}}\n{{#providers}}\n socialProviders: {\n{{#entries}}\n {{ name }}: {\n clientId: process.env.{{ envVar }}_CLIENT_ID!,\n clientSecret: process.env.{{ envVar }}_CLIENT_SECRET!,\n },\n{{/entries}}\n },\n{{/providers}}\n});\n`.trimStart();\n",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"/**\n * Validator (DTO) template — for `make:validator <Name>`.\n *\n * Generates a Zod schema with reasonable starter fields.\n */\n\nexport default `\nimport { z } from 'zod';\n\n/**\n * Validation schema for {{ name }}.\n * Generated by \\`nx make:validator {{ name }}\\`.\n */\nexport const {{ name }}Schema = z.object({\n // TODO: define fields. Example:\n // name: z.string().min(1).max(100),\n // email: z.string().email().optional(),\n});\n\nexport type {{ name }}Input = z.infer<typeof {{ name }}Schema>;\n`.trimStart();\n",
|
|
42
42
|
"/**\n * Re-exports for scaffold templates.\n *\n * Commands import the templates they need and pass a render context.\n * Adding a new template is a one-line change here.\n */\n\nimport controllerAdonis from \"./controller/adonis.js\";\nimport controllerFunctional from \"./controller/functional.js\";\nimport controllerNest from \"./controller/nest.js\";\nimport crudController from \"./crud/controller.js\";\nimport crudDto from \"./crud/dto.js\";\nimport crudModule from \"./crud/module.js\";\nimport crudTest from \"./crud/test.js\";\nimport middleware from \"./middleware/middleware.js\";\nimport migrationDrizzle from \"./migration/drizzle.js\";\nimport migrationKysely from \"./migration/kysely.js\";\nimport migrationSql from \"./migration/sql.js\";\nimport modelDrizzle from \"./model/drizzle.js\";\nimport modelKysely from \"./model/kysely.js\";\nimport module from \"./module/module.js\";\nimport projectNxConfig from \"./project/nx.config.js\";\nimport projectDrizzleConfig from \"./project/drizzle.config.js\";\nimport repositoryDrizzle from \"./repository/repository.js\";\nimport repositoryKysely from \"./repository/kysely-repository.js\";\nimport authInstance from \"./auth/auth-instance.js\";\nimport authEnvExample from \"./auth/env-example.js\";\nimport listener from \"./listener/listener.js\";\nimport queueWorker from \"./queue/worker.js\";\nimport queueJob from \"./queue/job.js\";\nimport scheduleTask from \"./schedule/task.js\";\nimport service from \"./service/service.js\";\nimport sessionHelper from \"./session/session.js\";\nimport validator from \"./validator/validator.js\";\n\nexport const templates = {\ncontroller: {\nnest: controllerNest,\nadonis: controllerAdonis,\nfunctional: controllerFunctional,\n},\nauth: {\ninstance: authInstance,\n\"env.example\": authEnvExample,\n},\nlistener,\nqueue: {\nworker: queueWorker,\njob: queueJob,\n},\nschedule: scheduleTask,\nservice,\nsession: sessionHelper,\nrepository: {\ndrizzle: repositoryDrizzle,\nkysely: repositoryKysely,\n},\nmodule,\nvalidator,\nmiddleware,\nmodel: {\ndrizzle: modelDrizzle,\nkysely: modelKysely,\n},\nmigration: {\ndrizzle: migrationDrizzle,\nkysely: migrationKysely,\nsql: migrationSql,\n},\ncrud: {\ncontroller: crudController,\nmodule: crudModule,\ndto: crudDto,\ntest: crudTest,\n},\nproject: {\n\"nx.config.ts\": projectNxConfig,\n\"drizzle.config.ts\": projectDrizzleConfig,\n},\n};\n\nexport type TemplateKey = keyof typeof templates;\n",
|
|
43
43
|
"/**\n * Shared naming utilities for the CLI.\n *\n * Consolidates `inferTableName` and similar name-parsing helpers\n * that were previously duplicated across multiple command files.\n */\n\n/**\n * Infer a table name from a migration name.\n *\n * Examples:\n * \"create_users_table\" → \"users\"\n * \"add_email_to_users\" → \"users\"\n * \"drop_old_index\" → \"old_indexs\" (fallback)\n * \"Posts\" → \"posts\"\n */\nexport function inferTableName(input: string): string {\n\tif (!input) return \"table\";\n\tconst m = /^create_(\\w+)_table$/.exec(input);\n\tif (m) return m[1] ?? \"table\";\n\tconst m2 = /^(?:add|remove|drop|alter)_(\\w+)_to_(\\w+)$/.exec(input);\n\tif (m2) return m2[2] ?? \"table\";\n\treturn `${input.toLowerCase().replace(/s$/, \"\")}s`;\n}\n\n/**\n * Format a Date as YYYYMMDD_HHmmss for migration filenames.\n */\nexport function formatTimestamp(d: Date): string {\n\tconst pad = (n: number) => String(n).padStart(2, \"0\");\n\treturn (\n\t\t`${d.getFullYear()}${pad(d.getMonth() + 1)}${pad(d.getDate())}` +\n\t\t`_${pad(d.getHours())}${pad(d.getMinutes())}${pad(d.getSeconds())}`\n\t);\n}\n",
|
|
44
|
-
"/**\n * `nx init [dir]` — scaffold NexusTS into the current (or target) directory.\n *\n * Unlike `nx new <name>` — which requires a fresh, empty directory —\n * `nx init` is non-destructive: it skips files that already exist,\n * preserves the user's existing `package.json` (only adding the\n * nexusts dependency if missing), and merges its `tsconfig.json`\n * additions into the user's existing config.\n *\n * Typical use case: the user already ran `bun init` (or has an\n * existing app) and now wants to add NexusTS to it without losing\n * their existing setup.\n *\n * Flags:\n * --target <dir> Scaffold into <dir> instead of the cwd\n * --style <name> Routing style (nest|adonis|functional)\n * --view <name> View engine (rendu|edge|eta|inertia|none)\n * --orm <name> ORM driver (drizzle|kysely|none)\n * --db <name> Database driver (bun-sqlite|node-sqlite|libsql|postgres|mysql|none)\n * --frontend <name> Inertia frontend (react|vue|svelte|solid)\n * --no-ssr Disable Inertia SSR\n * --force Overwrite existing files\n * --no-interaction Disable interactive prompts\n */\n\nimport { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport { buildPackageJson, computeDeps, ensureDirectories, flagBool, generateProjectFiles, logger, parseJsonLoose, resolveProjectOption, VALID_PROJECT_OPTIONS } from \"../core/index.js\";\n\ntype WriteMode = \"write\" | \"skip\" | \"merge-pkg\" | \"merge-tsconfig\";\n\ninterface PlanEntry {\n\tpath: string;\n\tmode: WriteMode;\n}\n\n\n\nexport const initCommand: Command = {\n\tname: \"init\",\n\taliases: [\"i\"],\n\tsummary: \"Initialize NexusTS in an existing directory\",\n\tdescription:\n\t\t\"Scaffolds a new NexusTS project in the current or target directory. Non-destructive: skips existing files, merges package.json and tsconfig.json.\",\n\texamples: [\n\t\t\"nx init\",\n\t\t\"nx init ./my-app\",\n\t\t\"nx init --style nest --view inertia --orm drizzle --db bun-sqlite\",\n\t\t\"nx init --force\",\n\t],\n\tflags: [\n\t\t{ name: \"target\", description: \"Target directory (default: cwd)\" },\n\t\t{ name: \"style\", description: \"Routing style (nest|adonis|functional)\" },\n\t\t{ name: \"view\", description: \"View engine (rendu|edge|eta|inertia|none)\" },\n\t\t{ name: \"orm\", description: \"ORM driver (drizzle|kysely|none)\" },\n\t\t{ name: \"db\", description: \"Database driver (bun-sqlite|node-sqlite|libsql|postgres|mysql|none)\" },\n\t\t{\n\t\t\tname: \"frontend\",\n\t\t\tdescription: \"Inertia frontend (react|vue|svelte|solid)\",\n\t\t},\n\t\t{ name: \"no-ssr\", description: \"Disable Inertia SSR\" },\n\t\t{ name: \"force\", description: \"Overwrite existing files\" },\n\t\t{ name: \"no-interaction\", description: \"Skip interactive prompts\" },\n\t],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst interactive = flagBool(ctx.flags, \"interaction\", true);\n\t\tconst force = flagBool(ctx.flags, \"force\", false);\n\n\t\tconst target = resolve(\n\t\t\tctx.cwd,\n\t\t\t(ctx.flags.target as string | undefined) ?? \".\",\n\t\t);\n\t\tconst routing = await resolveProjectOption(ctx.flags, \"style\", VALID_PROJECT_OPTIONS.style, \"nest\", interactive);\n\t\tconst view = await resolveProjectOption(ctx.flags, \"view\", VALID_PROJECT_OPTIONS.view, \"rendu\", interactive);\n\t\tconst orm = await resolveProjectOption(ctx.flags, \"orm\", VALID_PROJECT_OPTIONS.orm, \"drizzle\", interactive);\n\t\tconst db = await resolveProjectOption(ctx.flags, \"db\", VALID_PROJECT_OPTIONS.db, \"bun-sqlite\", interactive);\n\t\tconst frontend = await resolveProjectOption(ctx.flags, \"frontend\", VALID_PROJECT_OPTIONS.frontend, \"react\", interactive);\n\t\tconst ssr = !flagBool(ctx.flags, \"no-ssr\", false);\n\t\tconst name = target.split(\"/\").pop() ?? \"nexus-app\";\n\t\tconst dbUrl = db === \"bun-sqlite\" || db === \"node-sqlite\" ? \"app.db\" : \"\";\n\n\t\tconst plan: PlanEntry[] = [\n\t\t\t{ path: \"package.json\", mode: \"merge-pkg\" },\n\t\t\t{ path: \"tsconfig.json\", mode: \"merge-tsconfig\" },\n\t\t\t{ path: \".env\", mode: \"skip\" },\n\t\t\t{ path: \".env.local\", mode: \"skip\" },\n\t\t\t{ path: \".gitignore\", mode: \"skip\" },\n\t\t\t{ path: \"nx.config.ts\", mode: \"write\" },\n\t\t\t{ path: \"public/.gitkeep\", mode: \"write\" },\n\t\t\t{ path: \"app/main.ts\", mode: \"write\" },\n\t\t\t{ path: \"app/app.module.ts\", mode: \"write\" },\n\t\t\t{ path: \"app/controllers/home.controller.ts\", mode: \"write\" },\n\t\t\t{ path: \"README.md\", mode: \"write\" },\n\t\t\t...view === \"inertia\"\n\t\t\t\t? [\n\t\t\t\t\t\t{ path: `resources/js/Pages/Welcome.${frontend === \"vue\" ? \"vue\" : \"tsx\"}`, mode: \"write\" as const },\n\t\t\t\t\t\t{ path: `resources/js/app.${frontend === \"vue\" ? \"ts\" : \"tsx\"}`, mode: \"write\" as const },\n\t\t\t\t\t]\n\t\t\t\t: view !== \"none\"\n\t\t\t\t\t? [{ path: \"resources/views/welcome.html\", mode: \"write\" as const }]\n\t\t\t\t\t: [],\n\t\t\t...(orm === \"drizzle\" ? [{ path: \"drizzle.config.ts\", mode: \"write\" as const }] : []),\n\t\t];\n\n\t\tconst created: string[] = [];\n\t\tconst skipped: string[] = [];\n\t\tconst merged: string[] = [];\n\n\t\tensureDirectories(target, view);\n\n\t\tfor (const entry of plan) {\n\t\t\tconst abs = resolve(target, entry.path);\n\t\t\tconst exists = existsSync(abs);\n\n\t\t\tif (entry.mode === \"merge-pkg\") {\n\t\t\t\tconst { deps, devDeps } = computeDeps(view, orm, db, frontend);\n\t\t\t\tif (exists) {\n\t\t\t\t\tmergePackageJson(abs, deps, devDeps, view, frontend);\n\t\t\t\t\tmerged.push(entry.path);\n\t\t\t\t} else {\n\t\t\t\t\tconst pkgJson = buildPackageJson(name, deps, devDeps, view, frontend);\n\t\t\t\t\twriteFileSync(abs, `${JSON.stringify(pkgJson, null, 2)}\\n`);\n\t\t\t\t\tcreated.push(entry.path);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (entry.mode === \"merge-tsconfig\") {\n\t\t\t\tif (exists) {\n\t\t\t\t\tmergeTsconfig(abs, {\n\t\t\t\t\t\texperimentalDecorators: true,\n\t\t\t\t\t});\n\t\t\t\t\tmerged.push(entry.path);\n\t\t\t\t} else {\n\t\t\t\t\twriteFileSync(abs, defaultTsconfig());\n\t\t\t\t\tcreated.push(entry.path);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Plain write mode\n\t\t\tif (exists && !force) {\n\t\t\t\tskipped.push(entry.path);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcreated.push(entry.path);\n\t\t}\n\n\t\t// Generate remaining project files via scaffold\n\t\tconst scaffoldOpts = { target, name, routing, view, orm, db, frontend, ssr, dbUrl };\n\t\tconst scaffoldFiles = generateProjectFiles(target, scaffoldOpts);\n\t\tfor (const f of scaffoldFiles) {\n\t\t\tif (!plan.some((p) => p.path === f)) {\n\t\t\t\tcreated.push(f);\n\t\t\t}\n\t\t}\n\n\t\t// Report\n\t\tlogger.success(`initialized NexusTS in ${target}`);\n\t\tlogger.blank();\n\t\tif (created.length) logger.heading(\"Created\");\n\t\tfor (const f of created) logger.info(` + ${f}`);\n\t\tif (merged.length) logger.heading(\"Merged into existing files\");\n\t\tfor (const f of merged) logger.info(` ~ ${f}`);\n\t\tif (skipped.length) logger.heading(\"Skipped (already exist; use --force to overwrite)\");\n\t\tfor (const f of skipped) logger.info(` - ${f}`);\n\t\tlogger.blank();\n\n\t\treturn 0;\n\t},\n};\n\nfunction mergePackageJson(\n\tpath: string,\n\tadditions: Record<string, string>,\n\tdevAdditions: Record<string, string> = {},\n\tview?: string,\n\tfrontend?: string,\n): void {\n\tconst raw = readFileSync(path, \"utf8\");\n\tconst pkg = parseJsonLoose<Record<string, unknown>>(raw);\n\tlet changed = false;\n\n\tif (!pkg.type) { pkg.type = \"module\"; changed = true; }\n\tif (!pkg.private) { pkg.private = true; changed = true; }\n\n\tconst SCRIPTS: Record<string, string> = {\n\t\tdev: \"bun --hot app/main.ts\", build: \"bun run build.ts\",\n\t\tstart: \"bun app/main.ts\", test: \"vitest\", nx: \"nx\",\n\t};\n\tif (view === \"inertia\") {\n\t\tconst ext = frontend === \"vue\" ? \"ts\" : \"tsx\";\n\t\tSCRIPTS[\"build:frontend\"] = `bun build ./resources/js/app.${ext} --outdir=./public --target=browser --format=esm --minify`;\n\t\tSCRIPTS.dev = `bun run build:frontend && bun --hot app/main.ts`;\n\t}\n\tconst existingScripts = (pkg.scripts as Record<string, string> | undefined) ?? {};\n\tfor (const [k, v] of Object.entries(SCRIPTS)) {\n\t\tif (!(k in existingScripts)) { existingScripts[k] = v; changed = true; }\n\t}\n\tif (Object.keys(existingScripts).length > 0) pkg.scripts = existingScripts;\n\n\tconst deps = (pkg.dependencies as Record<string, string> | undefined) ?? {};\n\tfor (const [k, v] of Object.entries(additions)) {\n\t\tif (!(k in deps)) { deps[k] = v; changed = true; }\n\t}\n\tpkg.dependencies = deps;\n\n\tif (Object.keys(devAdditions).length > 0) {\n\t\tconst devDeps = (pkg.devDependencies as Record<string, string> | undefined) ?? {};\n\t\tfor (const [k, v] of Object.entries(devAdditions)) {\n\t\t\tif (!(k in devDeps)) { devDeps[k] = v; changed = true; }\n\t\t}\n\t\tpkg.devDependencies = devDeps;\n\t}\n\n\tif (changed) writeFileSync(path, `${JSON.stringify(pkg, null, 2)}\\n`);\n}\n\nfunction mergeTsconfig(path: string, additions: Record<string, boolean | string>): void {\n\tconst raw = readFileSync(path, \"utf8\");\n\tconst cfg = parseJsonLoose<{ compilerOptions?: Record<string, unknown>; include?: string[] }>(raw);\n\tconst co = (cfg.compilerOptions ?? {}) as Record<string, unknown>;\n\tlet changed = false;\n\tfor (const [k, v] of Object.entries(additions)) {\n\t\tif (!(k in co)) { co[k] = v; changed = true; }\n\t}\n\tcfg.compilerOptions = co as Record<string, unknown>;\n\tconst include = cfg.include ?? [];\n\tfor (const g of [\"app/**/*.ts\", \"nx.config.ts\"]) {\n\t\tif (!include.includes(g)) { include.push(g); changed = true; }\n\t}\n\tcfg.include = include;\n\tif (changed) writeFileSync(path, `${JSON.stringify(cfg, null, 2)}\\n`);\n}\n\nfunction defaultTsconfig(): string {\n\treturn `{\n \"compilerOptions\": {\n \"target\": \"ES2022\",\n \"module\": \"ESNext\",\n \"moduleResolution\": \"bundler\",\n \"experimentalDecorators\": true,\n \"strict\": true,\n \"esModuleInterop\": true,\n \"skipLibCheck\": true,\n \"types\": [\"@types/bun\"]\n },\n \"include\": [\"app/**/*.ts\", \"nx.config.ts\"]\n}\n`;\n}\n\nexport default initCommand;\n",
|
|
44
|
+
"/**\n * `nx init [dir]` — scaffold NexusTS into the current (or target) directory.\n *\n * Unlike `nx new <name>` — which requires a fresh, empty directory —\n * `nx init` is non-destructive: it skips files that already exist,\n * preserves the user's existing `package.json` (only adding the\n * nexusts dependency if missing), and merges its `tsconfig.json`\n * additions into the user's existing config.\n *\n * Typical use case: the user already ran `bun init` (or has an\n * existing app) and now wants to add NexusTS to it without losing\n * their existing setup.\n *\n * Flags:\n * --target <dir> Scaffold into <dir> instead of the cwd\n * --style <name> Routing style (nest|adonis|functional)\n * --view <name> View engine (rendu|edge|eta|inertia|none)\n * --orm <name> ORM driver (drizzle|kysely|none)\n * --db <name> Database driver (sqlite|postgres|mysql|none)\n * --frontend <name> Inertia frontend (react|vue|svelte|solid)\n * --no-ssr Disable Inertia SSR\n * --force Overwrite existing files\n * --no-interaction Disable interactive prompts\n */\n\nimport { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport { buildPackageJson, computeDeps, ensureDirectories, flagBool, generateProjectFiles, logger, parseJsonLoose, resolveProjectOption, VALID_PROJECT_OPTIONS } from \"../core/index.js\";\n\ntype WriteMode = \"write\" | \"skip\" | \"merge-pkg\" | \"merge-tsconfig\";\n\ninterface PlanEntry {\n\tpath: string;\n\tmode: WriteMode;\n}\n\n\n\nexport const initCommand: Command = {\n\tname: \"init\",\n\taliases: [\"i\"],\n\tsummary: \"Initialize NexusTS in an existing directory\",\n\tdescription:\n\t\t\"Scaffolds a new NexusTS project in the current or target directory. Non-destructive: skips existing files, merges package.json and tsconfig.json.\",\n\texamples: [\n\t\t\"nx init\",\n\t\t\"nx init ./my-app\",\n\t\t\"nx init --style nest --view inertia --orm drizzle --db sqlite\",\n\t\t\"nx init --force\",\n\t],\n\tflags: [\n\t\t{ name: \"target\", description: \"Target directory (default: cwd)\" },\n\t\t{ name: \"style\", description: \"Routing style (nest|adonis|functional)\" },\n\t\t{ name: \"view\", description: \"View engine (rendu|edge|eta|inertia|none)\" },\n\t\t{ name: \"orm\", description: \"ORM driver (drizzle|kysely|none)\" },\n\t\t{ name: \"db\", description: \"Database driver (sqlite|postgres|mysql|none)\" },\n\t\t{\n\t\t\tname: \"frontend\",\n\t\t\tdescription: \"Inertia frontend (react|vue|svelte|solid)\",\n\t\t},\n\t\t{ name: \"no-ssr\", description: \"Disable Inertia SSR\" },\n\t\t{ name: \"force\", description: \"Overwrite existing files\" },\n\t\t{ name: \"no-interaction\", description: \"Skip interactive prompts\" },\n\t],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst interactive = flagBool(ctx.flags, \"interaction\", true);\n\t\tconst force = flagBool(ctx.flags, \"force\", false);\n\n\t\tconst target = resolve(\n\t\t\tctx.cwd,\n\t\t\t(ctx.flags.target as string | undefined) ?? \".\",\n\t\t);\n\t\tconst routing = await resolveProjectOption(ctx.flags, \"style\", VALID_PROJECT_OPTIONS.style, \"nest\", interactive);\n\t\tconst view = await resolveProjectOption(ctx.flags, \"view\", VALID_PROJECT_OPTIONS.view, \"rendu\", interactive);\n\t\tconst orm = await resolveProjectOption(ctx.flags, \"orm\", VALID_PROJECT_OPTIONS.orm, \"drizzle\", interactive);\n\t\tconst db = await resolveProjectOption(ctx.flags, \"db\", VALID_PROJECT_OPTIONS.db, \"sqlite\", interactive);\n\t\tconst frontend = await resolveProjectOption(ctx.flags, \"frontend\", VALID_PROJECT_OPTIONS.frontend, \"react\", interactive);\n\t\tconst ssr = !flagBool(ctx.flags, \"no-ssr\", false);\n\t\tconst name = target.split(\"/\").pop() ?? \"nexus-app\";\n\t\tconst dbUrl = db === \"bun-sqlite\" || db === \"sqlite\" ? \"app.db\" : \"\";\n\n\t\tconst plan: PlanEntry[] = [\n\t\t\t{ path: \"package.json\", mode: \"merge-pkg\" },\n\t\t\t{ path: \"tsconfig.json\", mode: \"merge-tsconfig\" },\n\t\t\t{ path: \".env\", mode: \"skip\" },\n\t\t\t{ path: \".env.local\", mode: \"skip\" },\n\t\t\t{ path: \".gitignore\", mode: \"skip\" },\n\t\t\t{ path: \"nx.config.ts\", mode: \"write\" },\n\t\t\t{ path: \"public/.gitkeep\", mode: \"write\" },\n\t\t\t{ path: \"app/main.ts\", mode: \"write\" },\n\t\t\t{ path: \"app/app.module.ts\", mode: \"write\" },\n\t\t\t{ path: \"app/controllers/home.controller.ts\", mode: \"write\" },\n\t\t\t{ path: \"README.md\", mode: \"write\" },\n\t\t\t...view === \"inertia\"\n\t\t\t\t? [\n\t\t\t\t\t\t{ path: `resources/js/Pages/Welcome.${frontend === \"vue\" ? \"vue\" : \"tsx\"}`, mode: \"write\" as const },\n\t\t\t\t\t\t{ path: `resources/js/app.${frontend === \"vue\" ? \"ts\" : \"tsx\"}`, mode: \"write\" as const },\n\t\t\t\t\t]\n\t\t\t\t: view !== \"none\"\n\t\t\t\t\t? [{ path: \"resources/views/welcome.html\", mode: \"write\" as const }]\n\t\t\t\t\t: [],\n\t\t\t...(orm === \"drizzle\" ? [{ path: \"drizzle.config.ts\", mode: \"write\" as const }] : []),\n\t\t];\n\n\t\tconst created: string[] = [];\n\t\tconst skipped: string[] = [];\n\t\tconst merged: string[] = [];\n\n\t\tensureDirectories(target, view);\n\n\t\tfor (const entry of plan) {\n\t\t\tconst abs = resolve(target, entry.path);\n\t\t\tconst exists = existsSync(abs);\n\n\t\t\tif (entry.mode === \"merge-pkg\") {\n\t\t\t\tconst { deps, devDeps } = computeDeps(view, orm, db, frontend);\n\t\t\t\tif (exists) {\n\t\t\t\t\tmergePackageJson(abs, deps, devDeps, view, frontend);\n\t\t\t\t\tmerged.push(entry.path);\n\t\t\t\t} else {\n\t\t\t\t\tconst pkgJson = buildPackageJson(name, deps, devDeps, view, frontend);\n\t\t\t\t\twriteFileSync(abs, `${JSON.stringify(pkgJson, null, 2)}\\n`);\n\t\t\t\t\tcreated.push(entry.path);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (entry.mode === \"merge-tsconfig\") {\n\t\t\t\tif (exists) {\n\t\t\t\t\tmergeTsconfig(abs, {\n\t\t\t\t\t});\n\t\t\t\t\tmerged.push(entry.path);\n\t\t\t\t} else {\n\t\t\t\t\twriteFileSync(abs, defaultTsconfig());\n\t\t\t\t\tcreated.push(entry.path);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Plain write mode\n\t\t\tif (exists && !force) {\n\t\t\t\tskipped.push(entry.path);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcreated.push(entry.path);\n\t\t}\n\n\t\t// Generate remaining project files via scaffold\n\t\tconst scaffoldOpts = { target, name, routing, view, orm, db, frontend, ssr, dbUrl };\n\t\tconst scaffoldFiles = generateProjectFiles(target, scaffoldOpts);\n\t\tfor (const f of scaffoldFiles) {\n\t\t\tif (!plan.some((p) => p.path === f)) {\n\t\t\t\tcreated.push(f);\n\t\t\t}\n\t\t}\n\n\t\t// Report\n\t\tlogger.success(`initialized NexusTS in ${target}`);\n\t\tlogger.blank();\n\t\tif (created.length) logger.heading(\"Created\");\n\t\tfor (const f of created) logger.info(` + ${f}`);\n\t\tif (merged.length) logger.heading(\"Merged into existing files\");\n\t\tfor (const f of merged) logger.info(` ~ ${f}`);\n\t\tif (skipped.length) logger.heading(\"Skipped (already exist; use --force to overwrite)\");\n\t\tfor (const f of skipped) logger.info(` - ${f}`);\n\t\tlogger.blank();\n\n\t\treturn 0;\n\t},\n};\n\nfunction mergePackageJson(\n\tpath: string,\n\tadditions: Record<string, string>,\n\tdevAdditions: Record<string, string> = {},\n\tview?: string,\n\tfrontend?: string,\n): void {\n\tconst raw = readFileSync(path, \"utf8\");\n\tconst pkg = parseJsonLoose<Record<string, unknown>>(raw);\n\tlet changed = false;\n\n\tif (!pkg.type) { pkg.type = \"module\"; changed = true; }\n\tif (!pkg.private) { pkg.private = true; changed = true; }\n\n\tconst SCRIPTS: Record<string, string> = {\n\t\tdev: \"bun --hot app/main.ts\", build: \"bun run build.ts\",\n\t\tstart: \"bun app/main.ts\", test: \"vitest\", nx: \"nx\",\n\t};\n\tif (view === \"inertia\") {\n\t\tconst ext = frontend === \"vue\" ? \"ts\" : \"tsx\";\n\t\tSCRIPTS[\"build:frontend\"] = `bun build ./resources/js/app.${ext} --outdir=./public --target=browser --format=esm --minify`;\n\t\tSCRIPTS.dev = `bun run build:frontend && bun --hot app/main.ts`;\n\t}\n\tconst existingScripts = (pkg.scripts as Record<string, string> | undefined) ?? {};\n\tfor (const [k, v] of Object.entries(SCRIPTS)) {\n\t\tif (!(k in existingScripts)) { existingScripts[k] = v; changed = true; }\n\t}\n\tif (Object.keys(existingScripts).length > 0) pkg.scripts = existingScripts;\n\n\tconst deps = (pkg.dependencies as Record<string, string> | undefined) ?? {};\n\tfor (const [k, v] of Object.entries(additions)) {\n\t\tif (!(k in deps)) { deps[k] = v; changed = true; }\n\t}\n\tpkg.dependencies = deps;\n\n\tif (Object.keys(devAdditions).length > 0) {\n\t\tconst devDeps = (pkg.devDependencies as Record<string, string> | undefined) ?? {};\n\t\tfor (const [k, v] of Object.entries(devAdditions)) {\n\t\t\tif (!(k in devDeps)) { devDeps[k] = v; changed = true; }\n\t\t}\n\t\tpkg.devDependencies = devDeps;\n\t}\n\n\tif (changed) writeFileSync(path, `${JSON.stringify(pkg, null, 2)}\\n`);\n}\n\nfunction mergeTsconfig(path: string, additions: Record<string, boolean | string>): void {\n\tconst raw = readFileSync(path, \"utf8\");\n\tconst cfg = parseJsonLoose<{ compilerOptions?: Record<string, unknown>; include?: string[] }>(raw);\n\tconst co = (cfg.compilerOptions ?? {}) as Record<string, unknown>;\n\tlet changed = false;\n\tfor (const [k, v] of Object.entries(additions)) {\n\t\tif (!(k in co)) { co[k] = v; changed = true; }\n\t}\n\tcfg.compilerOptions = co as Record<string, unknown>;\n\tconst include = cfg.include ?? [];\n\tfor (const g of [\"app/**/*.ts\", \"nx.config.ts\"]) {\n\t\tif (!include.includes(g)) { include.push(g); changed = true; }\n\t}\n\tcfg.include = include;\n\tif (changed) writeFileSync(path, `${JSON.stringify(cfg, null, 2)}\\n`);\n}\n\nfunction defaultTsconfig(): string {\n\treturn `{\n \"compilerOptions\": {\n \"target\": \"ES2022\",\n \"module\": \"ESNext\",\n \"moduleResolution\": \"bundler\",\n \"experimentalDecorators\": true,\n \"strict\": true,\n \"esModuleInterop\": true,\n \"skipLibCheck\": true,\n \"types\": [\"@types/bun\"]\n },\n \"include\": [\"app/**/*.ts\", \"nx.config.ts\"]\n}\n`;\n}\n\nexport default initCommand;\n",
|
|
45
45
|
"/**\n * `nx make:auth` — scaffold an auth module.\n *\n * Generates:\n * - app/auth/auth.ts — better-auth instance\n * - app/auth/auth.module.ts — NexusTS module (or copy if exists)\n * - app/auth/.env.example — BETTER_AUTH_SECRET / URL placeholders\n * - patches nx.config.ts to include the `auth` section (with --update-config)\n *\n * Usage:\n * nx make:auth --provider github,google --jwt --passkey\n * nx make:auth --provider github --jwt --no-passkey\n */\n\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport {\n\tflagList,\n\tlogger,\n\trender,\n\twriteFile,\n} from \"../core/index.js\";\nimport { templates } from \"../templates/index.js\";\n\nconst MODULE_UPDATE_HINT = `import { AuthModule } from '@nexusts/auth';\n// In your AppModule.imports:\nimports: [AuthModule.forRoot({ /* ... */ })],\n`;\n\nconst KNOWN_PROVIDERS: Record<string, { env: string; label: string }> = {\n\tgithub: { env: \"GITHUB\", label: \"GitHub\" },\n\tgoogle: { env: \"GOOGLE\", label: \"Google\" },\n\tdiscord: { env: \"DISCORD\", label: \"Discord\" },\n\tmicrosoft: { env: \"MICROSOFT\", label: \"Microsoft\" },\n\tapple: { env: \"APPLE\", label: \"Apple\" },\n\tfacebook: { env: \"FACEBOOK\", label: \"Facebook\" },\n\tgitlab: { env: \"GITLAB\", label: \"GitLab\" },\n\tslack: { env: \"SLACK\", label: \"Slack\" },\n\ttwitter: { env: \"TWITTER\", label: \"Twitter\" },\n\tspotify: { env: \"SPOTIFY\", label: \"Spotify\" },\n\tlinkedin: { env: \"LINKEDIN\", label: \"LinkedIn\" },\n};\n\nexport const makeAuthCommand: Command = {\n\tname: \"make:auth\",\n\taliases: [\"auth\", \"auth-install\"],\n\tsummary: \"Scaffold the auth module\",\n\tdescription:\n\t\t\"Generates app/auth/auth.ts, .env.example, and an auth-ready module skeleton using better-auth.\",\n\texamples: [\n\t\t\"nx make:auth\",\n\t\t\"nx make:auth --provider github --jwt\",\n\t\t\"nx make:auth --provider github,google --jwt --passkey --rp-id example.com\",\n\t],\n\tflags: [\n\t\t{\n\t\t\tname: \"provider\",\n\t\t\tdescription: \"Comma-separated OAuth providers (github, google, ...)\",\n\t\t},\n\t\t{\n\t\t\tname: \"jwt\",\n\t\t\tdescription: \"Enable the JWT plugin (token + JWKS endpoint)\",\n\t\t},\n\t\t{ name: \"passkey\", description: \"Enable the passkey (WebAuthn) plugin\" },\n\t\t{ name: \"rp-id\", description: \"Passkey RP ID (defaults to 'localhost')\" },\n\t\t{ name: \"rp-name\", description: \"Passkey RP display name\" },\n\t\t{\n\t\t\tname: \"origin\",\n\t\t\tdescription: \"Passkey origin (defaults to http://localhost:3000)\",\n\t\t},\n\t],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tlogger.heading(\"Scaffolding auth module\");\n\n\t\tconst providers = flagList(ctx.flags, \"provider\");\n\t\tconst jwtEnabled = ctx.flags.jwt === true;\n\t\tconst passkeyEnabled = ctx.flags.passkey === true;\n\t\tconst rpId = (ctx.flags[\"rp-id\"] as string | undefined) ?? \"localhost\";\n\t\tconst rpName =\n\t\t\t(ctx.flags[\"rp-name\"] as string | undefined) ?? \"NexusTS App\";\n\t\tconst origin =\n\t\t\t(ctx.flags.origin as string | undefined) ?? \"http://localhost:3000\";\n\n\t\tconst entries = providers.map((p) => {\n\t\t\tconst known = KNOWN_PROVIDERS[p.toLowerCase()];\n\t\t\treturn {\n\t\t\t\tname: p.toLowerCase(),\n\t\t\t\tenvVar: known?.env ?? p.toUpperCase(),\n\t\t\t};\n\t\t});\n\n\t\t// 1) src/auth/auth.ts\n\t\tconst authCode = render(templates.auth.instance, {\n\t\t\tjwt: jwtEnabled,\n\t\t\tpasskey: passkeyEnabled,\n\t\t\tproviders: providers.length > 0,\n\t\t\tentries,\n\t\t\tpasskeyRpName: rpName,\n\t\t\tpasskeyRpId: rpId,\n\t\t\tpasskeyOrigin: Array.isArray(origin) ? origin.join(\",\") : origin,\n\t\t});\n\t\tconst authOut = resolve(ctx.cwd, \"app/auth/auth.ts\");\n\t\tif (writeFile(authOut, authCode)) {\n\t\t\tlogger.success(`created ${authOut}`);\n\t\t} else {\n\t\t\tlogger.warn(`skipped (exists): ${authOut}`);\n\t\t}\n\n\t\t// 2) .env.example\n\t\tconst envCode = render(templates.auth[\"env.example\"], {\n\t\t\tproviders: providers.length > 0,\n\t\t\tentries,\n\t\t});\n\t\tconst envOut = resolve(ctx.cwd, \".env.example\");\n\t\tif (writeFile(envOut, envCode, { skipIfExists: true })) {\n\t\t\tlogger.success(`created ${envOut}`);\n\t\t} else {\n\t\t\tlogger.warn(`skipped (exists): ${envOut}`);\n\t\t}\n\n\t\t// 3) Module hint\n\t\tlogger.blank();\n\t\tlogger.heading(\"Next steps\");\n\t\tlogger.info(\"1. Add a secret to .env:\");\n\t\tlogger.info(\" BETTER_AUTH_SECRET=$(openssl rand -base64 32)\");\n\t\tlogger.info(\"2. Wire the module in AppModule:\");\n\t\tlogger.info(` ${MODULE_UPDATE_HINT.trim()}`);\n\t\tif (providers.length > 0) {\n\t\t\tlogger.info(`3. Set up OAuth credentials for: ${providers.join(\", \")}`);\n\t\t}\n\t\tif (passkeyEnabled) {\n\t\t\tlogger.info(\"4. Configure passkey RP ID + origin for your domain.\");\n\t\t}\n\t\tlogger.info(\"5. Run `bun --hot app/main.ts` to start the server.\");\n\t\tlogger.blank();\n\n\t\treturn 0;\n\t},\n};\n\nexport default makeAuthCommand;\n",
|
|
46
46
|
"/**\n * `nx make:controller <Name>` — generate a controller file.\n *\n * The template is chosen from `nx.config.ts`'s `routing` field:\n * - `nest` → @Controller / @Get / @Post class\n * - `adonis` → plain class with methods (registered via route table)\n * - `functional` → object of Hono-native handlers\n *\n * Usage:\n * nx make:controller User\n * nx make:controller Post --style nest --no-service\n */\n\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport { logger, nameVariants, render, writeFile } from \"../core/index.js\";\nimport { templates } from \"../templates/index.js\";\n\nexport const makeControllerCommand: Command = {\n\tname: \"make:controller\",\n\taliases: [\"mc\", \"make-controller\"],\n\tsummary: \"Generate a controller class\",\n\tdescription:\n\t\t\"Generates a controller file under app/controllers/. The routing style is read from nx.config.ts.\",\n\texamples: [\n\t\t\"nx make:controller User\",\n\t\t\"nx make:controller Post --style nest\",\n\t\t\"nx make:controller Webhook --style functional\",\n\t],\n\tflags: [\n\t\t{\n\t\t\tname: \"style\",\n\t\t\tdescription: \"Override routing style (nest|adonis|functional)\",\n\t\t},\n\t\t{\n\t\t\tname: \"no-service\",\n\t\t\tdescription: \"Skip injecting a service into the controller\",\n\t\t},\n\t],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst name = ctx.positional[0];\n\t\tif (!name) {\n\t\t\tlogger.error(\"Usage: nx make:controller <Name>\");\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst variants = nameVariants(name);\n\t\tconst style =\n\t\t\t(ctx.flags.style as string | undefined) ?? ctx.config.routing;\n\n\t\tif (![\"nest\", \"adonis\", \"functional\"].includes(style)) {\n\t\t\tlogger.error(\n\t\t\t\t`Unknown style: ${style}. Allowed: nest, adonis, functional.`,\n\t\t\t);\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst skipService = ctx.flags[\"no-service\"] === true;\n\t\tconst serviceName = `${variants.pascal}Service`;\n\t\tconst serviceCamel = `${variants.camel}Service`;\n\n\t\tconst tpl =\n\t\t\ttemplates.controller[style as keyof typeof templates.controller];\n\t\tconst code = render(tpl, {\n\t\t\tname: variants.pascal,\n\t\t\tcamel: variants.camel,\n\t\t\tkebab: variants.kebab,\n\t\t\tsnake: variants.snake,\n\t\t\tpascal: variants.pascal,\n\t\t\tservice: serviceName,\n\t\t\tserviceCamel,\n\t\t\thasService: !skipService,\n\t\t});\n\n\t\tconst out = resolve(\n\t\t\tctx.cwd,\n\t\t\tctx.config.paths.controllers,\n\t\t\t`${variants.kebab}.controller.ts`,\n\t\t);\n\n\t\tconst ok = writeFile(out, code, { skipIfExists: false });\n\t\tif (!ok) {\n\t\t\tlogger.error(`Refusing to overwrite existing file: ${out}`);\n\t\t\treturn 1;\n\t\t}\n\n\t\tlogger.success(`created ${out}`);\n\t\tlogger.finger(`edit ${variants.kebab}.controller.ts and add to a module.`);\n\t\treturn 0;\n\t},\n};\n\nexport default makeControllerCommand;\n",
|
|
47
47
|
"/**\n * `nx make:crud <Name>` — generate a full CRUD scaffold for a resource.\n *\n * Mirrors Ruby on Rails' `rails generate scaffold`:\n *\n * nx make:crud Post\n *\n * Produces (under app/):\n *\n * controllers/post.controller.ts — RESTful routes (Nest/Adonis/Functional)\n * services/post.service.ts — business logic\n * repositories/post.repository.ts — DB access (only if orm !== 'none')\n * models/post.model.ts — table schema (only if orm !== 'none')\n * dto/post.dto.ts — Zod validation schemas\n * modules/post.module.ts — @Module({...}) wiring\n * tests/post.test.ts — Vitest integration test\n *\n * The output adapts to `nx.config.ts`:\n * - routing → controller template\n * - view → emits Inertia render() when 'inertia', otherwise plain JSON\n * - orm → Drizzle/Kysely template selection\n *\n * Use `--no-views` to skip view-aware parts even when `view === 'inertia'`.\n */\n\nimport { mkdirSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport {\n\tflagBool,\n\tlogger,\n\tnameVariants,\n\trender,\n\twriteFile,\n} from \"../core/index.js\";\nimport { templates } from \"../templates/index.js\";\nimport {\n\tmapDrizzleType,\n\trenderDrizzleDialect,\n} from \"../templates/model/drizzle-dialect.js\";\n\nexport const makeCrudCommand: Command = {\n\tname: \"make:crud\",\n\taliases: [\"crud\", \"make-crud\", \"scaffold\"],\n\tsummary: \"Generate a full CRUD scaffold for a resource\",\n\tdescription:\n\t\t\"Generates controller + service + repository + model + dto + module + test for a single resource, adapted to the project's nx.config.ts.\",\n\texamples: [\n\t\t\"nx make:crud Post\",\n\t\t\"nx make:crud User --no-views\",\n\t\t\"nx make:crud Comment --no-repo --no-test\",\n\t],\n\tflags: [\n\t\t{ name: \"no-views\", description: \"Skip Inertia view rendering\" },\n\t\t{ name: \"no-repo\", description: \"Skip the repository / model\" },\n\t\t{ name: \"no-test\", description: \"Skip generating the test file\" },\n\t\t{ name: \"style\", description: \"Override routing style\" },\n\t\t{ name: \"orm\", description: \"Override ORM driver\" },\n\t\t{\n\t\t\tname: \"dialect\",\n\t\t\tdescription:\n\t\t\t\t\"Drizzle dialect (postgres|mysql|sqlite|bun-sqlite|d1). Default: bun-sqlite\",\n\t\t},\n\t],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst name = ctx.positional[0];\n\t\tif (!name) {\n\t\t\tlogger.error(\"Usage: nx make:crud <Name>\");\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst variants = nameVariants(name);\n\t\tconst style =\n\t\t\t(ctx.flags.style as string | undefined) ?? ctx.config.routing;\n\t\tconst orm = (ctx.flags.orm as string | undefined) ?? ctx.config.orm;\n\t\tconst dialect =\n\t\t\t(ctx.flags.dialect as string | undefined) ??\n\t\t\tctx.config.dialect ??\n\t\t\t\"bun-sqlite\";\n\t\tconst noRepo = flagBool(ctx.flags, \"no-repo\", false) || orm === \"none\";\n\t\tconst noTest = flagBool(ctx.flags, \"no-test\", false);\n\t\tconst hasInertia =\n\t\t\tctx.config.view === \"inertia\" && !flagBool(ctx.flags, \"no-views\", false);\n\n\t\t// Service/repo/controller names.\n\t\tconst controller = `${variants.pascal}Controller`;\n\t\tconst service = `${variants.pascal}Service`;\n\t\tconst repository = `${variants.pascal}Repository`;\n\t\tconst tableName = variants.pluralSnake;\n\t\tconst viewComponent = `${variants.pascal}s/Index`;\n\t\tconst viewShowComponent = `${variants.pascal}s/Show`;\n\n\t\tlogger.heading(\n\t\t\t`Scaffolding ${variants.pascal} (style=${style}, view=${ctx.config.view}, orm=${orm})`,\n\t\t);\n\t\tconst written: string[] = [];\n\n\t\t// 1) Controller\n\t\t{\n\t\t\tconst code = render(templates.crud.controller, {\n\t\t\t\tname: variants.pascal,\n\t\t\t\tcamel: variants.camel,\n\t\t\t\tkebab: variants.kebab,\n\t\t\t\tsnake: variants.snake,\n\t\t\t\ttableName,\n\t\t\t\tservice,\n\t\t\t\tserviceCamel: `${variants.camel}Service`,\n\t\t\t\tcontroller,\n\t\t\t\tviewComponent,\n\t\t\t\tviewShowComponent,\n\t\t\t\thasInertia,\n\t\t\t});\n\t\t\tconst out = resolve(\n\t\t\t\tctx.cwd,\n\t\t\t\tctx.config.paths.controllers,\n\t\t\t\t`${variants.kebab}.controller.ts`,\n\t\t\t);\n\t\t\tif (!writeFile(out, code, { skipIfExists: true })) {\n\t\t\t\tlogger.warn(`skipped (exists): ${out}`);\n\t\t\t} else {\n\t\t\t\tlogger.success(`created ${out}`);\n\t\t\t\twritten.push(out);\n\t\t\t}\n\t\t}\n\n\t\t// 2) Service\n\t\t{\n\t\t\tconst code = render(templates.service, {\n\t\t\t\tname: variants.pascal,\n\t\t\t\tcamel: variants.camel,\n\t\t\t\tkebab: variants.kebab,\n\t\t\t\tsnake: variants.snake,\n\t\t\t\thasRepo: !noRepo,\n\t\t\t\trepository,\n\t\t\t\trepositoryCamel: `${variants.camel}Repository`,\n\t\t\t});\n\t\t\tconst out = resolve(\n\t\t\t\tctx.cwd,\n\t\t\t\tctx.config.paths.services,\n\t\t\t\t`${variants.kebab}.service.ts`,\n\t\t\t);\n\t\t\tif (!writeFile(out, code, { skipIfExists: true })) {\n\t\t\t\tlogger.warn(`skipped (exists): ${out}`);\n\t\t\t} else {\n\t\t\t\tlogger.success(`created ${out}`);\n\t\t\t\twritten.push(out);\n\t\t\t}\n\t\t}\n\n\t\t// 3) Repository + Model (only if ORM is configured)\n\t\tif (!noRepo) {\n\t\t\tif (orm === \"drizzle\" || orm === \"kysely\") {\n\t\t\t\tlet code: string;\n\t\t\t\tif (orm === \"drizzle\") {\n\t\t\t\t\t// Use the dialect-aware template.\n\t\t\t\t\tconst tpl = renderDrizzleDialect(dialect);\n\t\t\t\t\tcode = render(tpl, {\n\t\t\t\t\t\tname: variants.pascal,\n\t\t\t\t\t\tcamel: variants.camel,\n\t\t\t\t\t\tkebab: variants.kebab,\n\t\t\t\t\t\tsnake: variants.snake,\n\t\t\t\t\t\ttableName,\n\t\t\t\t\t\tcolumns: renderDrizzleColumns(dialect),\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tconst tpl = templates.model[orm];\n\t\t\t\t\tcode = render(tpl, {\n\t\t\t\t\t\tname: variants.pascal,\n\t\t\t\t\t\tcamel: variants.camel,\n\t\t\t\t\t\tkebab: variants.kebab,\n\t\t\t\t\t\tsnake: variants.snake,\n\t\t\t\t\t\ttableName,\n\t\t\t\t\t\tcolumns: renderDefaultColumns(orm),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tconst out = resolve(\n\t\t\t\t\tctx.cwd,\n\t\t\t\t\tctx.config.paths.models,\n\t\t\t\t\t`${variants.kebab}.model.ts`,\n\t\t\t\t);\n\t\t\t\tif (!writeFile(out, code, { skipIfExists: true })) {\n\t\t\t\t\tlogger.warn(`skipped (exists): ${out}`);\n\t\t\t\t} else {\n\t\t\t\t\tlogger.success(`created ${out}`);\n\t\t\t\t\twritten.push(out);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Repository\n\t\t\tconst ormRepo = orm === \"kysely\" ? templates.repository.kysely : templates.repository.drizzle;\n\t\t\tconst repoCode = render(ormRepo, {\n\t\t\t\tname: variants.pascal,\n\t\t\t\tcamel: variants.camel,\n\t\t\t\tkebab: variants.kebab,\n\t\t\t\tsnake: variants.snake,\n\t\t\t\ttableName,\n\t\t\t\trepository,\n\t\t\t});\n\t\t\tconst repoOut = resolve(\n\t\t\t\tctx.cwd,\n\t\t\t\t`${ctx.config.paths.app}/repositories`,\n\t\t\t\t`${variants.kebab}.repository.ts`,\n\t\t\t);\n\t\t\tmkdirSync(dirname(repoOut), { recursive: true });\n\t\t\tif (!writeFile(repoOut, repoCode, { skipIfExists: true })) {\n\t\t\t\tlogger.warn(`skipped (exists): ${repoOut}`);\n\t\t\t} else {\n\t\t\t\tlogger.success(`created ${repoOut}`);\n\t\t\t\twritten.push(repoOut);\n\t\t\t}\n\t\t}\n\n\t\t// 4) DTO\n\t\t{\n\t\t\tconst code = render(templates.crud.dto, {\n\t\t\t\tname: variants.pascal,\n\t\t\t\tcamel: variants.camel,\n\t\t\t\tkebab: variants.kebab,\n\t\t\t});\n\t\t\tconst out = resolve(\n\t\t\t\tctx.cwd,\n\t\t\t\tctx.config.paths.dto,\n\t\t\t\t`${variants.kebab}.dto.ts`,\n\t\t\t);\n\t\t\tif (!writeFile(out, code, { skipIfExists: true })) {\n\t\t\t\tlogger.warn(`skipped (exists): ${out}`);\n\t\t\t} else {\n\t\t\t\tlogger.success(`created ${out}`);\n\t\t\t\twritten.push(out);\n\t\t\t}\n\t\t}\n\n\t\t// 5) Module\n\t\t{\n\t\t\tconst code = render(templates.crud.module, {\n\t\t\t\tname: variants.pascal,\n\t\t\t\tcamel: variants.camel,\n\t\t\t\tkebab: variants.kebab,\n\t\t\t\tcontroller,\n\t\t\t\tservice,\n\t\t\t\trepository,\n\t\t\t\thasRepo: !noRepo,\n\t\t\t});\n\t\t\tconst out = resolve(\n\t\t\t\tctx.cwd,\n\t\t\t\tctx.config.paths.modules,\n\t\t\t\t`${variants.kebab}.module.ts`,\n\t\t\t);\n\t\t\tif (!writeFile(out, code, { skipIfExists: true })) {\n\t\t\t\tlogger.warn(`skipped (exists): ${out}`);\n\t\t\t} else {\n\t\t\t\tlogger.success(`created ${out}`);\n\t\t\t\twritten.push(out);\n\t\t\t}\n\t\t}\n\n\t\t// 6) Test\n\t\tif (!noTest) {\n\t\t\tconst code = render(templates.crud.test, {\n\t\t\t\tname: variants.pascal,\n\t\t\t\tcamel: variants.camel,\n\t\t\t\tkebab: variants.kebab,\n\t\t\t\tcontroller,\n\t\t\t\tservice,\n\t\t\t});\n\t\t\tconst out = resolve(ctx.cwd, \"tests\", `${variants.kebab}.test.ts`);\n\t\t\tif (!writeFile(out, code, { skipIfExists: true })) {\n\t\t\t\tlogger.warn(`skipped (exists): ${out}`);\n\t\t\t} else {\n\t\t\t\tlogger.success(`created ${out}`);\n\t\t\t\twritten.push(out);\n\t\t\t}\n\t\t}\n\n\t\tlogger.blank();\n\t\tlogger.heading(\"Next steps\");\n\t\tlogger.info(`1. Review the generated files:`);\n\t\tfor (const f of written) logger.info(` ${f}`);\n\t\tlogger.info(`2. Add ${variants.pascal}Module to AppModule.imports.`);\n\t\tlogger.info(\n\t\t\t`3. ${noRepo ? \"\" : `Run \\`bun nx db:generate && bun nx db:migrate\\` (or your migration tool).`}`,\n\t\t);\n\t\tlogger.info(`4. Start the dev server: \\`bun run dev\\`.`);\n\t\tlogger.blank();\n\n\t\treturn 0;\n\t},\n};\n\nfunction renderDefaultColumns(orm: string): string {\n\tif (orm === \"drizzle\") {\n\t\treturn \" title: text('title').notNull(),\";\n\t}\n\tif (orm === \"kysely\") {\n\t\treturn \" title: string,\";\n\t}\n\treturn \" title text,\";\n}\n\nfunction renderDrizzleColumns(dialect: string): string {\n\tconst helper = mapDrizzleType(dialect, \"text\");\n\treturn ` title: ${helper}('title').notNull(),`;\n}\n\nexport default makeCrudCommand;\n",
|
|
@@ -60,14 +60,14 @@
|
|
|
60
60
|
"/**\n * `nx db:migrate` — apply pending database migrations.\n *\n * Two modes based on ORM config:\n *\n * 1. **Drizzle** (default): spawns `bunx drizzle-kit migrate` with\n * the project's drizzle.config.ts.\n *\n * 2. **Kysely**: runs an in-process migration script that uses\n * Kysely's built-in `Migrator` + `FileMigrationProvider`.\n *\n * Examples:\n * nx db:migrate\n * nx db:migrate --status\n * nx db:migrate --folder ./drizzle --dialect postgres\n *\n * See also: `nx db:seed` for inserting fixture data.\n */\n\nimport { spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport { logger } from \"../core/index.js\";\n\nexport const dbMigrateCommand: Command = {\n\tname: \"db:migrate\",\n\taliases: [\"db:m\", \"migrate\"],\n\tsummary: \"Apply pending database migrations\",\n\tdescription:\n\t\t\"Runs the configured migrator (drizzle-kit for Drizzle, Kysely Migrator for Kysely) against the migrations folder. Use --status to inspect. See also `nx db:seed` for fixture data.\",\n\texamples: [\n\t\t\"nx db:migrate\",\n\t\t\"nx db:migrate --status\",\n\t\t\"nx db:migrate --folder ./drizzle\",\n\t],\n\tflags: [\n\t\t{\n\t\t\tname: \"status\",\n\t\t\tdescription: \"List applied migrations and exit (no apply).\",\n\t\t},\n\t\t{\n\t\t\tname: \"folder\",\n\t\t\tdescription: \"Override migrations folder (default: from nx.config.ts).\",\n\t\t},\n\t\t{\n\t\t\tname: \"dialect\",\n\t\t\tdescription:\n\t\t\t\t\"Database dialect (postgres|mysql|sqlite|bun-sqlite). Default: bun-sqlite.\",\n\t\t},\n\t\t{\n\t\t\tname: \"config\",\n\t\t\tdescription: \"Path to drizzle.config.ts. Default: ./drizzle.config.ts.\",\n\t\t},\n\t\t{\n\t\t\tname: \"orm\",\n\t\t\tdescription: \"Override ORM driver (drizzle|kysely)\",\n\t\t},\n\t],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst orm = (ctx.flags.orm as string | undefined) ?? ctx.config.orm;\n\t\tconst folder =\n\t\t\t(ctx.flags.folder as string | undefined) ??\n\t\t\tresolve(ctx.cwd, ctx.config.paths.migrations);\n\t\tconst dialect =\n\t\t\t(ctx.flags.dialect as string | undefined) ??\n\t\t\tctx.config.dialect ??\n\t\t\t\"bun-sqlite\";\n\t\tconst configPath =\n\t\t\t(ctx.flags.config as string | undefined) ??\n\t\t\tresolve(ctx.cwd, \"drizzle.config.ts\");\n\t\tconst wantStatus = Boolean(ctx.flags.status);\n\n\t\tif (orm === \"kysely\") {\n\t\t\treturn runKyselyMigrate(ctx.cwd, folder, dialect, wantStatus);\n\t\t}\n\n\t\tif (wantStatus) {\n\t\t\treturn await runStatus(ctx.cwd, folder, dialect, ctx.config.database.url);\n\t\t}\n\n\t\t// Default: apply pending migrations via drizzle-kit.\n\t\treturn runDrizzleKit(ctx.cwd, [\n\t\t\t\"migrate\",\n\t\t\t...(existsSync(configPath) ? [`--config=${configPath}`] : []),\n\t\t]);\n\t},\n};\n\n/**\n * Run Kysely migrations using an in-process script.\n */\nasync function runKyselyMigrate(\n\tcwd: string,\n\tfolder: string,\n\tdialect: string,\n\tstatusOnly: boolean,\n): Promise<number> {\n\tif (!existsSync(folder)) {\n\t\tlogger.warn(`migrations folder not found: ${folder}`);\n\t\treturn 0;\n\t}\n\n\tconst script = buildKyselyMigrateScript(folder, dialect, statusOnly);\n\tconst tmpFile = resolve(cwd, \".nx-kysely-migrate.mjs\");\n\tconst { writeFile, unlink } = await import(\"node:fs/promises\");\n\tawait writeFile(tmpFile, script, \"utf-8\");\n\n\ttry {\n\t\tconst code = await new Promise<number>((resP) => {\n\t\t\tconst child = spawn(\"bun\", [tmpFile], {\n\t\t\t\tcwd,\n\t\t\t\tstdio: \"inherit\",\n\t\t\t\tshell: process.platform === \"win32\",\n\t\t\t});\n\t\t\tchild.on(\"exit\", (c) => resP(c ?? 0));\n\t\t\tchild.on(\"error\", () => resP(1));\n\t\t});\n\t\treturn code;\n\t} finally {\n\t\tawait unlink(tmpFile).catch(() => {});\n\t}\n}\n\n/**\n * Build a JavaScript script that uses Kysely's Migrator to run or\n * list pending migrations.\n */\nfunction buildKyselyMigrateScript(\n\tfolder: string,\n\tdialect: string,\n\tstatusOnly: boolean,\n): string {\n\tconst dialectSetup = buildDialectSetup(dialect);\n\tconst tableName = \"kysely_migration\";\n\n\treturn `\nimport { readdirSync, readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\n\nconst migrationsFolder = ${JSON.stringify(folder)};\n\n// Build the Kysely instance with the configured dialect.\n${dialectSetup}\n\nimport {\n Kysely,\n Migrator,\n} from \"kysely\";\n\nclass FsMigrationProvider {\n async getMigrations() {\n const files = readdirSync(migrationsFolder)\n .filter((f) => f.endsWith(\".ts\") || f.endsWith(\".js\"))\n .sort();\n\n const migrations = {};\n for (const file of files) {\n const name = file.replace(/\\\\.(ts|js)$/, \"\");\n const mod = await import(join(migrationsFolder, file));\n migrations[name] = {\n up: mod.up,\n down: mod.down,\n };\n }\n return migrations;\n }\n}\n\nconst db = new Kysely({ dialect });\n\nconst migrator = new Migrator({\n db,\n provider: new FsMigrationProvider(),\n migrationTableName: ${JSON.stringify(tableName)},\n});\n\n${statusOnly ? `\nconst { results } = await migrator.getMigrations();\nconsole.log(\"Migration status:\");\nfor (const r of results ?? []) {\n console.log(\\` \\${r.name}: \\${r.status}\\`);\n}\n` : `\nconst { results, error } = await migrator.migrateToLatest();\nif (error) {\n console.error(\"Migration failed:\", error);\n process.exit(1);\n}\nconst applied = (results ?? []).filter((r) => r.status === \"Success\" || r.status === \"MigratedAbove\");\nconsole.log(\\`Applied \\${applied.length} migration(s)\\`);\nfor (const r of applied) {\n console.log(\\` ✓ \\${r.migrationName}\\`);\n}\n`}\n\nawait db.destroy();\n`;\n}\n\n/**\n * Build the dialect setup code for the in-process migration script.\n */\nfunction buildDialectSetup(dialect: string): string {\n\tswitch (dialect) {\n\t\tcase \"postgres\":\n\t\t\treturn `\nimport { Pool } from \"pg\";\nimport { PostgresDialect } from \"kysely\";\nconst dialect = new PostgresDialect({\n pool: new Pool({ connectionString: process.env.DATABASE_URL ?? \"\" }),\n});\n`;\n\t\tcase \"mysql\":\n\t\t\treturn `\nimport { createPool } from \"mysql2\";\nimport { MysqlDialect } from \"kysely\";\nconst dialect = new MysqlDialect({\n pool: createPool({ uri: process.env.DATABASE_URL ?? \"\" }),\n});\n`;\n\t\tdefault:\n\t\t\treturn `\nimport { Database } from \"bun:sqlite\";\nimport { SqliteDialect } from \"kysely\";\n\n// Patch .reader property for bun:sqlite compatibility with Kysely.\nconst _db = new Database(process.env.DATABASE_URL ?? \"app.db\");\nconst proto = Object.getPrototypeOf(_db);\nconst _prepare = proto.prepare.bind(_db);\n_db.prepare = function(sql) {\n const stmt = _prepare(sql);\n Object.defineProperty(stmt, \"reader\", { value: /^\\\\s*(select|pragma|with|explain)\\\\b/i.test(sql) });\n return stmt;\n};\nconst dialect = new SqliteDialect({ database: _db });\n`;\n\t}\n}\n\nexport { dbMigrateCommand as command };\n\nexport function runDrizzleKit(cwd: string, args: string[]): Promise<number> {\n\treturn new Promise((resolveP) => {\n\t\tconst cmd = \"bunx\";\n\t\tlogger.info(`$ ${cmd} drizzle-kit ${args.join(\" \")}`);\n\t\tconst child = spawn(cmd, [\"drizzle-kit\", ...args], {\n\t\t\tcwd,\n\t\t\tstdio: \"inherit\",\n\t\t\tshell: process.platform === \"win32\",\n\t\t});\n\t\tchild.on(\"exit\", (code) => resolveP(code ?? 0));\n\t\tchild.on(\"error\", (err) => {\n\t\t\tlogger.error(`failed to spawn drizzle-kit: ${err.message}`);\n\t\t\tresolveP(1);\n\t\t});\n\t});\n}\n\n/**\n * Run a tiny inline script that opens the Drizzle service and prints\n * applied migrations. Used when the user runs `nx migrate --status`\n * and we don't have a full app boot context.\n */\nasync function runStatus(\n\tcwd: string,\n\tfolder: string,\n\tdialect: string,\n\tconfigUrl: string = \"\",\n): Promise<number> {\n\tif (!existsSync(folder)) {\n\t\tlogger.warn(`migrations folder not found: ${folder}`);\n\t\treturn 0;\n\t}\n\tconst url = readEnvUrl(dialect) ?? configUrl;\n\tif (!url) {\n\t\tlogger.error(\n\t\t\t`could not read ${dialect} URL from environment. Set DATABASE_URL or NEXUS_DB_URL.`,\n\t\t);\n\t\treturn 1;\n\t}\n\tconst script = `\nimport { DrizzleService } from '@nexusts/drizzle';\n\nconst url = ${JSON.stringify(url)};\nconst dialect = ${JSON.stringify(dialect)};\nconst folder = ${JSON.stringify(folder)};\n\nconst cfg = { dialect, connection: { url }, schema: dialect === 'postgres' ? 'public' : undefined };\nconst svc = new DrizzleService(cfg);\nawait svc.open();\nconst applied = await svc.appliedMigrations();\nconsole.log(JSON.stringify({ total: applied.length, applied }, null, 2));\nawait svc.close();\n`;\n\tconst tmpFile = resolve(cwd, \".nx-migrate-status.mjs\");\n\tawait import(\"node:fs/promises\").then((m) =>\n\t\tm.writeFile(tmpFile, script, \"utf-8\"),\n\t);\n\ttry {\n\t\tconst code = await new Promise<number>((resP) => {\n\t\t\tconst child = spawn(\"bun\", [tmpFile], {\n\t\t\t\tcwd,\n\t\t\t\tstdio: \"inherit\",\n\t\t\t\tshell: process.platform === \"win32\",\n\t\t\t});\n\t\t\tchild.on(\"exit\", (c) => resP(c ?? 0));\n\t\t\tchild.on(\"error\", () => resP(1));\n\t\t});\n\t\treturn code;\n\t} finally {\n\t\tawait import(\"node:fs/promises\").then((m) =>\n\t\t\tm.unlink(tmpFile).catch(() => {}),\n\t\t);\n\t}\n}\n\nfunction readEnvUrl(dialect: string): string | null {\n\tconst url =\n\t\tprocess.env.DATABASE_URL ??\n\t\tprocess.env.NEXUS_DB_URL ??\n\t\t(dialect === \"postgres\"\n\t\t\t? process.env.POSTGRES_URL\n\t\t\t: dialect === \"mysql\"\n\t\t\t\t? process.env.MYSQL_URL\n\t\t\t\t: dialect.includes(\"sqlite\")\n\t\t\t\t\t? process.env.SQLITE_FILENAME\n\t\t\t\t\t: null);\n\treturn url ?? null;\n}\n\n\nexport default dbMigrateCommand;\n",
|
|
61
61
|
"/**\n * `nx db:generate [name]` — generate a new migration file from schema changes.\n *\n * **Drizzle**: Runs `drizzle-kit generate` which compares your schema files\n * (under app/models/*.model.ts) with the database and auto-generates a migration.\n *\n * **Kysely**: Generates a TypeScript migration file with `up()`/`down()`\n * functions for Kysely's built-in Migrator.\n *\n * **Plain SQL** (`--sql`): Generates a raw SQL migration file (any ORM).\n *\n * Examples:\n * nx db:generate add_users_table\n * nx db:generate add_posts_table --dialect postgres\n * nx db:generate --sql # raw SQL file\n *\n * See also:\n * nx db:migrate — apply pending migrations\n * nx db:seed — run database seeds\n * nx make:migration — scaffold an EMPTY migration file (manual)\n */\n\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport { formatTimestamp, inferTableName, logger, nameVariants, render } from \"../core/index.js\";\nimport { templates } from \"../templates/index.js\";\nimport { runDrizzleKit } from \"./db-migrate.js\";\n\nexport const dbGenerateCommand: Command = {\n\tname: \"db:generate\",\n\taliases: [\"db:g\", \"db-generate\", \"generate-migration\"],\n\tsummary: \"Generate a new migration from schema changes\",\n\tdescription:\n\t\t\"Generates a new migration file. For drizzle: runs drizzle-kit generate. \" +\n\t\t\"For kysely: generates a .ts file with up/down functions. \" +\n\t\t\"Use --sql for a plain SQL file. \" +\n\t\t\"Run after editing your schema files, then apply with `nx db:migrate`.\",\n\texamples: [\n\t\t\"nx db:generate\",\n\t\t\"nx db:generate add_users_table\",\n\t\t\"nx db:generate add_posts --dialect postgres\",\n\t],\n\tflags: [\n\t\t{\n\t\t\tname: \"dialect\",\n\t\t\tdescription:\n\t\t\t\t\"Database dialect (bun-sqlite|postgres|mysql|sqlite). Reads from nx.config.ts by default.\",\n\t\t},\n\t\t{\n\t\t\tname: \"sql\",\n\t\t\tdescription: \"Generate a raw SQL file instead of using drizzle-kit\",\n\t\t},\n\t\t{\n\t\t\tname: \"orm\",\n\t\t\tdescription: \"Override ORM driver (drizzle|kysely)\",\n\t\t},\n\t],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst name = ctx.positional[0];\n\t\tconst orm = (ctx.flags.orm as string | undefined) ?? ctx.config.orm;\n\t\tconst dialect =\n\t\t\t(ctx.flags.dialect as string | undefined) ?? ctx.config.dialect ?? \"bun-sqlite\";\n\t\tconst isSql = ctx.flags.sql === true;\n\n\t\tif (isSql) {\n\t\t\tif (!name) {\n\t\t\t\tlogger.error(\"Usage: nx db:generate <name> --sql\");\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tlogger.info(`Generating raw SQL migration: ${name} (dialect=${dialect})`);\n\t\t\treturn runSqlTemplate(ctx.cwd, name, dialect);\n\t\t}\n\n\t\tif (orm === \"kysely\") {\n\t\t\tif (!name) {\n\t\t\t\tlogger.error(\"Usage: nx db:generate <name> (name is required for Kysely)\");\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tlogger.info(`Generating Kysely migration: ${name}`);\n\t\t\treturn runKyselyTemplate(ctx.cwd, name, dialect);\n\t\t}\n\n\t\t// Drizzle: resolve drizzle.config.ts path and run drizzle-kit\n\t\tconst configPath = resolve(ctx.cwd, \"drizzle.config.ts\");\n\t\tconst args = [\"generate\", \"--config\", configPath];\n\t\tif (name) args.push(\"--name\", name);\n\n\t\tlogger.info(`Generating migration: ${name} (dialect=${dialect})`);\n\t\treturn runDrizzleKit(ctx.cwd, args);\n\t},\n};\n\n/**\n * Generate a Kysely migration file (TypeScript with up/down functions).\n */\nasync function runKyselyTemplate(\n\tcwd: string,\n\tname: string,\n\t_dialect: string,\n): Promise<number> {\n\tconst { mkdirSync, writeFileSync } = await import(\"node:fs\");\n\tconst { join } = await import(\"node:path\");\n\tconst migrationsDir = join(cwd, \"app\", \"database\", \"migrations\");\n\tmkdirSync(migrationsDir, { recursive: true });\n\n\tconst variants = nameVariants(name);\n\tconst timestamp = formatTimestamp(new Date());\n\tconst filename = `${timestamp}_${variants.snake}.ts`;\n\tconst filepath = join(migrationsDir, filename);\n\n\tconst tpl = templates.migration.kysely;\n\tconst code = render(tpl, {\n\t\tname: variants.pascal,\n\t\tsnake: variants.snake,\n\t\ttableName: inferTableName(name),\n\t\tcolumns: \"\",\n\t\ttimestamp,\n\t});\n\n\twriteFileSync(filepath, code);\n\tlogger.success(`created ${filepath}`);\n\tlogger.info(\"Edit the migration, then run `nx db:migrate` to apply it.\");\n\treturn 0;\n}\n\n/**\n * Generate a raw SQL migration file (without drizzle-kit).\n */\nasync function runSqlTemplate(\n\tcwd: string,\n\tname: string,\n\tdialect: string,\n): Promise<number> {\n\tconst { mkdirSync, writeFileSync } = await import(\"node:fs\");\n\tconst { join } = await import(\"node:path\");\n\tconst migrationsDir = join(cwd, \"app\", \"database\", \"migrations\");\n\tmkdirSync(migrationsDir, { recursive: true });\n\n\tconst timestamp = formatTimestamp(new Date());\n\tconst filename = `${timestamp}_${name.replace(/[^a-z0-9_]+/g, \"_\")}.sql`;\n\tconst filepath = join(migrationsDir, filename);\n\n\tconst header = dialect === \"postgres\" || dialect === \"mysql\"\n\t\t? `-- Migration: ${name}\\n-- Dialect: ${dialect}\\n-- Generated: ${new Date().toISOString()}\\n\\n`\n\t\t: `-- Migration: ${name}\\n-- Dialect: ${dialect} (SQLite)\\n-- Generated: ${new Date().toISOString()}\\n\\n`;\n\n\twriteFileSync(filepath, header);\n\tlogger.success(`created ${filepath}`);\n\tlogger.info(\"Edit the SQL file, then run `nx db:migrate` to apply it.\");\n\treturn 0;\n}\n\n\nexport default dbGenerateCommand;\n",
|
|
62
62
|
"/**\n * `nx db:seed` — run database seed scripts.\n *\n * Seeds are TypeScript (or JavaScript) files that populate the\n * database with fixture data. The command:\n *\n * 1. Scans the configured `seeds` directory (default\n * `./db/seeds` — overridable via `paths.seeds` in\n * `nx.config.ts`).\n * 2. Loads every `*.ts` (or `*.js` / `*.mjs`) file in\n * alphabetical order.\n * 3. Invokes the default export as an async function, passing\n * a `SeedContext` that exposes the active DrizzleService,\n * logger, and a few helpers (see below).\n *\n * Examples:\n * nx db:seed # run all seeds in db/seeds/\n * nx db:seed --file 01_users # run a single seed\n * nx db:seed --reset # clear all tables first (DESTRUCTIVE)\n * nx db:seed --create users # scaffold a new seed file\n * nx db:seed --folder ./seeds # custom folder\n *\n * Seed file example:\n *\n * // db/seeds/01_users.ts\n * import type { SeedContext } from \"@nexusts/cli\";\n *\n * export default async function seed(ctx: SeedContext) {\n * await ctx.db.insert(users).values([\n * { email: \"alice@example.com\" },\n * { email: \"bob@example.com\" },\n * ]);\n * ctx.logger.info(`Inserted 2 users`);\n * }\n *\n * The \"01_users.ts\" naming convention (zero-padded numbers as\n * prefixes) is recommended but not required — alphabetical\n * ordering is the only rule.\n */\n\nimport { spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { mkdir, readdir, writeFile, unlink } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport { logger } from \"../core/index.js\";\n\nconst SEED_TEMPLATE = `/**\n * Seed: {name}\n *\n * Run with: nx db:seed\n *\n * The default export receives a \\`SeedContext\\` with:\n * - \\`ctx.db\\` : the active DrizzleService\n * - \\`ctx.logger\\` : the framework logger\n * - \\`ctx.dialect\\` : the active Drizzle dialect\n * - \\`ctx.truncate(table)\\` : helper to clear a table\n *\n * Option A — plain inserts:\n * await ctx.db.insert(usersTable).values([{ email: \"alice@example.com\" }]);\n *\n * Option B — factory (requires @faker-js/faker as a dev dep):\n * import { UserFactory } from \"../factories/user.factory.js\";\n * await UserFactory.createMany(ctx.db, 10);\n */\n\nimport type { SeedContext } from \"@nexusts/cli\";\n\nexport default async function seed(ctx: SeedContext): Promise<void> {\n\\tctx.logger.info(\"Running seed: {name}\");\n\\t// Example A — plain inserts:\n\\t// await ctx.db.insert(usersTable).values([\n\\t// { email: \"alice@example.com\", name: \"Alice\" },\n\\t// { email: \"bob@example.com\", name: \"Bob\" },\n\\t// ]);\n\n\\t// Example B — factory (bun add -d @faker-js/faker):\n\\t// import { UserFactory } from \"../factories/user.factory.js\";\n\\t// await UserFactory.createMany(ctx.db, 10);\n}\n`;\n\nexport const dbSeedCommand: Command = {\n\tname: \"db:seed\",\n\taliases: [\"db:s\", \"seed\"],\n\tsummary: \"Run database seed scripts\",\n\tdescription:\n\t\t\"Loads and runs every seed file in the configured seeds folder in alphabetical order. Use --file to run a single seed, --create to scaffold a new one, --reset to truncate first (DESTRUCTIVE).\",\n\texamples: [\n\t\t\"nx db:seed\",\n\t\t\"nx db:seed --file 01_users\",\n\t\t\"nx db:seed --create users\",\n\t\t\"nx db:seed --reset\",\n\t\t\"nx db:seed --folder ./seeds\",\n\t],\n\tflags: [\n\t\t{\n\t\t\tname: \"file\",\n\t\t\tdescription:\n\t\t\t\t\"Run a single seed file by name (without .ts extension, fuzzy match).\",\n\t\t},\n\t\t{\n\t\t\tname: \"create\",\n\t\t\tdescription:\n\t\t\t\t\"Scaffold a new seed file with a default template. Provide a name (e.g. `users`).\",\n\t\t},\n\t\t{\n\t\t\tname: \"reset\",\n\t\t\tdescription:\n\t\t\t\t\"DESTRUCTIVE: Truncate every table in the schema before running seeds.\",\n\t\t},\n\t\t{\n\t\t\tname: \"folder\",\n\t\t\tdescription:\n\t\t\t\t\"Override seeds folder. Default: ./db/seeds (or nx.config.ts paths.seeds).\",\n\t\t},\n\t\t{\n\t\t\tname: \"dialect\",\n\t\t\tdescription:\n\t\t\t\t\"Drizzle dialect (postgres|mysql|sqlite|bun-sqlite|d1). Default: from nx.config.ts or bun-sqlite.\",\n\t\t},\n\t],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst folder = resolve(\n\t\t\tctx.cwd,\n\t\t\t(ctx.flags.folder as string | undefined) ??\n\t\t\t\t(ctx.config.paths as { seeds?: string })?.seeds ??\n\t\t\t\t\"db/seeds\",\n\t\t);\n\t\tconst dialect =\n\t\t\t(ctx.flags.dialect as string | undefined) ??\n\t\t\tctx.config.dialect ??\n\t\t\t\"bun-sqlite\";\n\t\tconst createName = ctx.flags.create as string | undefined;\n\t\tconst fileName = ctx.flags.file as string | undefined;\n\t\tconst reset = Boolean(ctx.flags.reset);\n\n\t\t// --create scaffolds a new seed file. Doesn't run anything else.\n\t\tif (createName) {\n\t\t\treturn await createSeedFile(folder, createName);\n\t\t}\n\n\t\tif (!existsSync(folder)) {\n\t\t\t// No seeds folder yet. Create an empty one with a README.\n\t\t\tlogger.info(`creating empty seeds folder at ${folder}`);\n\t\t\tawait mkdir(folder, { recursive: true });\n\t\t\tawait writeFile(\n\t\t\t\tresolve(folder, \"_README.ts\"),\n\t\t\t\t`// Seed files go here. Run with: nx db:seed\\n`,\n\t\t\t\t\"utf-8\",\n\t\t\t);\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst files = await collectSeedFiles(folder);\n\n\t\t// If --file was given but matches nothing, fail fast.\n\t\tif (fileName) {\n\t\t\tconst matched = files.filter((f) =>\n\t\t\t\tf.toLowerCase().includes(fileName.toLowerCase()),\n\t\t\t);\n\t\t\tif (matched.length === 0) {\n\t\t\t\tlogger.error(`no seed file matching \"${fileName}\" in ${folder}`);\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t} else if (files.length === 0) {\n\t\t\tlogger.warn(`no seed files found in ${folder}`);\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst target = fileName\n\t\t\t? files.filter((f) => f.toLowerCase().includes(fileName.toLowerCase()))\n\t\t\t: files;\n\n\t\tconst url = readEnvUrl(dialect);\n\t\tif (!url) {\n\t\t\tlogger.error(\n\t\t\t\t`could not read ${dialect} URL from environment. Set DATABASE_URL or NEXUS_DB_URL.`,\n\t\t\t);\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (reset) {\n\t\t\tlogger.warn(\n\t\t\t\t\"--reset is set: truncating every table in the schema before running seeds.\",\n\t\t\t);\n\t\t}\n\n\t\t// Generate an in-process runner script that:\n\t\t// 1. Opens the DrizzleService.\n\t\t// 2. Optionally truncates every table.\n\t\t// 3. Imports each seed file and invokes its default export.\n\t\tconst seedImports = target\n\t\t\t.map((f, i) => `import seed_${i} from ${JSON.stringify(resolve(folder, f))};`)\n\t\t\t.join(\"\\n\");\n\t\tconst seedCalls = target\n\t\t\t.map(\n\t\t\t\t(_, i) =>\n\t\t\t\t\t` await seed_${i}({ db, logger, dialect, truncate: (t) => db.truncate(t) });`,\n\t\t\t)\n\t\t\t.join(\"\\n\");\n\n\t\tconst script = `\nimport { DrizzleService } from '@nexusts/drizzle';\nimport { Logger } from '@nexusts/logger';\n\nconst url = ${JSON.stringify(url)};\nconst dialect = ${JSON.stringify(dialect)};\nconst reset = ${JSON.stringify(reset)};\n\nconst cfg = { dialect, connection: { url }, schema: dialect === 'postgres' ? 'public' : undefined };\nconst db = new DrizzleService(cfg);\nawait db.open();\nconst logger = new Logger({ level: 'info' });\nawait logger.ready();\n\nif (reset) {\n const tables = await db.allTables();\n for (const t of tables) {\n await db.truncate(t);\n }\n logger.info(\\`Truncated \\${tables.length} table(s)\\`);\n}\n\n${seedImports}\n\n${seedCalls}\n\nawait db.close();\nlogger.info(\\`Seeds complete (\\${${target.length}} file(s))\\`);\n`;\n\t\tconst tmpFile = resolve(ctx.cwd, \".nx-db-seed.mjs\");\n\t\tawait writeFile(tmpFile, script, \"utf-8\");\n\t\ttry {\n\t\t\tconst code = await new Promise<number>((resP) => {\n\t\t\t\tconst child = spawn(\"bun\", [tmpFile], {\n\t\t\t\t\tcwd: ctx.cwd,\n\t\t\t\t\tstdio: \"inherit\",\n\t\t\t\t\tshell: process.platform === \"win32\",\n\t\t\t\t});\n\t\t\t\tchild.on(\"exit\", (c) => resP(c ?? 0));\n\t\t\t\tchild.on(\"error\", () => resP(1));\n\t\t\t});\n\t\t\treturn code;\n\t\t} finally {\n\t\t\tawait unlink(tmpFile).catch(() => {});\n\t\t}\n\t},\n};\n\n/* ------------------------------------------------------------------ *\n * Helpers\n * ------------------------------------------------------------------ */\n\nasync function collectSeedFiles(folder: string): Promise<string[]> {\n\tconst all = await readdir(folder, { withFileTypes: true });\n\tconst out: string[] = [];\n\tfor (const e of all) {\n\t\tif (!e.isFile()) continue;\n\t\tif (e.name.startsWith(\"_\")) continue; // _README.ts etc.\n\t\tif (!/\\.(ts|js|mjs|cjs)$/.test(e.name)) continue;\n\t\tout.push(e.name);\n\t}\n\tout.sort();\n\treturn out;\n}\n\nasync function createSeedFile(\n\tfolder: string,\n\tname: string,\n): Promise<number> {\n\tif (!/^[a-z0-9_-]+$/i.test(name)) {\n\t\tlogger.error(\n\t\t\t`invalid seed name \"${name}\" — use letters, numbers, dash, underscore.`,\n\t\t);\n\t\treturn 1;\n\t}\n\tif (!existsSync(folder)) await mkdir(folder, { recursive: true });\n\n\t// Find a non-clobbering filename\n\tlet candidate = `${name}.ts`;\n\tlet i = 1;\n\twhile (existsSync(resolve(folder, candidate))) {\n\t\tcandidate = `${name}_${i}.ts`;\n\t\ti++;\n\t}\n\tconst path = resolve(folder, candidate);\n\tconst body = SEED_TEMPLATE.replace(/\\{name\\}/g, name);\n\tawait writeFile(path, body, \"utf-8\");\n\tlogger.info(`created ${path}`);\n\treturn 0;\n}\n\nfunction readEnvUrl(dialect: string): string | null {\n\tconst url =\n\t\tprocess.env.DATABASE_URL ??\n\t\tprocess.env.NEXUS_DB_URL ??\n\t\t(dialect === \"postgres\"\n\t\t\t? process.env.POSTGRES_URL\n\t\t\t: dialect === \"mysql\"\n\t\t\t\t? process.env.MYSQL_URL\n\t\t\t\t: dialect.includes(\"sqlite\")\n\t\t\t\t\t? process.env.SQLITE_FILENAME\n\t\t\t\t\t: null);\n\treturn url ?? null;\n}\n\nexport default dbSeedCommand;\n",
|
|
63
|
-
"/**\n * `nx new <name>` — create a new NexusTS project in a fresh directory.\n *\n * Unlike `nx init` (which merges into existing files), `nx new` requires\n * the target directory to not exist. It creates a complete project from\n * scratch.\n *\n * nx new my-app\n * nx new my-app --style nest --view inertia --orm drizzle --db
|
|
64
|
-
"/**\n * `nx config` — update or create nx.config.ts (+ drizzle.config.ts\n * if Drizzle is selected).\n *\n * Companion to `nx init`:\n * - `nx init` → scaffold the whole project (config + src/app + README)\n * - `nx config` → only the config files; idempotent\n *\n * Behaviour:\n * - If nx.config.ts exists, parses the current values, merges\n * with any flag values (flags win), and re-renders.\n * - If it does not exist, creates it from scratch with the\n * provided (or prompted) values.\n * - If ORM is `drizzle`, also writes drizzle.config.ts.\n * - If ORM is NOT `drizzle`, an existing drizzle.config.ts is\n * left alone (the user may have it intentionally).\n *\n * Typical use cases:\n * - \"I want to switch from bun-sqlite to postgres\"\n * → nx config --db postgres\n * - \"I want to add Drizzle to an existing project\"\n * → nx config --orm drizzle\n * - \"I want to change the Inertia frontend from React to Vue\"\n * → nx config --frontend vue\n * - \"I haven't decided yet, just show me the prompts\"\n * → nx config --no-interaction=false\n *\n * Flags:\n * --target <dir> Target directory (default: cwd)\n * --style <name> Routing style (nest|adonis|functional)\n * --view <name> View engine (rendu|edge|inertia|none)\n * --orm <name> ORM driver (drizzle|kysely|none)\n * --db <name> Database driver\n * --db-url <url> Database URL (used when DATABASE_URL is unset)\n * --frontend <name> Inertia frontend (react|vue|svelte|solid)\n * --ssr Enable Inertia SSR\n * --no-ssr Disable Inertia SSR\n * --force Overwrite even if file already exists\n * --no-interaction Skip interactive prompts\n */\n\nimport { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport { flagBool, logger, render, select } from \"../core/index.js\";\nimport { templates } from \"../templates/index.js\";\n\ninterface NxConfigValues {\n\trouting: string;\n\tview: string;\n\tviewPaths: string;\n\torm: string;\n\tdbDriver: string;\n\tdbUrl: string;\n\tinertiaFrontend: string;\n\tinertiaSSR: boolean;\n\tinertiaVersion: string;\n\t[key: string]: string | number | boolean | undefined | null;\n}\n\nconst DEFAULT_VALUES: NxConfigValues = {\n\trouting: \"nest\",\n\tview: \"rendu\",\n\tviewPaths: \"resources/views\",\n\torm: \"drizzle\",\n\tdbDriver: \"bun-sqlite\",\n\tdbUrl: \"app.db\",\n\tinertiaFrontend: \"react\",\n\tinertiaSSR: true,\n\tinertiaVersion: \"1.0.0\",\n};\n\n/**\n * Parse an existing nx.config.ts and extract the scalar values.\n * Falls back to DEFAULT_VALUES for any field it can't read.\n */\nfunction parseExistingConfig(path: string): NxConfigValues {\n\tconst out: NxConfigValues = { ...DEFAULT_VALUES };\n\tif (!existsSync(path)) return out;\n\tconst src = readFileSync(path, \"utf8\");\n\tconst grab = (re: RegExp): string | undefined => {\n\t\tconst m = src.match(re);\n\t\treturn m?.[1];\n\t};\n\tconst routing = grab(/routing:\\s*['\"]([^'\"]+)['\"]/);\n\tconst view = grab(/view:\\s*['\"]([^'\"]+)['\"]/);\n\tconst viewPathsMatch = src.match(/viewPaths:\\s*['\"]([^'\"]+)['\"]/);\n\tif (viewPathsMatch) {\n\t\tout.viewPaths = viewPathsMatch[1];\n\t}\n\tconst orm = grab(/orm:\\s*['\"]([^'\"]+)['\"]/);\n\tconst driver = grab(/driver:\\s*['\"]([^'\"]+)['\"]/);\n\tconst url = grab(/url:\\s*process\\.env\\.DATABASE_URL\\s*\\?\\?\\s*['\"]([^'\"]+)['\"]/);\n\tconst frontend = grab(/frontend:\\s*['\"]([^'\"]+)['\"]/);\n\tconst ssr = grab(/ssr:\\s*(true|false)/);\n\tconst version = grab(/version:\\s*['\"]([^'\"]+)['\"]/);\n\tif (routing) out.routing = routing;\n\tif (view) out.view = view;\n\tif (orm) out.orm = orm;\n\tif (driver) out.dbDriver = driver;\n\tif (url !== undefined) out.dbUrl = url;\n\tif (frontend) out.inertiaFrontend = frontend;\n\tif (ssr) out.inertiaSSR = ssr === \"true\";\n\tif (version) out.inertiaVersion = version;\n\treturn out;\n}\n\n/** Map a `db` driver name to a drizzle-kit dialect. */\nfunction driverToDialect(driver: string): string {\n\tswitch (driver) {\n\t\tcase \"bun-sqlite\":\n\t\tcase \"node-sqlite\":\n\t\tcase \"libsql\":\n\t\t\treturn \"sqlite\";\n\t\tcase \"postgres\":\n\t\t\treturn \"postgresql\";\n\t\tcase \"mysql\":\n\t\t\treturn \"mysql\";\n\t\tdefault:\n\t\t\treturn \"sqlite\";\n\t}\n}\n\n/** Default DATABASE_URL fallback based on the driver. */\nfunction defaultDbUrl(driver: string): string {\n\tif (driver === \"bun-sqlite\" || driver === \"node-sqlite\" || driver === \"libsql\") {\n\t\treturn \"app.db\";\n\t}\n\treturn \"\";\n}\n\nexport const configCommand: Command = {\n\tname: \"config\",\n\taliases: [\"cfg\"],\n\tsummary: \"Update or create nx.config.ts (+ drizzle.config.ts if Drizzle is selected)\",\n\tdescription:\n\t\t\"Re-renders nx.config.ts from the current values (parsed from the existing file, or prompted) plus any flag overrides. Also creates or updates drizzle.config.ts when the ORM is `drizzle`.\",\n\texamples: [\n\t\t\"nx config\",\n\t\t\"nx config --db postgres --db-url postgres://localhost/mydb\",\n\t\t\"nx config --orm drizzle --db bun-sqlite\",\n\t\t\"nx config --view inertia --frontend vue --no-ssr\",\n\t\t\"nx config --force\",\n\t],\n\tflags: [\n\t\t{ name: \"target\", description: \"Target directory (default: cwd)\" },\n\t\t{\n\t\t\tname: \"style\",\n\t\t\tdescription: \"Routing style (nest|adonis|functional|mixed)\",\n\t\t},\n\t\t{ name: \"view\", description: \"View engine (rendu|edge|inertia|none)\" },\n\t\t{\n\t\t\tname: \"view-paths\",\n\t\t\tdescription: \"Comma-separated directories searched for view files (e.g. resources/views)\",\n\t\t},\n\t\t{ name: \"orm\", description: \"ORM driver (drizzle|kysely|none)\" },\n\t\t{\n\t\t\tname: \"db\",\n\t\t\tdescription:\n\t\t\t\t\"Database driver (bun-sqlite|node-sqlite|libsql|postgres|mysql|none)\",\n\t\t},\n\t\t{\n\t\t\tname: \"db-url\",\n\t\t\tdescription: \"Default DATABASE_URL when the env var is unset\",\n\t\t},\n\t\t{\n\t\t\tname: \"frontend\",\n\t\t\tdescription: \"Inertia frontend (react|vue|svelte|solid)\",\n\t\t},\n\t\t{ name: \"ssr\", description: \"Enable Inertia SSR\" },\n\t\t{ name: \"no-ssr\", description: \"Disable Inertia SSR\" },\n\t\t{ name: \"force\", description: \"Overwrite even if file already exists\" },\n\t\t{ name: \"no-interaction\", description: \"Disable interactive prompts\" },\n\t],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst interactive = !flagBool(ctx.flags, \"no-interaction\", false);\n\t\tconst force = flagBool(ctx.flags, \"force\", false);\n\t\tconst target = resolve(\n\t\t\tctx.cwd,\n\t\t\t(ctx.flags.target as string | undefined) ?? \".\",\n\t\t);\n\n\t\tif (!existsSync(target)) {\n\t\t\tlogger.error(`Target directory does not exist: ${target}`);\n\t\t\treturn 1;\n\t\t}\n\n\t\t// 1. Start with the existing file's values (or defaults)\n\t\tconst nxConfigPath = resolve(target, \"nx.config.ts\");\n\t\tconst values: NxConfigValues = parseExistingConfig(nxConfigPath);\n\n\t\t// 2. Apply flag overrides\n\t\tconst flag = (k: string) => ctx.flags[k] as string | undefined;\n\t\tconst flagBoolStrict = (k: string, def: boolean) =>\n\t\t\tflagBool(ctx.flags, k, def);\n\t\tconst style = flag(\"style\");\n\t\tif (style) values.routing = style;\n\t\tconst view = flag(\"view\");\n\t\tif (view) values.view = view;\n\t\tconst viewPaths = flag(\"view-paths\");\n\t\tif (viewPaths) values.viewPaths = viewPaths;\n\t\tconst orm = flag(\"orm\");\n\t\tif (orm) values.orm = orm;\n\t\tconst db = flag(\"db\");\n\t\tif (db) values.dbDriver = db;\n\t\tconst dbUrl = flag(\"db-url\");\n\t\tif (dbUrl !== undefined) values.dbUrl = dbUrl;\n\t\tconst frontend = flag(\"frontend\");\n\t\tif (frontend) values.inertiaFrontend = frontend;\n\t\tif (flagBoolStrict(\"ssr\", false)) values.inertiaSSR = true;\n\t\tif (flagBoolStrict(\"no-ssr\", false)) values.inertiaSSR = false;\n\t\t// --inertia-version intentionally not exposed — too internal\n\n\t\t// 3. Interactive prompt for fields the user didn't supply\n\t\t// (only if the file didn't already exist OR they passed no\n\t\t// flags at all — i.e. they want a guided setup)\n\t\tconst anyFlag = Object.values(ctx.flags).some(\n\t\t\t(v) => v !== undefined && v !== false,\n\t\t);\n\t\tif (interactive && !anyFlag && !existsSync(nxConfigPath)) {\n\t\t\tvalues.routing =\n\t\t\t\t(await select(\"Routing style\", [\"nest\", \"adonis\", \"functional\"], {\n\t\t\t\t\tinteractive,\n\t\t\t\t\tdefault: values.routing,\n\t\t\t\t})) ?? values.routing;\n\t\t\tvalues.view =\n\t\t\t\t(await select(\"View engine\", [\"inertia\", \"rendu\", \"edge\", \"none\"], {\n\t\t\t\t\tinteractive,\n\t\t\t\t\tdefault: values.view,\n\t\t\t\t})) ?? values.view;\n\t\t\tvalues.orm =\n\t\t\t\t(await select(\"ORM driver\", [\"drizzle\", \"kysely\", \"none\"], {\n\t\t\t\t\tinteractive,\n\t\t\t\t\tdefault: values.orm,\n\t\t\t\t})) ?? values.orm;\n\t\t\tvalues.dbDriver =\n\t\t\t\t(await select(\n\t\t\t\t\t\"Database driver\",\n\t\t\t\t\t[\"bun-sqlite\", \"node-sqlite\", \"libsql\", \"postgres\", \"mysql\", \"none\"],\n\t\t\t\t\t{ interactive, default: values.dbDriver },\n\t\t\t\t)) ?? values.dbDriver;\n\t\t\tvalues.inertiaFrontend =\n\t\t\t\t(await select(\n\t\t\t\t\t\"Inertia frontend\",\n\t\t\t\t\t[\"react\", \"vue\", \"svelte\", \"solid\"],\n\t\t\t\t\t{ interactive, default: values.inertiaFrontend },\n\t\t\t\t)) ?? values.inertiaFrontend;\n\t\t}\n\n\t\t// 4. Derive dbUrl from driver if user didn't pass --db-url\n\t\tif (flag(\"db-url\") === undefined && flag(\"db\") !== undefined) {\n\t\t\tvalues.dbUrl = defaultDbUrl(values.dbDriver);\n\t\t}\n\n\t\t// 5. Render and write\n\t\tconst existed = existsSync(nxConfigPath);\n\t\tif (existed && !force) {\n\t\t\t// Existing file: rewrite only if something actually changed.\n\t\t\t// (Always rewrite when the user passed any flag, since\n\t\t\t// they're explicitly asking for a change.)\n\t\t\tif (anyFlag) {\n\t\t\t\twriteNxConfig(target, values);\n\t\t\t\tlogger.info(` ~ nx.config.ts (updated)`);\n\t\t\t} else {\n\t\t\t\tlogger.info(` - nx.config.ts (unchanged; pass --force or a flag to update)`);\n\t\t\t}\n\t\t} else {\n\t\t\twriteNxConfig(target, values);\n\t\t\tlogger.info(` + nx.config.ts`);\n\t\t}\n\n\t\t// 6. Handle drizzle.config.ts\n\t\tconst drizzleConfigPath = resolve(target, \"drizzle.config.ts\");\n\t\tif (values.orm === \"drizzle\") {\n\t\t\tconst dialect = driverToDialect(values.dbDriver);\n\t\t\tconst dbUrl = values.dbUrl;\n\t\t\tconst existedDrizzle = existsSync(drizzleConfigPath);\n\t\t\tif (existedDrizzle && !force && !anyFlag) {\n\t\t\t\tlogger.info(` - drizzle.config.ts (unchanged; pass --force or a flag to update)`);\n\t\t\t} else {\n\t\t\t\twriteDrizzleConfig(target, { dialect, dbUrl });\n\t\t\t\tlogger.info(` ${existedDrizzle ? \"~\" : \"+\"} drizzle.config.ts`);\n\t\t\t}\n\t\t} else if (existsSync(drizzleConfigPath)) {\n\t\t\tlogger.info(\n\t\t\t\t` - drizzle.config.ts (left as-is; ORM is '${values.orm}', not 'drizzle')`,\n\t\t\t);\n\t\t}\n\n\t\tlogger.blank();\n\t\tlogger.success(`config updated in ${target}`);\n\t\tlogger.blank();\n\t\tlogger.heading(\"Next steps\");\n\t\tlogger.info(` cd ${target === ctx.cwd ? \".\" : target}`);\n\t\tif (values.orm === \"drizzle\") {\n\t\t\tlogger.info(` bun run db:generate # generate migrations`);\n\t\t}\n\t\tlogger.blank();\n\n\t\treturn 0;\n\t},\n};\n\n// ---------------------------------------------------------------------------\n// Writers\n// ---------------------------------------------------------------------------\n\nfunction writeNxConfig(target: string, values: NxConfigValues): void {\n\tconst code = render(templates.project[\"nx.config.ts\"], values);\n\twriteFileSync(resolve(target, \"nx.config.ts\"), code);\n}\n\nfunction writeDrizzleConfig(\n\ttarget: string,\n\tvalues: { dialect: string; dbUrl: string },\n): void {\n\tconst code = render(templates.project[\"drizzle.config.ts\"], values);\n\twriteFileSync(resolve(target, \"drizzle.config.ts\"), code);\n}\n\nexport default configCommand;\n",
|
|
63
|
+
"/**\n * `nx new <name>` — create a new NexusTS project in a fresh directory.\n *\n * Unlike `nx init` (which merges into existing files), `nx new` requires\n * the target directory to not exist. It creates a complete project from\n * scratch.\n *\n * nx new my-app\n * nx new my-app --style nest --view inertia --orm drizzle --db sqlite\n */\n\nimport { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport { buildPackageJson, computeDeps, ensureDirectories, flagBool, generateProjectFiles, logger, resolveProjectOption, VALID_PROJECT_OPTIONS } from \"../core/index.js\";\n\nexport const newCommand: Command = {\n\tname: \"new\",\n\taliases: [\"n\"],\n\tsummary: \"Create a new NexusTS project\",\n\tdescription:\n\t\t\"Generates a new project directory with nx.config.ts, tsconfig, package.json, and a starter app/main.ts.\",\n\texamples: [\n\t\t\"nx new my-app\",\n\t\t\"nx new my-app --view inertia --frontend vue\",\n\t],\n\tflags: [\n\t\t{ name: \"style\", description: \"Routing style (nest|adonis|functional)\" },\n\t\t{ name: \"view\", description: \"View engine (rendu|edge|eta|inertia|none)\" },\n\t\t{ name: \"orm\", description: \"ORM driver (drizzle|kysely|none)\" },\n\t\t{ name: \"db\", description: \"Database driver\" },\n\t\t{ name: \"frontend\", description: \"Inertia frontend (react|vue|svelte|solid)\" },\n\t\t{ name: \"no-ssr\", description: \"Disable SSR\" },\n\t],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst name = ctx.positional[0];\n\t\tif (!name) {\n\t\t\tlogger.error(\"Usage: nx new <name>\");\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst interactive = flagBool(ctx.flags, \"interaction\", true);\n\t\tconst target = resolve(ctx.cwd, name);\n\n\t\tif (existsSync(target)) {\n\t\t\tlogger.error(`Directory \"${name}\" already exists.`);\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst routing = await resolveProjectOption(ctx.flags, \"style\", VALID_PROJECT_OPTIONS.style, \"nest\", interactive);\n\t\tconst view = await resolveProjectOption(ctx.flags, \"view\", VALID_PROJECT_OPTIONS.view, \"rendu\", interactive);\n\t\tconst orm = await resolveProjectOption(ctx.flags, \"orm\", VALID_PROJECT_OPTIONS.orm, \"drizzle\", interactive);\n\t\tconst db = await resolveProjectOption(ctx.flags, \"db\", VALID_PROJECT_OPTIONS.db, \"sqlite\", interactive);\n\t\tconst frontend = await resolveProjectOption(ctx.flags, \"frontend\", VALID_PROJECT_OPTIONS.frontend, \"react\", interactive);\n\t\tconst ssr = !flagBool(ctx.flags, \"no-ssr\", false);\n\n\t\tmkdirSync(target, { recursive: true });\n\n\t\tconst dbUrl = db === \"bun-sqlite\" || db === \"sqlite\" ? \"app.db\" : \"\";\n\n\t\tensureDirectories(target, view);\n\n\t\twriteFileSync(\n\t\t\tresolve(target, \"tsconfig.json\"),\n\t\t\t`{\n\t\t\t\"compilerOptions\": {\n \"target\": \"ES2022\",\n \"module\": \"ESNext\",\n \"moduleResolution\": \"bundler\",\n \"strict\": true,\n \"esModuleInterop\": true,\n \"skipLibCheck\": true,\n \"types\": [\"@types/bun\"]\n },\n \"include\": [\"app/**/*.ts\", \"nx.config.ts\"]\n}\n`,\n\t\t);\n\n\t\tconst { deps, devDeps } = computeDeps(view, orm, db, frontend);\n\t\tconst pkgJson = buildPackageJson(name, deps, devDeps, view, frontend);\n\t\twriteFileSync(resolve(target, \"package.json\"), `${JSON.stringify(pkgJson, null, 2)}\\n`);\n\n\t\tconst opts = { target, name, routing, view, orm, db, frontend, ssr, dbUrl };\n\t\tconst files = generateProjectFiles(target, opts);\n\n\t\tlogger.success(`created ${name}`);\n\t\tfor (const f of files) logger.info(` + ${f}`);\n\t\tlogger.info(` + tsconfig.json`);\n\t\tlogger.info(` + package.json`);\n\t\tlogger.blank();\n\t\tlogger.heading(\"Next steps\");\n\t\tlogger.info(` cd ${name}`);\n\t\tlogger.info(` bun install`);\n\t\tlogger.info(` bun run dev`);\n\t\tlogger.blank();\n\n\t\treturn 0;\n\t},\n};\n\nexport default newCommand;\n",
|
|
64
|
+
"/**\n * `nx config` — update or create nx.config.ts (+ drizzle.config.ts\n * if Drizzle is selected).\n *\n * Companion to `nx init`:\n * - `nx init` → scaffold the whole project (config + src/app + README)\n * - `nx config` → only the config files; idempotent\n *\n * Behaviour:\n * - If nx.config.ts exists, parses the current values, merges\n * with any flag values (flags win), and re-renders.\n * - If it does not exist, creates it from scratch with the\n * provided (or prompted) values.\n * - If ORM is `drizzle`, also writes drizzle.config.ts.\n * - If ORM is NOT `drizzle`, an existing drizzle.config.ts is\n * left alone (the user may have it intentionally).\n *\n * Typical use cases:\n * - \"I want to switch from bun-sqlite to postgres\"\n * → nx config --db postgres\n * - \"I want to add Drizzle to an existing project\"\n * → nx config --orm drizzle\n * - \"I want to change the Inertia frontend from React to Vue\"\n * → nx config --frontend vue\n * - \"I haven't decided yet, just show me the prompts\"\n * → nx config --no-interaction=false\n *\n * Flags:\n * --target <dir> Target directory (default: cwd)\n * --style <name> Routing style (nest|adonis|functional)\n * --view <name> View engine (rendu|edge|inertia|none)\n * --orm <name> ORM driver (drizzle|kysely|none)\n * --db <name> Database driver\n * --db-url <url> Database URL (used when DATABASE_URL is unset)\n * --frontend <name> Inertia frontend (react|vue|svelte|solid)\n * --ssr Enable Inertia SSR\n * --no-ssr Disable Inertia SSR\n * --force Overwrite even if file already exists\n * --no-interaction Skip interactive prompts\n */\n\nimport { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport { flagBool, logger, render, select } from \"../core/index.js\";\nimport { templates } from \"../templates/index.js\";\n\ninterface NxConfigValues {\n\trouting: string;\n\tview: string;\n\tviewPaths: string;\n\torm: string;\n\tdbDriver: string;\n\tdbUrl: string;\n\tinertiaFrontend: string;\n\tinertiaSSR: boolean;\n\tinertiaVersion: string;\n\t[key: string]: string | number | boolean | undefined | null;\n}\n\nconst DEFAULT_VALUES: NxConfigValues = {\n\trouting: \"nest\",\n\tview: \"rendu\",\n\tviewPaths: \"resources/views\",\n\torm: \"drizzle\",\n\tdbDriver: \"sqlite\",\n\tdbUrl: \"app.db\",\n\tinertiaFrontend: \"react\",\n\tinertiaSSR: true,\n\tinertiaVersion: \"1.0.0\",\n};\n\n/**\n * Parse an existing nx.config.ts and extract the scalar values.\n * Falls back to DEFAULT_VALUES for any field it can't read.\n */\nfunction parseExistingConfig(path: string): NxConfigValues {\n\tconst out: NxConfigValues = { ...DEFAULT_VALUES };\n\tif (!existsSync(path)) return out;\n\tconst src = readFileSync(path, \"utf8\");\n\tconst grab = (re: RegExp): string | undefined => {\n\t\tconst m = src.match(re);\n\t\treturn m?.[1];\n\t};\n\tconst routing = grab(/routing:\\s*['\"]([^'\"]+)['\"]/);\n\tconst view = grab(/view:\\s*['\"]([^'\"]+)['\"]/);\n\tconst viewPathsMatch = src.match(/viewPaths:\\s*['\"]([^'\"]+)['\"]/);\n\tif (viewPathsMatch) {\n\t\tout.viewPaths = viewPathsMatch[1];\n\t}\n\tconst orm = grab(/orm:\\s*['\"]([^'\"]+)['\"]/);\n\tconst driver = grab(/driver:\\s*['\"]([^'\"]+)['\"]/);\n\tconst url = grab(/url:\\s*process\\.env\\.DATABASE_URL\\s*\\?\\?\\s*['\"]([^'\"]+)['\"]/);\n\tconst frontend = grab(/frontend:\\s*['\"]([^'\"]+)['\"]/);\n\tconst ssr = grab(/ssr:\\s*(true|false)/);\n\tconst version = grab(/version:\\s*['\"]([^'\"]+)['\"]/);\n\tif (routing) out.routing = routing;\n\tif (view) out.view = view;\n\tif (orm) out.orm = orm;\n\tif (driver) out.dbDriver = driver;\n\tif (url !== undefined) out.dbUrl = url;\n\tif (frontend) out.inertiaFrontend = frontend;\n\tif (ssr) out.inertiaSSR = ssr === \"true\";\n\tif (version) out.inertiaVersion = version;\n\treturn out;\n}\n\n/** Map a `db` driver name to a drizzle-kit dialect. */\nfunction driverToDialect(driver: string): string {\n\tswitch (driver) {\n\t\tcase \"bun-sqlite\":\n\t\tcase \"sqlite\":\n\t\t\treturn \"sqlite\";\n\t\tcase \"postgres\":\n\t\t\treturn \"postgresql\";\n\t\tcase \"mysql\":\n\t\t\treturn \"mysql\";\n\t\tdefault:\n\t\t\treturn \"sqlite\";\n\t}\n}\n\n/** Default DATABASE_URL fallback based on the driver. */\nfunction defaultDbUrl(driver: string): string {\n\tif (driver === \"bun-sqlite\" || driver === \"sqlite\" ) {\n\t\treturn \"app.db\";\n\t}\n\treturn \"\";\n}\n\nexport const configCommand: Command = {\n\tname: \"config\",\n\taliases: [\"cfg\"],\n\tsummary: \"Update or create nx.config.ts (+ drizzle.config.ts if Drizzle is selected)\",\n\tdescription:\n\t\t\"Re-renders nx.config.ts from the current values (parsed from the existing file, or prompted) plus any flag overrides. Also creates or updates drizzle.config.ts when the ORM is `drizzle`.\",\n\texamples: [\n\t\t\"nx config\",\n\t\t\"nx config --db postgres --db-url postgres://localhost/mydb\",\n\t\t\"nx config --orm drizzle --db sqlite\",\n\t\t\"nx config --view inertia --frontend vue --no-ssr\",\n\t\t\"nx config --force\",\n\t],\n\tflags: [\n\t\t{ name: \"target\", description: \"Target directory (default: cwd)\" },\n\t\t{\n\t\t\tname: \"style\",\n\t\t\tdescription: \"Routing style (nest|adonis|functional|mixed)\",\n\t\t},\n\t\t{ name: \"view\", description: \"View engine (rendu|edge|inertia|none)\" },\n\t\t{\n\t\t\tname: \"view-paths\",\n\t\t\tdescription: \"Comma-separated directories searched for view files (e.g. resources/views)\",\n\t\t},\n\t\t{ name: \"orm\", description: \"ORM driver (drizzle|kysely|none)\" },\n\t\t{\n\t\t\tname: \"db\",\n\t\t\tdescription:\n\t\t\t\t\"Database driver (sqlite|postgres|mysql|none)\",\n\t\t},\n\t\t{\n\t\t\tname: \"db-url\",\n\t\t\tdescription: \"Default DATABASE_URL when the env var is unset\",\n\t\t},\n\t\t{\n\t\t\tname: \"frontend\",\n\t\t\tdescription: \"Inertia frontend (react|vue|svelte|solid)\",\n\t\t},\n\t\t{ name: \"ssr\", description: \"Enable Inertia SSR\" },\n\t\t{ name: \"no-ssr\", description: \"Disable Inertia SSR\" },\n\t\t{ name: \"force\", description: \"Overwrite even if file already exists\" },\n\t\t{ name: \"no-interaction\", description: \"Disable interactive prompts\" },\n\t],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst interactive = !flagBool(ctx.flags, \"no-interaction\", false);\n\t\tconst force = flagBool(ctx.flags, \"force\", false);\n\t\tconst target = resolve(\n\t\t\tctx.cwd,\n\t\t\t(ctx.flags.target as string | undefined) ?? \".\",\n\t\t);\n\n\t\tif (!existsSync(target)) {\n\t\t\tlogger.error(`Target directory does not exist: ${target}`);\n\t\t\treturn 1;\n\t\t}\n\n\t\t// 1. Start with the existing file's values (or defaults)\n\t\tconst nxConfigPath = resolve(target, \"nx.config.ts\");\n\t\tconst values: NxConfigValues = parseExistingConfig(nxConfigPath);\n\n\t\t// 2. Apply flag overrides\n\t\tconst flag = (k: string) => ctx.flags[k] as string | undefined;\n\t\tconst flagBoolStrict = (k: string, def: boolean) =>\n\t\t\tflagBool(ctx.flags, k, def);\n\t\tconst style = flag(\"style\");\n\t\tif (style) values.routing = style;\n\t\tconst view = flag(\"view\");\n\t\tif (view) values.view = view;\n\t\tconst viewPaths = flag(\"view-paths\");\n\t\tif (viewPaths) values.viewPaths = viewPaths;\n\t\tconst orm = flag(\"orm\");\n\t\tif (orm) values.orm = orm;\n\t\tconst db = flag(\"db\");\n\t\tif (db) values.dbDriver = db;\n\t\tconst dbUrl = flag(\"db-url\");\n\t\tif (dbUrl !== undefined) values.dbUrl = dbUrl;\n\t\tconst frontend = flag(\"frontend\");\n\t\tif (frontend) values.inertiaFrontend = frontend;\n\t\tif (flagBoolStrict(\"ssr\", false)) values.inertiaSSR = true;\n\t\tif (flagBoolStrict(\"no-ssr\", false)) values.inertiaSSR = false;\n\t\t// --inertia-version intentionally not exposed — too internal\n\n\t\t// 3. Interactive prompt for fields the user didn't supply\n\t\t// (only if the file didn't already exist OR they passed no\n\t\t// flags at all — i.e. they want a guided setup)\n\t\tconst anyFlag = Object.values(ctx.flags).some(\n\t\t\t(v) => v !== undefined && v !== false,\n\t\t);\n\t\tif (interactive && !anyFlag && !existsSync(nxConfigPath)) {\n\t\t\tvalues.routing =\n\t\t\t\t(await select(\"Routing style\", [\"nest\", \"adonis\", \"functional\"], {\n\t\t\t\t\tinteractive,\n\t\t\t\t\tdefault: values.routing,\n\t\t\t\t})) ?? values.routing;\n\t\t\tvalues.view =\n\t\t\t\t(await select(\"View engine\", [\"inertia\", \"rendu\", \"edge\", \"none\"], {\n\t\t\t\t\tinteractive,\n\t\t\t\t\tdefault: values.view,\n\t\t\t\t})) ?? values.view;\n\t\t\tvalues.orm =\n\t\t\t\t(await select(\"ORM driver\", [\"drizzle\", \"kysely\", \"none\"], {\n\t\t\t\t\tinteractive,\n\t\t\t\t\tdefault: values.orm,\n\t\t\t\t})) ?? values.orm;\n\t\t\tvalues.dbDriver =\n\t\t\t\t(await select(\n\t\t\t\t\t\"Database driver\",\n\t\t\t\t\t[\"sqlite\", \"postgres\", \"mysql\", \"none\"],\n\t\t\t\t\t{ interactive, default: values.dbDriver },\n\t\t\t\t)) ?? values.dbDriver;\n\t\t\tvalues.inertiaFrontend =\n\t\t\t\t(await select(\n\t\t\t\t\t\"Inertia frontend\",\n\t\t\t\t\t[\"react\", \"vue\", \"svelte\", \"solid\"],\n\t\t\t\t\t{ interactive, default: values.inertiaFrontend },\n\t\t\t\t)) ?? values.inertiaFrontend;\n\t\t}\n\n\t\t// 4. Derive dbUrl from driver if user didn't pass --db-url\n\t\tif (flag(\"db-url\") === undefined && flag(\"db\") !== undefined) {\n\t\t\tvalues.dbUrl = defaultDbUrl(values.dbDriver);\n\t\t}\n\n\t\t// 5. Render and write\n\t\tconst existed = existsSync(nxConfigPath);\n\t\tif (existed && !force) {\n\t\t\t// Existing file: rewrite only if something actually changed.\n\t\t\t// (Always rewrite when the user passed any flag, since\n\t\t\t// they're explicitly asking for a change.)\n\t\t\tif (anyFlag) {\n\t\t\t\twriteNxConfig(target, values);\n\t\t\t\tlogger.info(` ~ nx.config.ts (updated)`);\n\t\t\t} else {\n\t\t\t\tlogger.info(` - nx.config.ts (unchanged; pass --force or a flag to update)`);\n\t\t\t}\n\t\t} else {\n\t\t\twriteNxConfig(target, values);\n\t\t\tlogger.info(` + nx.config.ts`);\n\t\t}\n\n\t\t// 6. Handle drizzle.config.ts\n\t\tconst drizzleConfigPath = resolve(target, \"drizzle.config.ts\");\n\t\tif (values.orm === \"drizzle\") {\n\t\t\tconst dialect = driverToDialect(values.dbDriver);\n\t\t\tconst dbUrl = values.dbUrl;\n\t\t\tconst existedDrizzle = existsSync(drizzleConfigPath);\n\t\t\tif (existedDrizzle && !force && !anyFlag) {\n\t\t\t\tlogger.info(` - drizzle.config.ts (unchanged; pass --force or a flag to update)`);\n\t\t\t} else {\n\t\t\t\twriteDrizzleConfig(target, { dialect, dbUrl });\n\t\t\t\tlogger.info(` ${existedDrizzle ? \"~\" : \"+\"} drizzle.config.ts`);\n\t\t\t}\n\t\t} else if (existsSync(drizzleConfigPath)) {\n\t\t\tlogger.info(\n\t\t\t\t` - drizzle.config.ts (left as-is; ORM is '${values.orm}', not 'drizzle')`,\n\t\t\t);\n\t\t}\n\n\t\tlogger.blank();\n\t\tlogger.success(`config updated in ${target}`);\n\t\tlogger.blank();\n\t\tlogger.heading(\"Next steps\");\n\t\tlogger.info(` cd ${target === ctx.cwd ? \".\" : target}`);\n\t\tif (values.orm === \"drizzle\") {\n\t\t\tlogger.info(` bun run db:generate # generate migrations`);\n\t\t}\n\t\tlogger.blank();\n\n\t\treturn 0;\n\t},\n};\n\n// ---------------------------------------------------------------------------\n// Writers\n// ---------------------------------------------------------------------------\n\nfunction writeNxConfig(target: string, values: NxConfigValues): void {\n\tconst code = render(templates.project[\"nx.config.ts\"], values);\n\twriteFileSync(resolve(target, \"nx.config.ts\"), code);\n}\n\nfunction writeDrizzleConfig(\n\ttarget: string,\n\tvalues: { dialect: string; dbUrl: string },\n): void {\n\tconst code = render(templates.project[\"drizzle.config.ts\"], values);\n\twriteFileSync(resolve(target, \"drizzle.config.ts\"), code);\n}\n\nexport default configCommand;\n",
|
|
65
65
|
"/**\n * `nx repl` — interactive REPL with the app's services loaded.\n *\n * Boots the user's `AppModule` and drops you into a REPL with\n * `app`, `container`, `db`, `logger`, `cfg`, `cache`, and `events`\n * pre-loaded. Useful for debugging, exploring data, and trying\n * out queries without writing a throwaway script.\n *\n * Usage:\n * nx repl # default: ./app/app.module.ts\n * nx repl --module app/app.module.ts\n * nx repl --no-boot # vanilla REPL\n * nx repl --history /tmp/nx-history # custom history file\n *\n * Once inside the REPL:\n * ❯ await db.select().from(users).all()\n * ❯ logger.info(\"hello from REPL\")\n * ❯ .services\n * ❯ .routes\n * ❯ .help\n * ❯ .exit\n *\n * Multi-line input is detected by a bracket-matcher — an\n * expression with an unclosed `{}`, `[]`, or `()` keeps the\n * prompt in `...` continuation mode.\n *\n * History is persisted to `.nx-repl-history` (or the path\n * given by `--history`).\n */\n\nimport {\n\texistsSync,\n\tmkdirSync,\n\treadFileSync,\n\twriteFileSync,\n} from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\nimport * as readline from \"node:readline\";\nimport * as vm from \"node:vm\";\nimport { logger } from \"../core/index.js\";\nimport { VERSION } from \"../core/index.js\";\nimport type { Command, CommandContext } from \"../core/index.js\";\n\nconst BANNER = (() => {\n\tconst W = 49;\n\tconst dash = \"─\".repeat(W);\n\tconst ver = `v${VERSION}`;\n\tconst verLen = ver.length;\n\tconst TITLE = \"NexusTS REPL\";\n\tconst HINT = \"Type .help for available commands\";\n\tconst titleGap = \" \".repeat(W - 2 - TITLE.length - verLen - 1);\n\tconst hintGap = \" \".repeat(W - 2 - HINT.length);\n\tconst L = (s: string) => `│${s}│`;\n\treturn [\n\t\t`╭${dash}╮`,\n\t\tL(` ${TITLE}${titleGap}${ver} `),\n\t\tL(\" \".repeat(W)),\n\t\tL(` ${HINT}${hintGap}`),\n\t\t`╰${dash}╯`,\n\t].join(\"\\n\");\n})();\n\nconst HELP = `\nAvailable commands:\n .help Show this help\n .exit Exit the REPL (alias: .quit)\n .services List services in the DI container\n .modules List all modules\n .routes List all registered routes\n .history Show command history\n .clear Clear the screen\n .reset Reset the REPL context (clear all variables)\n\nPre-loaded variables (when an app is booted):\n app The Application instance\n container The DI container\n db DrizzleService (if registered)\n logger LoggerService (if registered)\n cfg ConfigService (if registered)\n cache CacheService (if registered)\n events EventService (if registered)\n\nExamples:\n > await db.select().from(users).all()\n > logger.info(\"hello from REPL\")\n > app.container.size\n`;\n\n/** Pair of (variable name, npm package name, export name). */\nconst PRELOAD: Array<[string, string, string]> = [\n\t[\"db\", \"@nexusts/drizzle\", \"DrizzleService\"],\n\t[\"logger\", \"@nexusts/logger\", \"Logger\"],\n\t[\"cfg\", \"@nexusts/config\", \"ConfigService\"],\n\t[\"cache\", \"@nexusts/cache\", \"CacheService\"],\n\t[\"events\", \"@nexusts/events\", \"EventService\"],\n];\n\nexport const replCommand: Command = {\n\tname: \"repl\",\n\taliases: [\"console\", \"shell\"],\n\tsummary: \"Start an interactive REPL with the app's services\",\n\tdescription:\n\t\t\"Boots the user's app module and drops into an interactive REPL. Useful for debugging, exploring data, and trying out queries. Multi-line input is supported. History is persisted to .nx-repl-history.\",\n\texamples: [\n\t\t\"nx repl\",\n\t\t\"nx repl --module app/app.module.ts\",\n\t\t\"nx repl --no-boot\",\n\t\t\"nx repl --history /tmp/nx-history\",\n\t],\n\tflags: [\n\t\t{\n\t\t\tname: \"module\",\n\t\t\tdescription:\n\t\t\t\t\"Path to the AppModule (default: app/app.module.ts).\",\n\t\t},\n\t\t{\n\t\t\tname: \"no-boot\",\n\t\t\tdescription: \"Skip booting the app — start a vanilla REPL.\",\n\t\t},\n\t\t{\n\t\t\tname: \"history\",\n\t\t\tdescription: \"History file path (default: .nx-repl-history).\",\n\t\t},\n\t],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst mod = ctx.flags.module as string | undefined;\n\t\tconst noBoot = Boolean(ctx.flags[\"no-boot\"]);\n\t\tconst histPath = resolve(\n\t\t\tctx.cwd,\n\t\t\t(ctx.flags.history as string | undefined) ?? \".nx-repl-history\",\n\t\t);\n\n\t\tconst env: Record<string, unknown> = { console };\n\n\t\tif (!noBoot) {\n\t\t\tconst modPath = resolve(\n\t\t\t\tctx.cwd,\n\t\t\t\tmod ?? \"app/app.module.ts\",\n\t\t\t);\n\t\t\tif (!existsSync(modPath)) {\n\t\t\t\tlogger.error(`module not found: ${modPath}`);\n\t\t\t\tlogger.info(\n\t\t\t\t\t\"pass --module <path> or --no-boot to skip booting\",\n\t\t\t\t);\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst modSpec = await import(modPath);\n\t\t\t\tconst AppModule =\n\t\t\t\t\tmodSpec.default ?? modSpec.AppModule;\n\t\t\t\tif (!AppModule) {\n\t\t\t\t\tlogger.error(\n\t\t\t\t\t\t`module at ${modPath} does not export AppModule as default or named export`,\n\t\t\t\t\t);\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\tconst { Application } = await import(\n\t\t\t\t\t\"@nexusts/core\"\n\t\t\t\t);\n\t\t\t\tconst app = new Application(AppModule);\n\t\t\t\tenv.app = app;\n\t\t\t\tenv.container = app.container;\n\n\t\t\t\tfor (const [name, path, className] of PRELOAD) {\n\t\t\t\t\tawait preloadService(\n\t\t\t\t\t\tenv,\n\t\t\t\t\t\tapp as { container: { resolve: (t: unknown) => unknown } },\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tlogger.info(`✓ Booted ${modPath}`);\n\t\t\t} catch (err) {\n\t\t\t\tlogger.error(`failed to boot: ${(err as Error).message}`);\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t}\n\n\t\tconsole.log(BANNER);\n\t\tif (noBoot) {\n\t\t\tconsole.log(\" (started with --no-boot; no app is loaded)\");\n\t\t}\n\n\t\tconst history = loadHistory(histPath);\n\n\t\tconst rl = readline.createInterface({\n\t\t\tinput: process.stdin,\n\t\t\toutput: process.stdout,\n\t\t\tprompt: \"❯ \",\n\t\t\tterminal: true,\n\t\t\thistory,\n\t\t\thistorySize: 1000,\n\t\t});\n\n\t\tconst saveHist = () => saveHistoryFile(histPath, (rl as unknown as { history?: string[] }).history ?? []);\n\t\trl.on(\"close\", () => {\n\t\t\tsaveHist();\n\t\t\tprocess.exit(0);\n\t\t});\n\t\tprocess.on(\"SIGINT\", () => {\n\t\t\tsaveHist();\n\t\t\tprocess.exit(0);\n\t\t});\n\t\tprocess.on(\"exit\", saveHist);\n\n\t\tlet buffer = \"\";\n\t\tconst vmContext = vm.createContext(env);\n\n\t\tconst evaluate = async (code: string): Promise<void> => {\n\t\t\ttry {\n\t\t\t\tconst script = new vm.Script(code, { filename: \"<nx-repl>\" });\n\t\t\t\tconst result = script.runInContext(vmContext, {\n\t\t\t\t\tdisplayErrors: false,\n\t\t\t\t});\n\t\t\t\tif (result === undefined) return;\n\t\t\t\tif (\n\t\t\t\t\tresult &&\n\t\t\t\t\ttypeof (result as { then?: unknown }).then === \"function\"\n\t\t\t\t) {\n\t\t\t\t\tconst v = await (result as Promise<unknown>);\n\t\t\t\t\tconsole.log(formatResult(v));\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log(formatResult(result));\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error(formatError(err as Error));\n\t\t\t}\n\t\t};\n\n\t\tconst handleDotCommand = async (line: string): Promise<boolean> => {\n\t\t\tconst cmd = line.trim();\n\t\t\tswitch (cmd) {\n\t\t\t\tcase \".help\":\n\t\t\t\t\tconsole.log(HELP);\n\t\t\t\t\treturn true;\n\t\t\t\tcase \".exit\":\n\t\t\t\tcase \".quit\":\n\t\t\t\t\tsaveHist();\n\t\t\t\t\trl.close();\n\t\t\t\t\treturn true;\n\t\t\t\tcase \".clear\":\n\t\t\t\t\tconsole.clear();\n\t\t\t\t\tconsole.log(BANNER);\n\t\t\t\t\treturn true;\n\t\t\t\tcase \".services\": {\n\t\t\t\t\tconst services = listServices(env.container);\n\t\t\t\t\tif (services.length === 0) {\n\t\t\t\t\t\tconsole.log(\" (no services registered)\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (const s of services) console.log(` ${s}`);\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tcase \".modules\": {\n\t\t\t\t\tconst mods = (env.app as { modules?: Array<{ moduleClass?: { name?: string } }> } | undefined)?.modules;\n\t\t\t\t\tif (!mods || mods.length === 0) {\n\t\t\t\t\t\tconsole.log(\" (no modules)\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (const m of mods) {\n\t\t\t\t\t\t\tconsole.log(` ${m.moduleClass?.name ?? \"(anon)\"}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tcase \".routes\": {\n\t\t\t\t\tconst app = env.app as\n\t\t\t\t\t\t| {\n\t\t\t\t\t\t\t\tserver?: {\n\t\t\t\t\t\t\t\t\trouter?: {\n\t\t\t\t\t\t\t\t\t\tgetRoutes?: () => Array<{\n\t\t\t\t\t\t\t\t\t\t\tmethod: string;\n\t\t\t\t\t\t\t\t\t\t\tpath: string;\n\t\t\t\t\t\t\t\t\t\t\ttarget?: { name?: string };\n\t\t\t\t\t\t\t\t\t\t\tpropertyKey?: string | symbol;\n\t\t\t\t\t\t\t\t\t\t}>;\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t }\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\tconst getRoutes = app?.server?.router?.getRoutes;\n\t\t\t\t\tconst raw =\n\t\t\t\t\t\ttypeof getRoutes === \"function\"\n\t\t\t\t\t\t\t? getRoutes.call(app?.server?.router)\n\t\t\t\t\t\t\t: [];\n\t\t\t\t\tconst seen = new Set<string>();\n\t\t\t\t\tconst routes = raw.filter((r) => {\n\t\t\t\t\t\tconst key = `${r.method}:${r.path}:${r.target?.name ?? \"\"}:${typeof r.propertyKey === \"symbol\" ? r.propertyKey.description ?? \"\" : String(r.propertyKey)}`;\n\t\t\t\t\t\tif (seen.has(key)) return false;\n\t\t\t\t\t\tseen.add(key);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t});\n\t\t\t\t\tif (routes.length === 0) {\n\t\t\t\t\t\tconsole.log(\" (no routes registered)\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst methodPad = Math.max(...routes.map((r) => r.method.length));\n\t\t\t\t\t\tconst pathPad = Math.max(...routes.map((r) => r.path.length));\n\t\t\t\t\t\tfor (const r of routes) {\n\t\t\t\t\t\t\tconst m = r.method.padEnd(methodPad);\n\t\t\t\t\t\t\tconst p = r.path.padEnd(pathPad);\n\t\t\t\t\t\t\tconst c = `${r.target?.name ?? \"?\"}.${typeof r.propertyKey === \"symbol\" ? r.propertyKey.description ?? \"?\" : String(r.propertyKey)}`;\n\t\t\t\t\t\t\tconsole.log(` ${m} ${p} ${c}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tcase \".history\": {\n\t\t\t\t\tconst hist = (rl as unknown as { history?: string[] }).history ?? [];\n\t\t\t\t\tconst histArr = hist as string[];\n\t\t\t\t\thistArr.forEach((h: string, i: number) => {\n\t\t\t\t\t\tconsole.log(` ${(i + 1).toString().padStart(4)}: ${h}`);\n\t\t\t\t\t});\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tcase \".reset\": {\n\t\t\t\t\tfor (const k of Object.keys(env)) {\n\t\t\t\t\t\tif (k !== \"console\") delete env[k];\n\t\t\t\t\t}\n\t\t\t\t\tconsole.log(\" context reset\");\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.error(` unknown command: ${cmd}`);\n\t\t\t\t\tconsole.log(\" type .help for the list\");\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t};\n\n\t\trl.on(\"line\", async (line) => {\n\t\t\tconst trimmed = line.trim();\n\t\t\tif (trimmed.startsWith(\".\")) {\n\t\t\t\tawait handleDotCommand(trimmed);\n\t\t\t} else {\n\t\t\t\tbuffer += `${line}\\n`;\n\t\t\t\tif (isIncomplete(buffer)) {\n\t\t\t\t\trl.setPrompt(\"... \");\n\t\t\t\t\trl.prompt();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tawait evaluate(buffer);\n\t\t\t\tbuffer = \"\";\n\t\t\t\trl.setPrompt(\"❯ \");\n\t\t\t}\n\t\t\trl.prompt();\n\t\t});\n\n\t\trl.prompt();\n\n\t\t// Keep the process alive. readline drives the rest.\n\t\treturn new Promise(() => {\n\t\t\t/* never resolves */\n\t\t});\n\t},\n};\n\n/* ------------------------------------------------------------------ *\n * Helpers — exported for testing\n * ------------------------------------------------------------------ */\n\nexport async function preloadService(\n\tenv: Record<string, unknown>,\n\tapp: { container: { resolve: (t: unknown) => unknown } },\n\tname: string,\n\tpath: string,\n\tclassName: string,\n): Promise<void> {\n\ttry {\n\t\tconst mod = (await import(path)) as Record<string, unknown>;\n\t\tconst ServiceClass = mod[className] as\n\t\t\t| (abstract new (...args: never[]) => unknown) & {\n\t\t\t\t\tTOKEN?: unknown;\n\t\t\t\t\t[key: string]: unknown;\n\t\t\t }\n\t\t\t| undefined;\n\t\tif (!ServiceClass) {\n\t\t\tlogger.debug(`repl: ${className} not found in ${path}`);\n\t\t\treturn;\n\t\t}\n\t\tconst Token =\n\t\t\tServiceClass.TOKEN ??\n\t\t\tServiceClass[`${className.toUpperCase()}_TOKEN`];\n\t\tif (!Token) {\n\t\t\tlogger.debug(`repl: ${className}.TOKEN not found`);\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tenv[name] = app.container.resolve(Token);\n\t\t\tlogger.debug(`repl: loaded ${name} (${className})`);\n\t\t} catch {\n\t\t\ttry {\n\t\t\t\tenv[name] = app.container.resolve(ServiceClass);\n\t\t\t\tlogger.debug(`repl: loaded ${name} (${className}) via class`);\n\t\t\t} catch {\n\t\t\t\tlogger.debug(`repl: ${name} (${className}) not registered in container`);\n\t\t\t}\n\t\t}\n\t} catch {\n\t\tlogger.debug(`repl: ${path} not installed — skipping ${name}`);\n\t}\n}\n\nexport function describeToken(token: unknown): string {\n\tif (typeof token === \"symbol\") {\n\t\tconst desc = token.description ?? \"(symbol)\";\n\t\treturn `Symbol(${desc})`;\n\t}\n\tif (typeof token === \"function\") {\n\t\treturn (token as { name?: string }).name || \"(anonymous class)\";\n\t}\n\treturn String(token);\n}\n\nexport function listServices(\n\tcontainer: unknown,\n): string[] {\n\tif (!container) return [];\n\tconst c = container as {\n\t\tlistProviders?: () => Array<{ token?: { toString(): string } }>;\n\t};\n\tif (typeof c.listProviders !== \"function\") return [];\n\ttry {\n\t\treturn c\n\t\t\t.listProviders()\n\t\t\t.map((p) => describeToken(p.token));\n\t} catch {\n\t\treturn [];\n\t}\n}\n\nexport function isIncomplete(code: string): boolean {\n\t// Track string literals, line comments, block comments, and\n\t// bracket depth. Returns true if the code has any unclosed\n\t// bracket / string / comment.\n\tconst stack: string[] = [];\n\tlet inString: string | null = null;\n\tlet inComment: \"line\" | \"block\" | null = null;\n\tfor (let i = 0; i < code.length; i++) {\n\t\tconst c = code[i];\n\t\tconst next = code[i + 1];\n\t\tif (inComment === \"line\") {\n\t\t\tif (c === \"\\n\") inComment = null;\n\t\t\tcontinue;\n\t\t}\n\t\tif (inComment === \"block\") {\n\t\t\tif (c === \"*\" && next === \"/\") {\n\t\t\t\tinComment = null;\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (inString) {\n\t\t\tif (c === \"\\\\\") {\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (c === inString) inString = null;\n\t\t\tcontinue;\n\t\t}\n\t\tif (c === \"/\" && next === \"/\") {\n\t\t\tinComment = \"line\";\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (c === \"/\" && next === \"*\") {\n\t\t\tinComment = \"block\";\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (c === '\"' || c === \"'\" || c === \"`\") {\n\t\t\tinString = c;\n\t\t\tcontinue;\n\t\t}\n\t\tif (c === \"{\" || c === \"[\" || c === \"(\") stack.push(c);\n\t\telse if (c === \"}\" || c === \"]\" || c === \")\") stack.pop();\n\t}\n\treturn stack.length > 0 || inString !== null || inComment === \"block\";\n}\n\nexport function formatResult(r: unknown): string {\n\tif (r === null) return \"null\";\n\tif (r === undefined) return \"undefined\";\n\tif (typeof r === \"string\") return r;\n\tif (\n\t\ttypeof r === \"number\" ||\n\t\ttypeof r === \"boolean\" ||\n\t\ttypeof r === \"bigint\"\n\t) return String(r);\n\tif (typeof r === \"function\") {\n\t\tconst fn = r as { name?: string };\n\t\treturn `[Function: ${fn.name || \"anonymous\"}]`;\n\t}\n\tif (typeof r === \"symbol\") return r.toString();\n\ttry {\n\t\treturn JSON.stringify(r, null, 2);\n\t} catch {\n\t\treturn Object.prototype.toString.call(r);\n\t}\n}\n\nexport function formatError(e: Error): string {\n\tif (e.name === \"SyntaxError\") return e.message;\n\treturn e.stack ? e.stack.split(\"\\n\").slice(0, 5).join(\"\\n\") : e.message;\n}\n\nfunction loadHistory(path: string): string[] {\n\tif (!existsSync(path)) return [];\n\ttry {\n\t\treturn readFileSync(path, \"utf-8\").split(\"\\n\").filter(Boolean);\n\t} catch {\n\t\treturn [];\n\t}\n}\n\nfunction saveHistoryFile(path: string, history: string[]): void {\n\ttry {\n\t\tconst dir = dirname(path);\n\t\tif (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n\t\twriteFileSync(path, history.slice(-1000).join(\"\\n\"));\n\t} catch {\n\t\t// best effort\n\t}\n}\n\nexport default replCommand;\n",
|
|
66
66
|
"/**\n * `nx route:list` — list every registered HTTP route.\n *\n * Walks the project's controllers (under paths.controllers) and reads\n * the `@Controller(prefix)` + `@Get/@Post/...` metadata via reflection.\n * For modules that don't use the decorator style, this command emits\n * an informational message instead of failing.\n */\n\nimport { readdirSync, statSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport { colors, logger } from \"../core/index.js\";\nimport { safeGetMeta } from \"@nexusts/core/di/safe-reflect\";\n\ninterface DiscoveredRoute {\n\tmethod: string;\n\tpath: string;\n\thandler: string;\n\tcontroller: string;\n}\n\nexport const routeListCommand: Command = {\n\tname: \"route:list\",\n\taliases: [\"routes\", \"route-list\"],\n\tsummary: \"List registered HTTP routes\",\n\tdescription:\n\t\t\"Reads route metadata from controllers and prints a table. Falls back to a scan message when controllers don't use the decorator style.\",\n\tflags: [\n\t\t{ name: \"format\", description: \"Output format: table (default) | json\" },\n\t],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst controllersDir = resolve(ctx.cwd, ctx.config.paths.controllers);\n\n\t\ttry {\n\t\t\tstatSync(controllersDir);\n\t\t} catch {\n\t\t\tlogger.warn(`No controllers directory at ${controllersDir}.`);\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst files = readdirSync(controllersDir).filter((f) => f.endsWith(\".ts\"));\n\t\tif (files.length === 0) {\n\t\t\tlogger.info(\"No controllers found.\");\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst routes: DiscoveredRoute[] = [];\n\n\t\tfor (const file of files) {\n\t\t\tconst fullPath = resolve(controllersDir, file);\n\t\t\ttry {\n\t\t\t\tconst mod: Record<string, unknown> = await import(`${fullPath}?t=${Date.now()}`);\n\t\t\t\tfor (const exportName of Object.keys(mod)) {\n\t\t\t\t\tconst cls = mod[exportName];\n\t\t\t\t\tif (typeof cls !== \"function\") continue;\n\n\t\t\t\t\tconst controllerMeta =\n\t\t\t\t\t\tsafeGetMeta(\"nexus:controller\", cls) as\n\t\t\t\t\t\t\t| { prefix?: string }\n\t\t\t\t\t\t\t| undefined;\n\t\t\t\t\tconst prefix = controllerMeta?.prefix ?? \"\";\n\t\t\t\t\tconst routeList = safeGetMeta(\"nexus:routes\", cls) ?? [];\n\n\t\t\t\t\tfor (const r of routeList) {\n\t\t\t\t\t\troutes.push({\n\t\t\t\t\t\t\tmethod: String(r.method).toUpperCase(),\n\t\t\t\t\t\t\tpath: joinPath(prefix, r.path),\n\t\t\t\t\t\t\thandler: String(r.propertyKey),\n\t\t\t\t\t\t\tcontroller: cls.name || exportName,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (err: unknown) {\n\t\t\t\tlogger.warn(`could not parse ${file}: ${err instanceof Error ? err.message : String(err)}`);\n\t\t\t}\n\t\t}\n\n\t\tif (routes.length === 0) {\n\t\t\tlogger.info(\n\t\t\t\t\"No routes discovered via metadata. \" +\n\t\t\t\t\t\"This usually means the controllers use the Adonis or functional style — see nx.config.ts:routing.\",\n\t\t\t);\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst format = (ctx.flags.format as string | undefined) ?? \"table\";\n\t\tif (format === \"json\") {\n\t\t\tconsole.log(JSON.stringify(routes, null, 2));\n\t\t\treturn 0;\n\t\t}\n\n\t\troutes.sort((a, b) => a.path.localeCompare(b.path));\n\t\tlogger.heading(`Routes (${routes.length})`);\n\t\tconst methodColors: Record<string, (s: string) => string> = {\n\t\t\tGET: colors.cyan,\n\t\t\tPOST: colors.green,\n\t\t\tPUT: colors.yellow,\n\t\t\tPATCH: colors.yellow,\n\t\t\tDELETE: colors.red,\n\t\t\tOPTIONS: colors.gray,\n\t\t\tHEAD: colors.gray,\n\t\t};\n\t\tconst pathWidth = Math.max(...routes.map((r) => r.path.length));\n\t\tconst methodWidth = Math.max(...routes.map((r) => r.method.length));\n\t\tfor (const r of routes) {\n\t\t\tconst colorize = methodColors[r.method] ?? colors.reset;\n\t\t\tconst m = colorize(r.method.padEnd(methodWidth));\n\t\t\tconst p = colors.bold(r.path.padEnd(pathWidth));\n\t\t\tconst c = colors.dim(`${r.controller}.${r.handler}`);\n\t\t\tconsole.log(` ${m} ${p} ${c}`);\n\t\t}\n\t\tlogger.blank();\n\t\treturn 0;\n\t},\n};\n\nfunction joinPath(prefix: string, sub: string): string {\n\tconst a = prefix.endsWith(\"/\") ? prefix.slice(0, -1) : prefix;\n\tconst b = sub.startsWith(\"/\") ? sub : `/${sub}`;\n\treturn `${a}${b}` || \"/\";\n}\n\nexport default routeListCommand;\n",
|
|
67
67
|
"/**\n * CLI command registry. Imported by `src/cli/index.ts`.\n *\n * Each command is a `Command` object (see `core/index.ts`). The order\n * here is the order commands appear in `nx help`.\n */\n\nimport type { Command } from \"../core/index.js\";\nimport info from \"./info.js\";\nimport init from \"./init.js\";\nimport makeAuth from \"./make-auth.js\";\nimport makeController from \"./make-controller.js\";\nimport makeCrud from \"./make-crud.js\";\nimport makeListener from \"./make-listener.js\";\nimport makeMiddleware from \"./make-middleware.js\";\nimport makeMigration from \"./make-migration.js\";\nimport makeModel from \"./make-model.js\";\nimport makeModule from \"./make-module.js\";\nimport makeQueue from \"./make-queue.js\";\nimport makeRepository from \"./make-repository.js\";\nimport makeSchedule from \"./make-schedule.js\";\nimport makeService from \"./make-service.js\";\nimport makeSession from \"./make-session.js\";\nimport makeValidator from \"./make-validator.js\";\nimport dbMigrate from \"./db-migrate.js\";\nimport dbGenerate from \"./db-generate.js\";\nimport dbSeed from \"./db-seed.js\";\nimport newCmd from \"./new.js\";\nimport configCmd from \"./config.js\";\nimport repl from \"./repl.js\";\nimport routeList from \"./route-list.js\";\n\nexport const commands: Command[] = [\n\tnewCmd,\n\tinit,\n\tconfigCmd,\n\tmakeCrud,\n\tmakeController,\n\tmakeRepository,\n\tmakeService,\n\tmakeModule,\n\tmakeModel,\n\tmakeMigration,\n\tmakeMiddleware,\n\tmakeValidator,\n\tmakeAuth,\n\tmakeQueue,\n\tmakeSchedule,\n\tmakeListener,\n\tmakeSession,\n\tdbMigrate,\n\tdbGenerate,\n\tdbSeed,\n\trouteList,\n\tinfo,\n\trepl,\n];\n\n/** Look up a command by primary name OR by any alias. */\nexport function findCommand(name: string): Command | undefined {\n\treturn commands.find(\n\t\t(c) => c.name === name || (c.aliases ?? []).includes(name),\n\t);\n}\n",
|
|
68
68
|
"#!/usr/bin/env bun\n\n/**\n * `nx` — the NexusTS CLI entry point.\n *\n * Invocation:\n * bunx nx <command> [args...]\n * bunx nx help\n * bunx nx help <command>\n *\n * Resembles Adonis ACE / Rails generators:\n * nx make:controller User\n * nx make:crud Post --no-views\n * nx make:migration create_users_table --columns \"name:text,email:text\"\n * nx info\n * nx route:list\n * nx init --style nest --view inertia --orm drizzle\n *\n * The CLI loads `nx.config.ts` (or `nx.config.js` / `.nxrc.json`) and\n * passes the resolved config + parsed flags to each command.\n */\n\nimport { commands, findCommand } from \"./commands/index.js\";\nimport { loadConfig } from \"./core/config.js\";\nimport { colors, flagBool, logger, parseArgs } from \"./core/index.js\";\nimport { VERSION } from \"./core/version.js\";\n\nasync function main(): Promise<number> {\n\tconst parsed = parseArgs(process.argv.slice(2));\n\tconst verbose = flagBool(parsed.flags, \"verbose\", false);\n\tlogger.setVerbose(verbose);\n\n\t// Top-level flags.\n\tif (parsed.flags.version === true) {\n\t\tconsole.log(VERSION);\n\t\treturn 0;\n\t}\n\n\tif (parsed.flags.help === true || parsed.command === \"help\") {\n\t\treturn renderHelp(parsed.positional[0]);\n\t}\n\n\tconst command = parsed.command ? findCommand(parsed.command) : undefined;\n\tif (!command) {\n\t\tif (parsed.command) {\n\t\t\tlogger.error(`Unknown command: ${parsed.command}`);\n\t\t\tlogger.info(`Run \\`nx help\\` for a list of commands.`);\n\t\t\treturn 1;\n\t\t}\n\t\treturn renderHelp();\n\t}\n\n\tconst cwd = process.cwd();\n\tconst config = await loadConfig(cwd);\n\n\treturn command.run({\n\t\tcwd,\n\t\tconfig,\n\t\tpositional: parsed.positional,\n\t\tflags: parsed.flags,\n\t});\n}\n\nfunction renderHelp(commandName?: string): number {\n\tif (commandName) {\n\t\tconst cmd = findCommand(commandName);\n\t\tif (!cmd) {\n\t\t\tlogger.error(`Unknown command: ${commandName}`);\n\t\t\treturn 1;\n\t\t}\n\t\trenderCommandHelp(cmd);\n\t\treturn 0;\n\t}\n\n\tlogger.heading(\"nx — NexusTS CLI\");\n\tconsole.log(`\n ${colors.dim(\"Adonis ACE-style command runner for the NexusTS framework.\")}\n\n${colors.bold(\"Usage\")}\n nx <command> [args...]\n\n${colors.bold(\"Commands\")}\n`);\n\n\tconst nameWidth = Math.max(...commands.map((c) => c.name.length));\n\tfor (const c of commands) {\n\t\tconst padded = c.name.padEnd(nameWidth);\n\t\tconst aliasStr = c.aliases?.length\n\t\t\t? ` ${colors.dim(`(${c.aliases.join(\", \")})`)}`\n\t\t\t: \"\";\n\t\tconsole.log(` ${colors.cyan(padded)}${aliasStr} ${c.summary}`);\n\t}\n\n\tconsole.log(`\n${colors.bold(\"Global flags\")}\n --help, -h Show help (or \\`nx help <command>\\`)\n --version, -v Print the CLI version\n --verbose Verbose output\n --no-color Disable ANSI color output\n\n${colors.bold(\"Examples\")}\n ${colors.dim(\"nx new my-app\")}\n ${colors.dim(\"nx init --style nest --view inertia --orm drizzle\")}\n ${colors.dim(\"nx make:crud Post\")}\n ${colors.dim(\"nx make:controller User\")}\n ${colors.dim(\"nx make:migration create_users_table\")}\n ${colors.dim(\"nx info\")}\n ${colors.dim(\"nx route:list\")}\n`);\n\treturn 0;\n}\n\nfunction renderCommandHelp(cmd: import(\"./core/index.js\").Command): void {\n\tlogger.heading(cmd.name);\n\tif (cmd.aliases?.length) {\n\t\tconsole.log(` ${colors.dim(\"aliases:\")} ${cmd.aliases.join(\", \")}`);\n\t}\n\tif (cmd.description) console.log(`\\n ${cmd.description}\\n`);\n\n\tif (cmd.flags?.length) {\n\t\tconsole.log(colors.bold(\"\\nFlags\"));\n\t\tfor (const f of cmd.flags) {\n\t\t\tconst short = f.short ? `, -${f.short}` : \"\";\n\t\t\tconst def =\n\t\t\t\tf.default !== undefined\n\t\t\t\t\t? ` ${colors.dim(`(default: ${String(f.default)})`)}`\n\t\t\t\t\t: \"\";\n\t\t\tconsole.log(` --${f.name}${short.padEnd(6)} ${f.description}${def}`);\n\t\t}\n\t}\n\n\tif (cmd.examples?.length) {\n\t\tconsole.log(colors.bold(\"\\nExamples\"));\n\t\tfor (const ex of cmd.examples) {\n\t\t\tconsole.log(` ${colors.cyan(ex)}`);\n\t\t}\n\t}\n\tconsole.log();\n}\n\nmain()\n\t.then((code) => process.exit(code))\n\t.catch((err) => {\n\t\tlogger.error(err?.message ?? String(err));\n\t\tif (process.env.NX_DEBUG === \"1\" && err?.stack) {\n\t\t\tconsole.error(err.stack);\n\t\t}\n\t\tprocess.exit(1);\n\t});\n"
|
|
69
69
|
],
|
|
70
|
-
"mappings": "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AA;AAAA;AAAA;AAAA;AAAA,EAiBb,UAAU;;;AC1BZ,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACKf,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACMf,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWb,UAAU;;;ACbZ,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASb,UAAU;;;ACXZ,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiCb,UAAU;;;ACtCZ,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUb,UAAU;;;ACVZ,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgCb,UAAU;;;AChCZ,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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",
|
|
71
|
-
"debugId": "
|
|
70
|
+
"mappings": "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AAU;;;AC1BZ,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACKf,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACMf,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWb,UAAU;;;ACbZ,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASb,UAAU;;;ACXZ,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiCb,UAAU;;;ACtCZ,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUb,UAAU;;;ACVZ,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgCb,UAAU;;;AChCZ,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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",
|
|
71
|
+
"debugId": "8C2378D6B1E99D5064756E2164756E21",
|
|
72
72
|
"names": []
|
|
73
73
|
}
|