wexts 2.0.7 → 2.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/README.md +123 -237
  2. package/dist/chunk-63MTCWU2.mjs +361 -0
  3. package/dist/chunk-63MTCWU2.mjs.map +1 -0
  4. package/dist/chunk-67IJ6H4J.mjs +44 -0
  5. package/dist/chunk-67IJ6H4J.mjs.map +1 -0
  6. package/dist/chunk-7NSRDJ5C.mjs +1 -0
  7. package/dist/chunk-7NSRDJ5C.mjs.map +1 -0
  8. package/dist/chunk-ASDXAK6G.js +44 -0
  9. package/dist/chunk-ASDXAK6G.js.map +1 -0
  10. package/dist/chunk-CKZ4VSCB.mjs +18 -0
  11. package/dist/chunk-CKZ4VSCB.mjs.map +1 -0
  12. package/dist/chunk-DW6GOKMF.js +57 -0
  13. package/dist/chunk-DW6GOKMF.js.map +1 -0
  14. package/dist/chunk-GKVPGKAH.js +66 -0
  15. package/dist/chunk-GKVPGKAH.js.map +1 -0
  16. package/dist/chunk-HSFLZUJN.mjs +57 -0
  17. package/dist/chunk-HSFLZUJN.mjs.map +1 -0
  18. package/dist/chunk-HU63F22V.js +361 -0
  19. package/dist/chunk-HU63F22V.js.map +1 -0
  20. package/dist/chunk-JMBD6DOP.js +225 -0
  21. package/dist/chunk-JMBD6DOP.js.map +1 -0
  22. package/dist/chunk-K7EIJSYQ.js +1 -0
  23. package/dist/chunk-K7EIJSYQ.js.map +1 -0
  24. package/dist/chunk-OTBYRUBE.mjs +225 -0
  25. package/dist/chunk-OTBYRUBE.mjs.map +1 -0
  26. package/dist/chunk-WMHVXEYQ.mjs +66 -0
  27. package/dist/chunk-WMHVXEYQ.mjs.map +1 -0
  28. package/dist/cli/index.js +156 -25
  29. package/dist/cli/index.js.map +1 -1
  30. package/dist/cli/index.mjs +140 -7
  31. package/dist/cli/index.mjs.map +1 -1
  32. package/dist/client/index.js +2 -2
  33. package/dist/client/index.mjs +2 -2
  34. package/dist/codegen/index.d.mts +1 -0
  35. package/dist/codegen/index.d.ts +1 -0
  36. package/dist/codegen/index.js +13 -0
  37. package/dist/codegen/index.js.map +1 -0
  38. package/dist/codegen/index.mjs +13 -0
  39. package/dist/codegen/index.mjs.map +1 -0
  40. package/dist/dev-server/index.d.mts +1 -0
  41. package/dist/dev-server/index.d.ts +1 -0
  42. package/dist/dev-server/index.js +13 -0
  43. package/dist/dev-server/index.js.map +1 -0
  44. package/dist/dev-server/index.mjs +13 -0
  45. package/dist/dev-server/index.mjs.map +1 -0
  46. package/dist/index-SjUaHgFr.d.mts +75 -0
  47. package/dist/index-SjUaHgFr.d.ts +75 -0
  48. package/dist/index-tFGPFVfQ.d.mts +67 -0
  49. package/dist/index-tFGPFVfQ.d.ts +67 -0
  50. package/dist/index.d.mts +83 -164
  51. package/dist/index.d.ts +83 -164
  52. package/dist/index.js +89 -22
  53. package/dist/index.js.map +1 -1
  54. package/dist/index.mjs +76 -9
  55. package/dist/index.mjs.map +1 -1
  56. package/dist/nest/index.js +2 -2
  57. package/dist/nest/index.mjs +2 -2
  58. package/dist/next/index.d.mts +61 -3
  59. package/dist/next/index.d.ts +61 -3
  60. package/dist/next/index.js +140 -7
  61. package/dist/next/index.js.map +1 -1
  62. package/dist/next/index.mjs +102 -7
  63. package/dist/next/index.mjs.map +1 -1
  64. package/dist/types/index.js +1 -1
  65. package/dist/types/index.mjs +2 -1
  66. package/package.json +2 -2
  67. package/templates/nestjs-api/.env +4 -0
  68. package/templates/nestjs-api/.env.example +1 -2
  69. package/templates/nestjs-api/package-lock.json +5623 -0
  70. package/templates/nestjs-api/package.json +21 -19
  71. package/templates/nestjs-api/prisma/dev.db +0 -0
  72. package/templates/nestjs-api/prisma/migrations/20251123205437_init/migration.sql +24 -0
  73. package/templates/nestjs-api/prisma/migrations/migration_lock.toml +3 -0
  74. package/templates/nestjs-api/src/auth/auth.controller.ts +5 -5
  75. package/templates/nestjs-api/src/main.ts +1 -1
  76. package/templates/nestjs-api/src/todos/todos.controller.ts +7 -7
  77. package/templates/nestjs-api/src/users/users.controller.ts +3 -3
  78. package/templates/nestjs-api/tsconfig.json +20 -1
  79. package/templates/nextjs-web/app/actions/auth.ts +79 -0
  80. package/templates/nextjs-web/app/dashboard/error.tsx +39 -0
  81. package/templates/nextjs-web/app/dashboard/loading.tsx +14 -0
  82. package/templates/nextjs-web/app/dashboard/page.tsx +2 -172
  83. package/templates/nextjs-web/app/globals.css +80 -15
  84. package/templates/nextjs-web/app/layout.tsx +7 -5
  85. package/templates/nextjs-web/app/login/page.tsx +2 -104
  86. package/templates/nextjs-web/app/page.tsx +1 -1
  87. package/templates/nextjs-web/app/register/page.tsx +2 -127
  88. package/templates/nextjs-web/components/ui/button.tsx +56 -0
  89. package/templates/nextjs-web/components/ui/card.tsx +79 -0
  90. package/templates/nextjs-web/components/ui/input.tsx +25 -0
  91. package/templates/nextjs-web/components/ui/label.tsx +24 -0
  92. package/templates/nextjs-web/features/auth/LoginForm.tsx +140 -0
  93. package/templates/nextjs-web/features/auth/RegisterForm.tsx +159 -0
  94. package/templates/nextjs-web/features/auth/api.ts +35 -0
  95. package/templates/nextjs-web/features/auth/index.ts +3 -0
  96. package/templates/nextjs-web/features/dashboard/DashboardView.tsx +204 -0
  97. package/templates/nextjs-web/features/dashboard/api.ts +9 -0
  98. package/templates/nextjs-web/features/dashboard/components.tsx +74 -0
  99. package/templates/nextjs-web/features/dashboard/index.ts +3 -0
  100. package/templates/nextjs-web/hooks/index.ts +4 -0
  101. package/templates/nextjs-web/lib/api-client.ts +89 -0
  102. package/templates/nextjs-web/lib/axios-global-config.ts +17 -0
  103. package/templates/nextjs-web/lib/utils.ts +6 -0
  104. package/templates/nextjs-web/lib/wexts-client.ts +4 -0
  105. package/templates/nextjs-web/next-env.d.ts +6 -0
  106. package/templates/nextjs-web/next.config.ts +20 -0
  107. package/templates/nextjs-web/package-lock.json +3254 -0
  108. package/templates/nextjs-web/package.json +23 -14
  109. package/templates/nextjs-web/postcss.config.js +6 -0
  110. package/templates/nextjs-web/tailwind.config.ts +55 -1
  111. package/templates/nextjs-web/tsconfig.json +41 -39
  112. package/templates/nextjs-web/next.config.mjs +0 -4
  113. /package/templates/nextjs-web/{.env.local.example → .env} +0 -0
@@ -1,13 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  logger
4
- } from "../chunk-NULGSZFE.mjs";
5
- import "../chunk-J5LGTIGS.mjs";
4
+ } from "../chunk-HSFLZUJN.mjs";
5
+ import {
6
+ __dirname
7
+ } from "../chunk-CKZ4VSCB.mjs";
6
8
 
7
9
  // src/cli/index.ts
8
10
  import { Command } from "commander";
9
11
  import * as pc from "picocolors";
10
12
  import inquirer from "inquirer";
13
+ import * as fs from "fs";
14
+ import * as path from "path";
15
+ import { execSync } from "child_process";
11
16
  var program = new Command();
12
17
  program.name("wexts").description("Wexts Framework - Next.js 16 + NestJS 11").version("2.0.0");
13
18
  program.action(async () => {
@@ -93,7 +98,7 @@ program.command("create <project-name>").description("Create a new wexts project
93
98
  });
94
99
  program.command("dev").description("Start development servers").option("-a, --api <path>", "Path to API project", "./apps/api").option("-w, --web <path>", "Path to Web project", "./apps/web").option("-p, --port <port>", "Port for web server", "3000").option("--api-port <port>", "Port for API server", "5050").option("--no-proxy", "Disable proxy server").action(async (options) => {
95
100
  logger.info(pc.green("\u{1F680} Starting Wexts development servers...\n"));
96
- const { FusionDevServer } = await import("../dev-server-JKRVBWPY.mjs");
101
+ const { FusionDevServer } = await import("../dev-server/index.mjs");
97
102
  const server = new FusionDevServer();
98
103
  try {
99
104
  await server.start({
@@ -117,7 +122,7 @@ program.command("generate <type> <name>").alias("g").description("Generate code
117
122
  logger.warn("Code generation not yet implemented");
118
123
  });
119
124
  program.command("codegen").description("Generate API client from NestJS controllers").option("-w, --watch", "Watch mode - regenerate on changes").option("-p, --project <path>", "Path to NestJS project", "./apps/api").option("-o, --output <path>", "Output path for generated client", "./packages/api-client/src").action(async (options) => {
120
- const { NestJSParser, ClientGenerator, CodegenWatcher } = await import("../codegen-UI5HTMXE.mjs");
125
+ const { NestJSParser, ClientGenerator, CodegenWatcher } = await import("../codegen/index.mjs");
121
126
  if (options.watch) {
122
127
  logger.info(pc.cyan("Starting codegen in watch mode..."));
123
128
  const watcher = new CodegenWatcher();
@@ -139,10 +144,138 @@ program.command("codegen").description("Generate API client from NestJS controll
139
144
  async function createProject(projectName, template) {
140
145
  logger.info(pc.cyan(`Creating wexts project: ${pc.bold(projectName)}`));
141
146
  logger.info(`Template: ${template}`);
142
- const fs = await import("fs");
143
- const path = await import("path");
144
- const { execSync } = await import("child_process");
145
147
  const projectPath = path.join(process.cwd(), projectName);
148
+ if (fs.existsSync(projectPath)) {
149
+ logger.error(`Directory ${projectName} already exists!`);
150
+ process.exit(1);
151
+ }
152
+ function getTemplatePath() {
153
+ const possiblePaths = [
154
+ path.join(__dirname, "../../templates"),
155
+ // When running from dist/cli/index.js
156
+ path.join(__dirname, "../templates"),
157
+ // Alternative structure
158
+ path.join(process.cwd(), "templates"),
159
+ // Local dev
160
+ path.resolve(__dirname, "..", "..", "templates")
161
+ // Absolute resolve
162
+ ];
163
+ for (const p of possiblePaths) {
164
+ if (fs.existsSync(p)) {
165
+ return p;
166
+ }
167
+ }
168
+ return "";
169
+ }
170
+ const templatePath = getTemplatePath();
171
+ if (!templatePath) {
172
+ logger.error(`\u274C Template directory not found!`);
173
+ logger.info(`Searched in:`);
174
+ logger.info(` - ${path.join(__dirname, "../../templates")}`);
175
+ logger.info(` - ${path.join(__dirname, "../templates")}`);
176
+ logger.info(` - ${path.join(process.cwd(), "templates")}`);
177
+ logger.warn("\u26A0\uFE0F Using fallback scaffolding (empty structure)");
178
+ fs.mkdirSync(projectPath, { recursive: true });
179
+ fs.mkdirSync(path.join(projectPath, "apps"), { recursive: true });
180
+ fs.mkdirSync(path.join(projectPath, "packages"), { recursive: true });
181
+ } else {
182
+ logger.info(`\u{1F4E6} Copying templates from: ${templatePath}`);
183
+ fs.mkdirSync(projectPath, { recursive: true });
184
+ fs.mkdirSync(path.join(projectPath, "apps"), { recursive: true });
185
+ fs.mkdirSync(path.join(projectPath, "packages"), { recursive: true });
186
+ const apiTemplatePath = path.join(templatePath, "nestjs-api");
187
+ const apiDestPath = path.join(projectPath, "apps/api");
188
+ if (fs.existsSync(apiTemplatePath)) {
189
+ fs.cpSync(apiTemplatePath, apiDestPath, { recursive: true });
190
+ logger.success(" - Copied API template");
191
+ const envExamplePath = path.join(apiDestPath, ".env.example");
192
+ const envPath = path.join(apiDestPath, ".env");
193
+ if (fs.existsSync(envExamplePath) && !fs.existsSync(envPath)) {
194
+ fs.copyFileSync(envExamplePath, envPath);
195
+ logger.success(" - Created .env from .env.example");
196
+ }
197
+ } else {
198
+ logger.warn(` \u26A0\uFE0F API template not found at ${apiTemplatePath}`);
199
+ }
200
+ const webTemplatePath = path.join(templatePath, "nextjs-web");
201
+ const webDestPath = path.join(projectPath, "apps/web");
202
+ if (fs.existsSync(webTemplatePath)) {
203
+ fs.cpSync(webTemplatePath, webDestPath, { recursive: true });
204
+ logger.success(" - Copied Web template");
205
+ } else {
206
+ logger.warn(` \u26A0\uFE0F Web template not found at ${webTemplatePath}`);
207
+ }
208
+ }
209
+ const packageJson = {
210
+ name: projectName,
211
+ version: "0.0.0",
212
+ private: true,
213
+ scripts: {
214
+ "build": "pnpm exec turbo build",
215
+ "dev": "pnpm exec turbo dev",
216
+ "lint": "pnpm exec turbo lint",
217
+ "format": 'prettier --write "**/*.{ts,tsx,md}"'
218
+ },
219
+ devDependencies: {
220
+ "turbo": "^2.6.1",
221
+ "prettier": "latest",
222
+ "typescript": "^5.9.3",
223
+ "wexts": "latest"
224
+ },
225
+ packageManager: "pnpm@10.0.0"
226
+ };
227
+ fs.writeFileSync(
228
+ path.join(projectPath, "package.json"),
229
+ JSON.stringify(packageJson, null, 2)
230
+ );
231
+ const turboJson = {
232
+ "$schema": "https://turbo.build/schema.json",
233
+ "tasks": {
234
+ "build": {
235
+ "dependsOn": ["^build"],
236
+ "outputs": [".next/**", "!.next/cache/**", "dist/**"]
237
+ },
238
+ "lint": {},
239
+ "dev": {
240
+ "cache": false,
241
+ "persistent": true
242
+ }
243
+ }
244
+ };
245
+ fs.writeFileSync(
246
+ path.join(projectPath, "turbo.json"),
247
+ JSON.stringify(turboJson, null, 2)
248
+ );
249
+ const pnpmWorkspace = `packages:
250
+ - 'apps/*'
251
+ - 'packages/*'
252
+ `;
253
+ fs.writeFileSync(
254
+ path.join(projectPath, "pnpm-workspace.yaml"),
255
+ pnpmWorkspace
256
+ );
257
+ logger.success("\u2705 Project structure created");
258
+ logger.info("\u{1F4E6} Installing dependencies...");
259
+ try {
260
+ try {
261
+ execSync("pnpm --version", { stdio: "ignore" });
262
+ } catch {
263
+ logger.info("Installing pnpm...");
264
+ execSync("npm install -g pnpm", { stdio: "ignore" });
265
+ }
266
+ execSync("pnpm install", { cwd: projectPath, stdio: "inherit" });
267
+ logger.success("\u2705 Dependencies installed");
268
+ logger.info(pc.green(`
269
+ \u{1F389} Project ${projectName} created successfully!`));
270
+ logger.info(`
271
+ To get started:
272
+ `);
273
+ logger.info(pc.cyan(` cd ${projectName}`));
274
+ logger.info(pc.cyan(` pnpm dev
275
+ `));
276
+ } catch (error) {
277
+ logger.error("Failed to install dependencies");
278
+ }
146
279
  }
147
280
  program.parse();
148
281
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/index.ts"],"sourcesContent":["#!/usr/bin/env node\r\n\r\nimport { Command } from 'commander';\r\nimport { logger } from '../core/logger';\r\nimport * as pc from 'picocolors';\r\nimport inquirer from 'inquirer';\r\n\r\nconst program = new Command();\r\n\r\nprogram\r\n .name('wexts')\r\n .description('Wexts Framework - Next.js 16 + NestJS 11')\r\n .version('2.0.0');\r\n\r\n// Interactive Mode (when no command is provided)\r\nprogram\r\n .action(async () => {\r\n console.log(pc.cyan(`\r\n╔══════════════════════════════════════════╗\r\n║ ║\r\n║ ${pc.bold('🚀 Wexts Framework v2.0')} ║\r\n║ ║\r\n║ Next.js 16 + NestJS 11 Full-Stack ║\r\n║ ║\r\n╚══════════════════════════════════════════╝\r\n `));\r\n\r\n const { action } = await inquirer.prompt([\r\n {\r\n type: 'list',\r\n name: 'action',\r\n message: 'What would you like to do?',\r\n choices: [\r\n { name: '📦 Create a new project', value: 'create' },\r\n { name: '🚀 Start development server', value: 'dev' },\r\n { name: '🔨 Build for production', value: 'build' },\r\n { name: '⚡ Generate code', value: 'generate' },\r\n { name: '🤖 Generate API client', value: 'codegen' },\r\n { name: '❌ Exit', value: 'exit' },\r\n ],\r\n },\r\n ]);\r\n\r\n if (action === 'exit') {\r\n logger.info('Goodbye! 👋');\r\n process.exit(0);\r\n }\r\n\r\n // Route to appropriate command\r\n if (action === 'create') {\r\n const { projectName, template } = await inquirer.prompt([\r\n {\r\n type: 'input',\r\n name: 'projectName',\r\n message: 'Project name:',\r\n default: 'my-wexts-app',\r\n },\r\n {\r\n type: 'list',\r\n name: 'template',\r\n message: 'Select template:',\r\n choices: [\r\n { name: '📦 Monorepo (Next.js + NestJS)', value: 'monorepo' },\r\n { name: '🎯 API only (NestJS)', value: 'api' },\r\n { name: '🌐 Web only (Next.js)', value: 'web' },\r\n ],\r\n },\r\n ]);\r\n\r\n await createProject(projectName, template);\r\n } else if (action === 'dev') {\r\n logger.info(pc.green('🚀 Starting development servers...\\n'));\r\n logger.warn('Dev server not yet implemented');\r\n } else if (action === 'build') {\r\n logger.info(pc.blue('🔨 Building project...\\n'));\r\n logger.warn('Build not yet implemented');\r\n } else if (action === 'generate') {\r\n const { type, name } = await inquirer.prompt([\r\n {\r\n type: 'list',\r\n name: 'type',\r\n message: 'What to generate?',\r\n choices: ['controller', 'module', 'service', 'page'],\r\n },\r\n {\r\n type: 'input',\r\n name: 'name',\r\n message: 'Name:',\r\n },\r\n ]);\r\n logger.info(pc.magenta(`\\n⚡ Generating ${type}: ${name}\\n`));\r\n logger.warn('Code generation not yet implemented');\r\n } else if (action === 'codegen') {\r\n logger.info(pc.cyan('\\n🤖 Generating API client...\\n'));\r\n logger.warn('Codegen not yet implemented');\r\n }\r\n });\r\n\r\n// Create Command\r\nprogram\r\n .command('create <project-name>')\r\n .description('Create a new wexts project')\r\n .option('-t, --template <template>', 'Template to use (monorepo|api|web)', 'monorepo')\r\n .action(async (projectName: string, options: any) => {\r\n await createProject(projectName, options.template);\r\n });\r\n\r\n// Dev Command\r\nprogram\r\n .command('dev')\r\n .description('Start development servers')\r\n .option('-a, --api <path>', 'Path to API project', './apps/api')\r\n .option('-w, --web <path>', 'Path to Web project', './apps/web')\r\n .option('-p, --port <port>', 'Port for web server', '3000')\r\n .option('--api-port <port>', 'Port for API server', '5050')\r\n .option('--no-proxy', 'Disable proxy server')\r\n .action(async (options: any) => {\r\n logger.info(pc.green('🚀 Starting Wexts development servers...\\n'));\r\n\r\n const { FusionDevServer } = await import('../dev-server/index.js');\r\n const server = new FusionDevServer();\r\n\r\n try {\r\n await server.start({\r\n apiPath: options.api,\r\n webPath: options.web,\r\n webPort: parseInt(options.port),\r\n apiPort: parseInt(options.apiPort),\r\n useProxy: options.proxy,\r\n });\r\n } catch (error: any) {\r\n logger.error('Failed to start dev server:', error.message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\n// Build Command\r\nprogram\r\n .command('build')\r\n .description('Build for production')\r\n .action(async () => {\r\n logger.info(pc.blue('Building Wexts project...'));\r\n\r\n // TODO: Build logic\r\n logger.warn('Build not yet implemented');\r\n });\r\n\r\n// Generate Command\r\nprogram\r\n .command('generate <type> <name>')\r\n .alias('g')\r\n .description('Generate code (controller|module|page)')\r\n .action(async (type: string, name: string) => {\r\n logger.info(pc.magenta(`Generating ${type}: ${name}`));\r\n\r\n // TODO: Code generation\r\n logger.warn('Code generation not yet implemented');\r\n });\r\n\r\n// Codegen Command\r\nprogram\r\n .command('codegen')\r\n .description('Generate API client from NestJS controllers')\r\n .option('-w, --watch', 'Watch mode - regenerate on changes')\r\n .option('-p, --project <path>', 'Path to NestJS project', './apps/api')\r\n .option('-o, --output <path>', 'Output path for generated client', './packages/api-client/src')\r\n .action(async (options: any) => {\r\n const { NestJSParser, ClientGenerator, CodegenWatcher } = await import('../codegen/index.js');\r\n\r\n if (options.watch) {\r\n logger.info(pc.cyan('Starting codegen in watch mode...'));\r\n const watcher = new CodegenWatcher();\r\n await watcher.watch({\r\n projectPath: options.project,\r\n outputPath: options.output,\r\n });\r\n } else {\r\n logger.info(pc.cyan('Generating API client...'));\r\n const parser = new NestJSParser(options.project);\r\n const controllers = parser.findFusionControllers();\r\n\r\n const generator = new ClientGenerator();\r\n await generator.generate({\r\n controllers,\r\n outputPath: options.output,\r\n });\r\n }\r\n });\r\n\r\n// Helper function for creating project\r\nasync function createProject(projectName: string, template: string) {\r\n logger.info(pc.cyan(`Creating wexts project: ${pc.bold(projectName)}`));\r\n logger.info(`Template: ${template}`);\r\n\r\n const fs = await import('fs');\r\n const path = await import('path');\r\n const { execSync } = await import('child_process');\r\n\r\n const projectPath = path.join(process.cwd(), projectName);\r\n\r\n}\r\n\r\nprogram.parse();\r\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/cli/index.ts"],"sourcesContent":["#!/usr/bin/env node\r\n\r\nimport { Command } from 'commander';\r\nimport { logger } from '../core/logger';\r\nimport * as pc from 'picocolors';\r\nimport inquirer from 'inquirer';\r\nimport * as fs from 'fs';\r\nimport * as path from 'path';\r\nimport { execSync } from 'child_process';\r\n\r\nconst program = new Command();\r\n\r\nprogram\r\n .name('wexts')\r\n .description('Wexts Framework - Next.js 16 + NestJS 11')\r\n .version('2.0.0');\r\n\r\n// Interactive Mode (when no command is provided)\r\nprogram\r\n .action(async () => {\r\n console.log(pc.cyan(`\r\n╔══════════════════════════════════════════╗\r\n║ ║\r\n║ ${pc.bold('🚀 Wexts Framework v2.0')} ║\r\n║ ║\r\n║ Next.js 16 + NestJS 11 Full-Stack ║\r\n║ ║\r\n╚══════════════════════════════════════════╝\r\n `));\r\n\r\n const { action } = await inquirer.prompt([\r\n {\r\n type: 'list',\r\n name: 'action',\r\n message: 'What would you like to do?',\r\n choices: [\r\n { name: '📦 Create a new project', value: 'create' },\r\n { name: '🚀 Start development server', value: 'dev' },\r\n { name: '🔨 Build for production', value: 'build' },\r\n { name: '⚡ Generate code', value: 'generate' },\r\n { name: '🤖 Generate API client', value: 'codegen' },\r\n { name: '❌ Exit', value: 'exit' },\r\n ],\r\n },\r\n ]);\r\n\r\n if (action === 'exit') {\r\n logger.info('Goodbye! 👋');\r\n process.exit(0);\r\n }\r\n\r\n // Route to appropriate command\r\n if (action === 'create') {\r\n const { projectName, template } = await inquirer.prompt([\r\n {\r\n type: 'input',\r\n name: 'projectName',\r\n message: 'Project name:',\r\n default: 'my-wexts-app',\r\n },\r\n {\r\n type: 'list',\r\n name: 'template',\r\n message: 'Select template:',\r\n choices: [\r\n { name: '📦 Monorepo (Next.js + NestJS)', value: 'monorepo' },\r\n { name: '🎯 API only (NestJS)', value: 'api' },\r\n { name: '🌐 Web only (Next.js)', value: 'web' },\r\n ],\r\n },\r\n ]);\r\n\r\n await createProject(projectName, template);\r\n } else if (action === 'dev') {\r\n logger.info(pc.green('🚀 Starting development servers...\\n'));\r\n logger.warn('Dev server not yet implemented');\r\n } else if (action === 'build') {\r\n logger.info(pc.blue('🔨 Building project...\\n'));\r\n logger.warn('Build not yet implemented');\r\n } else if (action === 'generate') {\r\n const { type, name } = await inquirer.prompt([\r\n {\r\n type: 'list',\r\n name: 'type',\r\n message: 'What to generate?',\r\n choices: ['controller', 'module', 'service', 'page'],\r\n },\r\n {\r\n type: 'input',\r\n name: 'name',\r\n message: 'Name:',\r\n },\r\n ]);\r\n logger.info(pc.magenta(`\\n⚡ Generating ${type}: ${name}\\n`));\r\n logger.warn('Code generation not yet implemented');\r\n } else if (action === 'codegen') {\r\n logger.info(pc.cyan('\\n🤖 Generating API client...\\n'));\r\n logger.warn('Codegen not yet implemented');\r\n }\r\n });\r\n\r\n// Create Command\r\nprogram\r\n .command('create <project-name>')\r\n .description('Create a new wexts project')\r\n .option('-t, --template <template>', 'Template to use (monorepo|api|web)', 'monorepo')\r\n .action(async (projectName: string, options: any) => {\r\n await createProject(projectName, options.template);\r\n });\r\n\r\n// Dev Command\r\nprogram\r\n .command('dev')\r\n .description('Start development servers')\r\n .option('-a, --api <path>', 'Path to API project', './apps/api')\r\n .option('-w, --web <path>', 'Path to Web project', './apps/web')\r\n .option('-p, --port <port>', 'Port for web server', '3000')\r\n .option('--api-port <port>', 'Port for API server', '5050')\r\n .option('--no-proxy', 'Disable proxy server')\r\n .action(async (options: any) => {\r\n logger.info(pc.green('🚀 Starting Wexts development servers...\\n'));\r\n\r\n const { FusionDevServer } = await import('../dev-server/index.js');\r\n const server = new FusionDevServer();\r\n\r\n try {\r\n await server.start({\r\n apiPath: options.api,\r\n webPath: options.web,\r\n webPort: parseInt(options.port),\r\n apiPort: parseInt(options.apiPort),\r\n useProxy: options.proxy,\r\n });\r\n } catch (error: any) {\r\n logger.error('Failed to start dev server:', error.message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\n// Build Command\r\nprogram\r\n .command('build')\r\n .description('Build for production')\r\n .action(async () => {\r\n logger.info(pc.blue('Building Wexts project...'));\r\n\r\n // TODO: Build logic\r\n logger.warn('Build not yet implemented');\r\n });\r\n\r\n// Generate Command\r\nprogram\r\n .command('generate <type> <name>')\r\n .alias('g')\r\n .description('Generate code (controller|module|page)')\r\n .action(async (type: string, name: string) => {\r\n logger.info(pc.magenta(`Generating ${type}: ${name}`));\r\n\r\n // TODO: Code generation\r\n logger.warn('Code generation not yet implemented');\r\n });\r\n\r\n// Codegen Command\r\nprogram\r\n .command('codegen')\r\n .description('Generate API client from NestJS controllers')\r\n .option('-w, --watch', 'Watch mode - regenerate on changes')\r\n .option('-p, --project <path>', 'Path to NestJS project', './apps/api')\r\n .option('-o, --output <path>', 'Output path for generated client', './packages/api-client/src')\r\n .action(async (options: any) => {\r\n const { NestJSParser, ClientGenerator, CodegenWatcher } = await import('../codegen/index.js');\r\n\r\n if (options.watch) {\r\n logger.info(pc.cyan('Starting codegen in watch mode...'));\r\n const watcher = new CodegenWatcher();\r\n await watcher.watch({\r\n projectPath: options.project,\r\n outputPath: options.output,\r\n });\r\n } else {\r\n logger.info(pc.cyan('Generating API client...'));\r\n const parser = new NestJSParser(options.project);\r\n const controllers = parser.findFusionControllers();\r\n\r\n const generator = new ClientGenerator();\r\n await generator.generate({\r\n controllers,\r\n outputPath: options.output,\r\n });\r\n }\r\n });\r\n\r\n// Helper function for creating project\r\nasync function createProject(projectName: string, template: string) {\r\n logger.info(pc.cyan(`Creating wexts project: ${pc.bold(projectName)}`));\r\n logger.info(`Template: ${template}`);\r\n\r\n const projectPath = path.join(process.cwd(), projectName);\r\n\r\n if (fs.existsSync(projectPath)) {\r\n logger.error(`Directory ${projectName} already exists!`);\r\n process.exit(1);\r\n }\r\n\r\n // Helper to resolve template path\r\n function getTemplatePath(): string {\r\n // Try multiple locations\r\n const possiblePaths = [\r\n path.join(__dirname, '../../templates'), // When running from dist/cli/index.js\r\n path.join(__dirname, '../templates'), // Alternative structure\r\n path.join(process.cwd(), 'templates'), // Local dev\r\n path.resolve(__dirname, '..', '..', 'templates') // Absolute resolve\r\n ];\r\n\r\n for (const p of possiblePaths) {\r\n if (fs.existsSync(p)) {\r\n return p;\r\n }\r\n }\r\n return '';\r\n }\r\n\r\n const templatePath = getTemplatePath();\r\n\r\n if (!templatePath) {\r\n logger.error(`❌ Template directory not found!`);\r\n logger.info(`Searched in:`);\r\n logger.info(` - ${path.join(__dirname, '../../templates')}`);\r\n logger.info(` - ${path.join(__dirname, '../templates')}`);\r\n logger.info(` - ${path.join(process.cwd(), 'templates')}`);\r\n\r\n // Fallback to basic structure if templates are missing (for dev/test)\r\n logger.warn('⚠️ Using fallback scaffolding (empty structure)');\r\n fs.mkdirSync(projectPath, { recursive: true });\r\n fs.mkdirSync(path.join(projectPath, 'apps'), { recursive: true });\r\n fs.mkdirSync(path.join(projectPath, 'packages'), { recursive: true });\r\n } else {\r\n logger.info(`📦 Copying templates from: ${templatePath}`);\r\n\r\n fs.mkdirSync(projectPath, { recursive: true });\r\n fs.mkdirSync(path.join(projectPath, 'apps'), { recursive: true });\r\n fs.mkdirSync(path.join(projectPath, 'packages'), { recursive: true });\r\n\r\n // Copy NestJS API Template\r\n const apiTemplatePath = path.join(templatePath, 'nestjs-api');\r\n const apiDestPath = path.join(projectPath, 'apps/api');\r\n if (fs.existsSync(apiTemplatePath)) {\r\n fs.cpSync(apiTemplatePath, apiDestPath, { recursive: true });\r\n logger.success(' - Copied API template');\r\n\r\n // Copy .env.example to .env\r\n const envExamplePath = path.join(apiDestPath, '.env.example');\r\n const envPath = path.join(apiDestPath, '.env');\r\n if (fs.existsSync(envExamplePath) && !fs.existsSync(envPath)) {\r\n fs.copyFileSync(envExamplePath, envPath);\r\n logger.success(' - Created .env from .env.example');\r\n }\r\n } else {\r\n logger.warn(` ⚠️ API template not found at ${apiTemplatePath}`);\r\n }\r\n\r\n // Copy Next.js Web Template\r\n const webTemplatePath = path.join(templatePath, 'nextjs-web');\r\n const webDestPath = path.join(projectPath, 'apps/web');\r\n if (fs.existsSync(webTemplatePath)) {\r\n fs.cpSync(webTemplatePath, webDestPath, { recursive: true });\r\n logger.success(' - Copied Web template');\r\n } else {\r\n logger.warn(` ⚠️ Web template not found at ${webTemplatePath}`);\r\n }\r\n }\r\n\r\n // Create package.json\r\n const packageJson = {\r\n name: projectName,\r\n version: \"0.0.0\",\r\n private: true,\r\n scripts: {\r\n \"build\": \"pnpm exec turbo build\",\r\n \"dev\": \"pnpm exec turbo dev\",\r\n \"lint\": \"pnpm exec turbo lint\",\r\n \"format\": \"prettier --write \\\"**/*.{ts,tsx,md}\\\"\"\r\n },\r\n devDependencies: {\r\n \"turbo\": \"^2.6.1\",\r\n \"prettier\": \"latest\",\r\n \"typescript\": \"^5.9.3\",\r\n \"wexts\": \"latest\"\r\n },\r\n packageManager: \"pnpm@10.0.0\"\r\n };\r\n\r\n fs.writeFileSync(\r\n path.join(projectPath, 'package.json'),\r\n JSON.stringify(packageJson, null, 2)\r\n );\r\n\r\n // Create turbo.json\r\n const turboJson = {\r\n \"$schema\": \"https://turbo.build/schema.json\",\r\n \"tasks\": {\r\n \"build\": {\r\n \"dependsOn\": [\"^build\"],\r\n \"outputs\": [\".next/**\", \"!.next/cache/**\", \"dist/**\"]\r\n },\r\n \"lint\": {},\r\n \"dev\": {\r\n \"cache\": false,\r\n \"persistent\": true\r\n }\r\n }\r\n };\r\n\r\n fs.writeFileSync(\r\n path.join(projectPath, 'turbo.json'),\r\n JSON.stringify(turboJson, null, 2)\r\n );\r\n\r\n // Create pnpm-workspace.yaml\r\n const pnpmWorkspace = `packages:\r\n - 'apps/*'\r\n - 'packages/*'\r\n`;\r\n fs.writeFileSync(\r\n path.join(projectPath, 'pnpm-workspace.yaml'),\r\n pnpmWorkspace\r\n );\r\n\r\n logger.success('✅ Project structure created');\r\n logger.info('📦 Installing dependencies...');\r\n\r\n try {\r\n // Check if pnpm is installed\r\n try {\r\n execSync('pnpm --version', { stdio: 'ignore' });\r\n } catch {\r\n logger.info('Installing pnpm...');\r\n execSync('npm install -g pnpm', { stdio: 'ignore' });\r\n }\r\n\r\n execSync('pnpm install', { cwd: projectPath, stdio: 'inherit' });\r\n logger.success('✅ Dependencies installed');\r\n\r\n logger.info(pc.green(`\\n🎉 Project ${projectName} created successfully!`));\r\n logger.info(`\\nTo get started:\\n`);\r\n logger.info(pc.cyan(` cd ${projectName}`));\r\n logger.info(pc.cyan(` pnpm dev\\n`));\r\n } catch (error) {\r\n logger.error('Failed to install dependencies');\r\n }\r\n}\r\n\r\nprogram.parse();\r\n"],"mappings":";;;;;;;;;AAEA,SAAS,eAAe;AAExB,YAAY,QAAQ;AACpB,OAAO,cAAc;AACrB,YAAY,QAAQ;AACpB,YAAY,UAAU;AACtB,SAAS,gBAAgB;AAEzB,IAAM,UAAU,IAAI,QAAQ;AAE5B,QACK,KAAK,OAAO,EACZ,YAAY,0CAA0C,EACtD,QAAQ,OAAO;AAGpB,QACK,OAAO,YAAY;AAChB,UAAQ,IAAO,QAAK;AAAA;AAAA;AAAA,cAGhB,QAAK,gCAAyB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,SAKlC,CAAC;AAEF,QAAM,EAAE,OAAO,IAAI,MAAM,SAAS,OAAO;AAAA,IACrC;AAAA,MACI,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,QACL,EAAE,MAAM,kCAA2B,OAAO,SAAS;AAAA,QACnD,EAAE,MAAM,sCAA+B,OAAO,MAAM;AAAA,QACpD,EAAE,MAAM,kCAA2B,OAAO,QAAQ;AAAA,QAClD,EAAE,MAAM,wBAAmB,OAAO,WAAW;AAAA,QAC7C,EAAE,MAAM,iCAA0B,OAAO,UAAU;AAAA,QACnD,EAAE,MAAM,eAAU,OAAO,OAAO;AAAA,MACpC;AAAA,IACJ;AAAA,EACJ,CAAC;AAED,MAAI,WAAW,QAAQ;AACnB,WAAO,KAAK,oBAAa;AACzB,YAAQ,KAAK,CAAC;AAAA,EAClB;AAGA,MAAI,WAAW,UAAU;AACrB,UAAM,EAAE,aAAa,SAAS,IAAI,MAAM,SAAS,OAAO;AAAA,MACpD;AAAA,QACI,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,MACb;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,UACL,EAAE,MAAM,yCAAkC,OAAO,WAAW;AAAA,UAC5D,EAAE,MAAM,+BAAwB,OAAO,MAAM;AAAA,UAC7C,EAAE,MAAM,gCAAyB,OAAO,MAAM;AAAA,QAClD;AAAA,MACJ;AAAA,IACJ,CAAC;AAED,UAAM,cAAc,aAAa,QAAQ;AAAA,EAC7C,WAAW,WAAW,OAAO;AACzB,WAAO,KAAQ,SAAM,6CAAsC,CAAC;AAC5D,WAAO,KAAK,gCAAgC;AAAA,EAChD,WAAW,WAAW,SAAS;AAC3B,WAAO,KAAQ,QAAK,iCAA0B,CAAC;AAC/C,WAAO,KAAK,2BAA2B;AAAA,EAC3C,WAAW,WAAW,YAAY;AAC9B,UAAM,EAAE,MAAM,KAAK,IAAI,MAAM,SAAS,OAAO;AAAA,MACzC;AAAA,QACI,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS,CAAC,cAAc,UAAU,WAAW,MAAM;AAAA,MACvD;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,MACb;AAAA,IACJ,CAAC;AACD,WAAO,KAAQ,WAAQ;AAAA,oBAAkB,IAAI,KAAK,IAAI;AAAA,CAAI,CAAC;AAC3D,WAAO,KAAK,qCAAqC;AAAA,EACrD,WAAW,WAAW,WAAW;AAC7B,WAAO,KAAQ,QAAK,wCAAiC,CAAC;AACtD,WAAO,KAAK,6BAA6B;AAAA,EAC7C;AACJ,CAAC;AAGL,QACK,QAAQ,uBAAuB,EAC/B,YAAY,4BAA4B,EACxC,OAAO,6BAA6B,sCAAsC,UAAU,EACpF,OAAO,OAAO,aAAqB,YAAiB;AACjD,QAAM,cAAc,aAAa,QAAQ,QAAQ;AACrD,CAAC;AAGL,QACK,QAAQ,KAAK,EACb,YAAY,2BAA2B,EACvC,OAAO,oBAAoB,uBAAuB,YAAY,EAC9D,OAAO,oBAAoB,uBAAuB,YAAY,EAC9D,OAAO,qBAAqB,uBAAuB,MAAM,EACzD,OAAO,qBAAqB,uBAAuB,MAAM,EACzD,OAAO,cAAc,sBAAsB,EAC3C,OAAO,OAAO,YAAiB;AAC5B,SAAO,KAAQ,SAAM,mDAA4C,CAAC;AAElE,QAAM,EAAE,gBAAgB,IAAI,MAAM,OAAO,yBAAwB;AACjE,QAAM,SAAS,IAAI,gBAAgB;AAEnC,MAAI;AACA,UAAM,OAAO,MAAM;AAAA,MACf,SAAS,QAAQ;AAAA,MACjB,SAAS,QAAQ;AAAA,MACjB,SAAS,SAAS,QAAQ,IAAI;AAAA,MAC9B,SAAS,SAAS,QAAQ,OAAO;AAAA,MACjC,UAAU,QAAQ;AAAA,IACtB,CAAC;AAAA,EACL,SAAS,OAAY;AACjB,WAAO,MAAM,+BAA+B,MAAM,OAAO;AACzD,YAAQ,KAAK,CAAC;AAAA,EAClB;AACJ,CAAC;AAGL,QACK,QAAQ,OAAO,EACf,YAAY,sBAAsB,EAClC,OAAO,YAAY;AAChB,SAAO,KAAQ,QAAK,2BAA2B,CAAC;AAGhD,SAAO,KAAK,2BAA2B;AAC3C,CAAC;AAGL,QACK,QAAQ,wBAAwB,EAChC,MAAM,GAAG,EACT,YAAY,wCAAwC,EACpD,OAAO,OAAO,MAAc,SAAiB;AAC1C,SAAO,KAAQ,WAAQ,cAAc,IAAI,KAAK,IAAI,EAAE,CAAC;AAGrD,SAAO,KAAK,qCAAqC;AACrD,CAAC;AAGL,QACK,QAAQ,SAAS,EACjB,YAAY,6CAA6C,EACzD,OAAO,eAAe,oCAAoC,EAC1D,OAAO,wBAAwB,0BAA0B,YAAY,EACrE,OAAO,uBAAuB,oCAAoC,2BAA2B,EAC7F,OAAO,OAAO,YAAiB;AAC5B,QAAM,EAAE,cAAc,iBAAiB,eAAe,IAAI,MAAM,OAAO,sBAAqB;AAE5F,MAAI,QAAQ,OAAO;AACf,WAAO,KAAQ,QAAK,mCAAmC,CAAC;AACxD,UAAM,UAAU,IAAI,eAAe;AACnC,UAAM,QAAQ,MAAM;AAAA,MAChB,aAAa,QAAQ;AAAA,MACrB,YAAY,QAAQ;AAAA,IACxB,CAAC;AAAA,EACL,OAAO;AACH,WAAO,KAAQ,QAAK,0BAA0B,CAAC;AAC/C,UAAM,SAAS,IAAI,aAAa,QAAQ,OAAO;AAC/C,UAAM,cAAc,OAAO,sBAAsB;AAEjD,UAAM,YAAY,IAAI,gBAAgB;AACtC,UAAM,UAAU,SAAS;AAAA,MACrB;AAAA,MACA,YAAY,QAAQ;AAAA,IACxB,CAAC;AAAA,EACL;AACJ,CAAC;AAGL,eAAe,cAAc,aAAqB,UAAkB;AAChE,SAAO,KAAQ,QAAK,2BAA8B,QAAK,WAAW,CAAC,EAAE,CAAC;AACtE,SAAO,KAAK,aAAa,QAAQ,EAAE;AAEnC,QAAM,cAAmB,UAAK,QAAQ,IAAI,GAAG,WAAW;AAExD,MAAO,cAAW,WAAW,GAAG;AAC5B,WAAO,MAAM,aAAa,WAAW,kBAAkB;AACvD,YAAQ,KAAK,CAAC;AAAA,EAClB;AAGA,WAAS,kBAA0B;AAE/B,UAAM,gBAAgB;AAAA,MACb,UAAK,WAAW,iBAAiB;AAAA;AAAA,MACjC,UAAK,WAAW,cAAc;AAAA;AAAA,MAC9B,UAAK,QAAQ,IAAI,GAAG,WAAW;AAAA;AAAA,MAC/B,aAAQ,WAAW,MAAM,MAAM,WAAW;AAAA;AAAA,IACnD;AAEA,eAAW,KAAK,eAAe;AAC3B,UAAO,cAAW,CAAC,GAAG;AAClB,eAAO;AAAA,MACX;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAEA,QAAM,eAAe,gBAAgB;AAErC,MAAI,CAAC,cAAc;AACf,WAAO,MAAM,sCAAiC;AAC9C,WAAO,KAAK,cAAc;AAC1B,WAAO,KAAK,OAAY,UAAK,WAAW,iBAAiB,CAAC,EAAE;AAC5D,WAAO,KAAK,OAAY,UAAK,WAAW,cAAc,CAAC,EAAE;AACzD,WAAO,KAAK,OAAY,UAAK,QAAQ,IAAI,GAAG,WAAW,CAAC,EAAE;AAG1D,WAAO,KAAK,2DAAiD;AAC7D,IAAG,aAAU,aAAa,EAAE,WAAW,KAAK,CAAC;AAC7C,IAAG,aAAe,UAAK,aAAa,MAAM,GAAG,EAAE,WAAW,KAAK,CAAC;AAChE,IAAG,aAAe,UAAK,aAAa,UAAU,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,EACxE,OAAO;AACH,WAAO,KAAK,qCAA8B,YAAY,EAAE;AAExD,IAAG,aAAU,aAAa,EAAE,WAAW,KAAK,CAAC;AAC7C,IAAG,aAAe,UAAK,aAAa,MAAM,GAAG,EAAE,WAAW,KAAK,CAAC;AAChE,IAAG,aAAe,UAAK,aAAa,UAAU,GAAG,EAAE,WAAW,KAAK,CAAC;AAGpE,UAAM,kBAAuB,UAAK,cAAc,YAAY;AAC5D,UAAM,cAAmB,UAAK,aAAa,UAAU;AACrD,QAAO,cAAW,eAAe,GAAG;AAChC,MAAG,UAAO,iBAAiB,aAAa,EAAE,WAAW,KAAK,CAAC;AAC3D,aAAO,QAAQ,yBAAyB;AAGxC,YAAM,iBAAsB,UAAK,aAAa,cAAc;AAC5D,YAAM,UAAe,UAAK,aAAa,MAAM;AAC7C,UAAO,cAAW,cAAc,KAAK,CAAI,cAAW,OAAO,GAAG;AAC1D,QAAG,gBAAa,gBAAgB,OAAO;AACvC,eAAO,QAAQ,oCAAoC;AAAA,MACvD;AAAA,IACJ,OAAO;AACH,aAAO,KAAK,4CAAkC,eAAe,EAAE;AAAA,IACnE;AAGA,UAAM,kBAAuB,UAAK,cAAc,YAAY;AAC5D,UAAM,cAAmB,UAAK,aAAa,UAAU;AACrD,QAAO,cAAW,eAAe,GAAG;AAChC,MAAG,UAAO,iBAAiB,aAAa,EAAE,WAAW,KAAK,CAAC;AAC3D,aAAO,QAAQ,yBAAyB;AAAA,IAC5C,OAAO;AACH,aAAO,KAAK,4CAAkC,eAAe,EAAE;AAAA,IACnE;AAAA,EACJ;AAGA,QAAM,cAAc;AAAA,IAChB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,MACL,SAAS;AAAA,MACT,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,UAAU;AAAA,IACd;AAAA,IACA,iBAAiB;AAAA,MACb,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,SAAS;AAAA,IACb;AAAA,IACA,gBAAgB;AAAA,EACpB;AAEA,EAAG;AAAA,IACM,UAAK,aAAa,cAAc;AAAA,IACrC,KAAK,UAAU,aAAa,MAAM,CAAC;AAAA,EACvC;AAGA,QAAM,YAAY;AAAA,IACd,WAAW;AAAA,IACX,SAAS;AAAA,MACL,SAAS;AAAA,QACL,aAAa,CAAC,QAAQ;AAAA,QACtB,WAAW,CAAC,YAAY,mBAAmB,SAAS;AAAA,MACxD;AAAA,MACA,QAAQ,CAAC;AAAA,MACT,OAAO;AAAA,QACH,SAAS;AAAA,QACT,cAAc;AAAA,MAClB;AAAA,IACJ;AAAA,EACJ;AAEA,EAAG;AAAA,IACM,UAAK,aAAa,YAAY;AAAA,IACnC,KAAK,UAAU,WAAW,MAAM,CAAC;AAAA,EACrC;AAGA,QAAM,gBAAgB;AAAA;AAAA;AAAA;AAItB,EAAG;AAAA,IACM,UAAK,aAAa,qBAAqB;AAAA,IAC5C;AAAA,EACJ;AAEA,SAAO,QAAQ,kCAA6B;AAC5C,SAAO,KAAK,sCAA+B;AAE3C,MAAI;AAEA,QAAI;AACA,eAAS,kBAAkB,EAAE,OAAO,SAAS,CAAC;AAAA,IAClD,QAAQ;AACJ,aAAO,KAAK,oBAAoB;AAChC,eAAS,uBAAuB,EAAE,OAAO,SAAS,CAAC;AAAA,IACvD;AAEA,aAAS,gBAAgB,EAAE,KAAK,aAAa,OAAO,UAAU,CAAC;AAC/D,WAAO,QAAQ,+BAA0B;AAEzC,WAAO,KAAQ,SAAM;AAAA,oBAAgB,WAAW,wBAAwB,CAAC;AACzE,WAAO,KAAK;AAAA;AAAA,CAAqB;AACjC,WAAO,KAAQ,QAAK,QAAQ,WAAW,EAAE,CAAC;AAC1C,WAAO,KAAQ,QAAK;AAAA,CAAc,CAAC;AAAA,EACvC,SAAS,OAAO;AACZ,WAAO,MAAM,gCAAgC;AAAA,EACjD;AACJ;AAEA,QAAQ,MAAM;","names":[]}
@@ -1,10 +1,10 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkMTHKZO55js = require('../chunk-MTHKZO55.js');
4
+ var _chunkASDXAK6Gjs = require('../chunk-ASDXAK6G.js');
5
5
  require('../chunk-PZ5AY32C.js');
6
6
 
7
7
 
8
8
 
9
- exports.FusionFetcher = _chunkMTHKZO55js.FusionFetcher; exports.apiFetcher = _chunkMTHKZO55js.apiFetcher;
9
+ exports.FusionFetcher = _chunkASDXAK6Gjs.FusionFetcher; exports.apiFetcher = _chunkASDXAK6Gjs.apiFetcher;
10
10
  //# sourceMappingURL=index.js.map
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  FusionFetcher,
3
3
  apiFetcher
4
- } from "../chunk-6SVQEGEX.mjs";
5
- import "../chunk-J5LGTIGS.mjs";
4
+ } from "../chunk-67IJ6H4J.mjs";
5
+ import "../chunk-CKZ4VSCB.mjs";
6
6
  export {
7
7
  FusionFetcher,
8
8
  apiFetcher
@@ -0,0 +1 @@
1
+ export { a as ClientGenerator, b as CodegenWatcher, C as ControllerInfo, G as GenerateOptions, N as NestJSParser, R as RouteInfo, W as WatchOptions } from '../index-SjUaHgFr.mjs';
@@ -0,0 +1 @@
1
+ export { a as ClientGenerator, b as CodegenWatcher, C as ControllerInfo, G as GenerateOptions, N as NestJSParser, R as RouteInfo, W as WatchOptions } from '../index-SjUaHgFr.js';
@@ -0,0 +1,13 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+
4
+
5
+ var _chunkHU63F22Vjs = require('../chunk-HU63F22V.js');
6
+ require('../chunk-DW6GOKMF.js');
7
+ require('../chunk-PZ5AY32C.js');
8
+
9
+
10
+
11
+
12
+ exports.ClientGenerator = _chunkHU63F22Vjs.ClientGenerator; exports.CodegenWatcher = _chunkHU63F22Vjs.CodegenWatcher; exports.NestJSParser = _chunkHU63F22Vjs.NestJSParser;
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["c:\\Users\\ziad\\Desktop\\wexts\\packages\\dist\\codegen\\index.js"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACF,uDAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACF,2KAAC","file":"C:\\Users\\ziad\\Desktop\\wexts\\packages\\dist\\codegen\\index.js"}
@@ -0,0 +1,13 @@
1
+ import {
2
+ ClientGenerator,
3
+ CodegenWatcher,
4
+ NestJSParser
5
+ } from "../chunk-63MTCWU2.mjs";
6
+ import "../chunk-HSFLZUJN.mjs";
7
+ import "../chunk-CKZ4VSCB.mjs";
8
+ export {
9
+ ClientGenerator,
10
+ CodegenWatcher,
11
+ NestJSParser
12
+ };
13
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1 @@
1
+ export { D as DevServerConfig, F as FusionDevServer, P as ProcessConfig, a as ProcessRunner, b as ProxyConfig, c as ProxyServer } from '../index-tFGPFVfQ.mjs';
@@ -0,0 +1 @@
1
+ export { D as DevServerConfig, F as FusionDevServer, P as ProcessConfig, a as ProcessRunner, b as ProxyConfig, c as ProxyServer } from '../index-tFGPFVfQ.js';
@@ -0,0 +1,13 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+
4
+
5
+ var _chunkJMBD6DOPjs = require('../chunk-JMBD6DOP.js');
6
+ require('../chunk-DW6GOKMF.js');
7
+ require('../chunk-PZ5AY32C.js');
8
+
9
+
10
+
11
+
12
+ exports.FusionDevServer = _chunkJMBD6DOPjs.FusionDevServer; exports.ProcessRunner = _chunkJMBD6DOPjs.ProcessRunner; exports.ProxyServer = _chunkJMBD6DOPjs.ProxyServer;
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["c:\\Users\\ziad\\Desktop\\wexts\\packages\\dist\\dev-server\\index.js"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACF,uDAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACF,uKAAC","file":"C:\\Users\\ziad\\Desktop\\wexts\\packages\\dist\\dev-server\\index.js"}
@@ -0,0 +1,13 @@
1
+ import {
2
+ FusionDevServer,
3
+ ProcessRunner,
4
+ ProxyServer
5
+ } from "../chunk-OTBYRUBE.mjs";
6
+ import "../chunk-HSFLZUJN.mjs";
7
+ import "../chunk-CKZ4VSCB.mjs";
8
+ export {
9
+ FusionDevServer,
10
+ ProcessRunner,
11
+ ProxyServer
12
+ };
13
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,75 @@
1
+ interface RouteInfo {
2
+ method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
3
+ path: string;
4
+ handler: string;
5
+ controllerName: string;
6
+ }
7
+ interface ControllerInfo {
8
+ name: string;
9
+ prefix: string;
10
+ routes: RouteInfo[];
11
+ }
12
+ /**
13
+ * Parse NestJS controllers to extract Fusion metadata
14
+ */
15
+ declare class NestJSParser {
16
+ private projectPath;
17
+ private program;
18
+ constructor(projectPath: string);
19
+ /**
20
+ * Find all controllers with @FusionController decorator
21
+ */
22
+ findFusionControllers(): ControllerInfo[];
23
+ private parseSourceFile;
24
+ private parseController;
25
+ private parseRoutes;
26
+ }
27
+
28
+ interface GenerateOptions {
29
+ controllers: ControllerInfo[];
30
+ outputPath: string;
31
+ baseUrl?: string;
32
+ }
33
+ /**
34
+ * Generate TypeScript API client from controller metadata
35
+ */
36
+ declare class ClientGenerator {
37
+ generate(options: GenerateOptions): Promise<void>;
38
+ private generateClientCode;
39
+ private generateClientClass;
40
+ private generateControllerMethods;
41
+ private generateMethodName;
42
+ private generateMethod;
43
+ private capitalize;
44
+ }
45
+
46
+ interface WatchOptions {
47
+ projectPath: string;
48
+ outputPath: string;
49
+ pattern?: string;
50
+ }
51
+ /**
52
+ * Watch NestJS controllers and regenerate client on changes
53
+ */
54
+ declare class CodegenWatcher {
55
+ private watcher;
56
+ watch(options: WatchOptions): Promise<void>;
57
+ stop(): Promise<void>;
58
+ private generateClient;
59
+ }
60
+
61
+ type index_ClientGenerator = ClientGenerator;
62
+ declare const index_ClientGenerator: typeof ClientGenerator;
63
+ type index_CodegenWatcher = CodegenWatcher;
64
+ declare const index_CodegenWatcher: typeof CodegenWatcher;
65
+ type index_ControllerInfo = ControllerInfo;
66
+ type index_GenerateOptions = GenerateOptions;
67
+ type index_NestJSParser = NestJSParser;
68
+ declare const index_NestJSParser: typeof NestJSParser;
69
+ type index_RouteInfo = RouteInfo;
70
+ type index_WatchOptions = WatchOptions;
71
+ declare namespace index {
72
+ export { index_ClientGenerator as ClientGenerator, index_CodegenWatcher as CodegenWatcher, type index_ControllerInfo as ControllerInfo, type index_GenerateOptions as GenerateOptions, index_NestJSParser as NestJSParser, type index_RouteInfo as RouteInfo, type index_WatchOptions as WatchOptions };
73
+ }
74
+
75
+ export { type ControllerInfo as C, type GenerateOptions as G, NestJSParser as N, type RouteInfo as R, type WatchOptions as W, ClientGenerator as a, CodegenWatcher as b, index as i };
@@ -0,0 +1,75 @@
1
+ interface RouteInfo {
2
+ method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
3
+ path: string;
4
+ handler: string;
5
+ controllerName: string;
6
+ }
7
+ interface ControllerInfo {
8
+ name: string;
9
+ prefix: string;
10
+ routes: RouteInfo[];
11
+ }
12
+ /**
13
+ * Parse NestJS controllers to extract Fusion metadata
14
+ */
15
+ declare class NestJSParser {
16
+ private projectPath;
17
+ private program;
18
+ constructor(projectPath: string);
19
+ /**
20
+ * Find all controllers with @FusionController decorator
21
+ */
22
+ findFusionControllers(): ControllerInfo[];
23
+ private parseSourceFile;
24
+ private parseController;
25
+ private parseRoutes;
26
+ }
27
+
28
+ interface GenerateOptions {
29
+ controllers: ControllerInfo[];
30
+ outputPath: string;
31
+ baseUrl?: string;
32
+ }
33
+ /**
34
+ * Generate TypeScript API client from controller metadata
35
+ */
36
+ declare class ClientGenerator {
37
+ generate(options: GenerateOptions): Promise<void>;
38
+ private generateClientCode;
39
+ private generateClientClass;
40
+ private generateControllerMethods;
41
+ private generateMethodName;
42
+ private generateMethod;
43
+ private capitalize;
44
+ }
45
+
46
+ interface WatchOptions {
47
+ projectPath: string;
48
+ outputPath: string;
49
+ pattern?: string;
50
+ }
51
+ /**
52
+ * Watch NestJS controllers and regenerate client on changes
53
+ */
54
+ declare class CodegenWatcher {
55
+ private watcher;
56
+ watch(options: WatchOptions): Promise<void>;
57
+ stop(): Promise<void>;
58
+ private generateClient;
59
+ }
60
+
61
+ type index_ClientGenerator = ClientGenerator;
62
+ declare const index_ClientGenerator: typeof ClientGenerator;
63
+ type index_CodegenWatcher = CodegenWatcher;
64
+ declare const index_CodegenWatcher: typeof CodegenWatcher;
65
+ type index_ControllerInfo = ControllerInfo;
66
+ type index_GenerateOptions = GenerateOptions;
67
+ type index_NestJSParser = NestJSParser;
68
+ declare const index_NestJSParser: typeof NestJSParser;
69
+ type index_RouteInfo = RouteInfo;
70
+ type index_WatchOptions = WatchOptions;
71
+ declare namespace index {
72
+ export { index_ClientGenerator as ClientGenerator, index_CodegenWatcher as CodegenWatcher, type index_ControllerInfo as ControllerInfo, type index_GenerateOptions as GenerateOptions, index_NestJSParser as NestJSParser, type index_RouteInfo as RouteInfo, type index_WatchOptions as WatchOptions };
73
+ }
74
+
75
+ export { type ControllerInfo as C, type GenerateOptions as G, NestJSParser as N, type RouteInfo as R, type WatchOptions as W, ClientGenerator as a, CodegenWatcher as b, index as i };
@@ -0,0 +1,67 @@
1
+ interface DevServerConfig {
2
+ apiPath: string;
3
+ webPath: string;
4
+ webPort?: number;
5
+ apiPort?: number;
6
+ useProxy?: boolean;
7
+ }
8
+ /**
9
+ * Unified development server for Fusion projects
10
+ */
11
+ declare class FusionDevServer {
12
+ private processRunner;
13
+ private proxyServer;
14
+ constructor();
15
+ start(config: DevServerConfig): Promise<void>;
16
+ stop(): void;
17
+ }
18
+
19
+ interface ProcessConfig {
20
+ name: string;
21
+ command: string;
22
+ args: string[];
23
+ cwd: string;
24
+ color: 'cyan' | 'green' | 'yellow' | 'magenta' | 'blue';
25
+ env?: Record<string, string>;
26
+ }
27
+ /**
28
+ * Run multiple processes concurrently with colored output
29
+ */
30
+ declare class ProcessRunner {
31
+ private processes;
32
+ private colors;
33
+ run(configs: ProcessConfig[]): Promise<void>;
34
+ private startProcess;
35
+ stopAll(): void;
36
+ isRunning(name: string): boolean;
37
+ }
38
+
39
+ interface ProxyConfig {
40
+ port: number;
41
+ apiTarget: string;
42
+ apiPrefix: string;
43
+ }
44
+ /**
45
+ * Proxy server to forward API requests from Next.js to NestJS
46
+ */
47
+ declare class ProxyServer {
48
+ private server;
49
+ private proxy;
50
+ start(config: ProxyConfig): Promise<void>;
51
+ stop(): void;
52
+ }
53
+
54
+ type index_DevServerConfig = DevServerConfig;
55
+ type index_FusionDevServer = FusionDevServer;
56
+ declare const index_FusionDevServer: typeof FusionDevServer;
57
+ type index_ProcessConfig = ProcessConfig;
58
+ type index_ProcessRunner = ProcessRunner;
59
+ declare const index_ProcessRunner: typeof ProcessRunner;
60
+ type index_ProxyConfig = ProxyConfig;
61
+ type index_ProxyServer = ProxyServer;
62
+ declare const index_ProxyServer: typeof ProxyServer;
63
+ declare namespace index {
64
+ export { type index_DevServerConfig as DevServerConfig, index_FusionDevServer as FusionDevServer, type index_ProcessConfig as ProcessConfig, index_ProcessRunner as ProcessRunner, type index_ProxyConfig as ProxyConfig, index_ProxyServer as ProxyServer };
65
+ }
66
+
67
+ export { type DevServerConfig as D, FusionDevServer as F, type ProcessConfig as P, ProcessRunner as a, type ProxyConfig as b, ProxyServer as c, index as i };
@@ -0,0 +1,67 @@
1
+ interface DevServerConfig {
2
+ apiPath: string;
3
+ webPath: string;
4
+ webPort?: number;
5
+ apiPort?: number;
6
+ useProxy?: boolean;
7
+ }
8
+ /**
9
+ * Unified development server for Fusion projects
10
+ */
11
+ declare class FusionDevServer {
12
+ private processRunner;
13
+ private proxyServer;
14
+ constructor();
15
+ start(config: DevServerConfig): Promise<void>;
16
+ stop(): void;
17
+ }
18
+
19
+ interface ProcessConfig {
20
+ name: string;
21
+ command: string;
22
+ args: string[];
23
+ cwd: string;
24
+ color: 'cyan' | 'green' | 'yellow' | 'magenta' | 'blue';
25
+ env?: Record<string, string>;
26
+ }
27
+ /**
28
+ * Run multiple processes concurrently with colored output
29
+ */
30
+ declare class ProcessRunner {
31
+ private processes;
32
+ private colors;
33
+ run(configs: ProcessConfig[]): Promise<void>;
34
+ private startProcess;
35
+ stopAll(): void;
36
+ isRunning(name: string): boolean;
37
+ }
38
+
39
+ interface ProxyConfig {
40
+ port: number;
41
+ apiTarget: string;
42
+ apiPrefix: string;
43
+ }
44
+ /**
45
+ * Proxy server to forward API requests from Next.js to NestJS
46
+ */
47
+ declare class ProxyServer {
48
+ private server;
49
+ private proxy;
50
+ start(config: ProxyConfig): Promise<void>;
51
+ stop(): void;
52
+ }
53
+
54
+ type index_DevServerConfig = DevServerConfig;
55
+ type index_FusionDevServer = FusionDevServer;
56
+ declare const index_FusionDevServer: typeof FusionDevServer;
57
+ type index_ProcessConfig = ProcessConfig;
58
+ type index_ProcessRunner = ProcessRunner;
59
+ declare const index_ProcessRunner: typeof ProcessRunner;
60
+ type index_ProxyConfig = ProxyConfig;
61
+ type index_ProxyServer = ProxyServer;
62
+ declare const index_ProxyServer: typeof ProxyServer;
63
+ declare namespace index {
64
+ export { type index_DevServerConfig as DevServerConfig, index_FusionDevServer as FusionDevServer, type index_ProcessConfig as ProcessConfig, index_ProcessRunner as ProcessRunner, type index_ProxyConfig as ProxyConfig, index_ProxyServer as ProxyServer };
65
+ }
66
+
67
+ export { type DevServerConfig as D, FusionDevServer as F, type ProcessConfig as P, ProcessRunner as a, type ProxyConfig as b, ProxyServer as c, index as i };