wexts 4.1.5 → 4.1.7

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 (192) hide show
  1. package/README.md +49 -49
  2. package/bin/wexts.cjs +2 -2
  3. package/dist/chunk-27NEYQD2.mjs +222 -0
  4. package/dist/chunk-27NEYQD2.mjs.map +1 -0
  5. package/dist/chunk-2LJVUMXW.js +228 -0
  6. package/dist/chunk-2LJVUMXW.js.map +1 -0
  7. package/dist/chunk-5DBFN65W.mjs +183 -0
  8. package/dist/chunk-5DBFN65W.mjs.map +1 -0
  9. package/dist/chunk-75HBI2XG.js +504 -0
  10. package/dist/chunk-75HBI2XG.js.map +1 -0
  11. package/dist/chunk-AVMQJWYD.js +95 -0
  12. package/dist/chunk-AVMQJWYD.js.map +1 -0
  13. package/dist/chunk-C2AG7Q3C.mjs +65 -0
  14. package/dist/chunk-C2AG7Q3C.mjs.map +1 -0
  15. package/dist/chunk-DS5KVVWJ.mjs +95 -0
  16. package/dist/chunk-DS5KVVWJ.mjs.map +1 -0
  17. package/dist/chunk-FUPLZMSR.mjs +228 -0
  18. package/dist/chunk-FUPLZMSR.mjs.map +1 -0
  19. package/dist/chunk-HLT3IHJY.js +183 -0
  20. package/dist/chunk-HLT3IHJY.js.map +1 -0
  21. package/dist/chunk-IRRJJ7KL.js +273 -0
  22. package/dist/chunk-IRRJJ7KL.js.map +1 -0
  23. package/dist/chunk-L77ANWWT.mjs +22 -0
  24. package/dist/chunk-L77ANWWT.mjs.map +1 -0
  25. package/dist/chunk-P3Q4I5FD.js +222 -0
  26. package/dist/chunk-P3Q4I5FD.js.map +1 -0
  27. package/dist/chunk-VBIQGUDI.mjs +504 -0
  28. package/dist/chunk-VBIQGUDI.mjs.map +1 -0
  29. package/dist/chunk-VJY6PHYF.mjs +273 -0
  30. package/dist/chunk-VJY6PHYF.mjs.map +1 -0
  31. package/dist/chunk-WCKSKU3C.js +65 -0
  32. package/dist/chunk-WCKSKU3C.js.map +1 -0
  33. package/dist/chunk-XE4OXN2W.js +12 -0
  34. package/dist/chunk-XE4OXN2W.js.map +1 -0
  35. package/dist/cli/index.d.mts +23 -0
  36. package/dist/cli/index.d.ts +23 -0
  37. package/dist/cli/index.js +634 -0
  38. package/dist/cli/index.js.map +1 -0
  39. package/dist/cli/index.mjs +636 -0
  40. package/dist/cli/index.mjs.map +1 -0
  41. package/dist/client/index.d.mts +43 -0
  42. package/dist/client/index.d.ts +43 -0
  43. package/dist/client/index.js +187 -0
  44. package/dist/client/index.js.map +1 -0
  45. package/dist/client/index.mjs +166 -0
  46. package/dist/client/index.mjs.map +1 -0
  47. package/dist/codegen/index.d.mts +2 -0
  48. package/dist/codegen/index.d.ts +2 -0
  49. package/dist/codegen/index.js +16 -0
  50. package/dist/codegen/index.js.map +1 -0
  51. package/dist/codegen/index.mjs +16 -0
  52. package/dist/codegen/index.mjs.map +1 -0
  53. package/dist/decorators-BiQtOHuF.d.ts +60 -0
  54. package/dist/decorators-vBopODtr.d.mts +60 -0
  55. package/dist/dev-server/index.d.mts +1 -0
  56. package/dist/dev-server/index.d.ts +1 -0
  57. package/dist/dev-server/index.js +13 -0
  58. package/dist/dev-server/index.js.map +1 -0
  59. package/dist/dev-server/index.mjs +13 -0
  60. package/dist/dev-server/index.mjs.map +1 -0
  61. package/dist/errors-D545UvXf.d.mts +37 -0
  62. package/dist/errors-D545UvXf.d.ts +37 -0
  63. package/dist/index-7RvU-jGE.d.mts +66 -0
  64. package/dist/index-7RvU-jGE.d.ts +66 -0
  65. package/dist/index-BsafLP-a.d.mts +70 -0
  66. package/dist/index-BsafLP-a.d.ts +70 -0
  67. package/dist/index-CJKs4wtN.d.ts +92 -0
  68. package/dist/index-CUR6CnLk.d.ts +27 -0
  69. package/dist/index-h66Vq9dK.d.mts +92 -0
  70. package/dist/index-tqmYsTUn.d.mts +27 -0
  71. package/dist/index.d.mts +289 -0
  72. package/dist/index.d.ts +289 -0
  73. package/dist/index.js +544 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/index.mjs +544 -0
  76. package/dist/index.mjs.map +1 -0
  77. package/dist/nest/index.d.mts +2 -0
  78. package/dist/nest/index.d.ts +2 -0
  79. package/dist/nest/index.js +36 -0
  80. package/dist/nest/index.js.map +1 -0
  81. package/dist/nest/index.mjs +36 -0
  82. package/dist/nest/index.mjs.map +1 -0
  83. package/dist/next/index.d.mts +66 -0
  84. package/dist/next/index.d.ts +66 -0
  85. package/dist/next/index.js +282 -0
  86. package/dist/next/index.js.map +1 -0
  87. package/dist/next/index.mjs +251 -0
  88. package/dist/next/index.mjs.map +1 -0
  89. package/dist/rpc/index.d.mts +32 -0
  90. package/dist/rpc/index.d.ts +32 -0
  91. package/dist/rpc/index.js +19 -0
  92. package/dist/rpc/index.js.map +1 -0
  93. package/dist/rpc/index.mjs +1 -0
  94. package/dist/rpc/index.mjs.map +1 -0
  95. package/dist/runtime/index.d.mts +55 -0
  96. package/dist/runtime/index.d.ts +55 -0
  97. package/dist/runtime/index.js +15 -0
  98. package/dist/runtime/index.js.map +1 -0
  99. package/dist/runtime/index.mjs +15 -0
  100. package/dist/runtime/index.mjs.map +1 -0
  101. package/dist/server/index.d.mts +7 -0
  102. package/dist/server/index.d.ts +7 -0
  103. package/dist/server/index.js +58 -0
  104. package/dist/server/index.js.map +1 -0
  105. package/dist/server/index.mjs +58 -0
  106. package/dist/server/index.mjs.map +1 -0
  107. package/dist/types/index.d.mts +12 -0
  108. package/dist/types/index.d.ts +12 -0
  109. package/dist/types/index.js +19 -0
  110. package/dist/types/index.js.map +1 -0
  111. package/dist/types/index.mjs +1 -0
  112. package/dist/types/index.mjs.map +1 -0
  113. package/dist/types-CQ_aexOX.d.mts +32 -0
  114. package/dist/types-CQ_aexOX.d.ts +32 -0
  115. package/dist/vercel-builder/index.d.mts +58 -0
  116. package/dist/vercel-builder/index.d.ts +58 -0
  117. package/dist/vercel-builder/index.js +330 -0
  118. package/dist/vercel-builder/index.js.map +1 -0
  119. package/dist/vercel-builder/index.mjs +330 -0
  120. package/dist/vercel-builder/index.mjs.map +1 -0
  121. package/package.json +153 -153
  122. package/templates/.dockerignore +43 -43
  123. package/templates/.env.example +17 -17
  124. package/templates/Dockerfile +60 -60
  125. package/templates/Procfile +1 -1
  126. package/templates/README.md +67 -67
  127. package/templates/api-sdk.ts +115 -115
  128. package/templates/docker-compose.yml +34 -34
  129. package/templates/nestjs-api/.env.example +3 -3
  130. package/templates/nestjs-api/README.md +87 -87
  131. package/templates/nestjs-api/nest-cli.json +6 -6
  132. package/templates/nestjs-api/package.json +40 -40
  133. package/templates/nestjs-api/prisma/migrations/20251123205437_init/migration.sql +24 -24
  134. package/templates/nestjs-api/prisma/migrations/migration_lock.toml +3 -3
  135. package/templates/nestjs-api/prisma/schema.prisma +29 -29
  136. package/templates/nestjs-api/src/app.module.ts +19 -17
  137. package/templates/nestjs-api/src/auth/auth.controller.ts +27 -27
  138. package/templates/nestjs-api/src/auth/auth.module.ts +37 -37
  139. package/templates/nestjs-api/src/auth/auth.service.ts +86 -86
  140. package/templates/nestjs-api/src/auth/dto/auth.dto.ts +22 -22
  141. package/templates/nestjs-api/src/auth/guards/jwt-auth.guard.ts +5 -5
  142. package/templates/nestjs-api/src/auth/strategies/jwt.strategy.ts +27 -27
  143. package/templates/nestjs-api/src/hello.service.ts +11 -0
  144. package/templates/nestjs-api/src/main.ts +32 -32
  145. package/templates/nestjs-api/src/prisma/prisma.module.ts +9 -9
  146. package/templates/nestjs-api/src/prisma/prisma.service.ts +14 -14
  147. package/templates/nestjs-api/src/todos/dto/todo.dto.ts +24 -24
  148. package/templates/nestjs-api/src/todos/todos.controller.ts +39 -39
  149. package/templates/nestjs-api/src/todos/todos.module.ts +11 -11
  150. package/templates/nestjs-api/src/todos/todos.service.ts +53 -53
  151. package/templates/nestjs-api/src/users/users.controller.ts +14 -14
  152. package/templates/nestjs-api/src/users/users.module.ts +12 -12
  153. package/templates/nestjs-api/src/users/users.service.ts +19 -19
  154. package/templates/nestjs-api/tsconfig.json +39 -39
  155. package/templates/nextjs-web/README.md +76 -76
  156. package/templates/nextjs-web/app/actions/auth.ts +108 -108
  157. package/templates/nextjs-web/app/dashboard/error.tsx +39 -39
  158. package/templates/nextjs-web/app/dashboard/loading.tsx +14 -14
  159. package/templates/nextjs-web/app/dashboard/page.tsx +5 -5
  160. package/templates/nextjs-web/app/globals.css +93 -93
  161. package/templates/nextjs-web/app/layout.tsx +29 -29
  162. package/templates/nextjs-web/app/login/page.tsx +5 -5
  163. package/templates/nextjs-web/app/page.tsx +138 -28
  164. package/templates/nextjs-web/app/register/page.tsx +5 -5
  165. package/templates/nextjs-web/components/ui/button.tsx +56 -56
  166. package/templates/nextjs-web/components/ui/card.tsx +79 -79
  167. package/templates/nextjs-web/components/ui/input.tsx +25 -25
  168. package/templates/nextjs-web/components/ui/label.tsx +24 -24
  169. package/templates/nextjs-web/features/auth/LoginForm.tsx +140 -140
  170. package/templates/nextjs-web/features/auth/RegisterForm.tsx +159 -159
  171. package/templates/nextjs-web/features/auth/api.ts +35 -35
  172. package/templates/nextjs-web/features/auth/index.ts +3 -3
  173. package/templates/nextjs-web/features/dashboard/DashboardView.tsx +204 -204
  174. package/templates/nextjs-web/features/dashboard/api.ts +9 -9
  175. package/templates/nextjs-web/features/dashboard/components.tsx +74 -74
  176. package/templates/nextjs-web/features/dashboard/index.ts +3 -3
  177. package/templates/nextjs-web/hooks/index.ts +4 -4
  178. package/templates/nextjs-web/lib/api-client.ts +89 -89
  179. package/templates/nextjs-web/lib/api.ts +115 -115
  180. package/templates/nextjs-web/lib/axios-global-config.ts +17 -17
  181. package/templates/nextjs-web/lib/utils.ts +6 -6
  182. package/templates/nextjs-web/lib/wexts-client.ts +4 -4
  183. package/templates/nextjs-web/next-env.d.ts +6 -6
  184. package/templates/nextjs-web/next.config.ts +20 -20
  185. package/templates/nextjs-web/package.json +37 -37
  186. package/templates/nextjs-web/postcss.config.js +6 -6
  187. package/templates/nextjs-web/tailwind.config.ts +69 -69
  188. package/templates/nextjs-web/tsconfig.json +41 -41
  189. package/templates/nixpacks.toml +11 -11
  190. package/templates/root-package.json +31 -31
  191. package/templates/server.ts +66 -66
  192. package/templates/tsconfig.json +30 -30
@@ -0,0 +1,273 @@
1
+ import {
2
+ logger
3
+ } from "./chunk-C2AG7Q3C.mjs";
4
+ import {
5
+ __export,
6
+ __name
7
+ } from "./chunk-L77ANWWT.mjs";
8
+
9
+ // src/dev-server/index.ts
10
+ var dev_server_exports = {};
11
+ __export(dev_server_exports, {
12
+ FusionDevServer: () => FusionDevServer,
13
+ ProcessRunner: () => ProcessRunner,
14
+ ProxyServer: () => ProxyServer
15
+ });
16
+
17
+ // src/dev-server/process-runner.ts
18
+ import { spawn } from "child_process";
19
+ import * as pc from "picocolors";
20
+ var ProcessRunner = class {
21
+ static {
22
+ __name(this, "ProcessRunner");
23
+ }
24
+ processes = /* @__PURE__ */ new Map();
25
+ colors = {
26
+ cyan: pc.cyan,
27
+ green: pc.green,
28
+ yellow: pc.yellow,
29
+ magenta: pc.magenta,
30
+ blue: pc.blue
31
+ };
32
+ async run(configs) {
33
+ logger.info("\u{1F680} Starting development servers...\n");
34
+ for (const config of configs) {
35
+ this.startProcess(config);
36
+ }
37
+ process.on("SIGINT", () => this.stopAll());
38
+ process.on("SIGTERM", () => this.stopAll());
39
+ }
40
+ startProcess(config) {
41
+ const { name, command, args, cwd, color, env } = config;
42
+ const colorFn = this.colors[color];
43
+ const prefix = colorFn(`[${name}]`);
44
+ logger.info(`${prefix} Starting...`);
45
+ const proc = spawn(command, args, {
46
+ cwd,
47
+ stdio: "pipe",
48
+ shell: true,
49
+ env: {
50
+ ...process.env,
51
+ ...env
52
+ }
53
+ });
54
+ this.processes.set(name, proc);
55
+ proc.stdout?.on("data", (data) => {
56
+ const lines = data.toString().split("\n").filter((l) => l.trim());
57
+ lines.forEach((line) => {
58
+ console.log(`${prefix} ${line}`);
59
+ });
60
+ });
61
+ proc.stderr?.on("data", (data) => {
62
+ const lines = data.toString().split("\n").filter((l) => l.trim());
63
+ lines.forEach((line) => {
64
+ console.error(`${prefix} ${pc.red(line)}`);
65
+ });
66
+ });
67
+ proc.on("exit", (code) => {
68
+ if (code !== 0 && code !== null) {
69
+ logger.error(`${prefix} Exited with code ${code}`);
70
+ }
71
+ this.processes.delete(name);
72
+ });
73
+ proc.on("error", (error) => {
74
+ logger.error(`${prefix} Error:`, error.message);
75
+ });
76
+ }
77
+ stopAll() {
78
+ logger.info("\n\u{1F6D1} Stopping all processes...");
79
+ for (const [name, proc] of this.processes.entries()) {
80
+ logger.info(`Stopping ${name}...`);
81
+ proc.kill("SIGTERM");
82
+ }
83
+ setTimeout(() => {
84
+ process.exit(0);
85
+ }, 1e3);
86
+ }
87
+ isRunning(name) {
88
+ return this.processes.has(name);
89
+ }
90
+ };
91
+
92
+ // src/dev-server/dev-server.ts
93
+ import * as path from "path";
94
+ import * as fs from "fs";
95
+ var DEFAULT_RUNTIME_CONFIG = "./wexts.runtime.js";
96
+ var FusionDevServer = class {
97
+ static {
98
+ __name(this, "FusionDevServer");
99
+ }
100
+ processRunner;
101
+ constructor() {
102
+ this.processRunner = new ProcessRunner();
103
+ }
104
+ async start(config) {
105
+ const { apiPath, webPath, webPort = 3e3, apiPort = 5050, useProxy = false, rootDir = process.cwd(), runtimeConfigPath = DEFAULT_RUNTIME_CONFIG } = config;
106
+ if (useProxy) {
107
+ throw new Error("The legacy dev proxy is disabled because it conflicts with the Next.js port. Use the production runtime for single-port serving.");
108
+ }
109
+ if (!fs.existsSync(apiPath)) {
110
+ throw new Error(`API path not found: ${apiPath}`);
111
+ }
112
+ if (!fs.existsSync(webPath)) {
113
+ throw new Error(`Web path not found: ${webPath}`);
114
+ }
115
+ const absoluteRuntimeConfigPath = path.isAbsolute(runtimeConfigPath) ? runtimeConfigPath : path.join(path.resolve(rootDir), runtimeConfigPath);
116
+ if (!fs.existsSync(absoluteRuntimeConfigPath)) {
117
+ throw new Error(`Runtime config not found: ${absoluteRuntimeConfigPath}. Create wexts.runtime.js or pass --config.`);
118
+ }
119
+ const processes = this.createProcessConfigs({
120
+ apiPath,
121
+ webPath,
122
+ webPort,
123
+ apiPort,
124
+ rootDir,
125
+ runtimeConfigPath
126
+ });
127
+ await this.processRunner.run(processes);
128
+ logger.info("\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557");
129
+ logger.info("\u2551 Fusion Development Server Ready \u2551");
130
+ logger.info("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D\n");
131
+ logger.info(`\u{1F310} Web + RPC: http://localhost:${webPort}`);
132
+ logger.info(`\u{1F50C} API compiler: ${path.resolve(apiPath)}`);
133
+ logger.info("\n");
134
+ }
135
+ createProcessConfigs(config) {
136
+ const apiPath = path.resolve(config.apiPath);
137
+ const webPath = path.resolve(config.webPath);
138
+ const rootDir = path.resolve(config.rootDir);
139
+ const runtimeConfigPath = path.isAbsolute(config.runtimeConfigPath) ? config.runtimeConfigPath : path.join(rootDir, config.runtimeConfigPath);
140
+ return [
141
+ this.createApiCompilerProcess(apiPath, config.apiPort, rootDir),
142
+ {
143
+ name: "Web",
144
+ command: "pnpm",
145
+ args: [
146
+ "exec",
147
+ "wexts",
148
+ "start",
149
+ "-c",
150
+ runtimeConfigPath,
151
+ "-p",
152
+ config.webPort.toString(),
153
+ "--dev"
154
+ ],
155
+ cwd: rootDir,
156
+ color: "green",
157
+ env: {
158
+ NEXT_PUBLIC_API_URL: `http://localhost:${config.apiPort}`,
159
+ WEXTS_WEB_DIR: webPath
160
+ }
161
+ }
162
+ ];
163
+ }
164
+ createApiCompilerProcess(apiPath, apiPort, rootDir) {
165
+ if (fs.existsSync(path.join(apiPath, "package.json"))) {
166
+ return {
167
+ name: "API",
168
+ command: "pnpm",
169
+ args: [
170
+ "run",
171
+ "start:dev"
172
+ ],
173
+ cwd: apiPath,
174
+ color: "cyan",
175
+ env: {
176
+ PORT: apiPort.toString()
177
+ }
178
+ };
179
+ }
180
+ return {
181
+ name: "API",
182
+ command: "pnpm",
183
+ args: [
184
+ "exec",
185
+ "tsc",
186
+ "-w",
187
+ "-p",
188
+ path.join(apiPath, "tsconfig.json")
189
+ ],
190
+ cwd: rootDir,
191
+ color: "cyan",
192
+ env: {
193
+ PORT: apiPort.toString()
194
+ }
195
+ };
196
+ }
197
+ stop() {
198
+ this.processRunner.stopAll();
199
+ }
200
+ };
201
+
202
+ // src/dev-server/proxy.ts
203
+ import http from "http";
204
+ import httpProxy from "http-proxy";
205
+ import * as pc2 from "picocolors";
206
+ var ProxyServer = class {
207
+ static {
208
+ __name(this, "ProxyServer");
209
+ }
210
+ server = null;
211
+ proxy = null;
212
+ async start(config) {
213
+ const { port, apiTarget, apiPrefix } = config;
214
+ this.proxy = httpProxy.createProxyServer({
215
+ target: apiTarget,
216
+ changeOrigin: true,
217
+ ws: true
218
+ });
219
+ this.proxy.on("error", (err, req, res) => {
220
+ logger.error("Proxy error:", err.message);
221
+ if (res && "headersSent" in res && !res.headersSent) {
222
+ res.writeHead(502, {
223
+ "Content-Type": "text/plain"
224
+ });
225
+ res.end("Bad Gateway - API server unavailable");
226
+ }
227
+ });
228
+ this.server = http.createServer((req, res) => {
229
+ if (req.url?.startsWith(apiPrefix)) {
230
+ const newUrl = req.url.substring(apiPrefix.length) || "/";
231
+ req.url = newUrl;
232
+ logger.info(pc2.gray(`\u2192 ${req.method} ${apiPrefix}${newUrl}`));
233
+ this.proxy.web(req, res);
234
+ } else {
235
+ res.writeHead(404);
236
+ res.end("Not Found");
237
+ }
238
+ });
239
+ this.server.on("upgrade", (req, socket, head) => {
240
+ if (req.url?.startsWith(apiPrefix)) {
241
+ const newUrl = req.url.substring(apiPrefix.length) || "/";
242
+ req.url = newUrl;
243
+ this.proxy.ws(req, socket, head);
244
+ }
245
+ });
246
+ return new Promise((resolve2) => {
247
+ this.server.listen(port, () => {
248
+ logger.success(`\u2705 Proxy server running on port ${port}`);
249
+ logger.info(` Forwarding ${pc2.cyan(apiPrefix + "/*")} \u2192 ${pc2.cyan(apiTarget)}
250
+ `);
251
+ resolve2();
252
+ });
253
+ });
254
+ }
255
+ stop() {
256
+ if (this.server) {
257
+ this.server.close();
258
+ this.server = null;
259
+ }
260
+ if (this.proxy) {
261
+ this.proxy.close();
262
+ this.proxy = null;
263
+ }
264
+ }
265
+ };
266
+
267
+ export {
268
+ ProcessRunner,
269
+ FusionDevServer,
270
+ ProxyServer,
271
+ dev_server_exports
272
+ };
273
+ //# sourceMappingURL=chunk-VJY6PHYF.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/dev-server/index.ts","../src/dev-server/process-runner.ts","../src/dev-server/dev-server.ts","../src/dev-server/proxy.ts"],"sourcesContent":["export * from './dev-server';\nexport * from './process-runner';\nexport * from './proxy';\n","import { spawn, ChildProcess } from 'child_process';\nimport { logger } from '../core/logger';\nimport * as pc from 'picocolors';\n\nexport interface ProcessConfig {\n name: string;\n command: string;\n args: string[];\n cwd: string;\n color: 'cyan' | 'green' | 'yellow' | 'magenta' | 'blue';\n env?: Record<string, string>;\n}\n\n/**\n * Run multiple processes concurrently with colored output\n */\nexport class ProcessRunner {\n private processes: Map<string, ChildProcess> = new Map();\n private colors = {\n cyan: pc.cyan,\n green: pc.green,\n yellow: pc.yellow,\n magenta: pc.magenta,\n blue: pc.blue,\n };\n\n async run(configs: ProcessConfig[]): Promise<void> {\n logger.info('🚀 Starting development servers...\\n');\n\n for (const config of configs) {\n this.startProcess(config);\n }\n\n // Handle graceful shutdown\n process.on('SIGINT', () => this.stopAll());\n process.on('SIGTERM', () => this.stopAll());\n }\n\n private startProcess(config: ProcessConfig): void {\n const { name, command, args, cwd, color, env } = config;\n\n const colorFn = this.colors[color];\n const prefix = colorFn(`[${name}]`);\n\n logger.info(`${prefix} Starting...`);\n\n const proc = spawn(command, args, {\n cwd,\n stdio: 'pipe',\n shell: true,\n env: { ...process.env, ...env },\n });\n\n this.processes.set(name, proc);\n\n // Handle stdout\n proc.stdout?.on('data', (data) => {\n const lines = data.toString().split('\\n').filter((l: string) => l.trim());\n lines.forEach((line: string) => {\n console.log(`${prefix} ${line}`);\n });\n });\n\n // Handle stderr\n proc.stderr?.on('data', (data) => {\n const lines = data.toString().split('\\n').filter((l: string) => l.trim());\n lines.forEach((line: string) => {\n console.error(`${prefix} ${pc.red(line)}`);\n });\n });\n\n // Handle exit\n proc.on('exit', (code) => {\n if (code !== 0 && code !== null) {\n logger.error(`${prefix} Exited with code ${code}`);\n }\n this.processes.delete(name);\n });\n\n // Handle errors\n proc.on('error', (error) => {\n logger.error(`${prefix} Error:`, error.message);\n });\n }\n\n stopAll(): void {\n logger.info('\\n🛑 Stopping all processes...');\n\n for (const [name, proc] of this.processes.entries()) {\n logger.info(`Stopping ${name}...`);\n proc.kill('SIGTERM');\n }\n\n setTimeout(() => {\n process.exit(0);\n }, 1000);\n }\n\n isRunning(name: string): boolean {\n return this.processes.has(name);\n }\n}\n","import { ProcessRunner, ProcessConfig } from './process-runner';\nimport { logger } from '../core/logger';\nimport * as path from 'path';\nimport * as fs from 'fs';\n\nexport interface DevServerConfig {\n apiPath: string;\n webPath: string;\n webPort?: number;\n apiPort?: number;\n useProxy?: boolean;\n rootDir?: string;\n runtimeConfigPath?: string;\n}\n\nconst DEFAULT_RUNTIME_CONFIG = './wexts.runtime.js';\n\n/**\n * Unified development server for Fusion projects\n */\nexport class FusionDevServer {\n private processRunner: ProcessRunner;\n\n constructor() {\n this.processRunner = new ProcessRunner();\n }\n\n async start(config: DevServerConfig): Promise<void> {\n const {\n apiPath,\n webPath,\n webPort = 3000,\n apiPort = 5050,\n useProxy = false,\n rootDir = process.cwd(),\n runtimeConfigPath = DEFAULT_RUNTIME_CONFIG,\n } = config;\n\n if (useProxy) {\n throw new Error('The legacy dev proxy is disabled because it conflicts with the Next.js port. Use the production runtime for single-port serving.');\n }\n\n // Validate paths\n if (!fs.existsSync(apiPath)) {\n throw new Error(`API path not found: ${apiPath}`);\n }\n if (!fs.existsSync(webPath)) {\n throw new Error(`Web path not found: ${webPath}`);\n }\n\n const absoluteRuntimeConfigPath = path.isAbsolute(runtimeConfigPath)\n ? runtimeConfigPath\n : path.join(path.resolve(rootDir), runtimeConfigPath);\n if (!fs.existsSync(absoluteRuntimeConfigPath)) {\n throw new Error(`Runtime config not found: ${absoluteRuntimeConfigPath}. Create wexts.runtime.js or pass --config.`);\n }\n\n const processes = this.createProcessConfigs({\n apiPath,\n webPath,\n webPort,\n apiPort,\n rootDir,\n runtimeConfigPath,\n });\n\n // Start processes\n await this.processRunner.run(processes);\n\n // Log info\n logger.info('╔═══════════════════════════════════════╗');\n logger.info('║ Fusion Development Server Ready ║');\n logger.info('╚═══════════════════════════════════════╝\\n');\n logger.info(`🌐 Web + RPC: http://localhost:${webPort}`);\n logger.info(`🔌 API compiler: ${path.resolve(apiPath)}`);\n logger.info('\\n');\n }\n\n createProcessConfigs(config: Required<Pick<DevServerConfig, 'apiPath' | 'webPath' | 'webPort' | 'apiPort' | 'rootDir' | 'runtimeConfigPath'>>): ProcessConfig[] {\n const apiPath = path.resolve(config.apiPath);\n const webPath = path.resolve(config.webPath);\n const rootDir = path.resolve(config.rootDir);\n const runtimeConfigPath = path.isAbsolute(config.runtimeConfigPath)\n ? config.runtimeConfigPath\n : path.join(rootDir, config.runtimeConfigPath);\n\n return [\n this.createApiCompilerProcess(apiPath, config.apiPort, rootDir),\n {\n name: 'Web',\n command: 'pnpm',\n args: ['exec', 'wexts', 'start', '-c', runtimeConfigPath, '-p', config.webPort.toString(), '--dev'],\n cwd: rootDir,\n color: 'green',\n env: {\n NEXT_PUBLIC_API_URL: `http://localhost:${config.apiPort}`,\n WEXTS_WEB_DIR: webPath,\n },\n },\n ];\n }\n\n private createApiCompilerProcess(apiPath: string, apiPort: number, rootDir: string): ProcessConfig {\n if (fs.existsSync(path.join(apiPath, 'package.json'))) {\n return {\n name: 'API',\n command: 'pnpm',\n args: ['run', 'start:dev'],\n cwd: apiPath,\n color: 'cyan',\n env: {\n PORT: apiPort.toString(),\n },\n };\n }\n\n return {\n name: 'API',\n command: 'pnpm',\n args: ['exec', 'tsc', '-w', '-p', path.join(apiPath, 'tsconfig.json')],\n cwd: rootDir,\n color: 'cyan',\n env: {\n PORT: apiPort.toString(),\n },\n };\n }\n\n stop(): void {\n this.processRunner.stopAll();\n }\n}\n","import http from 'http';\nimport httpProxy from 'http-proxy';\nimport { logger } from '../core/logger';\nimport * as pc from 'picocolors';\n\nexport interface ProxyConfig {\n port: number;\n apiTarget: string;\n apiPrefix: string;\n}\n\n/**\n * Proxy server to forward API requests from Next.js to NestJS\n */\nexport class ProxyServer {\n private server: http.Server | null = null;\n private proxy: httpProxy | null = null;\n\n async start(config: ProxyConfig): Promise<void> {\n const { port, apiTarget, apiPrefix } = config;\n\n this.proxy = httpProxy.createProxyServer({\n target: apiTarget,\n changeOrigin: true,\n ws: true, // WebSocket support\n });\n\n // Handle proxy errors\n this.proxy.on('error', (err, req, res) => {\n logger.error('Proxy error:', err.message);\n if (res && 'headersSent' in res && !(res as any).headersSent) {\n (res as http.ServerResponse).writeHead(502, { 'Content-Type': 'text/plain' });\n (res as http.ServerResponse).end('Bad Gateway - API server unavailable');\n }\n });\n\n this.server = http.createServer((req, res) => {\n // Check if request is for API\n if (req.url?.startsWith(apiPrefix)) {\n // Remove prefix before forwarding\n const newUrl = req.url.substring(apiPrefix.length) || '/';\n req.url = newUrl;\n\n logger.info(pc.gray(`→ ${req.method} ${apiPrefix}${newUrl}`));\n this.proxy!.web(req, res);\n } else {\n // Not an API request - should not happen\n res.writeHead(404);\n res.end('Not Found');\n }\n });\n\n // Handle WebSocket upgrade\n this.server.on('upgrade', (req, socket, head) => {\n if (req.url?.startsWith(apiPrefix)) {\n const newUrl = req.url.substring(apiPrefix.length) || '/';\n req.url = newUrl;\n this.proxy!.ws(req, socket, head);\n }\n });\n\n return new Promise((resolve) => {\n this.server!.listen(port, () => {\n logger.success(`✅ Proxy server running on port ${port}`);\n logger.info(` Forwarding ${pc.cyan(apiPrefix + '/*')} → ${pc.cyan(apiTarget)}\\n`);\n resolve();\n });\n });\n }\n\n stop(): void {\n if (this.server) {\n this.server.close();\n this.server = null;\n }\n if (this.proxy) {\n this.proxy.close();\n this.proxy = null;\n }\n }\n}\n"],"mappings":"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","names":["spawn","pc","ProcessRunner","processes","Map","colors","cyan","green","yellow","magenta","blue","run","configs","logger","info","config","startProcess","process","on","stopAll","name","command","args","cwd","color","env","colorFn","prefix","proc","spawn","stdio","shell","set","stdout","data","lines","toString","split","filter","l","trim","forEach","line","console","log","stderr","error","red","code","delete","message","entries","kill","setTimeout","exit","isRunning","has","path","fs","DEFAULT_RUNTIME_CONFIG","FusionDevServer","processRunner","ProcessRunner","start","config","apiPath","webPath","webPort","apiPort","useProxy","rootDir","process","cwd","runtimeConfigPath","Error","existsSync","absoluteRuntimeConfigPath","isAbsolute","join","resolve","processes","createProcessConfigs","run","logger","info","createApiCompilerProcess","name","command","args","toString","color","env","NEXT_PUBLIC_API_URL","WEXTS_WEB_DIR","PORT","stop","stopAll","http","httpProxy","pc","ProxyServer","server","proxy","start","config","port","apiTarget","apiPrefix","httpProxy","createProxyServer","target","changeOrigin","ws","on","err","req","res","logger","error","message","headersSent","writeHead","end","http","createServer","url","startsWith","newUrl","substring","length","info","gray","method","web","socket","head","Promise","resolve","listen","success","cyan","stop","close"]}
@@ -0,0 +1,65 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }
2
+
3
+ var _chunkXE4OXN2Wjs = require('./chunk-XE4OXN2W.js');
4
+
5
+ // src/core/logger.ts
6
+ var LogLevel = /* @__PURE__ */ (function(LogLevel2) {
7
+ LogLevel2[LogLevel2["DEBUG"] = 0] = "DEBUG";
8
+ LogLevel2[LogLevel2["INFO"] = 1] = "INFO";
9
+ LogLevel2[LogLevel2["WARN"] = 2] = "WARN";
10
+ LogLevel2[LogLevel2["ERROR"] = 3] = "ERROR";
11
+ return LogLevel2;
12
+ })({});
13
+ var Logger = class {
14
+ static {
15
+ _chunkXE4OXN2Wjs.__name.call(void 0, this, "Logger");
16
+ }
17
+
18
+
19
+
20
+ constructor(options = {}) {
21
+ this.level = _nullishCoalesce(options.level, () => ( 1));
22
+ this.prefix = _nullishCoalesce(options.prefix, () => ( "[Fusion]"));
23
+ this.timestamp = _nullishCoalesce(options.timestamp, () => ( true));
24
+ }
25
+ formatMessage(level, ...args) {
26
+ const timestamp = this.timestamp ? `[${(/* @__PURE__ */ new Date()).toISOString()}]` : "";
27
+ return `${timestamp} ${this.prefix} ${level}: ${args.join(" ")}`;
28
+ }
29
+ debug(...args) {
30
+ if (this.level <= 0) {
31
+ console.log(this.formatMessage("DEBUG", ...args));
32
+ }
33
+ }
34
+ info(...args) {
35
+ if (this.level <= 1) {
36
+ console.log(this.formatMessage("INFO", ...args));
37
+ }
38
+ }
39
+ warn(...args) {
40
+ if (this.level <= 2) {
41
+ console.warn(this.formatMessage("WARN", ...args));
42
+ }
43
+ }
44
+ error(...args) {
45
+ if (this.level <= 3) {
46
+ console.error(this.formatMessage("ERROR", ...args));
47
+ }
48
+ }
49
+ success(...args) {
50
+ console.log(this.formatMessage("\u2713", ...args));
51
+ }
52
+ };
53
+ var logger = new Logger();
54
+ function createLogger(options) {
55
+ return new Logger(options);
56
+ }
57
+ _chunkXE4OXN2Wjs.__name.call(void 0, createLogger, "createLogger");
58
+
59
+
60
+
61
+
62
+
63
+
64
+ exports.LogLevel = LogLevel; exports.Logger = Logger; exports.logger = logger; exports.createLogger = createLogger;
65
+ //# sourceMappingURL=chunk-WCKSKU3C.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Volumes/Projects/wexts/packages/dist/chunk-WCKSKU3C.js","../src/core/logger.ts"],"names":["LogLevel","Logger","level","prefix","timestamp","options","formatMessage","args","Date","toISOString","console","success","log","logger","createLogger"],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B;AACA;ACJO,IAAKA,SAAAA,kBAAAA,CAAAA,QAAAA,CAAAA,SAAAA,EAAAA;ADMZ,EAAE,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO;AAC7C,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM;AAC3C,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM;AAC3C,EAAE,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO;AAC7C,EAAE,OCVUA,SAAAA;ADWZ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;ACEC,IAAMC,OAAAA,EAAN,MAAMA;ADAb,ECbA,OAaaA;ADCb,IAAI,qCAAM,IAAK,EAAE,QAAQ,CAAC;AAC1B,EAAE;AACF,ECFYC;ADGZ,ECFYC;ADGZ,ECFYC;ADGZ,ECDI,WAAA,CAAYC,QAAAA,EAAyB,CAAC,CAAA,EAAG;AACrC,IAAA,IAAA,CAAKH,MAAAA,mBAAQG,OAAAA,CAAQH,KAAAA,UAAK,GAAA;AAC1B,IAAA,IAAA,CAAKC,OAAAA,mBAASE,OAAAA,CAAQF,MAAAA,UAAU,YAAA;AAChC,IAAA,IAAA,CAAKC,UAAAA,mBAAYC,OAAAA,CAAQD,SAAAA,UAAa,MAAA;ADE9C,ECDI;ADEJ,ECAYE,aAAAA,CAAcJ,KAAAA,EAAAA,GAAkBK,IAAAA,EAAqB;AACzD,IAAA,MAAMH,UAAAA,EAAY,IAAA,CAAKA,UAAAA,EAAY,CAAA,CAAA,EAAA,iBAAI,IAAII,IAAAA,CAAAA,CAAAA,CAAAA,CAAOC,WAAAA,CAAW,CAAA,CAAA,CAAA,EAAA,EAAQ,EAAA;AACrE,IAAA,OAAO,CAAA,EAAA;AACX,EAAA;AAESF,EAAAA;AACD,IAAA;AACAG,MAAAA;AACJ,IAAA;AACJ,EAAA;AAEQH,EAAAA;AACA,IAAA;AACAG,MAAAA;AACJ,IAAA;AACJ,EAAA;AAEQH,EAAAA;AACA,IAAA;AACAG,MAAAA;AACJ,IAAA;AACJ,EAAA;AAESH,EAAAA;AACD,IAAA;AACAG,MAAAA;AACJ,IAAA;AACJ,EAAA;AAEAC,EAAAA;AACYC,IAAAA;AACZ,EAAA;AACJ;AAGaC;AAGGC;AACL,EAAA;AACX;AAFgBA;ADLJ;AACA;AACA;AACA;AACA;AACA;AACA","file":"/Volumes/Projects/wexts/packages/dist/chunk-WCKSKU3C.js","sourcesContent":[null,"export enum LogLevel {\n DEBUG = 0,\n INFO = 1,\n WARN = 2,\n ERROR = 3,\n}\n\nexport interface LoggerOptions {\n level?: LogLevel;\n prefix?: string;\n timestamp?: boolean;\n}\n\nexport class Logger {\n private level: LogLevel;\n private prefix: string;\n private timestamp: boolean;\n\n constructor(options: LoggerOptions = {}) {\n this.level = options.level ?? LogLevel.INFO;\n this.prefix = options.prefix ?? '[Fusion]';\n this.timestamp = options.timestamp ?? true;\n }\n\n private formatMessage(level: string, ...args: any[]): string {\n const timestamp = this.timestamp ? `[${new Date().toISOString()}]` : '';\n return `${timestamp} ${this.prefix} ${level}: ${args.join(' ')}`;\n }\n\n debug(...args: any[]): void {\n if (this.level <= LogLevel.DEBUG) {\n console.log(this.formatMessage('DEBUG', ...args));\n }\n }\n\n info(...args: any[]): void {\n if (this.level <= LogLevel.INFO) {\n console.log(this.formatMessage('INFO', ...args));\n }\n }\n\n warn(...args: any[]): void {\n if (this.level <= LogLevel.WARN) {\n console.warn(this.formatMessage('WARN', ...args));\n }\n }\n\n error(...args: any[]): void {\n if (this.level <= LogLevel.ERROR) {\n console.error(this.formatMessage('ERROR', ...args));\n }\n }\n\n success(...args: any[]): void {\n console.log(this.formatMessage('✓', ...args));\n }\n}\n\n// Export singleton instance\nexport const logger = new Logger();\n\n// Export factory\nexport function createLogger(options: LoggerOptions): Logger {\n return new Logger(options);\n}\n"]}
@@ -0,0 +1,12 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ var __export = (target, all) => {
4
+ for (var name in all)
5
+ __defProp(target, name, { get: all[name], enumerable: true });
6
+ };
7
+
8
+
9
+
10
+
11
+ exports.__name = __name; exports.__export = __export;
12
+ //# sourceMappingURL=chunk-XE4OXN2W.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Volumes/Projects/wexts/packages/dist/chunk-XE4OXN2W.js"],"names":[],"mappings":"AAAA,6EAAI,UAAU,EAAE,MAAM,CAAC,cAAc;AACrC,IAAI,OAAO,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;AACxF,IAAI,SAAS,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG;AAChC,EAAE,IAAI,CAAC,IAAI,KAAK,GAAG,GAAG;AACtB,IAAI,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;AACjE,CAAC;AACD;AACA;AACE;AACA;AACF,qDAAC","file":"/Volumes/Projects/wexts/packages/dist/chunk-XE4OXN2W.js"}
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+
4
+ declare function createCliProgram(): Command;
5
+ interface DoctorResult {
6
+ errors: string[];
7
+ warnings: string[];
8
+ }
9
+ declare function runDoctor(cwd: string, security?: boolean): DoctorResult;
10
+ declare function createProject(projectName: string, template: string, options: {
11
+ skipInstall: boolean;
12
+ wextsDependency?: string;
13
+ }): Promise<void>;
14
+ type ScaffoldGeneratorType = 'rpc' | 'service' | 'module' | 'entity' | 'guard' | 'config';
15
+ interface ScaffoldGeneratorOptions {
16
+ type: ScaffoldGeneratorType;
17
+ name?: string;
18
+ targetRoot: string;
19
+ force?: boolean;
20
+ }
21
+ declare function scaffoldGenerator(options: ScaffoldGeneratorOptions): Promise<string[]>;
22
+
23
+ export { type DoctorResult, createCliProgram, createProject, runDoctor, scaffoldGenerator };
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+
4
+ declare function createCliProgram(): Command;
5
+ interface DoctorResult {
6
+ errors: string[];
7
+ warnings: string[];
8
+ }
9
+ declare function runDoctor(cwd: string, security?: boolean): DoctorResult;
10
+ declare function createProject(projectName: string, template: string, options: {
11
+ skipInstall: boolean;
12
+ wextsDependency?: string;
13
+ }): Promise<void>;
14
+ type ScaffoldGeneratorType = 'rpc' | 'service' | 'module' | 'entity' | 'guard' | 'config';
15
+ interface ScaffoldGeneratorOptions {
16
+ type: ScaffoldGeneratorType;
17
+ name?: string;
18
+ targetRoot: string;
19
+ force?: boolean;
20
+ }
21
+ declare function scaffoldGenerator(options: ScaffoldGeneratorOptions): Promise<string[]>;
22
+
23
+ export { type DoctorResult, createCliProgram, createProject, runDoctor, scaffoldGenerator };