wexts 4.0.0 → 4.1.0
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/chunk-342VRT25.mjs +504 -0
- package/dist/chunk-342VRT25.mjs.map +1 -0
- package/dist/chunk-7HNQWJWV.js +504 -0
- package/dist/chunk-7HNQWJWV.js.map +1 -0
- package/dist/chunk-7SSCNCTW.mjs +137 -0
- package/dist/chunk-7SSCNCTW.mjs.map +1 -0
- package/dist/chunk-7TLSPR65.mjs +95 -0
- package/dist/chunk-7TLSPR65.mjs.map +1 -0
- package/dist/chunk-AVMQJWYD.js +95 -0
- package/dist/chunk-AVMQJWYD.js.map +1 -0
- package/dist/chunk-O4II6N34.js +137 -0
- package/dist/chunk-O4II6N34.js.map +1 -0
- package/dist/cli/index.d.mts +13 -1
- package/dist/cli/index.d.ts +13 -1
- package/dist/cli/index.js +438 -54
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/index.mjs +438 -54
- package/dist/cli/index.mjs.map +1 -1
- package/dist/client/index.js +3 -2
- package/dist/client/index.js.map +1 -1
- package/dist/client/index.mjs +2 -1
- package/dist/codegen/index.js +3 -2
- package/dist/codegen/index.js.map +1 -1
- package/dist/codegen/index.mjs +2 -1
- package/dist/index.d.mts +37 -1
- package/dist/index.d.ts +37 -1
- package/dist/index.js +22 -8
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +18 -4
- package/dist/index.mjs.map +1 -1
- package/dist/next/index.js +68 -5
- package/dist/next/index.js.map +1 -1
- package/dist/next/index.mjs +68 -5
- package/dist/next/index.mjs.map +1 -1
- package/dist/runtime/index.js +9 -1
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/index.mjs +9 -1
- package/dist/runtime/index.mjs.map +1 -1
- package/package.json +1 -1
- package/templates/nestjs-api/package-lock.json +0 -5623
- package/templates/nextjs-web/package-lock.json +0 -3254
package/dist/cli/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cli/index.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { spawnSync } from 'child_process';\nimport { createRequire } from 'module';\nimport * as pc from 'picocolors';\nimport { logger } from '../core/logger';\n\ninterface CommonOptions {\n cwd?: string;\n}\n\nexport function createCliProgram(): Command {\n const program = new Command();\n\n program\n .name('wexts')\n .description('Wexts - production-focused single-runtime Next.js + NestJS toolkit')\n .version('3.0.3');\n\n program\n .command('create <project-name>')\n .description('Create a compatibility project from bundled legacy templates')\n .option('-t, --template <template>', 'Legacy template to use (monorepo|api|web)', 'monorepo')\n .option('--skip-install', 'Skip dependency installation', false)\n .action(async (projectName: string, options: { template: string; skipInstall: boolean }) => {\n await createProject(projectName, options.template, { skipInstall: options.skipInstall });\n });\n\n program\n .command('dev')\n .description('Start local development processes')\n .option('-a, --api <path>', 'Path to API project', './apps/api')\n .option('-w, --web <path>', 'Path to Web project', './apps/web')\n .option('-p, --port <port>', 'Port for web server', '3000')\n .option('--api-port <port>', 'Port for API server', '5050')\n .option('--proxy', 'Enable development proxy on a separate proxy port', false)\n .action(async (options: { api: string; web: string; port: string; apiPort: string; proxy: boolean }) => {\n const { FusionDevServer } = await import('../dev-server/index.js');\n const server = new FusionDevServer();\n await server.start({\n apiPath: options.api,\n webPath: options.web,\n webPort: Number(options.port),\n apiPort: Number(options.apiPort),\n useProxy: options.proxy,\n });\n });\n\n program\n .command('generate [type] [name]')\n .alias('g')\n .description('Generate RPC manifest/client, or scaffold a minimal RPC service')\n .option('-p, --project <path>', 'Path to NestJS project', './apps/api')\n .option('-o, --output <path>', 'Output directory for generated RPC client', './apps/web/lib/wexts')\n .action(async (type: string | undefined, name: string | undefined, options: { project: string; output: string }) => {\n if (!type || type === 'rpc') {\n const { generateRpcClient } = await import('../codegen/index.js');\n const manifest = await generateRpcClient({\n projectPath: path.resolve(options.project),\n outputPath: path.resolve(options.output),\n });\n logger.success(`Generated Wexts RPC client for ${manifest.services.length} service(s).`);\n return;\n }\n\n if (type === 'service') {\n if (!name) throw new Error('Service name is required: wexts generate service hello');\n await scaffoldRpcService(path.resolve(options.project), name);\n logger.success(`Created RPC service ${name}. Run wexts generate to update the client.`);\n return;\n }\n\n throw new Error(`Unknown generator \"${type}\". Supported generators: rpc, service.`);\n });\n\n program\n .command('codegen')\n .description('Alias for wexts generate rpc')\n .option('-p, --project <path>', 'Path to NestJS project', './apps/api')\n .option('-o, --output <path>', 'Output directory for generated RPC client', './apps/web/lib/wexts')\n .action(async (options: { project: string; output: string }) => {\n const { generateRpcClient } = await import('../codegen/index.js');\n const manifest = await generateRpcClient({\n projectPath: path.resolve(options.project),\n outputPath: path.resolve(options.output),\n });\n logger.success(`Generated Wexts RPC client for ${manifest.services.length} service(s).`);\n });\n\n program\n .command('build')\n .description('Build a Wexts project for production')\n .option('--skip-generate', 'Skip RPC generation before build', false)\n .option('-p, --project <path>', 'Path to NestJS project', './apps/api')\n .option('-o, --output <path>', 'Output directory for generated RPC client', './apps/web/lib/wexts')\n .action(async (options: { skipGenerate: boolean; project: string; output: string }) => {\n if (!options.skipGenerate && fs.existsSync(options.project)) {\n const { generateRpcClient } = await import('../codegen/index.js');\n await generateRpcClient({\n projectPath: path.resolve(options.project),\n outputPath: path.resolve(options.output),\n });\n }\n runScript('build', { cwd: process.cwd() });\n });\n\n program\n .command('start')\n .description('Start the production Wexts runtime')\n .option('-c, --config <path>', 'Runtime config module path', './wexts.runtime.js')\n .option('-p, --port <port>', 'Port to listen on', process.env.PORT ?? '3000')\n .action(async (options: { config: string; port: string }) => {\n const { startWextsRuntime } = await import('../runtime/index.js');\n const configPath = path.resolve(options.config);\n const runtimeConfig = fs.existsSync(configPath)\n ? await loadRuntimeConfig(configPath)\n : {};\n await startWextsRuntime({\n ...runtimeConfig,\n port: Number(options.port),\n dev: false,\n });\n });\n\n program\n .command('vercel-build')\n .description('Build for Vercel using Build Output API v3')\n .option('-p, --project <path>', 'Path to NestJS project', './apps/api')\n .option('-o, --output <path>', 'Output dir for RPC client', './apps/web/lib/wexts')\n .option('-c, --config <path>', 'Runtime config module path', './wexts.runtime.js')\n .option('--skip-codegen', 'Skip RPC generation', false)\n .option('--skip-build', 'Skip project build step', false)\n .option('--node-version <version>', 'Node.js version for Vercel function', '20')\n .option('--max-duration <seconds>', 'Max duration for serverless function', '30')\n .action(async (options: {\n project: string;\n output: string;\n config: string;\n skipCodegen: boolean;\n skipBuild: boolean;\n nodeVersion: string;\n maxDuration: string;\n }) => {\n const { buildVercelOutput } = await import('../vercel-builder/index.js');\n const result = await buildVercelOutput({\n rootDir: process.cwd(),\n apiProjectPath: options.project,\n rpcOutputPath: options.output,\n runtimeConfigPath: options.config,\n skipCodegen: options.skipCodegen,\n skipBuild: options.skipBuild,\n nodeVersion: options.nodeVersion,\n maxDuration: Number(options.maxDuration),\n });\n if (result.warnings.length > 0) {\n for (const warning of result.warnings) logger.warn(warning);\n }\n if (result.errors.length > 0) {\n for (const error of result.errors) logger.error(error);\n process.exit(1);\n }\n logger.success('Vercel build output ready at .vercel/output');\n });\n\n program\n .command('doctor')\n .description('Validate Wexts project configuration')\n .option('--security', 'Run security-specific checks', false)\n .action(async (options: { security: boolean }) => {\n const result = runDoctor(process.cwd(), options.security);\n for (const warning of result.warnings) logger.warn(warning);\n for (const error of result.errors) logger.error(error);\n if (result.errors.length > 0) process.exit(1);\n logger.success(options.security ? 'Security doctor passed.' : 'Doctor passed.');\n });\n\n return program;\n}\n\nexport interface DoctorResult {\n errors: string[];\n warnings: string[];\n}\n\nexport function runDoctor(cwd: string, security = false): DoctorResult {\n const result: DoctorResult = { errors: [], warnings: [] };\n const pkgPath = path.join(cwd, 'package.json');\n\n if (!fs.existsSync(pkgPath)) {\n result.errors.push('package.json not found.');\n return result;\n }\n\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));\n if (!pkg.packageManager?.startsWith('pnpm@')) {\n result.warnings.push('packageManager should pin pnpm.');\n }\n\n for (const dir of ['apps/api', 'apps/web']) {\n if (!fs.existsSync(path.join(cwd, dir))) {\n result.warnings.push(`${dir} not found; some Wexts commands may need explicit paths.`);\n }\n }\n\n if (fs.existsSync(path.join(cwd, 'apps/api')) && fs.existsSync(path.join(cwd, 'apps/web'))) {\n result.warnings.push('Development mode starts separate web/API processes. Single-port serving is the production `wexts start` runtime path.');\n }\n\n if (security) {\n const source = readAllText(cwd, ['apps/api/src', 'packages/templates/nestjs-api/src']);\n if (source.includes('default-secret')) {\n result.errors.push('JWT fallback \"default-secret\" found. Production apps must fail without a strong JWT_SECRET.');\n }\n if (/origin:\\s*['\"]\\*['\"]/.test(source)) {\n result.errors.push('Wildcard CORS origin found. Use an explicit origin allowlist.');\n }\n }\n\n return result;\n}\n\nasync function createProject(projectName: string, template: string, options: { skipInstall: boolean }): Promise<void> {\n const projectPath = path.join(process.cwd(), projectName);\n if (fs.existsSync(projectPath)) {\n throw new Error(`Directory already exists: ${projectName}`);\n }\n\n const templatePath = findTemplatePath();\n if (!templatePath) {\n throw new Error('Template directory not found in package.');\n }\n\n fs.mkdirSync(projectPath, { recursive: true });\n\n if (template === 'monorepo') {\n fs.mkdirSync(path.join(projectPath, 'apps'), { recursive: true });\n fs.cpSync(path.join(templatePath, 'nestjs-api'), path.join(projectPath, 'apps/api'), { recursive: true });\n fs.cpSync(path.join(templatePath, 'nextjs-web'), path.join(projectPath, 'apps/web'), { recursive: true });\n fs.writeFileSync(path.join(projectPath, 'pnpm-workspace.yaml'), \"packages:\\n - 'apps/*'\\n\");\n fs.writeFileSync(path.join(projectPath, 'package.json'), JSON.stringify({\n name: projectName,\n private: true,\n packageManager: 'pnpm@10.22.0',\n scripts: {\n dev: 'wexts dev',\n generate: 'wexts generate',\n build: 'wexts build',\n start: 'wexts start',\n doctor: 'wexts doctor',\n },\n devDependencies: {\n wexts: 'latest',\n },\n }, null, 2));\n } else if (template === 'api') {\n fs.cpSync(path.join(templatePath, 'nestjs-api'), projectPath, { recursive: true });\n } else if (template === 'web') {\n fs.cpSync(path.join(templatePath, 'nextjs-web'), projectPath, { recursive: true });\n } else {\n throw new Error(`Unknown template \"${template}\".`);\n }\n\n if (!options.skipInstall) {\n runCommand(detectPackageManager(projectPath), ['install'], projectPath);\n }\n}\n\nasync function scaffoldRpcService(apiProjectPath: string, rawName: string): Promise<void> {\n const serviceName = toKebabCase(rawName);\n const className = `${toPascalCase(serviceName)}Service`;\n const dir = path.join(apiProjectPath, 'src', serviceName);\n fs.mkdirSync(dir, { recursive: true });\n fs.writeFileSync(path.join(dir, `${serviceName}.service.ts`), `import { Injectable } from '@nestjs/common';\nimport { RpcMethod, RpcService } from 'wexts/nest';\n\n@Injectable()\n@RpcService({ name: '${toCamelCase(serviceName)}', requireAuth: false })\nexport class ${className} {\n @RpcMethod()\n async sayHello(name: string): Promise<string> {\n return \\`Hello, \\${name}!\\`;\n }\n}\n`);\n}\n\nfunction runScript(script: string, options: CommonOptions): void {\n const cwd = options.cwd ?? process.cwd();\n const packageManager = detectPackageManager(cwd);\n const args = packageManager === 'npm' ? ['run', script] : ['run', script];\n runCommand(packageManager, args, cwd);\n}\n\nfunction runCommand(command: string, args: string[], cwd: string): void {\n const result = spawnSync(command, args, { cwd, stdio: 'inherit', shell: process.platform === 'win32' });\n if (result.status !== 0) {\n throw new Error(`${command} ${args.join(' ')} failed with exit code ${result.status}`);\n }\n}\n\nfunction detectPackageManager(cwd: string): 'pnpm' | 'npm' {\n if (fs.existsSync(path.join(cwd, 'pnpm-lock.yaml'))) return 'pnpm';\n return 'npm';\n}\n\nfunction findTemplatePath(): string | undefined {\n const candidates = [\n path.resolve(__dirname, '../../templates'),\n path.resolve(__dirname, '../templates'),\n path.resolve(process.cwd(), 'packages/templates'),\n ];\n\n return candidates.find((candidate) => fs.existsSync(candidate));\n}\n\nfunction readAllText(cwd: string, dirs: string[]): string {\n let text = '';\n for (const dir of dirs) {\n const absolute = path.join(cwd, dir);\n if (!fs.existsSync(absolute)) continue;\n for (const file of walk(absolute)) {\n if (file.endsWith('.ts') || file.endsWith('.tsx') || file.endsWith('.js')) {\n text += fs.readFileSync(file, 'utf8');\n }\n }\n }\n return text;\n}\n\nfunction walk(dir: string): string[] {\n return fs.readdirSync(dir, { withFileTypes: true }).flatMap((entry) => {\n const absolute = path.join(dir, entry.name);\n if (entry.isDirectory()) return walk(absolute);\n return [absolute];\n });\n}\n\nfunction toKebabCase(value: string): string {\n return value.replace(/([a-z0-9])([A-Z])/g, '$1-$2').replace(/[_\\s]+/g, '-').toLowerCase();\n}\n\nfunction toPascalCase(value: string): string {\n return toKebabCase(value).split('-').map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join('');\n}\n\nfunction toCamelCase(value: string): string {\n const pascal = toPascalCase(value);\n return pascal.charAt(0).toLowerCase() + pascal.slice(1);\n}\n\nfunction pathToFileUrl(filePath: string): string {\n return `file://${filePath}`;\n}\n\nasync function loadRuntimeConfig(configPath: string): Promise<Record<string, unknown>> {\n if (configPath.endsWith('.mjs')) {\n const mod = await import(pathToFileUrl(configPath));\n return (mod.default ?? mod) as Record<string, unknown>;\n }\n\n const require = createRequire(__filename);\n const mod = require(configPath);\n return (mod.default ?? mod) as Record<string, unknown>;\n}\n\nconst invokedAsCli = process.argv[1]\n && (path.basename(process.argv[1]) === 'wexts' || path.basename(process.argv[1]) === 'wexts.cjs' || path.resolve(process.argv[1]).includes(`${path.sep}dist${path.sep}cli${path.sep}index`));\n\nif (invokedAsCli && !process.env.VITEST) {\n createCliProgram().parseAsync(process.argv).catch((error) => {\n logger.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n });\n}\n"],"mappings":";;;;;;;;;;;AAEA,SAASA,eAAe;AACxB,YAAYC,QAAQ;AACpB,YAAYC,UAAU;AACtB,SAASC,iBAAiB;AAC1B,SAASC,qBAAqB;AAQvB,SAASC,mBAAAA;AACZ,QAAMC,UAAU,IAAIC,QAAAA;AAEpBD,UACKE,KAAK,OAAA,EACLC,YAAY,oEAAA,EACZC,QAAQ,OAAA;AAEbJ,UACKK,QAAQ,uBAAA,EACRF,YAAY,8DAAA,EACZG,OAAO,6BAA6B,6CAA6C,UAAA,EACjFA,OAAO,kBAAkB,gCAAgC,KAAA,EACzDC,OAAO,OAAOC,aAAqBC,YAAAA;AAChC,UAAMC,cAAcF,aAAaC,QAAQE,UAAU;MAAEC,aAAaH,QAAQG;IAAY,CAAA;EAC1F,CAAA;AAEJZ,UACKK,QAAQ,KAAA,EACRF,YAAY,mCAAA,EACZG,OAAO,oBAAoB,uBAAuB,YAAA,EAClDA,OAAO,oBAAoB,uBAAuB,YAAA,EAClDA,OAAO,qBAAqB,uBAAuB,MAAA,EACnDA,OAAO,qBAAqB,uBAAuB,MAAA,EACnDA,OAAO,WAAW,qDAAqD,KAAA,EACvEC,OAAO,OAAOE,YAAAA;AACX,UAAM,EAAEI,gBAAe,IAAK,MAAM,OAAO,yBAAA;AACzC,UAAMC,SAAS,IAAID,gBAAAA;AACnB,UAAMC,OAAOC,MAAM;MACfC,SAASP,QAAQQ;MACjBC,SAAST,QAAQU;MACjBC,SAASC,OAAOZ,QAAQa,IAAI;MAC5BC,SAASF,OAAOZ,QAAQc,OAAO;MAC/BC,UAAUf,QAAQgB;IACtB,CAAA;EACJ,CAAA;AAEJzB,UACKK,QAAQ,wBAAA,EACRqB,MAAM,GAAA,EACNvB,YAAY,iEAAA,EACZG,OAAO,wBAAwB,0BAA0B,YAAA,EACzDA,OAAO,uBAAuB,6CAA6C,sBAAA,EAC3EC,OAAO,OAAOoB,MAA0BzB,MAA0BO,YAAAA;AAC/D,QAAI,CAACkB,QAAQA,SAAS,OAAO;AACzB,YAAM,EAAEC,kBAAiB,IAAK,MAAM,OAAO,sBAAA;AAC3C,YAAMC,WAAW,MAAMD,kBAAkB;QACrCE,aAAkBC,aAAQtB,QAAQuB,OAAO;QACzCC,YAAiBF,aAAQtB,QAAQyB,MAAM;MAC3C,CAAA;AACAC,aAAOC,QAAQ,kCAAkCP,SAASQ,SAASC,MAAM,cAAc;AACvF;IACJ;AAEA,QAAIX,SAAS,WAAW;AACpB,UAAI,CAACzB,KAAM,OAAM,IAAIqC,MAAM,wDAAA;AAC3B,YAAMC,mBAAwBT,aAAQtB,QAAQuB,OAAO,GAAG9B,IAAAA;AACxDiC,aAAOC,QAAQ,uBAAuBlC,IAAAA,4CAAgD;AACtF;IACJ;AAEA,UAAM,IAAIqC,MAAM,sBAAsBZ,IAAAA,wCAA4C;EACtF,CAAA;AAEJ3B,UACKK,QAAQ,SAAA,EACRF,YAAY,8BAAA,EACZG,OAAO,wBAAwB,0BAA0B,YAAA,EACzDA,OAAO,uBAAuB,6CAA6C,sBAAA,EAC3EC,OAAO,OAAOE,YAAAA;AACX,UAAM,EAAEmB,kBAAiB,IAAK,MAAM,OAAO,sBAAA;AAC3C,UAAMC,WAAW,MAAMD,kBAAkB;MACrCE,aAAkBC,aAAQtB,QAAQuB,OAAO;MACzCC,YAAiBF,aAAQtB,QAAQyB,MAAM;IAC3C,CAAA;AACAC,WAAOC,QAAQ,kCAAkCP,SAASQ,SAASC,MAAM,cAAc;EAC3F,CAAA;AAEJtC,UACKK,QAAQ,OAAA,EACRF,YAAY,sCAAA,EACZG,OAAO,mBAAmB,oCAAoC,KAAA,EAC9DA,OAAO,wBAAwB,0BAA0B,YAAA,EACzDA,OAAO,uBAAuB,6CAA6C,sBAAA,EAC3EC,OAAO,OAAOE,YAAAA;AACX,QAAI,CAACA,QAAQgC,gBAAmBC,cAAWjC,QAAQuB,OAAO,GAAG;AACzD,YAAM,EAAEJ,kBAAiB,IAAK,MAAM,OAAO,sBAAA;AAC3C,YAAMA,kBAAkB;QACpBE,aAAkBC,aAAQtB,QAAQuB,OAAO;QACzCC,YAAiBF,aAAQtB,QAAQyB,MAAM;MAC3C,CAAA;IACJ;AACAS,cAAU,SAAS;MAAEC,KAAKC,QAAQD,IAAG;IAAG,CAAA;EAC5C,CAAA;AAEJ5C,UACKK,QAAQ,OAAA,EACRF,YAAY,oCAAA,EACZG,OAAO,uBAAuB,8BAA8B,oBAAA,EAC5DA,OAAO,qBAAqB,qBAAqBuC,QAAQC,IAAIC,QAAQ,MAAA,EACrExC,OAAO,OAAOE,YAAAA;AACX,UAAM,EAAEuC,kBAAiB,IAAK,MAAM,OAAO,sBAAA;AAC3C,UAAMC,aAAkBlB,aAAQtB,QAAQyC,MAAM;AAC9C,UAAMC,gBAAmBT,cAAWO,UAAAA,IAC9B,MAAMG,kBAAkBH,UAAAA,IACxB,CAAC;AACP,UAAMD,kBAAkB;MACpB,GAAGG;MACH7B,MAAMD,OAAOZ,QAAQa,IAAI;MACzB+B,KAAK;IACT,CAAA;EACJ,CAAA;AAEJrD,UACKK,QAAQ,cAAA,EACRF,YAAY,4CAAA,EACZG,OAAO,wBAAwB,0BAA0B,YAAA,EACzDA,OAAO,uBAAuB,6BAA6B,sBAAA,EAC3DA,OAAO,uBAAuB,8BAA8B,oBAAA,EAC5DA,OAAO,kBAAkB,uBAAuB,KAAA,EAChDA,OAAO,gBAAgB,2BAA2B,KAAA,EAClDA,OAAO,4BAA4B,uCAAuC,IAAA,EAC1EA,OAAO,4BAA4B,wCAAwC,IAAA,EAC3EC,OAAO,OAAOE,YAAAA;AASX,UAAM,EAAE6C,kBAAiB,IAAK,MAAM,OAAO,6BAAA;AAC3C,UAAMC,SAAS,MAAMD,kBAAkB;MACnCE,SAASX,QAAQD,IAAG;MACpBa,gBAAgBhD,QAAQuB;MACxB0B,eAAejD,QAAQyB;MACvByB,mBAAmBlD,QAAQyC;MAC3BU,aAAanD,QAAQmD;MACrBC,WAAWpD,QAAQoD;MACnBC,aAAarD,QAAQqD;MACrBC,aAAa1C,OAAOZ,QAAQsD,WAAW;IAC3C,CAAA;AACA,QAAIR,OAAOS,SAAS1B,SAAS,GAAG;AAC5B,iBAAW2B,WAAWV,OAAOS,SAAU7B,QAAO+B,KAAKD,OAAAA;IACvD;AACA,QAAIV,OAAOY,OAAO7B,SAAS,GAAG;AAC1B,iBAAW8B,SAASb,OAAOY,OAAQhC,QAAOiC,MAAMA,KAAAA;AAChDvB,cAAQwB,KAAK,CAAA;IACjB;AACAlC,WAAOC,QAAQ,6CAAA;EACnB,CAAA;AAEJpC,UACKK,QAAQ,QAAA,EACRF,YAAY,sCAAA,EACZG,OAAO,cAAc,gCAAgC,KAAA,EACrDC,OAAO,OAAOE,YAAAA;AACX,UAAM8C,SAASe,UAAUzB,QAAQD,IAAG,GAAInC,QAAQ8D,QAAQ;AACxD,eAAWN,WAAWV,OAAOS,SAAU7B,QAAO+B,KAAKD,OAAAA;AACnD,eAAWG,SAASb,OAAOY,OAAQhC,QAAOiC,MAAMA,KAAAA;AAChD,QAAIb,OAAOY,OAAO7B,SAAS,EAAGO,SAAQwB,KAAK,CAAA;AAC3ClC,WAAOC,QAAQ3B,QAAQ8D,WAAW,4BAA4B,gBAAA;EAClE,CAAA;AAEJ,SAAOvE;AACX;AAtKgBD;AA6KT,SAASuE,UAAU1B,KAAa2B,WAAW,OAAK;AACnD,QAAMhB,SAAuB;IAAEY,QAAQ,CAAA;IAAIH,UAAU,CAAA;EAAG;AACxD,QAAMQ,UAAeC,UAAK7B,KAAK,cAAA;AAE/B,MAAI,CAAIF,cAAW8B,OAAAA,GAAU;AACzBjB,WAAOY,OAAOO,KAAK,yBAAA;AACnB,WAAOnB;EACX;AAEA,QAAMoB,MAAMC,KAAKC,MAASC,gBAAaN,SAAS,MAAA,CAAA;AAChD,MAAI,CAACG,IAAII,gBAAgBC,WAAW,OAAA,GAAU;AAC1CzB,WAAOS,SAASU,KAAK,iCAAA;EACzB;AAEA,aAAWO,OAAO;IAAC;IAAY;KAAa;AACxC,QAAI,CAAIvC,cAAgB+B,UAAK7B,KAAKqC,GAAAA,CAAAA,GAAO;AACrC1B,aAAOS,SAASU,KAAK,GAAGO,GAAAA,0DAA6D;IACzF;EACJ;AAEA,MAAOvC,cAAgB+B,UAAK7B,KAAK,UAAA,CAAA,KAAmBF,cAAgB+B,UAAK7B,KAAK,UAAA,CAAA,GAAc;AACxFW,WAAOS,SAASU,KAAK,uHAAA;EACzB;AAEA,MAAIH,UAAU;AACV,UAAMW,SAASC,YAAYvC,KAAK;MAAC;MAAgB;KAAoC;AACrF,QAAIsC,OAAOE,SAAS,gBAAA,GAAmB;AACnC7B,aAAOY,OAAOO,KAAK,6FAAA;IACvB;AACA,QAAI,uBAAuBW,KAAKH,MAAAA,GAAS;AACrC3B,aAAOY,OAAOO,KAAK,+DAAA;IACvB;EACJ;AAEA,SAAOnB;AACX;AAnCgBe;AAqChB,eAAe5D,cAAcF,aAAqBG,UAAkBF,SAAiC;AACjG,QAAMqB,cAAmB2C,UAAK5B,QAAQD,IAAG,GAAIpC,WAAAA;AAC7C,MAAOkC,cAAWZ,WAAAA,GAAc;AAC5B,UAAM,IAAIS,MAAM,6BAA6B/B,WAAAA,EAAa;EAC9D;AAEA,QAAM8E,eAAeC,iBAAAA;AACrB,MAAI,CAACD,cAAc;AACf,UAAM,IAAI/C,MAAM,0CAAA;EACpB;AAEAiD,EAAGC,aAAU3D,aAAa;IAAE4D,WAAW;EAAK,CAAA;AAE5C,MAAI/E,aAAa,YAAY;AACzB6E,IAAGC,aAAehB,UAAK3C,aAAa,MAAA,GAAS;MAAE4D,WAAW;IAAK,CAAA;AAC/DF,IAAGG,UAAYlB,UAAKa,cAAc,YAAA,GAAoBb,UAAK3C,aAAa,UAAA,GAAa;MAAE4D,WAAW;IAAK,CAAA;AACvGF,IAAGG,UAAYlB,UAAKa,cAAc,YAAA,GAAoBb,UAAK3C,aAAa,UAAA,GAAa;MAAE4D,WAAW;IAAK,CAAA;AACvGF,IAAGI,iBAAmBnB,UAAK3C,aAAa,qBAAA,GAAwB,2BAAA;AAChE0D,IAAGI,iBAAmBnB,UAAK3C,aAAa,cAAA,GAAiB8C,KAAKiB,UAAU;MACpE3F,MAAMM;MACNsF,SAAS;MACTf,gBAAgB;MAChBgB,SAAS;QACL1C,KAAK;QACL2C,UAAU;QACVC,OAAO;QACPlF,OAAO;QACPmF,QAAQ;MACZ;MACAC,iBAAiB;QACbC,OAAO;MACX;IACJ,GAAG,MAAM,CAAA,CAAA;EACb,WAAWzF,aAAa,OAAO;AAC3B6E,IAAGG,UAAYlB,UAAKa,cAAc,YAAA,GAAexD,aAAa;MAAE4D,WAAW;IAAK,CAAA;EACpF,WAAW/E,aAAa,OAAO;AAC3B6E,IAAGG,UAAYlB,UAAKa,cAAc,YAAA,GAAexD,aAAa;MAAE4D,WAAW;IAAK,CAAA;EACpF,OAAO;AACH,UAAM,IAAInD,MAAM,qBAAqB5B,QAAAA,IAAY;EACrD;AAEA,MAAI,CAACF,QAAQG,aAAa;AACtByF,eAAWC,qBAAqBxE,WAAAA,GAAc;MAAC;OAAYA,WAAAA;EAC/D;AACJ;AA5CepB;AA8Cf,eAAe8B,mBAAmBiB,gBAAwB8C,SAAe;AACrE,QAAMC,cAAcC,YAAYF,OAAAA;AAChC,QAAMG,YAAY,GAAGC,aAAaH,WAAAA,CAAAA;AAClC,QAAMvB,MAAWR,UAAKhB,gBAAgB,OAAO+C,WAAAA;AAC7ChB,EAAGC,aAAUR,KAAK;IAAES,WAAW;EAAK,CAAA;AACpCF,EAAGI,iBAAmBnB,UAAKQ,KAAK,GAAGuB,WAAAA,aAAwB,GAAG;;;;uBAI3CI,YAAYJ,WAAAA,CAAAA;eACpBE,SAAAA;;;;;;CAMd;AACD;AAjBelE;AAmBf,SAASG,UAAUkE,QAAgBpG,SAAsB;AACrD,QAAMmC,MAAMnC,QAAQmC,OAAOC,QAAQD,IAAG;AACtC,QAAMmC,iBAAiBuB,qBAAqB1D,GAAAA;AAC5C,QAAMkE,OAAO/B,mBAAmB,QAAQ;IAAC;IAAO8B;MAAU;IAAC;IAAOA;;AAClER,aAAWtB,gBAAgB+B,MAAMlE,GAAAA;AACrC;AALSD;AAOT,SAAS0D,WAAWhG,SAAiByG,MAAgBlE,KAAW;AAC5D,QAAMW,SAASwD,UAAU1G,SAASyG,MAAM;IAAElE;IAAKoE,OAAO;IAAWC,OAAOpE,QAAQqE,aAAa;EAAQ,CAAA;AACrG,MAAI3D,OAAO4D,WAAW,GAAG;AACrB,UAAM,IAAI5E,MAAM,GAAGlC,OAAAA,IAAWyG,KAAKrC,KAAK,GAAA,CAAA,0BAA8BlB,OAAO4D,MAAM,EAAE;EACzF;AACJ;AALSd;AAOT,SAASC,qBAAqB1D,KAAW;AACrC,MAAOF,cAAgB+B,UAAK7B,KAAK,gBAAA,CAAA,EAAoB,QAAO;AAC5D,SAAO;AACX;AAHS0D;AAKT,SAASf,mBAAAA;AACL,QAAM6B,aAAa;IACVrF,aAAQsF,WAAW,iBAAA;IACnBtF,aAAQsF,WAAW,cAAA;IACnBtF,aAAQc,QAAQD,IAAG,GAAI,oBAAA;;AAGhC,SAAOwE,WAAWE,KAAK,CAACC,cAAiB7E,cAAW6E,SAAAA,CAAAA;AACxD;AARShC;AAUT,SAASJ,YAAYvC,KAAa4E,MAAc;AAC5C,MAAIC,OAAO;AACX,aAAWxC,OAAOuC,MAAM;AACpB,UAAME,WAAgBjD,UAAK7B,KAAKqC,GAAAA;AAChC,QAAI,CAAIvC,cAAWgF,QAAAA,EAAW;AAC9B,eAAWC,QAAQC,KAAKF,QAAAA,GAAW;AAC/B,UAAIC,KAAKE,SAAS,KAAA,KAAUF,KAAKE,SAAS,MAAA,KAAWF,KAAKE,SAAS,KAAA,GAAQ;AACvEJ,gBAAW3C,gBAAa6C,MAAM,MAAA;MAClC;IACJ;EACJ;AACA,SAAOF;AACX;AAZStC;AAcT,SAASyC,KAAK3C,KAAW;AACrB,SAAU6C,eAAY7C,KAAK;IAAE8C,eAAe;EAAK,CAAA,EAAGC,QAAQ,CAACC,UAAAA;AACzD,UAAMP,WAAgBjD,UAAKQ,KAAKgD,MAAM/H,IAAI;AAC1C,QAAI+H,MAAMC,YAAW,EAAI,QAAON,KAAKF,QAAAA;AACrC,WAAO;MAACA;;EACZ,CAAA;AACJ;AANSE;AAQT,SAASnB,YAAY0B,OAAa;AAC9B,SAAOA,MAAMC,QAAQ,sBAAsB,OAAA,EAASA,QAAQ,WAAW,GAAA,EAAKC,YAAW;AAC3F;AAFS5B;AAIT,SAASE,aAAawB,OAAa;AAC/B,SAAO1B,YAAY0B,KAAAA,EAAOG,MAAM,GAAA,EAAKC,IAAI,CAACC,SAASA,KAAKC,OAAO,CAAA,EAAGC,YAAW,IAAKF,KAAKG,MAAM,CAAA,CAAA,EAAIlE,KAAK,EAAA;AAC1G;AAFSkC;AAIT,SAASC,YAAYuB,OAAa;AAC9B,QAAMS,SAASjC,aAAawB,KAAAA;AAC5B,SAAOS,OAAOH,OAAO,CAAA,EAAGJ,YAAW,IAAKO,OAAOD,MAAM,CAAA;AACzD;AAHS/B;AAKT,SAASiC,cAAcC,UAAgB;AACnC,SAAO,UAAUA,QAAAA;AACrB;AAFSD;AAIT,eAAezF,kBAAkBH,YAAkB;AAC/C,MAAIA,WAAW4E,SAAS,MAAA,GAAS;AAC7B,UAAMkB,OAAM,MAAM,OAAOF,cAAc5F,UAAAA;AACvC,WAAQ8F,KAAIC,WAAWD;EAC3B;AAEA,QAAME,WAAUC,cAAcC,UAAAA;AAC9B,QAAMJ,MAAME,SAAQhG,UAAAA;AACpB,SAAQ8F,IAAIC,WAAWD;AAC3B;AATe3F;AAWf,IAAMgG,eAAevG,QAAQwG,KAAK,CAAA,MACrBC,cAASzG,QAAQwG,KAAK,CAAA,CAAE,MAAM,WAAgBC,cAASzG,QAAQwG,KAAK,CAAA,CAAE,MAAM,eAAoBtH,aAAQc,QAAQwG,KAAK,CAAA,CAAE,EAAEjE,SAAS,GAAQmE,QAAG,OAAYA,QAAG,MAAWA,QAAG,OAAO;AAE9L,IAAIH,gBAAgB,CAACvG,QAAQC,IAAI0G,QAAQ;AACrCzJ,mBAAAA,EAAmB0J,WAAW5G,QAAQwG,IAAI,EAAEK,MAAM,CAACtF,UAAAA;AAC/CjC,WAAOiC,MAAMA,iBAAiB7B,QAAQ6B,MAAMuF,UAAUC,OAAOxF,KAAAA,CAAAA;AAC7DvB,YAAQwB,KAAK,CAAA;EACjB,CAAA;AACJ;","names":["Command","fs","path","spawnSync","createRequire","createCliProgram","program","Command","name","description","version","command","option","action","projectName","options","createProject","template","skipInstall","FusionDevServer","server","start","apiPath","api","webPath","web","webPort","Number","port","apiPort","useProxy","proxy","alias","type","generateRpcClient","manifest","projectPath","resolve","project","outputPath","output","logger","success","services","length","Error","scaffoldRpcService","skipGenerate","existsSync","runScript","cwd","process","env","PORT","startWextsRuntime","configPath","config","runtimeConfig","loadRuntimeConfig","dev","buildVercelOutput","result","rootDir","apiProjectPath","rpcOutputPath","runtimeConfigPath","skipCodegen","skipBuild","nodeVersion","maxDuration","warnings","warning","warn","errors","error","exit","runDoctor","security","pkgPath","join","push","pkg","JSON","parse","readFileSync","packageManager","startsWith","dir","source","readAllText","includes","test","templatePath","findTemplatePath","fs","mkdirSync","recursive","cpSync","writeFileSync","stringify","private","scripts","generate","build","doctor","devDependencies","wexts","runCommand","detectPackageManager","rawName","serviceName","toKebabCase","className","toPascalCase","toCamelCase","script","args","spawnSync","stdio","shell","platform","status","candidates","__dirname","find","candidate","dirs","text","absolute","file","walk","endsWith","readdirSync","withFileTypes","flatMap","entry","isDirectory","value","replace","toLowerCase","split","map","part","charAt","toUpperCase","slice","pascal","pathToFileUrl","filePath","mod","default","require","createRequire","__filename","invokedAsCli","argv","basename","sep","VITEST","parseAsync","catch","message","String"]}
|
|
1
|
+
{"version":3,"sources":["../../src/cli/index.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { spawnSync } from 'child_process';\nimport { createRequire } from 'module';\nimport { logger } from '../core/logger';\nimport { formatWextsError, WextsError } from '../errors';\n\ninterface CommonOptions {\n cwd?: string;\n}\n\nexport function createCliProgram(): Command {\n const program = new Command();\n\n program\n .name('wexts')\n .description('Wexts - production-focused single-runtime Next.js + NestJS toolkit')\n .version(readPackageVersion());\n\n program\n .command('create <project-name>')\n .description('Create a verified Wexts starter')\n .option('-t, --template <template>', 'Template to use (starter|legacy)', 'starter')\n .option('--skip-install', 'Skip dependency installation', false)\n .action(async (projectName: string, options: { template: string; skipInstall: boolean }) => {\n await createProject(projectName, options.template, { skipInstall: options.skipInstall });\n });\n\n program\n .command('dev')\n .description('Start local development processes')\n .option('-a, --api <path>', 'Path to API project', './apps/api')\n .option('-w, --web <path>', 'Path to Web project', './apps/web')\n .option('-p, --port <port>', 'Port for web server', '3000')\n .option('--api-port <port>', 'Port for API server', '5050')\n .option('--proxy', 'Enable development proxy on a separate proxy port', false)\n .action(async (options: { api: string; web: string; port: string; apiPort: string; proxy: boolean }) => {\n const { FusionDevServer } = await import('../dev-server/index.js');\n const server = new FusionDevServer();\n await server.start({\n apiPath: options.api,\n webPath: options.web,\n webPort: Number(options.port),\n apiPort: Number(options.apiPort),\n useProxy: options.proxy,\n });\n });\n\n program\n .command('generate [type] [name]')\n .alias('g')\n .description('Generate RPC manifest/client, or scaffold a minimal RPC service')\n .option('-p, --project <path>', 'Path to NestJS project', './apps/api')\n .option('-o, --output <path>', 'Output directory for generated RPC client', './apps/web/lib/wexts')\n .option('--force', 'Overwrite generated files if they already exist', false)\n .action(async (type: string | undefined, name: string | undefined, options: { project: string; output: string; force: boolean }) => {\n if (!type || (type === 'rpc' && !name)) {\n const { generateRpcClient } = await import('../codegen/index.js');\n const manifest = await generateRpcClient({\n projectPath: path.resolve(options.project),\n outputPath: path.resolve(options.output),\n });\n logger.success(`Generated Wexts RPC client for ${manifest.services.length} service(s).`);\n return;\n }\n\n if (isScaffoldGenerator(type)) {\n const targetRoot = type === 'config' ? process.cwd() : path.resolve(options.project);\n const changedFiles = await scaffoldGenerator({\n type,\n name,\n targetRoot,\n force: options.force,\n });\n for (const file of changedFiles) logger.info(`created ${path.relative(process.cwd(), file)}`);\n logger.success(`Generated ${type}${name ? ` ${name}` : ''}.`);\n return;\n }\n\n throw new Error(`Unknown generator \"${type}\". Supported generators: rpc, service, module, entity, guard, config.`);\n });\n\n program\n .command('codegen')\n .description('Alias for wexts generate rpc')\n .option('-p, --project <path>', 'Path to NestJS project', './apps/api')\n .option('-o, --output <path>', 'Output directory for generated RPC client', './apps/web/lib/wexts')\n .action(async (options: { project: string; output: string }) => {\n const { generateRpcClient } = await import('../codegen/index.js');\n const manifest = await generateRpcClient({\n projectPath: path.resolve(options.project),\n outputPath: path.resolve(options.output),\n });\n logger.success(`Generated Wexts RPC client for ${manifest.services.length} service(s).`);\n });\n\n program\n .command('build')\n .description('Build a Wexts project for production')\n .option('--skip-generate', 'Skip RPC generation before build', false)\n .option('-p, --project <path>', 'Path to NestJS project', './apps/api')\n .option('-o, --output <path>', 'Output directory for generated RPC client', './apps/web/lib/wexts')\n .action(async (options: { skipGenerate: boolean; project: string; output: string }) => {\n if (!options.skipGenerate && fs.existsSync(options.project)) {\n const { generateRpcClient } = await import('../codegen/index.js');\n await generateRpcClient({\n projectPath: path.resolve(options.project),\n outputPath: path.resolve(options.output),\n });\n }\n runScript('build', { cwd: process.cwd() });\n });\n\n program\n .command('start')\n .description('Start the production Wexts runtime')\n .option('-c, --config <path>', 'Runtime config module path', './wexts.runtime.js')\n .option('-p, --port <port>', 'Port to listen on', process.env.PORT ?? '3000')\n .action(async (options: { config: string; port: string }) => {\n const { startWextsRuntime } = await import('../runtime/index.js');\n const configPath = path.resolve(options.config);\n const runtimeConfig = fs.existsSync(configPath)\n ? await loadRuntimeConfig(configPath)\n : {};\n await startWextsRuntime({\n ...runtimeConfig,\n port: Number(options.port),\n dev: false,\n });\n });\n\n program\n .command('vercel-build')\n .description('Build for Vercel using Build Output API v3')\n .option('-p, --project <path>', 'Path to NestJS project', './apps/api')\n .option('-o, --output <path>', 'Output dir for RPC client', './apps/web/lib/wexts')\n .option('-c, --config <path>', 'Runtime config module path', './wexts.runtime.js')\n .option('--skip-codegen', 'Skip RPC generation', false)\n .option('--skip-build', 'Skip project build step', false)\n .option('--node-version <version>', 'Node.js version for Vercel function', '20')\n .option('--max-duration <seconds>', 'Max duration for serverless function', '30')\n .action(async (options: {\n project: string;\n output: string;\n config: string;\n skipCodegen: boolean;\n skipBuild: boolean;\n nodeVersion: string;\n maxDuration: string;\n }) => {\n const { buildVercelOutput } = await import('../vercel-builder/index.js');\n const result = await buildVercelOutput({\n rootDir: process.cwd(),\n apiProjectPath: options.project,\n rpcOutputPath: options.output,\n runtimeConfigPath: options.config,\n skipCodegen: options.skipCodegen,\n skipBuild: options.skipBuild,\n nodeVersion: options.nodeVersion,\n maxDuration: Number(options.maxDuration),\n });\n if (result.warnings.length > 0) {\n for (const warning of result.warnings) logger.warn(warning);\n }\n if (result.errors.length > 0) {\n for (const error of result.errors) logger.error(error);\n process.exit(1);\n }\n logger.success('Vercel build output ready at .vercel/output');\n });\n\n program\n .command('doctor')\n .description('Validate Wexts project configuration')\n .option('--security', 'Run security-specific checks', false)\n .action(async (options: { security: boolean }) => {\n const result = runDoctor(process.cwd(), options.security);\n for (const warning of result.warnings) logger.warn(warning);\n for (const error of result.errors) logger.error(error);\n if (result.errors.length > 0) process.exit(1);\n logger.success(options.security ? 'Security doctor passed.' : 'Doctor passed.');\n });\n\n return program;\n}\n\nexport interface DoctorResult {\n errors: string[];\n warnings: string[];\n}\n\nexport function runDoctor(cwd: string, security = false): DoctorResult {\n const result: DoctorResult = { errors: [], warnings: [] };\n const pkgPath = path.join(cwd, 'package.json');\n\n if (!fs.existsSync(pkgPath)) {\n result.errors.push('package.json not found.');\n return result;\n }\n\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));\n if (!pkg.packageManager?.startsWith('pnpm@')) {\n result.warnings.push('packageManager should pin pnpm.');\n }\n\n for (const dir of ['apps/api', 'apps/web']) {\n if (!fs.existsSync(path.join(cwd, dir))) {\n result.warnings.push(`${dir} not found; some Wexts commands may need explicit paths.`);\n }\n }\n\n if (fs.existsSync(path.join(cwd, 'apps/api')) && fs.existsSync(path.join(cwd, 'apps/web'))) {\n result.warnings.push('Development mode starts separate web/API processes. Single-port serving is the production `wexts start` runtime path.');\n }\n\n if (security) {\n const source = readAllText(cwd, ['apps/api/src', 'packages/templates/nestjs-api/src']);\n if (source.includes('default-secret')) {\n result.errors.push('JWT fallback \"default-secret\" found. Production apps must fail without a strong JWT_SECRET.');\n }\n if (/origin:\\s*['\"]\\*['\"]/.test(source)) {\n result.errors.push('Wildcard CORS origin found. Use an explicit origin allowlist.');\n }\n }\n\n return result;\n}\n\nexport async function createProject(\n projectName: string,\n template: string,\n options: { skipInstall: boolean; wextsDependency?: string }\n): Promise<void> {\n const projectPath = path.join(process.cwd(), projectName);\n if (fs.existsSync(projectPath)) {\n throw new Error(`Directory already exists: ${projectName}`);\n }\n\n fs.mkdirSync(projectPath, { recursive: true });\n\n if (template === 'starter') {\n await createVerifiedStarter(projectPath, projectName, options.wextsDependency ?? resolveCreateWextsDependency(projectPath));\n } else if (template === 'legacy') {\n createLegacyProject(projectPath, projectName);\n } else {\n throw new Error(`Unknown template \"${template}\". Supported templates: starter, legacy.`);\n }\n\n if (!options.skipInstall) {\n runCommand(detectPackageManager(projectPath), ['install'], projectPath);\n }\n}\n\nasync function createVerifiedStarter(projectPath: string, projectName: string, wextsDependency: string): Promise<void> {\n const files: Record<string, string> = {\n 'pnpm-workspace.yaml': \"packages:\\n - 'apps/*'\\n\",\n 'package.json': JSON.stringify({\n name: projectName,\n version: '0.1.0',\n private: true,\n packageManager: 'pnpm@10.22.0',\n scripts: {\n dev: 'wexts dev',\n generate: 'wexts generate -p apps/api -o apps/web/lib/wexts',\n build: 'pnpm run generate && tsc -p apps/api/tsconfig.json && next build apps/web',\n start: 'wexts start -c ./wexts.runtime.js',\n 'vercel-build': 'wexts vercel-build -p apps/api -o apps/web/lib/wexts -c ./wexts.runtime.js',\n doctor: 'wexts doctor',\n 'doctor:security': 'wexts doctor --security',\n },\n dependencies: {\n '@nestjs/common': '^11.1.19',\n '@nestjs/core': '^11.1.19',\n '@nestjs/platform-fastify': '^11.1.19',\n next: '16.2.4',\n react: '^19.2.5',\n 'react-dom': '^19.2.5',\n 'reflect-metadata': '^0.2.2',\n rxjs: '^7.8.1',\n wexts: wextsDependency,\n },\n devDependencies: {\n '@types/node': '^22.19.1',\n '@types/react': '^19.2.14',\n '@types/react-dom': '^19.2.3',\n typescript: '^5.9.3',\n },\n }, null, 2),\n 'apps/api/package.json': JSON.stringify({\n name: `${projectName}-api`,\n private: true,\n scripts: {\n 'start:dev': 'tsc -w -p tsconfig.json',\n },\n }, null, 2),\n 'apps/api/tsconfig.json': JSON.stringify({\n compilerOptions: {\n target: 'ES2023',\n module: 'NodeNext',\n moduleResolution: 'NodeNext',\n experimentalDecorators: true,\n emitDecoratorMetadata: true,\n strict: true,\n esModuleInterop: true,\n skipLibCheck: true,\n outDir: 'dist',\n rootDir: 'src',\n },\n include: ['src/**/*.ts'],\n }, null, 2),\n 'apps/api/src/hello.service.ts': `import { Injectable } from '@nestjs/common';\nimport { RpcMethod, RpcService } from 'wexts/nest';\n\n@Injectable()\n@RpcService({ name: 'hello', requireAuth: false })\nexport class HelloService {\n @RpcMethod()\n async sayHello(name: string): Promise<string> {\n return \\`Hello, \\${name}!\\`;\n }\n}\n`,\n 'apps/web/package.json': JSON.stringify({\n name: `${projectName}-web`,\n private: true,\n scripts: {\n dev: 'next dev -p 3000',\n },\n }, null, 2),\n 'apps/web/tsconfig.json': JSON.stringify({\n compilerOptions: {\n target: 'ES2022',\n lib: ['dom', 'dom.iterable', 'es2022'],\n allowJs: false,\n skipLibCheck: true,\n strict: true,\n noEmit: true,\n esModuleInterop: true,\n module: 'esnext',\n moduleResolution: 'bundler',\n resolveJsonModule: true,\n isolatedModules: true,\n jsx: 'react-jsx',\n incremental: true,\n plugins: [{ name: 'next' }],\n },\n include: ['next-env.d.ts', '**/*.ts', '**/*.tsx', '.next/types/**/*.ts', '.next/dev/types/**/*.ts'],\n exclude: ['node_modules'],\n }, null, 2),\n 'apps/web/next-env.d.ts': `/// <reference types=\"next\" />\n/// <reference types=\"next/image-types/global\" />\n\n// This file is generated by Next.js. Do not edit.\n`,\n 'apps/web/next.config.ts': `import type { NextConfig } from 'next';\n\nconst nextConfig: NextConfig = {\n output: 'standalone',\n};\n\nexport default nextConfig;\n`,\n 'apps/web/app/layout.tsx': `import type { ReactNode } from 'react';\nimport { WextsProvider } from '../lib/wexts-provider';\n\nexport default function RootLayout({ children }: { children: ReactNode }) {\n return (\n <html lang=\"en\">\n <body>\n <WextsProvider>{children}</WextsProvider>\n </body>\n </html>\n );\n}\n`,\n 'apps/web/app/page.tsx': `'use client';\n\nimport { useState } from 'react';\nimport { useWexts } from '../lib/wexts-provider';\n\nexport default function Page() {\n const wexts = useWexts();\n const [message, setMessage] = useState('Not called yet');\n\n return (\n <main>\n <h1>Wexts Hello RPC</h1>\n <button\n type=\"button\"\n onClick={async () => {\n setMessage(await wexts.hello.sayHello('Bob'));\n }}\n >\n Call RPC\n </button>\n <p>{message}</p>\n </main>\n );\n}\n`,\n 'apps/web/lib/wexts-provider.tsx': `'use client';\n\nimport { FusionProvider, useWexts as useGeneratedWexts } from 'wexts/next';\nimport { createWextsClient, type WextsClient } from './wexts/client';\n\nexport function WextsProvider({ children }: { children: React.ReactNode }) {\n return (\n <FusionProvider rpcClient={createWextsClient({ baseUrl: '/rpc' })}>\n {children}\n </FusionProvider>\n );\n}\n\nexport function useWexts(): WextsClient {\n return useGeneratedWexts<WextsClient>();\n}\n`,\n 'wexts.runtime.js': `const { HelloService } = require('./apps/api/dist/hello.service.js');\n\nmodule.exports = {\n nextDir: './apps/web',\n rpcManifestPath: './apps/web/lib/wexts/wexts.rpc.manifest.json',\n rpcServices: {\n hello: new HelloService(),\n },\n security: {\n allowedOrigins: ['http://localhost:3000'],\n },\n};\n`,\n 'README.md': `# ${projectName}\n\nVerified Wexts starter with a generated Hello RPC client.\n\n\\`\\`\\`bash\npnpm install\npnpm run generate\npnpm run build\npnpm run doctor\npnpm run doctor:security\npnpm run start\n\\`\\`\\`\n`,\n };\n\n for (const [relativePath, content] of Object.entries(files)) {\n const absolutePath = path.join(projectPath, relativePath);\n fs.mkdirSync(path.dirname(absolutePath), { recursive: true });\n fs.writeFileSync(absolutePath, content);\n }\n\n const { generateRpcClient } = await import('../codegen/index.js');\n await generateRpcClient({\n projectPath: path.join(projectPath, 'apps/api'),\n outputPath: path.join(projectPath, 'apps/web/lib/wexts'),\n });\n}\n\nfunction createLegacyProject(projectPath: string, projectName: string): void {\n const templatePath = findTemplatePath();\n if (!templatePath) {\n throw new Error('Template directory not found in package.');\n }\n\n fs.mkdirSync(path.join(projectPath, 'apps'), { recursive: true });\n fs.cpSync(path.join(templatePath, 'nestjs-api'), path.join(projectPath, 'apps/api'), { recursive: true });\n fs.cpSync(path.join(templatePath, 'nextjs-web'), path.join(projectPath, 'apps/web'), { recursive: true });\n fs.rmSync(path.join(projectPath, 'apps/web/package-lock.json'), { force: true });\n fs.rmSync(path.join(projectPath, 'apps/api/package-lock.json'), { force: true });\n fs.writeFileSync(path.join(projectPath, 'pnpm-workspace.yaml'), \"packages:\\n - 'apps/*'\\n\");\n fs.writeFileSync(path.join(projectPath, 'package.json'), JSON.stringify({\n name: projectName,\n private: true,\n packageManager: 'pnpm@10.22.0',\n scripts: {\n dev: 'wexts dev',\n generate: 'wexts generate',\n build: 'wexts build',\n start: 'wexts start',\n doctor: 'wexts doctor',\n },\n devDependencies: {\n wexts: `^${readPackageVersion()}`,\n },\n }, null, 2));\n}\n\nfunction resolveCreateWextsDependency(projectPath: string): string {\n const packageRoot = path.resolve(__dirname, '../..');\n const cwdLocalPackage = path.join(process.cwd(), 'node_modules/wexts');\n\n try {\n if (fs.existsSync(cwdLocalPackage) && fs.realpathSync(cwdLocalPackage) === fs.realpathSync(packageRoot)) {\n return `file:${path.relative(projectPath, cwdLocalPackage)}`;\n }\n } catch {\n // Fall back to semver for normal npx/npm usage.\n }\n\n return `^${readPackageVersion()}`;\n}\n\ntype ScaffoldGeneratorType = 'rpc' | 'service' | 'module' | 'entity' | 'guard' | 'config';\n\ninterface ScaffoldGeneratorOptions {\n type: ScaffoldGeneratorType;\n name?: string;\n targetRoot: string;\n force?: boolean;\n}\n\nexport async function scaffoldGenerator(options: ScaffoldGeneratorOptions): Promise<string[]> {\n if (options.type !== 'config' && !options.name) {\n throw new WextsError({\n code: 'WEXTS_CLI_GENERATOR_NAME_REQUIRED',\n message: `Generator \"${options.type}\" requires a name.`,\n suggestedFix: `Run \\`wexts generate ${options.type} hello\\` or use \\`wexts generate config\\`.`,\n docsSlug: 'cli',\n });\n }\n\n if (options.type === 'config') {\n return writeGeneratedFiles(options.targetRoot, [{\n relativePath: 'wexts.runtime.js',\n content: `/** @type {import('wexts/runtime').WextsRuntimeConfig} */\nmodule.exports = {\n rootDir: __dirname,\n port: Number(process.env.PORT || 3000),\n rpcManifestPath: 'apps/web/lib/wexts/wexts.rpc.manifest.json',\n security: {\n enabled: true,\n production: process.env.NODE_ENV === 'production',\n allowedOrigins: process.env.WEXTS_ALLOWED_ORIGINS?.split(',').filter(Boolean) || [],\n },\n};\n`,\n }], Boolean(options.force));\n }\n\n const rawName = options.name!;\n const name = toKebabCase(rawName);\n const classBase = toPascalCase(name);\n const srcRoot = path.join(options.targetRoot, 'src');\n\n const filesByType: Record<Exclude<ScaffoldGeneratorType, 'config'>, { relativePath: string; content: string }[]> = {\n rpc: rpcServiceFiles(name, classBase),\n service: [{\n relativePath: path.join('src', name, `${name}.service.ts`),\n content: `import { Injectable } from '@nestjs/common';\n\n@Injectable()\nexport class ${classBase}Service {\n async execute(): Promise<string> {\n return '${toCamelCase(name)}';\n }\n}\n`,\n }],\n module: [{\n relativePath: path.join('src', name, `${name}.module.ts`),\n content: `import { Module } from '@nestjs/common';\n\n@Module({})\nexport class ${classBase}Module {}\n`,\n }],\n entity: [{\n relativePath: path.join('src', name, `${name}.entity.ts`),\n content: `export interface ${classBase}Entity {\n id: string;\n createdAt: Date;\n updatedAt: Date;\n}\n`,\n }],\n guard: [{\n relativePath: path.join('src', name, `${name}.guard.ts`),\n content: `import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';\n\n@Injectable()\nexport class ${classBase}Guard implements CanActivate {\n canActivate(_context: ExecutionContext): boolean {\n return true;\n }\n}\n`,\n }],\n };\n\n fs.mkdirSync(srcRoot, { recursive: true });\n return writeGeneratedFiles(options.targetRoot, filesByType[options.type], Boolean(options.force));\n}\n\nfunction isScaffoldGenerator(type: string): type is ScaffoldGeneratorType {\n return ['rpc', 'service', 'module', 'entity', 'guard', 'config'].includes(type);\n}\n\nfunction rpcServiceFiles(serviceName: string, classBase: string): { relativePath: string; content: string }[] {\n return [{\n relativePath: path.join('src', serviceName, `${serviceName}.service.ts`),\n content: `import { Injectable } from '@nestjs/common';\nimport { RpcMethod, RpcService } from 'wexts/nest';\n\n@Injectable()\n@RpcService({ name: '${toCamelCase(serviceName)}', requireAuth: false })\nexport class ${classBase}Service {\n @RpcMethod()\n async sayHello(name: string): Promise<string> {\n return \\`Hello, \\${name}!\\`;\n }\n}\n`,\n }];\n}\n\nfunction writeGeneratedFiles(root: string, files: { relativePath: string; content: string }[], force: boolean): string[] {\n const changedFiles: string[] = [];\n\n for (const file of files) {\n const absolutePath = path.join(root, file.relativePath);\n if (fs.existsSync(absolutePath) && !force) {\n throw new WextsError({\n code: 'WEXTS_CLI_GENERATOR_FILE_EXISTS',\n message: `Refusing to overwrite existing file: ${absolutePath}`,\n suggestedFix: 'Review the file, then rerun with --force if overwriting is intentional.',\n docsSlug: 'cli',\n });\n }\n fs.mkdirSync(path.dirname(absolutePath), { recursive: true });\n fs.writeFileSync(absolutePath, file.content);\n changedFiles.push(absolutePath);\n }\n\n return changedFiles;\n}\n\nfunction runScript(script: string, options: CommonOptions): void {\n const cwd = options.cwd ?? process.cwd();\n const packageManager = detectPackageManager(cwd);\n const args = packageManager === 'npm' ? ['run', script] : ['run', script];\n runCommand(packageManager, args, cwd);\n}\n\nfunction runCommand(command: string, args: string[], cwd: string): void {\n const result = spawnSync(command, args, { cwd, stdio: 'inherit', shell: process.platform === 'win32' });\n if (result.status !== 0) {\n throw new Error(`${command} ${args.join(' ')} failed with exit code ${result.status}`);\n }\n}\n\nfunction detectPackageManager(cwd: string): 'pnpm' | 'npm' {\n const packageJsonPath = path.join(cwd, 'package.json');\n if (fs.existsSync(packageJsonPath)) {\n const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')) as { packageManager?: string };\n if (pkg.packageManager?.startsWith('pnpm@')) return 'pnpm';\n }\n if (fs.existsSync(path.join(cwd, 'pnpm-lock.yaml'))) return 'pnpm';\n if (fs.existsSync(path.join(cwd, 'pnpm-workspace.yaml'))) return 'pnpm';\n return 'npm';\n}\n\nfunction findTemplatePath(): string | undefined {\n const candidates = [\n path.resolve(__dirname, '../../templates'),\n path.resolve(__dirname, '../templates'),\n path.resolve(process.cwd(), 'packages/templates'),\n ];\n\n return candidates.find((candidate) => fs.existsSync(candidate));\n}\n\nfunction readPackageVersion(): string {\n const packageJsonPath = path.resolve(__dirname, '../../package.json');\n if (!fs.existsSync(packageJsonPath)) return '0.0.0';\n return JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')).version as string;\n}\n\nfunction readAllText(cwd: string, dirs: string[]): string {\n let text = '';\n for (const dir of dirs) {\n const absolute = path.join(cwd, dir);\n if (!fs.existsSync(absolute)) continue;\n for (const file of walk(absolute)) {\n if (file.endsWith('.ts') || file.endsWith('.tsx') || file.endsWith('.js')) {\n text += fs.readFileSync(file, 'utf8');\n }\n }\n }\n return text;\n}\n\nfunction walk(dir: string): string[] {\n return fs.readdirSync(dir, { withFileTypes: true }).flatMap((entry) => {\n const absolute = path.join(dir, entry.name);\n if (entry.isDirectory()) return walk(absolute);\n return [absolute];\n });\n}\n\nfunction toKebabCase(value: string): string {\n return value.replace(/([a-z0-9])([A-Z])/g, '$1-$2').replace(/[_\\s]+/g, '-').toLowerCase();\n}\n\nfunction toPascalCase(value: string): string {\n return toKebabCase(value).split('-').map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join('');\n}\n\nfunction toCamelCase(value: string): string {\n const pascal = toPascalCase(value);\n return pascal.charAt(0).toLowerCase() + pascal.slice(1);\n}\n\nfunction pathToFileUrl(filePath: string): string {\n return `file://${filePath}`;\n}\n\nasync function loadRuntimeConfig(configPath: string): Promise<Record<string, unknown>> {\n if (configPath.endsWith('.mjs')) {\n const mod = await import(pathToFileUrl(configPath));\n return (mod.default ?? mod) as Record<string, unknown>;\n }\n\n const require = createRequire(__filename);\n const mod = require(configPath);\n return (mod.default ?? mod) as Record<string, unknown>;\n}\n\nconst invokedAsCli = process.argv[1]\n && (path.basename(process.argv[1]) === 'wexts' || path.basename(process.argv[1]) === 'wexts.cjs' || path.resolve(process.argv[1]).includes(`${path.sep}dist${path.sep}cli${path.sep}index`));\n\nif (invokedAsCli && !process.env.VITEST) {\n createCliProgram().parseAsync(process.argv).catch((error) => {\n logger.error(formatWextsError(error));\n process.exit(1);\n });\n}\n"],"mappings":"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","names":["Command","fs","path","spawnSync","createRequire","createCliProgram","program","Command","name","description","version","readPackageVersion","command","option","action","projectName","options","createProject","template","skipInstall","FusionDevServer","server","start","apiPath","api","webPath","web","webPort","Number","port","apiPort","useProxy","proxy","alias","type","generateRpcClient","manifest","projectPath","resolve","project","outputPath","output","logger","success","services","length","isScaffoldGenerator","targetRoot","process","cwd","changedFiles","scaffoldGenerator","force","file","info","relative","Error","skipGenerate","existsSync","runScript","env","PORT","startWextsRuntime","configPath","config","runtimeConfig","loadRuntimeConfig","dev","buildVercelOutput","result","rootDir","apiProjectPath","rpcOutputPath","runtimeConfigPath","skipCodegen","skipBuild","nodeVersion","maxDuration","warnings","warning","warn","errors","error","exit","runDoctor","security","pkgPath","join","push","pkg","JSON","parse","readFileSync","packageManager","startsWith","dir","source","readAllText","includes","test","fs","mkdirSync","recursive","createVerifiedStarter","wextsDependency","resolveCreateWextsDependency","createLegacyProject","runCommand","detectPackageManager","files","stringify","private","scripts","generate","build","doctor","dependencies","next","react","rxjs","wexts","devDependencies","typescript","compilerOptions","target","module","moduleResolution","experimentalDecorators","emitDecoratorMetadata","strict","esModuleInterop","skipLibCheck","outDir","include","lib","allowJs","noEmit","resolveJsonModule","isolatedModules","jsx","incremental","plugins","exclude","relativePath","content","Object","entries","absolutePath","dirname","writeFileSync","templatePath","findTemplatePath","cpSync","rmSync","packageRoot","__dirname","cwdLocalPackage","realpathSync","WextsError","code","message","suggestedFix","docsSlug","writeGeneratedFiles","Boolean","rawName","toKebabCase","classBase","toPascalCase","srcRoot","filesByType","rpc","rpcServiceFiles","service","toCamelCase","entity","guard","serviceName","root","script","args","spawnSync","stdio","shell","platform","status","packageJsonPath","candidates","find","candidate","dirs","text","absolute","walk","endsWith","readdirSync","withFileTypes","flatMap","entry","isDirectory","value","replace","toLowerCase","split","map","part","charAt","toUpperCase","slice","pascal","pathToFileUrl","filePath","mod","default","require","createRequire","__filename","invokedAsCli","argv","basename","sep","VITEST","parseAsync","catch","formatWextsError"]}
|
package/dist/client/index.js
CHANGED
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
var
|
|
5
|
+
var _chunkO4II6N34js = require('../chunk-O4II6N34.js');
|
|
6
|
+
require('../chunk-AVMQJWYD.js');
|
|
6
7
|
require('../chunk-XE4OXN2W.js');
|
|
7
8
|
|
|
8
9
|
|
|
9
10
|
|
|
10
11
|
|
|
11
|
-
exports.FusionFetcher =
|
|
12
|
+
exports.FusionFetcher = _chunkO4II6N34js.FusionFetcher; exports.apiFetcher = _chunkO4II6N34js.apiFetcher; exports.createWextsRpcClient = _chunkO4II6N34js.createWextsRpcClient;
|
|
12
13
|
//# sourceMappingURL=index.js.map
|
package/dist/client/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Volumes/Projects/wexts/packages/dist/client/index.js"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACF,uDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACF,+KAAC","file":"/Volumes/Projects/wexts/packages/dist/client/index.js"}
|
|
1
|
+
{"version":3,"sources":["/Volumes/Projects/wexts/packages/dist/client/index.js"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACF,uDAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACF,+KAAC","file":"/Volumes/Projects/wexts/packages/dist/client/index.js"}
|
package/dist/client/index.mjs
CHANGED
package/dist/codegen/index.js
CHANGED
|
@@ -3,13 +3,14 @@
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunk7HNQWJWVjs = require('../chunk-7HNQWJWV.js');
|
|
7
7
|
require('../chunk-WCKSKU3C.js');
|
|
8
|
+
require('../chunk-AVMQJWYD.js');
|
|
8
9
|
require('../chunk-XE4OXN2W.js');
|
|
9
10
|
|
|
10
11
|
|
|
11
12
|
|
|
12
13
|
|
|
13
14
|
|
|
14
|
-
exports.ClientGenerator =
|
|
15
|
+
exports.ClientGenerator = _chunk7HNQWJWVjs.ClientGenerator; exports.CodegenWatcher = _chunk7HNQWJWVjs.CodegenWatcher; exports.NestJSParser = _chunk7HNQWJWVjs.NestJSParser; exports.generateRpcClient = _chunk7HNQWJWVjs.generateRpcClient;
|
|
15
16
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Volumes/Projects/wexts/packages/dist/codegen/index.js"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACF,uDAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACF,2OAAC","file":"/Volumes/Projects/wexts/packages/dist/codegen/index.js"}
|
|
1
|
+
{"version":3,"sources":["/Volumes/Projects/wexts/packages/dist/codegen/index.js"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACF,uDAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACF,2OAAC","file":"/Volumes/Projects/wexts/packages/dist/codegen/index.js"}
|
package/dist/codegen/index.mjs
CHANGED
|
@@ -3,8 +3,9 @@ import {
|
|
|
3
3
|
CodegenWatcher,
|
|
4
4
|
NestJSParser,
|
|
5
5
|
generateRpcClient
|
|
6
|
-
} from "../chunk-
|
|
6
|
+
} from "../chunk-342VRT25.mjs";
|
|
7
7
|
import "../chunk-JHOVXH3X.mjs";
|
|
8
|
+
import "../chunk-7TLSPR65.mjs";
|
|
8
9
|
import "../chunk-7WULUGLH.mjs";
|
|
9
10
|
export {
|
|
10
11
|
ClientGenerator,
|
package/dist/index.d.mts
CHANGED
|
@@ -255,4 +255,40 @@ declare namespace index {
|
|
|
255
255
|
export { type index_AuthUser as AuthUser, index_FusionProvider as FusionProvider, type index_FusionProviderProps as FusionProviderProps, type index_UseAuthReturn as UseAuthReturn, index_useAuth as useAuth, index_useFusion as useFusion, index_useWexts as useWexts };
|
|
256
256
|
}
|
|
257
257
|
|
|
258
|
-
|
|
258
|
+
interface WextsErrorOptions {
|
|
259
|
+
code: string;
|
|
260
|
+
message: string;
|
|
261
|
+
cause?: unknown;
|
|
262
|
+
suggestedFix?: string;
|
|
263
|
+
docsSlug?: string;
|
|
264
|
+
}
|
|
265
|
+
declare class WextsError extends Error {
|
|
266
|
+
readonly code: string;
|
|
267
|
+
readonly suggestedFix?: string;
|
|
268
|
+
readonly docsSlug?: string;
|
|
269
|
+
constructor(options: WextsErrorOptions);
|
|
270
|
+
get docsUrl(): string | undefined;
|
|
271
|
+
}
|
|
272
|
+
declare class WextsRpcError extends WextsError {
|
|
273
|
+
constructor(options: Omit<WextsErrorOptions, 'code'> & {
|
|
274
|
+
code?: string;
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
declare class WextsCodegenError extends WextsError {
|
|
278
|
+
constructor(options: Omit<WextsErrorOptions, 'code'> & {
|
|
279
|
+
code?: string;
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
declare class WextsRuntimeError extends WextsError {
|
|
283
|
+
constructor(options: Omit<WextsErrorOptions, 'code'> & {
|
|
284
|
+
code?: string;
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
declare class WextsSecurityError extends WextsError {
|
|
288
|
+
constructor(options: Omit<WextsErrorOptions, 'code'> & {
|
|
289
|
+
code?: string;
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
declare function formatWextsError(error: unknown): string;
|
|
293
|
+
|
|
294
|
+
export { index$3 as Config, index$4 as Core, index$1 as CreateFusion, index$2 as Insight, index as Next, WextsCodegenError, WextsError, type WextsErrorOptions, WextsRpcError, WextsRuntimeError, WextsSecurityError, formatWextsError };
|
package/dist/index.d.ts
CHANGED
|
@@ -255,4 +255,40 @@ declare namespace index {
|
|
|
255
255
|
export { type index_AuthUser as AuthUser, index_FusionProvider as FusionProvider, type index_FusionProviderProps as FusionProviderProps, type index_UseAuthReturn as UseAuthReturn, index_useAuth as useAuth, index_useFusion as useFusion, index_useWexts as useWexts };
|
|
256
256
|
}
|
|
257
257
|
|
|
258
|
-
|
|
258
|
+
interface WextsErrorOptions {
|
|
259
|
+
code: string;
|
|
260
|
+
message: string;
|
|
261
|
+
cause?: unknown;
|
|
262
|
+
suggestedFix?: string;
|
|
263
|
+
docsSlug?: string;
|
|
264
|
+
}
|
|
265
|
+
declare class WextsError extends Error {
|
|
266
|
+
readonly code: string;
|
|
267
|
+
readonly suggestedFix?: string;
|
|
268
|
+
readonly docsSlug?: string;
|
|
269
|
+
constructor(options: WextsErrorOptions);
|
|
270
|
+
get docsUrl(): string | undefined;
|
|
271
|
+
}
|
|
272
|
+
declare class WextsRpcError extends WextsError {
|
|
273
|
+
constructor(options: Omit<WextsErrorOptions, 'code'> & {
|
|
274
|
+
code?: string;
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
declare class WextsCodegenError extends WextsError {
|
|
278
|
+
constructor(options: Omit<WextsErrorOptions, 'code'> & {
|
|
279
|
+
code?: string;
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
declare class WextsRuntimeError extends WextsError {
|
|
283
|
+
constructor(options: Omit<WextsErrorOptions, 'code'> & {
|
|
284
|
+
code?: string;
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
declare class WextsSecurityError extends WextsError {
|
|
288
|
+
constructor(options: Omit<WextsErrorOptions, 'code'> & {
|
|
289
|
+
code?: string;
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
declare function formatWextsError(error: unknown): string;
|
|
293
|
+
|
|
294
|
+
export { index$3 as Config, index$4 as Core, index$1 as CreateFusion, index$2 as Insight, index as Next, WextsCodegenError, WextsError, type WextsErrorOptions, WextsRpcError, WextsRuntimeError, WextsSecurityError, formatWextsError };
|
package/dist/index.js
CHANGED
|
@@ -4,7 +4,7 @@ var _chunk2LJVUMXWjs = require('./chunk-2LJVUMXW.js');
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
var
|
|
7
|
+
var _chunkO4II6N34js = require('./chunk-O4II6N34.js');
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
var _chunkBG56B4DEjs = require('./chunk-BG56B4DE.js');
|
|
@@ -17,7 +17,7 @@ require('./chunk-2KAQYLVN.js');
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
var
|
|
20
|
+
var _chunk7HNQWJWVjs = require('./chunk-7HNQWJWV.js');
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
|
|
@@ -27,6 +27,14 @@ var _chunkWCKSKU3Cjs = require('./chunk-WCKSKU3C.js');
|
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
var _chunkAVMQJWYDjs = require('./chunk-AVMQJWYD.js');
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
30
38
|
var _chunkXE4OXN2Wjs = require('./chunk-XE4OXN2W.js');
|
|
31
39
|
|
|
32
40
|
// src/core/index.ts
|
|
@@ -35,7 +43,7 @@ _chunkXE4OXN2Wjs.__export.call(void 0, core_exports, {
|
|
|
35
43
|
APIError: () => APIError,
|
|
36
44
|
ConfigError: () => ConfigError,
|
|
37
45
|
ConfigLoader: () => ConfigLoader,
|
|
38
|
-
FileSystem: () =>
|
|
46
|
+
FileSystem: () => _chunk7HNQWJWVjs.FileSystem,
|
|
39
47
|
FusionError: () => FusionError,
|
|
40
48
|
LogLevel: () => _chunkWCKSKU3Cjs.LogLevel,
|
|
41
49
|
Logger: () => _chunkWCKSKU3Cjs.Logger,
|
|
@@ -43,7 +51,7 @@ _chunkXE4OXN2Wjs.__export.call(void 0, core_exports, {
|
|
|
43
51
|
ValidationError: () => ValidationError,
|
|
44
52
|
config: () => config,
|
|
45
53
|
createLogger: () => _chunkWCKSKU3Cjs.createLogger,
|
|
46
|
-
filesystem: () =>
|
|
54
|
+
filesystem: () => _chunk7HNQWJWVjs.filesystem,
|
|
47
55
|
load: () => load,
|
|
48
56
|
logger: () => _chunkWCKSKU3Cjs.logger
|
|
49
57
|
});
|
|
@@ -275,7 +283,7 @@ Next steps:`);
|
|
|
275
283
|
build: "wexts build"
|
|
276
284
|
},
|
|
277
285
|
devDependencies: {
|
|
278
|
-
"wexts": "^
|
|
286
|
+
"wexts": "^4.0.0"
|
|
279
287
|
}
|
|
280
288
|
};
|
|
281
289
|
await _promises.writeFile.call(void 0, _path.join.call(void 0, projectPath, "package.json"), JSON.stringify(packageJson, null, 2));
|
|
@@ -320,10 +328,10 @@ _chunkXE4OXN2Wjs.__export.call(void 0, next_exports, {
|
|
|
320
328
|
var _react = require('react'); var _react2 = _interopRequireDefault(_react);
|
|
321
329
|
var FusionContext = /* @__PURE__ */ _react.createContext.call(void 0, null);
|
|
322
330
|
function FusionProvider({ children, baseUrl = "/api", rpcBaseUrl = "/rpc", rpcClient }) {
|
|
323
|
-
const client = _react2.default.useMemo(() => new (0,
|
|
331
|
+
const client = _react2.default.useMemo(() => new (0, _chunkO4II6N34js.FusionFetcher)(baseUrl), [
|
|
324
332
|
baseUrl
|
|
325
333
|
]);
|
|
326
|
-
const wexts = _react2.default.useMemo(() => _nullishCoalesce(rpcClient, () => (
|
|
334
|
+
const wexts = _react2.default.useMemo(() => _nullishCoalesce(rpcClient, () => ( _chunkO4II6N34js.createWextsRpcClient.call(void 0, void 0, {
|
|
327
335
|
baseUrl: rpcBaseUrl
|
|
328
336
|
}))), [
|
|
329
337
|
rpcBaseUrl,
|
|
@@ -406,5 +414,11 @@ _chunkXE4OXN2Wjs.__name.call(void 0, useAuth, "useAuth");
|
|
|
406
414
|
|
|
407
415
|
|
|
408
416
|
|
|
409
|
-
|
|
417
|
+
|
|
418
|
+
|
|
419
|
+
|
|
420
|
+
|
|
421
|
+
|
|
422
|
+
|
|
423
|
+
exports.Codegen = _chunk7HNQWJWVjs.codegen_exports; exports.Config = config_exports; exports.Core = core_exports; exports.CreateFusion = create_fusion_exports; exports.DevServer = _chunk2LJVUMXWjs.dev_server_exports; exports.Insight = insight_exports; exports.Nest = _chunkBG56B4DEjs.nest_exports; exports.Next = next_exports; exports.Rpc = _chunkDNLGCKTTjs.rpc_exports; exports.WextsCodegenError = _chunkAVMQJWYDjs.WextsCodegenError; exports.WextsError = _chunkAVMQJWYDjs.WextsError; exports.WextsRpcError = _chunkAVMQJWYDjs.WextsRpcError; exports.WextsRuntimeError = _chunkAVMQJWYDjs.WextsRuntimeError; exports.WextsSecurityError = _chunkAVMQJWYDjs.WextsSecurityError; exports.formatWextsError = _chunkAVMQJWYDjs.formatWextsError;
|
|
410
424
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Volumes/Projects/wexts/packages/dist/index.js","../src/core/index.ts","../src/core/config.ts","../src/core/process-manager.ts","../src/core/errors.ts","../src/config/index.ts","../src/config/loader.ts","../src/insight/index.ts","../src/insight/server.ts","../src/create-fusion/index.ts","../src/create-fusion/scaffold.ts","../src/next/index.ts","../src/next/provider.tsx","../src/next/useAuth.ts"],"names":["ConfigLoader","config","Map","configDir","process","cwd","load","key","defaultValue","has","get","envKey","toUpperCase","env","value","readFileSync","ProcessManager","error","promise","cleanup","Error","code","FusionError","statusCode","log","ProjectScaffolder","options","projectName","projectPath","useContext","createContext","FusionFetcher","baseUrl","rpcClient","rpcBaseUrl","FusionContext","client","wexts","children","FusionProvider","useFusion","context","useWexts","useAuth","loadUser","userData","email","password","response","user","loading","login","logout"],"mappings":"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","file":"/Volumes/Projects/wexts/packages/dist/index.js","sourcesContent":[null,"// Core exports placeholder\nexport * from './config';\nexport * from './logger';\nexport * from './filesystem';\nexport * from './process-manager';\nexport * from './errors';\n","import * as fs from 'fs';\nimport * as path from 'path';\n\nexport interface FusionConfig {\n [key: string]: any;\n}\n\nexport class ConfigLoader {\n private config: Map<string, any> = new Map();\n private configDir: string;\n\n constructor(configDir: string = process.cwd()) {\n this.configDir = configDir;\n }\n\n /**\n * Load configuration from file or environment\n */\n load(key: string, defaultValue?: any): any {\n if (this.config.has(key)) {\n return this.config.get(key);\n }\n\n // Try to load from environment variable\n const envKey = `FUSION_${key.toUpperCase()}`;\n if (process.env[envKey]) {\n const value = this.parseEnvValue(process.env[envKey]!);\n this.config.set(key, value);\n return value;\n }\n\n // Try to load from config file\n const configPath = path.join(this.configDir, 'fusion.config.json');\n if (fs.existsSync(configPath)) {\n try {\n const fileConfig = JSON.parse(fs.readFileSync(configPath, 'utf-8'));\n if (fileConfig[key] !== undefined) {\n this.config.set(key, fileConfig[key]);\n return fileConfig[key];\n }\n } catch (error) {\n // Silently fail and use default\n }\n }\n\n return defaultValue;\n }\n\n /**\n * Set configuration value\n */\n set(key: string, value: any): void {\n this.config.set(key, value);\n }\n\n /**\n * Get all configuration\n */\n getAll(): FusionConfig {\n return Object.fromEntries(this.config);\n }\n\n /**\n * Parse environment value (handles JSON strings)\n */\n private parseEnvValue(value: string): any {\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n }\n}\n\n// Export singleton instance\nexport const config = new ConfigLoader();\n\n// Helper function for backward compatibility\nexport function load(key: string, defaultValue?: any): any {\n return config.load(key, defaultValue);\n}\n","export class ProcessManager {\n /**\n * Setup process error handlers\n */\n static initialize(): void {\n process.on('uncaughtException', (error) => {\n console.error('[Fusion] Uncaught Exception:', error);\n process.exit(1);\n });\n\n process.on('unhandledRejection', (reason, promise) => {\n console.error('[Fusion] Unhandled Rejection at:', promise, 'reason:', reason);\n });\n\n process.on('SIGTERM', () => {\n console.log('[Fusion] SIGTERM received, shutting down gracefully');\n process.exit(0);\n });\n\n process.on('SIGINT', () => {\n console.log('[Fusion] SIGINT received, shutting down gracefully');\n process.exit(0);\n });\n }\n\n /**\n * Graceful shutdown helper\n */\n static async shutdown(cleanup: () => Promise<void>): Promise<void> {\n try {\n await cleanup();\n process.exit(0);\n } catch (error) {\n console.error('[Fusion] Error during shutdown:', error);\n process.exit(1);\n }\n }\n}\n","export class FusionError extends Error {\n constructor(message: string, public code?: string) {\n super(message);\n this.name = 'FusionError';\n }\n}\n\nexport class ConfigError extends FusionError {\n constructor(message: string) {\n super(message, 'CONFIG_ERROR');\n this.name = 'ConfigError';\n }\n}\n\nexport class ValidationError extends FusionError {\n constructor(message: string) {\n super(message, 'VALIDATION_ERROR');\n this.name = 'ValidationError';\n }\n}\n\nexport class APIError extends FusionError {\n constructor(message: string, public statusCode?: number) {\n super(message, 'API_ERROR');\n this.name = 'APIError';\n }\n}\n","// Config exports placeholder\nexport * from './loader';\n","export const loader = {\n load: () => ({}),\n};\n","// Insight exports placeholder\nexport * from './server';\n","export const server = {\n start: () => console.log('Insight server started'),\n};\n","export * from './scaffold';\n","import { mkdir, writeFile } from 'fs/promises';\nimport { join } from 'path';\nimport { logger } from '../core/logger';\n\nexport interface ScaffoldOptions {\n projectName: string;\n template: 'monorepo' | 'api' | 'web';\n packageManager?: 'npm' | 'pnpm' | 'yarn';\n}\n\n/**\n * @deprecated Use the `wexts create` CLI and `examples/hello-rpc` canonical scaffold instead.\n */\nexport class ProjectScaffolder {\n async scaffold(options: ScaffoldOptions): Promise<void> {\n const { projectName, template } = options;\n const projectPath = join(process.cwd(), projectName);\n\n logger.info(`Creating project at: ${projectPath}`);\n\n // Create base directory\n await mkdir(projectPath, { recursive: true });\n\n if (template === 'monorepo') {\n await this.createMonorepo(projectPath, projectName);\n } else if (template === 'api') {\n await this.createNestJSApp(projectPath, projectName);\n } else if (template === 'web') {\n await this.createNextJSApp(projectPath, projectName);\n }\n\n logger.success(`Project ${projectName} created successfully!`);\n logger.info(`\\nNext steps:`);\n logger.info(` cd ${projectName}`);\n logger.info(` wexts dev`);\n }\n\n private async createMonorepo(projectPath: string, projectName: string): Promise<void> {\n // Create directory structure\n await mkdir(join(projectPath, 'apps', 'api'), { recursive: true });\n await mkdir(join(projectPath, 'apps', 'web'), { recursive: true });\n await mkdir(join(projectPath, 'packages', 'types'), { recursive: true });\n await mkdir(join(projectPath, 'packages', 'api-client'), { recursive: true });\n\n // Create root package.json\n const packageJson = {\n name: projectName,\n version: '0.0.1',\n private: true,\n workspaces: ['apps/*', 'packages/*'],\n scripts: {\n dev: 'wexts dev',\n build: 'wexts build',\n },\n devDependencies: {\n 'wexts': '^3.0.3',\n },\n };\n\n await writeFile(\n join(projectPath, 'package.json'),\n JSON.stringify(packageJson, null, 2)\n );\n\n // Create README\n const readme = `# ${projectName}\\n\\nCreated with the deprecated ProjectScaffolder compatibility API.\\n\\nUse examples/hello-rpc as the canonical Wexts reference.\\n\\n## Getting Started\\n\\n\\`\\`\\`bash\\nwexts dev\\n\\`\\`\\`\\n`;\n await writeFile(join(projectPath, 'README.md'), readme);\n }\n\n private async createNestJSApp(projectPath: string, projectName: string): Promise<void> {\n await writeFile(\n join(projectPath, 'README.md'),\n `# ${projectName}\\n\\nStandalone API scaffolding through ProjectScaffolder is deprecated. Use examples/hello-rpc or wexts create for the canonical path.\\n`\n );\n }\n\n private async createNextJSApp(projectPath: string, projectName: string): Promise<void> {\n await writeFile(\n join(projectPath, 'README.md'),\n `# ${projectName}\\n\\nStandalone web scaffolding through ProjectScaffolder is deprecated. Use examples/hello-rpc or wexts create for the canonical path.\\n`\n );\n }\n}\n","export * from './provider';\nexport * from './useAuth';\n","'use client';\n\nimport React, { createContext, useContext, ReactNode } from 'react';\nimport { createWextsRpcClient, FusionFetcher, WextsRpcClient } from '../client/fetcher';\n\ninterface FusionContextType {\n client: FusionFetcher;\n wexts: WextsRpcClient;\n}\n\nconst FusionContext = createContext<FusionContextType | null>(null);\n\nexport interface FusionProviderProps {\n children: ReactNode;\n baseUrl?: string;\n rpcBaseUrl?: string;\n rpcClient?: object;\n}\n\n/**\n * FusionProvider - Provides API client to React components\n * Usage:\n * ```tsx\n * <FusionProvider baseUrl=\"/api\">\n * <App />\n * </FusionProvider>\n * ```\n */\nexport function FusionProvider({ children, baseUrl = '/api', rpcBaseUrl = '/rpc', rpcClient }: FusionProviderProps) {\n const client = React.useMemo(() => new FusionFetcher(baseUrl), [baseUrl]);\n const wexts = React.useMemo(\n () => (rpcClient as WextsRpcClient | undefined) ?? createWextsRpcClient(undefined, { baseUrl: rpcBaseUrl }),\n [rpcBaseUrl, rpcClient]\n );\n\n return (\n <FusionContext.Provider value={{ client, wexts }}>\n {children}\n </FusionContext.Provider>\n );\n}\n\n/**\n * useFusion hook - Access API client in components\n * Usage:\n * ```tsx\n * const { client } = useFusion();\n * const data = await client.get('/users');\n * ```\n */\nexport function useFusion(): FusionContextType {\n const context = useContext(FusionContext);\n if (!context) {\n throw new Error('useFusion must be used within FusionProvider');\n }\n return context;\n}\n\nexport function useWexts<TClient = WextsRpcClient>(): TClient {\n const context = useFusion();\n return context.wexts as TClient;\n}\n","'use client';\n\nimport { useState, useEffect } from 'react';\nimport { useFusion } from './provider';\n\nexport interface AuthUser {\n id: string;\n email: string;\n name?: string;\n}\n\nexport interface UseAuthReturn {\n user: AuthUser | null;\n loading: boolean;\n login: (email: string, password: string) => Promise<void>;\n logout: () => Promise<void>;\n isAuthenticated: boolean;\n}\n\n/**\n * useAuth hook - Authentication state management\n * Usage:\n * ```tsx\n * const { user, login, logout, isAuthenticated } = useAuth();\n * ```\n */\nexport function useAuth(): UseAuthReturn {\n const { client } = useFusion();\n const [user, setUser] = useState<AuthUser | null>(null);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n // Check for existing session\n const token = localStorage.getItem('fusion_token');\n if (token) {\n // Validate token and load user\n loadUser();\n } else {\n setLoading(false);\n }\n }, []);\n\n const loadUser = async () => {\n try {\n const userData = await client.get<AuthUser>('/auth/me');\n setUser(userData);\n } catch (error) {\n localStorage.removeItem('fusion_token');\n } finally {\n setLoading(false);\n }\n };\n\n const login = async (email: string, password: string) => {\n const response = await client.post<{ token: string; user: AuthUser }>('/auth/login', {\n email,\n password,\n });\n localStorage.setItem('fusion_token', response.token);\n setUser(response.user);\n };\n\n const logout = async () => {\n localStorage.removeItem('fusion_token');\n setUser(null);\n };\n\n return {\n user,\n loading,\n login,\n logout,\n isAuthenticated: !!user,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["/Volumes/Projects/wexts/packages/dist/index.js","../src/core/index.ts","../src/core/config.ts","../src/core/process-manager.ts","../src/core/errors.ts","../src/config/index.ts","../src/config/loader.ts","../src/insight/index.ts","../src/insight/server.ts","../src/create-fusion/index.ts","../src/create-fusion/scaffold.ts","../src/next/index.ts","../src/next/provider.tsx","../src/next/useAuth.ts"],"names":["ConfigLoader","config","Map","configDir","process","cwd","load","key","defaultValue","has","get","envKey","toUpperCase","env","value","readFileSync","ProcessManager","error","promise","cleanup","Error","code","FusionError","statusCode","log","ProjectScaffolder","options","projectName","projectPath","useContext","createContext","FusionFetcher","baseUrl","rpcClient","rpcBaseUrl","FusionContext","client","wexts","children","FusionProvider","useFusion","context","useWexts","useAuth","loadUser","userData","email","password","response","user","loading","login","logout"],"mappings":"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","file":"/Volumes/Projects/wexts/packages/dist/index.js","sourcesContent":[null,"// Core exports placeholder\nexport * from './config';\nexport * from './logger';\nexport * from './filesystem';\nexport * from './process-manager';\nexport * from './errors';\n","import * as fs from 'fs';\nimport * as path from 'path';\n\nexport interface FusionConfig {\n [key: string]: any;\n}\n\nexport class ConfigLoader {\n private config: Map<string, any> = new Map();\n private configDir: string;\n\n constructor(configDir: string = process.cwd()) {\n this.configDir = configDir;\n }\n\n /**\n * Load configuration from file or environment\n */\n load(key: string, defaultValue?: any): any {\n if (this.config.has(key)) {\n return this.config.get(key);\n }\n\n // Try to load from environment variable\n const envKey = `FUSION_${key.toUpperCase()}`;\n if (process.env[envKey]) {\n const value = this.parseEnvValue(process.env[envKey]!);\n this.config.set(key, value);\n return value;\n }\n\n // Try to load from config file\n const configPath = path.join(this.configDir, 'fusion.config.json');\n if (fs.existsSync(configPath)) {\n try {\n const fileConfig = JSON.parse(fs.readFileSync(configPath, 'utf-8'));\n if (fileConfig[key] !== undefined) {\n this.config.set(key, fileConfig[key]);\n return fileConfig[key];\n }\n } catch (error) {\n // Silently fail and use default\n }\n }\n\n return defaultValue;\n }\n\n /**\n * Set configuration value\n */\n set(key: string, value: any): void {\n this.config.set(key, value);\n }\n\n /**\n * Get all configuration\n */\n getAll(): FusionConfig {\n return Object.fromEntries(this.config);\n }\n\n /**\n * Parse environment value (handles JSON strings)\n */\n private parseEnvValue(value: string): any {\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n }\n}\n\n// Export singleton instance\nexport const config = new ConfigLoader();\n\n// Helper function for backward compatibility\nexport function load(key: string, defaultValue?: any): any {\n return config.load(key, defaultValue);\n}\n","export class ProcessManager {\n /**\n * Setup process error handlers\n */\n static initialize(): void {\n process.on('uncaughtException', (error) => {\n console.error('[Fusion] Uncaught Exception:', error);\n process.exit(1);\n });\n\n process.on('unhandledRejection', (reason, promise) => {\n console.error('[Fusion] Unhandled Rejection at:', promise, 'reason:', reason);\n });\n\n process.on('SIGTERM', () => {\n console.log('[Fusion] SIGTERM received, shutting down gracefully');\n process.exit(0);\n });\n\n process.on('SIGINT', () => {\n console.log('[Fusion] SIGINT received, shutting down gracefully');\n process.exit(0);\n });\n }\n\n /**\n * Graceful shutdown helper\n */\n static async shutdown(cleanup: () => Promise<void>): Promise<void> {\n try {\n await cleanup();\n process.exit(0);\n } catch (error) {\n console.error('[Fusion] Error during shutdown:', error);\n process.exit(1);\n }\n }\n}\n","export class FusionError extends Error {\n constructor(message: string, public code?: string) {\n super(message);\n this.name = 'FusionError';\n }\n}\n\nexport class ConfigError extends FusionError {\n constructor(message: string) {\n super(message, 'CONFIG_ERROR');\n this.name = 'ConfigError';\n }\n}\n\nexport class ValidationError extends FusionError {\n constructor(message: string) {\n super(message, 'VALIDATION_ERROR');\n this.name = 'ValidationError';\n }\n}\n\nexport class APIError extends FusionError {\n constructor(message: string, public statusCode?: number) {\n super(message, 'API_ERROR');\n this.name = 'APIError';\n }\n}\n","// Config exports placeholder\nexport * from './loader';\n","export const loader = {\n load: () => ({}),\n};\n","// Insight exports placeholder\nexport * from './server';\n","export const server = {\n start: () => console.log('Insight server started'),\n};\n","export * from './scaffold';\n","import { mkdir, writeFile } from 'fs/promises';\nimport { join } from 'path';\nimport { logger } from '../core/logger';\n\nexport interface ScaffoldOptions {\n projectName: string;\n template: 'monorepo' | 'api' | 'web';\n packageManager?: 'npm' | 'pnpm' | 'yarn';\n}\n\n/**\n * @deprecated Use the `wexts create` CLI and `examples/hello-rpc` canonical scaffold instead.\n */\nexport class ProjectScaffolder {\n async scaffold(options: ScaffoldOptions): Promise<void> {\n const { projectName, template } = options;\n const projectPath = join(process.cwd(), projectName);\n\n logger.info(`Creating project at: ${projectPath}`);\n\n // Create base directory\n await mkdir(projectPath, { recursive: true });\n\n if (template === 'monorepo') {\n await this.createMonorepo(projectPath, projectName);\n } else if (template === 'api') {\n await this.createNestJSApp(projectPath, projectName);\n } else if (template === 'web') {\n await this.createNextJSApp(projectPath, projectName);\n }\n\n logger.success(`Project ${projectName} created successfully!`);\n logger.info(`\\nNext steps:`);\n logger.info(` cd ${projectName}`);\n logger.info(` wexts dev`);\n }\n\n private async createMonorepo(projectPath: string, projectName: string): Promise<void> {\n // Create directory structure\n await mkdir(join(projectPath, 'apps', 'api'), { recursive: true });\n await mkdir(join(projectPath, 'apps', 'web'), { recursive: true });\n await mkdir(join(projectPath, 'packages', 'types'), { recursive: true });\n await mkdir(join(projectPath, 'packages', 'api-client'), { recursive: true });\n\n // Create root package.json\n const packageJson = {\n name: projectName,\n version: '0.0.1',\n private: true,\n workspaces: ['apps/*', 'packages/*'],\n scripts: {\n dev: 'wexts dev',\n build: 'wexts build',\n },\n devDependencies: {\n 'wexts': '^4.0.0',\n },\n };\n\n await writeFile(\n join(projectPath, 'package.json'),\n JSON.stringify(packageJson, null, 2)\n );\n\n // Create README\n const readme = `# ${projectName}\\n\\nCreated with the deprecated ProjectScaffolder compatibility API.\\n\\nUse examples/hello-rpc as the canonical Wexts reference.\\n\\n## Getting Started\\n\\n\\`\\`\\`bash\\nwexts dev\\n\\`\\`\\`\\n`;\n await writeFile(join(projectPath, 'README.md'), readme);\n }\n\n private async createNestJSApp(projectPath: string, projectName: string): Promise<void> {\n await writeFile(\n join(projectPath, 'README.md'),\n `# ${projectName}\\n\\nStandalone API scaffolding through ProjectScaffolder is deprecated. Use examples/hello-rpc or wexts create for the canonical path.\\n`\n );\n }\n\n private async createNextJSApp(projectPath: string, projectName: string): Promise<void> {\n await writeFile(\n join(projectPath, 'README.md'),\n `# ${projectName}\\n\\nStandalone web scaffolding through ProjectScaffolder is deprecated. Use examples/hello-rpc or wexts create for the canonical path.\\n`\n );\n }\n}\n","export * from './provider';\nexport * from './useAuth';\n","'use client';\n\nimport React, { createContext, useContext, ReactNode } from 'react';\nimport { createWextsRpcClient, FusionFetcher, WextsRpcClient } from '../client/fetcher';\n\ninterface FusionContextType {\n client: FusionFetcher;\n wexts: WextsRpcClient;\n}\n\nconst FusionContext = createContext<FusionContextType | null>(null);\n\nexport interface FusionProviderProps {\n children: ReactNode;\n baseUrl?: string;\n rpcBaseUrl?: string;\n rpcClient?: object;\n}\n\n/**\n * FusionProvider - Provides API client to React components\n * Usage:\n * ```tsx\n * <FusionProvider baseUrl=\"/api\">\n * <App />\n * </FusionProvider>\n * ```\n */\nexport function FusionProvider({ children, baseUrl = '/api', rpcBaseUrl = '/rpc', rpcClient }: FusionProviderProps) {\n const client = React.useMemo(() => new FusionFetcher(baseUrl), [baseUrl]);\n const wexts = React.useMemo(\n () => (rpcClient as WextsRpcClient | undefined) ?? createWextsRpcClient(undefined, { baseUrl: rpcBaseUrl }),\n [rpcBaseUrl, rpcClient]\n );\n\n return (\n <FusionContext.Provider value={{ client, wexts }}>\n {children}\n </FusionContext.Provider>\n );\n}\n\n/**\n * useFusion hook - Access API client in components\n * Usage:\n * ```tsx\n * const { client } = useFusion();\n * const data = await client.get('/users');\n * ```\n */\nexport function useFusion(): FusionContextType {\n const context = useContext(FusionContext);\n if (!context) {\n throw new Error('useFusion must be used within FusionProvider');\n }\n return context;\n}\n\nexport function useWexts<TClient = WextsRpcClient>(): TClient {\n const context = useFusion();\n return context.wexts as TClient;\n}\n","'use client';\n\nimport { useState, useEffect } from 'react';\nimport { useFusion } from './provider';\n\nexport interface AuthUser {\n id: string;\n email: string;\n name?: string;\n}\n\nexport interface UseAuthReturn {\n user: AuthUser | null;\n loading: boolean;\n login: (email: string, password: string) => Promise<void>;\n logout: () => Promise<void>;\n isAuthenticated: boolean;\n}\n\n/**\n * useAuth hook - Authentication state management\n * Usage:\n * ```tsx\n * const { user, login, logout, isAuthenticated } = useAuth();\n * ```\n */\nexport function useAuth(): UseAuthReturn {\n const { client } = useFusion();\n const [user, setUser] = useState<AuthUser | null>(null);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n // Check for existing session\n const token = localStorage.getItem('fusion_token');\n if (token) {\n // Validate token and load user\n loadUser();\n } else {\n setLoading(false);\n }\n }, []);\n\n const loadUser = async () => {\n try {\n const userData = await client.get<AuthUser>('/auth/me');\n setUser(userData);\n } catch (error) {\n localStorage.removeItem('fusion_token');\n } finally {\n setLoading(false);\n }\n };\n\n const login = async (email: string, password: string) => {\n const response = await client.post<{ token: string; user: AuthUser }>('/auth/login', {\n email,\n password,\n });\n localStorage.setItem('fusion_token', response.token);\n setUser(response.user);\n };\n\n const logout = async () => {\n localStorage.removeItem('fusion_token');\n setUser(null);\n };\n\n return {\n user,\n loading,\n login,\n logout,\n isAuthenticated: !!user,\n };\n}\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
FusionFetcher,
|
|
6
6
|
createWextsRpcClient
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-7SSCNCTW.mjs";
|
|
8
8
|
import {
|
|
9
9
|
nest_exports
|
|
10
10
|
} from "./chunk-UAL54DVV.mjs";
|
|
@@ -17,13 +17,21 @@ import {
|
|
|
17
17
|
FileSystem,
|
|
18
18
|
codegen_exports,
|
|
19
19
|
filesystem
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-342VRT25.mjs";
|
|
21
21
|
import {
|
|
22
22
|
LogLevel,
|
|
23
23
|
Logger,
|
|
24
24
|
createLogger,
|
|
25
25
|
logger
|
|
26
26
|
} from "./chunk-JHOVXH3X.mjs";
|
|
27
|
+
import {
|
|
28
|
+
WextsCodegenError,
|
|
29
|
+
WextsError,
|
|
30
|
+
WextsRpcError,
|
|
31
|
+
WextsRuntimeError,
|
|
32
|
+
WextsSecurityError,
|
|
33
|
+
formatWextsError
|
|
34
|
+
} from "./chunk-7TLSPR65.mjs";
|
|
27
35
|
import {
|
|
28
36
|
__export,
|
|
29
37
|
__name
|
|
@@ -275,7 +283,7 @@ Next steps:`);
|
|
|
275
283
|
build: "wexts build"
|
|
276
284
|
},
|
|
277
285
|
devDependencies: {
|
|
278
|
-
"wexts": "^
|
|
286
|
+
"wexts": "^4.0.0"
|
|
279
287
|
}
|
|
280
288
|
};
|
|
281
289
|
await writeFile(join2(projectPath, "package.json"), JSON.stringify(packageJson, null, 2));
|
|
@@ -405,6 +413,12 @@ export {
|
|
|
405
413
|
insight_exports as Insight,
|
|
406
414
|
nest_exports as Nest,
|
|
407
415
|
next_exports as Next,
|
|
408
|
-
rpc_exports as Rpc
|
|
416
|
+
rpc_exports as Rpc,
|
|
417
|
+
WextsCodegenError,
|
|
418
|
+
WextsError,
|
|
419
|
+
WextsRpcError,
|
|
420
|
+
WextsRuntimeError,
|
|
421
|
+
WextsSecurityError,
|
|
422
|
+
formatWextsError
|
|
409
423
|
};
|
|
410
424
|
//# sourceMappingURL=index.mjs.map
|