wexts 2.0.8 → 2.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +123 -237
- package/dist/cli/index.js +19 -9
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/index.mjs +19 -9
- package/dist/cli/index.mjs.map +1 -1
- package/package.json +2 -2
- package/templates/nestjs-api/.env +4 -0
- package/templates/nestjs-api/.env.example +3 -0
- package/templates/nestjs-api/prisma/dev.db +0 -0
package/README.md
CHANGED
|
@@ -4,39 +4,37 @@
|
|
|
4
4
|

|
|
5
5
|

|
|
6
6
|
|
|
7
|
-
**Wexts v2** is a modern, production
|
|
7
|
+
**Wexts v2** is a modern, production‑ready full‑stack framework that seamlessly integrates **NestJS 11** and **Next.js 16**. Build type‑safe applications with automatic API client generation, shared types, and an exceptional developer experience.
|
|
8
8
|
|
|
9
9
|
> **Requirements:** Node.js 20.9.0+, PNPM 10.0.0+
|
|
10
10
|
|
|
11
11
|
## ✨ What's New in v2
|
|
12
12
|
|
|
13
13
|
- 🎯 **Next.js 16** with Turbopack (stable) and React Compiler
|
|
14
|
-
- 🚀 **NestJS 11** with latest architectural improvements
|
|
14
|
+
- 🚀 **NestJS 11** with latest architectural improvements
|
|
15
15
|
- ⚡ **TypeScript 5.9** with enhanced type inference
|
|
16
16
|
- 📦 **Modern Build System** with optimized bundling
|
|
17
17
|
- 🔥 **React 19** full support
|
|
18
18
|
|
|
19
19
|
## 🚀 Features
|
|
20
20
|
|
|
21
|
-
- **🔗 NestJS + Next.js Integration
|
|
22
|
-
- **📦 All
|
|
23
|
-
- **🎯 Type
|
|
24
|
-
- **🛠️ CLI Tools
|
|
25
|
-
- **⚡ Auto API Client
|
|
26
|
-
- **🔐 Auth Built
|
|
27
|
-
- **📝 Configuration Management
|
|
28
|
-
- **🎨 React Hooks
|
|
21
|
+
- **🔗 NestJS + Next.js Integration** – seamless backend‑frontend connection
|
|
22
|
+
- **📦 All‑in‑One SDK** – core utilities, HTTP client, decorators, and hooks in one package
|
|
23
|
+
- **🎯 Type‑Safe** – end‑to‑end TypeScript from database to UI
|
|
24
|
+
- **🛠️ CLI Tools** – scaffold projects, generate code, manage development
|
|
25
|
+
- **⚡ Auto API Client** – generate type‑safe clients from NestJS controllers
|
|
26
|
+
- **🔐 Auth Built‑in** – ready‑to‑use authentication hooks for Next.js
|
|
27
|
+
- **📝 Configuration Management** – environment‑aware config loader
|
|
28
|
+
- **🎨 React Hooks** – `useWexts()`, `useAuth()` for seamless API integration
|
|
29
29
|
|
|
30
30
|
---
|
|
31
31
|
|
|
32
32
|
## 📦 Installation
|
|
33
33
|
|
|
34
|
-
### Global CLI
|
|
34
|
+
### Global CLI (run without installing globally)
|
|
35
35
|
|
|
36
36
|
```bash
|
|
37
|
-
|
|
38
|
-
# or
|
|
39
|
-
yarn global add wexts
|
|
37
|
+
npx wexts
|
|
40
38
|
```
|
|
41
39
|
|
|
42
40
|
### Project Dependency
|
|
@@ -54,16 +52,16 @@ yarn add wexts
|
|
|
54
52
|
### Create New Project
|
|
55
53
|
|
|
56
54
|
```bash
|
|
57
|
-
|
|
55
|
+
npx wexts create my-app --template monorepo
|
|
58
56
|
cd my-app
|
|
59
|
-
|
|
57
|
+
pnpm dev
|
|
60
58
|
```
|
|
61
59
|
|
|
62
60
|
This creates:
|
|
63
|
-
- `apps/api/`
|
|
64
|
-
- `apps/web/`
|
|
65
|
-
- `packages/types/`
|
|
66
|
-
- `packages/api-client/`
|
|
61
|
+
- `apps/api/` – NestJS 11 backend
|
|
62
|
+
- `apps/web/` – Next.js 16 frontend
|
|
63
|
+
- `packages/types/` – shared TypeScript definitions
|
|
64
|
+
- `packages/api-client/` – auto‑generated SDK
|
|
67
65
|
|
|
68
66
|
---
|
|
69
67
|
|
|
@@ -73,24 +71,24 @@ This creates:
|
|
|
73
71
|
|
|
74
72
|
```typescript
|
|
75
73
|
import { Controller, Get, Post, Body } from '@nestjs/common';
|
|
76
|
-
import {
|
|
74
|
+
import { WextsController, WextsGet, WextsPost } from 'wexts/nest';
|
|
77
75
|
|
|
78
|
-
@
|
|
76
|
+
@WextsController('users')
|
|
79
77
|
@Controller('users')
|
|
80
78
|
export class UsersController {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
79
|
+
@WextsGet()
|
|
80
|
+
async findAll() {
|
|
81
|
+
return this.usersService.findAll();
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
@WextsPost()
|
|
85
|
+
async create(@Body() createUserDto: CreateUserDto) {
|
|
86
|
+
return this.usersService.create(createUserDto);
|
|
87
|
+
}
|
|
90
88
|
}
|
|
91
89
|
```
|
|
92
90
|
|
|
93
|
-
**Benefits**: The
|
|
91
|
+
**Benefits**: The `WextsController` and `WextsRoute` decorators add metadata for automatic API client generation.
|
|
94
92
|
|
|
95
93
|
---
|
|
96
94
|
|
|
@@ -100,18 +98,18 @@ export class UsersController {
|
|
|
100
98
|
|
|
101
99
|
```tsx
|
|
102
100
|
// app/layout.tsx
|
|
103
|
-
import {
|
|
104
|
-
|
|
105
|
-
export default function RootLayout({ children }) {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
101
|
+
import { WextsProvider } from 'wexts/next';
|
|
102
|
+
|
|
103
|
+
export default function RootLayout({ children }: { children: React.ReactNode }) {
|
|
104
|
+
return (
|
|
105
|
+
<html lang="en">
|
|
106
|
+
<body>
|
|
107
|
+
<WextsProvider baseUrl={process.env.NEXT_PUBLIC_API_URL || '/api'}>
|
|
108
|
+
{children}
|
|
109
|
+
</WextsProvider>
|
|
110
|
+
</body>
|
|
111
|
+
</html>
|
|
112
|
+
);
|
|
115
113
|
}
|
|
116
114
|
```
|
|
117
115
|
|
|
@@ -119,26 +117,28 @@ export default function RootLayout({ children }) {
|
|
|
119
117
|
|
|
120
118
|
```tsx
|
|
121
119
|
'use client';
|
|
122
|
-
import {
|
|
120
|
+
import { useWexts, useAuth } from 'wexts/next';
|
|
123
121
|
import { useEffect, useState } from 'react';
|
|
124
122
|
|
|
125
123
|
export default function UsersPage() {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
124
|
+
const { client } = useWexts();
|
|
125
|
+
const { user, isAuthenticated } = useAuth();
|
|
126
|
+
const [users, setUsers] = useState([]);
|
|
127
|
+
|
|
128
|
+
useEffect(() => {
|
|
129
|
+
client.get<User[]>('/users').then(setUsers);
|
|
130
|
+
}, []);
|
|
131
|
+
|
|
132
|
+
return (
|
|
133
|
+
<div>
|
|
134
|
+
{isAuthenticated && <p>Welcome, {user.name}!</p>}
|
|
135
|
+
<ul>
|
|
136
|
+
{users.map(u => (
|
|
137
|
+
<li key={u.id}>{u.name}</li>
|
|
138
|
+
))}
|
|
139
|
+
</ul>
|
|
140
|
+
</div>
|
|
141
|
+
);
|
|
142
142
|
}
|
|
143
143
|
```
|
|
144
144
|
|
|
@@ -153,23 +153,23 @@ import { apiFetcher } from 'wexts/client';
|
|
|
153
153
|
const users = await apiFetcher.get<User[]>('/users');
|
|
154
154
|
|
|
155
155
|
// POST request
|
|
156
|
-
const newUser = await apiFetcher.post('/users', {
|
|
157
|
-
|
|
158
|
-
|
|
156
|
+
const newUser = await apiFetcher.post('/users', {
|
|
157
|
+
name: 'John',
|
|
158
|
+
email: 'john@example.com',
|
|
159
159
|
});
|
|
160
160
|
|
|
161
161
|
// Automatic Bearer token from localStorage
|
|
162
|
-
// Token stored as '
|
|
162
|
+
// Token stored as 'wexts_token'
|
|
163
163
|
```
|
|
164
164
|
|
|
165
165
|
---
|
|
166
166
|
|
|
167
|
-
|
|
167
|
+
## ⚙️ Configuration
|
|
168
168
|
|
|
169
169
|
```typescript
|
|
170
170
|
import { config } from 'wexts';
|
|
171
171
|
|
|
172
|
-
// Load from
|
|
172
|
+
// Load from wexts.config.json or environment variables
|
|
173
173
|
const dbUrl = config.load('database');
|
|
174
174
|
const apiKey = config.load('apiKey', 'default-key');
|
|
175
175
|
|
|
@@ -177,25 +177,25 @@ const apiKey = config.load('apiKey', 'default-key');
|
|
|
177
177
|
config.set('feature_flags', { newUI: true });
|
|
178
178
|
```
|
|
179
179
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
### Logging
|
|
180
|
+
Create `wexts.config.json` in your project root:
|
|
183
181
|
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
182
|
+
```json
|
|
183
|
+
{
|
|
184
|
+
"database": "postgresql://localhost/mydb",
|
|
185
|
+
"apiPort": 5050,
|
|
186
|
+
"webPort": 3000,
|
|
187
|
+
"jwt": {
|
|
188
|
+
"secret": "your-secret-key",
|
|
189
|
+
"expiresIn": "7d"
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
```
|
|
190
193
|
|
|
191
|
-
|
|
192
|
-
const apiLogger = createLogger({
|
|
193
|
-
prefix: '[API]',
|
|
194
|
-
level: LogLevel.DEBUG,
|
|
195
|
-
timestamp: true
|
|
196
|
-
});
|
|
194
|
+
**Environment Variables**: Prefix with `WEXTS_`
|
|
197
195
|
|
|
198
|
-
|
|
196
|
+
```bash
|
|
197
|
+
WEXTS_DATABASE=postgresql://localhost/mydb
|
|
198
|
+
WEXTS_JWT__SECRET=your-secret-key
|
|
199
199
|
```
|
|
200
200
|
|
|
201
201
|
---
|
|
@@ -204,17 +204,19 @@ apiLogger.debug('Detailed debug info');
|
|
|
204
204
|
|
|
205
205
|
```bash
|
|
206
206
|
# Create new project
|
|
207
|
-
|
|
207
|
+
wexts create <name> [--template monorepo|api|web]
|
|
208
208
|
|
|
209
209
|
# Start development servers
|
|
210
|
-
|
|
210
|
+
wexts dev [--port <port>]
|
|
211
211
|
|
|
212
212
|
# Build for production
|
|
213
|
-
|
|
213
|
+
wexts build
|
|
214
214
|
|
|
215
215
|
# Generate code
|
|
216
|
-
|
|
217
|
-
|
|
216
|
+
wexts generate controller <name>
|
|
217
|
+
|
|
218
|
+
# Shortcut for generate
|
|
219
|
+
wexts g module <name>
|
|
218
220
|
```
|
|
219
221
|
|
|
220
222
|
---
|
|
@@ -223,60 +225,47 @@ fusion g module <name>
|
|
|
223
225
|
|
|
224
226
|
### Core Modules
|
|
225
227
|
|
|
226
|
-
#### `wexts` (Main)
|
|
227
|
-
|
|
228
228
|
```typescript
|
|
229
229
|
import { Core, Config, Insight, Nest, Next } from 'wexts';
|
|
230
230
|
```
|
|
231
231
|
|
|
232
|
-
-
|
|
233
|
-
-
|
|
234
|
-
-
|
|
235
|
-
-
|
|
236
|
-
-
|
|
232
|
+
- **Core** – process management, filesystem utilities
|
|
233
|
+
- **Config** – configuration loader
|
|
234
|
+
- **Insight** – logging and metrics
|
|
235
|
+
- **Nest** – NestJS decorators and helpers
|
|
236
|
+
- **Next** – Next.js providers and hooks
|
|
237
237
|
|
|
238
|
-
|
|
238
|
+
### `wexts/client`
|
|
239
239
|
|
|
240
240
|
```typescript
|
|
241
|
-
import {
|
|
241
|
+
import { WextsFetcher, apiFetcher } from 'wexts/client';
|
|
242
242
|
```
|
|
243
243
|
|
|
244
|
-
-
|
|
245
|
-
-
|
|
244
|
+
- **WextsFetcher** – HTTP client class
|
|
245
|
+
- **apiFetcher** – singleton instance
|
|
246
246
|
|
|
247
|
-
|
|
247
|
+
### `wexts/nest`
|
|
248
248
|
|
|
249
249
|
```typescript
|
|
250
|
-
import {
|
|
251
|
-
FusionController,
|
|
252
|
-
FusionGet,
|
|
253
|
-
FusionPost,
|
|
254
|
-
FusionPut,
|
|
255
|
-
FusionDelete
|
|
256
|
-
} from 'wexts/nest';
|
|
250
|
+
import { WextsController, WextsGet, WextsPost, WextsPut, WextsDelete } from 'wexts/nest';
|
|
257
251
|
```
|
|
258
252
|
|
|
259
|
-
- NestJS decorators for API codegen
|
|
260
|
-
- Works alongside standard `@nestjs/common` decorators
|
|
253
|
+
- NestJS decorators for API codegen (works alongside standard `@nestjs/common` decorators)
|
|
261
254
|
|
|
262
|
-
|
|
255
|
+
### `wexts/next`
|
|
263
256
|
|
|
264
257
|
```typescript
|
|
265
|
-
import {
|
|
266
|
-
FusionProvider,
|
|
267
|
-
useFusion,
|
|
268
|
-
useAuth
|
|
269
|
-
} from 'wexts/next';
|
|
258
|
+
import { WextsProvider, useWexts, useAuth } from 'wexts/next';
|
|
270
259
|
```
|
|
271
260
|
|
|
272
|
-
-
|
|
273
|
-
-
|
|
274
|
-
-
|
|
261
|
+
- **WextsProvider** – React context provider for API client
|
|
262
|
+
- **useWexts()** – access API client in components
|
|
263
|
+
- **useAuth()** – authentication state management
|
|
275
264
|
|
|
276
|
-
|
|
265
|
+
### `wexts/types`
|
|
277
266
|
|
|
278
267
|
```typescript
|
|
279
|
-
import type { User, ApiResponse,
|
|
268
|
+
import type { User, ApiResponse, WextsConfig } from 'wexts/types';
|
|
280
269
|
```
|
|
281
270
|
|
|
282
271
|
- Shared TypeScript type definitions
|
|
@@ -285,124 +274,21 @@ import type { User, ApiResponse, FusionConfig } from 'wexts/types';
|
|
|
285
274
|
|
|
286
275
|
## 🏗️ Project Structure
|
|
287
276
|
|
|
288
|
-
When you create a
|
|
277
|
+
When you create a project with `wexts create`, you get:
|
|
289
278
|
|
|
290
|
-
```
|
|
279
|
+
```text
|
|
291
280
|
my-app/
|
|
292
|
-
├── apps/
|
|
293
|
-
│ ├── api/
|
|
294
|
-
│ │
|
|
295
|
-
│
|
|
296
|
-
│
|
|
297
|
-
|
|
298
|
-
│
|
|
299
|
-
│
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
│ ├── app/
|
|
304
|
-
│ │ ├── layout.tsx
|
|
305
|
-
│ │ ├── page.tsx
|
|
306
|
-
│ │ └── users/
|
|
307
|
-
│ │ └── page.tsx
|
|
308
|
-
│ └── package.json
|
|
309
|
-
│
|
|
310
|
-
├── packages/
|
|
311
|
-
│ ├── types/ # Shared DTOs
|
|
312
|
-
│ │ └── src/
|
|
313
|
-
│ │ ├── user.ts
|
|
314
|
-
│ │ └── index.ts
|
|
315
|
-
│ │
|
|
316
|
-
│ └── api-client/ # Auto-generated SDK
|
|
317
|
-
│ └── src/
|
|
318
|
-
│ └── index.ts
|
|
319
|
-
│
|
|
320
|
-
├── turbo.json # TurboRepo config
|
|
321
|
-
├── package.json # Root package
|
|
322
|
-
└── fusion.config.json # Fusion configuration
|
|
323
|
-
```
|
|
324
|
-
|
|
325
|
-
---
|
|
326
|
-
|
|
327
|
-
## ⚙️ Configuration
|
|
328
|
-
|
|
329
|
-
Create `fusion.config.json` in your project root:
|
|
330
|
-
|
|
331
|
-
```json
|
|
332
|
-
{
|
|
333
|
-
"database": "postgresql://localhost/mydb",
|
|
334
|
-
"apiPort": 5050,
|
|
335
|
-
"webPort": 3000,
|
|
336
|
-
"jwt": {
|
|
337
|
-
"secret": "your-secret-key",
|
|
338
|
-
"expiresIn": "7d"
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
```
|
|
342
|
-
|
|
343
|
-
Access via:
|
|
344
|
-
|
|
345
|
-
```typescript
|
|
346
|
-
import { config } from 'wexts';
|
|
347
|
-
|
|
348
|
-
const dbUrl = config.load('database');
|
|
349
|
-
const jwtConfig = config.load('jwt');
|
|
350
|
-
```
|
|
351
|
-
|
|
352
|
-
**Environment Variables**: Prefix with `FUSION_`
|
|
353
|
-
|
|
354
|
-
```bash
|
|
355
|
-
FUSION_DATABASE=postgresql://localhost/mydb
|
|
356
|
-
FUSION_JWT__SECRET=your-secret-key
|
|
357
|
-
```
|
|
358
|
-
|
|
359
|
-
---
|
|
360
|
-
|
|
361
|
-
## 🔐 Authentication Example
|
|
362
|
-
|
|
363
|
-
### Backend (NestJS)
|
|
364
|
-
|
|
365
|
-
```typescript
|
|
366
|
-
import { Controller, Post, Body } from '@nestjs/common';
|
|
367
|
-
import { FusionPost } from 'wexts/nest';
|
|
368
|
-
|
|
369
|
-
@Controller('auth')
|
|
370
|
-
export class AuthController {
|
|
371
|
-
@FusionPost()
|
|
372
|
-
@Post('login')
|
|
373
|
-
async login(@Body() credentials: LoginDto) {
|
|
374
|
-
const token = await this.authService.validateUser(credentials);
|
|
375
|
-
return { token, user: { id: 1, email: credentials.email } };
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
```
|
|
379
|
-
|
|
380
|
-
### Frontend (Next.js)
|
|
381
|
-
|
|
382
|
-
```tsx
|
|
383
|
-
'use client';
|
|
384
|
-
import { useAuth } from 'wexts/next';
|
|
385
|
-
|
|
386
|
-
export default function LoginPage() {
|
|
387
|
-
const { login, user, isAuthenticated, loading } = useAuth();
|
|
388
|
-
|
|
389
|
-
const handleLogin = async (e: FormEvent) => {
|
|
390
|
-
e.preventDefault();
|
|
391
|
-
await login('user@example.com', 'password');
|
|
392
|
-
// Automatically redirects or updates UI
|
|
393
|
-
};
|
|
394
|
-
|
|
395
|
-
if (loading) return <p>Loading...</p>;
|
|
396
|
-
if (isAuthenticated) return <p>Welcome, {user.name}!</p>;
|
|
397
|
-
|
|
398
|
-
return (
|
|
399
|
-
<form onSubmit={handleLogin}>
|
|
400
|
-
<input type="email" required />
|
|
401
|
-
<input type="password" required />
|
|
402
|
-
<button type="submit">Login</button>
|
|
403
|
-
</form>
|
|
404
|
-
);
|
|
405
|
-
}
|
|
281
|
+
├── apps/
|
|
282
|
+
│ ├── api/ # NestJS 11 backend
|
|
283
|
+
│ │ └── src/
|
|
284
|
+
│ └── web/ # Next.js 16 frontend
|
|
285
|
+
│ └── app/
|
|
286
|
+
├── packages/
|
|
287
|
+
│ ├── types/ # Shared DTOs
|
|
288
|
+
│ └── api-client/ # Auto‑generated SDK
|
|
289
|
+
├── turbo.json
|
|
290
|
+
├── package.json
|
|
291
|
+
└── wexts.config.json
|
|
406
292
|
```
|
|
407
293
|
|
|
408
294
|
---
|
|
@@ -412,7 +298,7 @@ export default function LoginPage() {
|
|
|
412
298
|
### Build
|
|
413
299
|
|
|
414
300
|
```bash
|
|
415
|
-
|
|
301
|
+
wexts build
|
|
416
302
|
```
|
|
417
303
|
|
|
418
304
|
### Deploy API (NestJS)
|
package/dist/cli/index.js
CHANGED
|
@@ -186,6 +186,12 @@ async function createProject(projectName, template) {
|
|
|
186
186
|
if (fs.existsSync(apiTemplatePath)) {
|
|
187
187
|
fs.cpSync(apiTemplatePath, apiDestPath, { recursive: true });
|
|
188
188
|
_chunkDW6GOKMFjs.logger.success(" - Copied API template");
|
|
189
|
+
const envExamplePath = path.join(apiDestPath, ".env.example");
|
|
190
|
+
const envPath = path.join(apiDestPath, ".env");
|
|
191
|
+
if (fs.existsSync(envExamplePath) && !fs.existsSync(envPath)) {
|
|
192
|
+
fs.copyFileSync(envExamplePath, envPath);
|
|
193
|
+
_chunkDW6GOKMFjs.logger.success(" - Created .env from .env.example");
|
|
194
|
+
}
|
|
189
195
|
} else {
|
|
190
196
|
_chunkDW6GOKMFjs.logger.warn(` \u26A0\uFE0F API template not found at ${apiTemplatePath}`);
|
|
191
197
|
}
|
|
@@ -203,22 +209,18 @@ async function createProject(projectName, template) {
|
|
|
203
209
|
version: "0.0.0",
|
|
204
210
|
private: true,
|
|
205
211
|
scripts: {
|
|
206
|
-
"build": "turbo
|
|
207
|
-
"dev": "turbo
|
|
208
|
-
"lint": "turbo
|
|
212
|
+
"build": "pnpm exec turbo build",
|
|
213
|
+
"dev": "pnpm exec turbo dev",
|
|
214
|
+
"lint": "pnpm exec turbo lint",
|
|
209
215
|
"format": 'prettier --write "**/*.{ts,tsx,md}"'
|
|
210
216
|
},
|
|
211
217
|
devDependencies: {
|
|
212
|
-
"turbo": "
|
|
218
|
+
"turbo": "^2.6.1",
|
|
213
219
|
"prettier": "latest",
|
|
214
220
|
"typescript": "^5.9.3",
|
|
215
221
|
"wexts": "latest"
|
|
216
222
|
},
|
|
217
|
-
packageManager: "pnpm@10.0.0"
|
|
218
|
-
workspaces: [
|
|
219
|
-
"apps/*",
|
|
220
|
-
"packages/*"
|
|
221
|
-
]
|
|
223
|
+
packageManager: "pnpm@10.0.0"
|
|
222
224
|
};
|
|
223
225
|
fs.writeFileSync(
|
|
224
226
|
path.join(projectPath, "package.json"),
|
|
@@ -242,6 +244,14 @@ async function createProject(projectName, template) {
|
|
|
242
244
|
path.join(projectPath, "turbo.json"),
|
|
243
245
|
JSON.stringify(turboJson, null, 2)
|
|
244
246
|
);
|
|
247
|
+
const pnpmWorkspace = `packages:
|
|
248
|
+
- 'apps/*'
|
|
249
|
+
- 'packages/*'
|
|
250
|
+
`;
|
|
251
|
+
fs.writeFileSync(
|
|
252
|
+
path.join(projectPath, "pnpm-workspace.yaml"),
|
|
253
|
+
pnpmWorkspace
|
|
254
|
+
);
|
|
245
255
|
_chunkDW6GOKMFjs.logger.success("\u2705 Project structure created");
|
|
246
256
|
_chunkDW6GOKMFjs.logger.info("\u{1F4E6} Installing dependencies...");
|
|
247
257
|
try {
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["c:\\Users\\ziad\\Desktop\\wexts\\packages\\dist\\cli\\index.js"],"names":[],"mappings":"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AACA,IAAA;AACA,MAAA;AACA;AACA,MAAA;AACA;AACA,MAAA;AACA;AACA,MAAA;AACA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,
|
|
1
|
+
{"version":3,"sources":["c:\\Users\\ziad\\Desktop\\wexts\\packages\\dist\\cli\\index.js"],"names":[],"mappings":"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AACA,IAAA;AACA,MAAA;AACA;AACA,MAAA;AACA;AACA,MAAA;AACA;AACA,MAAA;AACA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,kBAAA;AACA,IAAA;AACA;AACA;AACA,IAAA;AACA,IAAA;AACA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA;AACA","file":"C:\\Users\\ziad\\Desktop\\wexts\\packages\\dist\\cli\\index.js","sourcesContent":[null]}
|
package/dist/cli/index.mjs
CHANGED
|
@@ -188,6 +188,12 @@ async function createProject(projectName, template) {
|
|
|
188
188
|
if (fs.existsSync(apiTemplatePath)) {
|
|
189
189
|
fs.cpSync(apiTemplatePath, apiDestPath, { recursive: true });
|
|
190
190
|
logger.success(" - Copied API template");
|
|
191
|
+
const envExamplePath = path.join(apiDestPath, ".env.example");
|
|
192
|
+
const envPath = path.join(apiDestPath, ".env");
|
|
193
|
+
if (fs.existsSync(envExamplePath) && !fs.existsSync(envPath)) {
|
|
194
|
+
fs.copyFileSync(envExamplePath, envPath);
|
|
195
|
+
logger.success(" - Created .env from .env.example");
|
|
196
|
+
}
|
|
191
197
|
} else {
|
|
192
198
|
logger.warn(` \u26A0\uFE0F API template not found at ${apiTemplatePath}`);
|
|
193
199
|
}
|
|
@@ -205,22 +211,18 @@ async function createProject(projectName, template) {
|
|
|
205
211
|
version: "0.0.0",
|
|
206
212
|
private: true,
|
|
207
213
|
scripts: {
|
|
208
|
-
"build": "turbo
|
|
209
|
-
"dev": "turbo
|
|
210
|
-
"lint": "turbo
|
|
214
|
+
"build": "pnpm exec turbo build",
|
|
215
|
+
"dev": "pnpm exec turbo dev",
|
|
216
|
+
"lint": "pnpm exec turbo lint",
|
|
211
217
|
"format": 'prettier --write "**/*.{ts,tsx,md}"'
|
|
212
218
|
},
|
|
213
219
|
devDependencies: {
|
|
214
|
-
"turbo": "
|
|
220
|
+
"turbo": "^2.6.1",
|
|
215
221
|
"prettier": "latest",
|
|
216
222
|
"typescript": "^5.9.3",
|
|
217
223
|
"wexts": "latest"
|
|
218
224
|
},
|
|
219
|
-
packageManager: "pnpm@10.0.0"
|
|
220
|
-
workspaces: [
|
|
221
|
-
"apps/*",
|
|
222
|
-
"packages/*"
|
|
223
|
-
]
|
|
225
|
+
packageManager: "pnpm@10.0.0"
|
|
224
226
|
};
|
|
225
227
|
fs.writeFileSync(
|
|
226
228
|
path.join(projectPath, "package.json"),
|
|
@@ -244,6 +246,14 @@ async function createProject(projectName, template) {
|
|
|
244
246
|
path.join(projectPath, "turbo.json"),
|
|
245
247
|
JSON.stringify(turboJson, null, 2)
|
|
246
248
|
);
|
|
249
|
+
const pnpmWorkspace = `packages:
|
|
250
|
+
- 'apps/*'
|
|
251
|
+
- 'packages/*'
|
|
252
|
+
`;
|
|
253
|
+
fs.writeFileSync(
|
|
254
|
+
path.join(projectPath, "pnpm-workspace.yaml"),
|
|
255
|
+
pnpmWorkspace
|
|
256
|
+
);
|
|
247
257
|
logger.success("\u2705 Project structure created");
|
|
248
258
|
logger.info("\u{1F4E6} Installing dependencies...");
|
|
249
259
|
try {
|
package/dist/cli/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cli/index.ts"],"sourcesContent":["#!/usr/bin/env node\r\n\r\nimport { Command } from 'commander';\r\nimport { logger } from '../core/logger';\r\nimport * as pc from 'picocolors';\r\nimport inquirer from 'inquirer';\r\nimport * as fs from 'fs';\r\nimport * as path from 'path';\r\nimport { execSync } from 'child_process';\r\n\r\nconst program = new Command();\r\n\r\nprogram\r\n .name('wexts')\r\n .description('Wexts Framework - Next.js 16 + NestJS 11')\r\n .version('2.0.0');\r\n\r\n// Interactive Mode (when no command is provided)\r\nprogram\r\n .action(async () => {\r\n console.log(pc.cyan(`\r\n╔══════════════════════════════════════════╗\r\n║ ║\r\n║ ${pc.bold('🚀 Wexts Framework v2.0')} ║\r\n║ ║\r\n║ Next.js 16 + NestJS 11 Full-Stack ║\r\n║ ║\r\n╚══════════════════════════════════════════╝\r\n `));\r\n\r\n const { action } = await inquirer.prompt([\r\n {\r\n type: 'list',\r\n name: 'action',\r\n message: 'What would you like to do?',\r\n choices: [\r\n { name: '📦 Create a new project', value: 'create' },\r\n { name: '🚀 Start development server', value: 'dev' },\r\n { name: '🔨 Build for production', value: 'build' },\r\n { name: '⚡ Generate code', value: 'generate' },\r\n { name: '🤖 Generate API client', value: 'codegen' },\r\n { name: '❌ Exit', value: 'exit' },\r\n ],\r\n },\r\n ]);\r\n\r\n if (action === 'exit') {\r\n logger.info('Goodbye! 👋');\r\n process.exit(0);\r\n }\r\n\r\n // Route to appropriate command\r\n if (action === 'create') {\r\n const { projectName, template } = await inquirer.prompt([\r\n {\r\n type: 'input',\r\n name: 'projectName',\r\n message: 'Project name:',\r\n default: 'my-wexts-app',\r\n },\r\n {\r\n type: 'list',\r\n name: 'template',\r\n message: 'Select template:',\r\n choices: [\r\n { name: '📦 Monorepo (Next.js + NestJS)', value: 'monorepo' },\r\n { name: '🎯 API only (NestJS)', value: 'api' },\r\n { name: '🌐 Web only (Next.js)', value: 'web' },\r\n ],\r\n },\r\n ]);\r\n\r\n await createProject(projectName, template);\r\n } else if (action === 'dev') {\r\n logger.info(pc.green('🚀 Starting development servers...\\n'));\r\n logger.warn('Dev server not yet implemented');\r\n } else if (action === 'build') {\r\n logger.info(pc.blue('🔨 Building project...\\n'));\r\n logger.warn('Build not yet implemented');\r\n } else if (action === 'generate') {\r\n const { type, name } = await inquirer.prompt([\r\n {\r\n type: 'list',\r\n name: 'type',\r\n message: 'What to generate?',\r\n choices: ['controller', 'module', 'service', 'page'],\r\n },\r\n {\r\n type: 'input',\r\n name: 'name',\r\n message: 'Name:',\r\n },\r\n ]);\r\n logger.info(pc.magenta(`\\n⚡ Generating ${type}: ${name}\\n`));\r\n logger.warn('Code generation not yet implemented');\r\n } else if (action === 'codegen') {\r\n logger.info(pc.cyan('\\n🤖 Generating API client...\\n'));\r\n logger.warn('Codegen not yet implemented');\r\n }\r\n });\r\n\r\n// Create Command\r\nprogram\r\n .command('create <project-name>')\r\n .description('Create a new wexts project')\r\n .option('-t, --template <template>', 'Template to use (monorepo|api|web)', 'monorepo')\r\n .action(async (projectName: string, options: any) => {\r\n await createProject(projectName, options.template);\r\n });\r\n\r\n// Dev Command\r\nprogram\r\n .command('dev')\r\n .description('Start development servers')\r\n .option('-a, --api <path>', 'Path to API project', './apps/api')\r\n .option('-w, --web <path>', 'Path to Web project', './apps/web')\r\n .option('-p, --port <port>', 'Port for web server', '3000')\r\n .option('--api-port <port>', 'Port for API server', '5050')\r\n .option('--no-proxy', 'Disable proxy server')\r\n .action(async (options: any) => {\r\n logger.info(pc.green('🚀 Starting Wexts development servers...\\n'));\r\n\r\n const { FusionDevServer } = await import('../dev-server/index.js');\r\n const server = new FusionDevServer();\r\n\r\n try {\r\n await server.start({\r\n apiPath: options.api,\r\n webPath: options.web,\r\n webPort: parseInt(options.port),\r\n apiPort: parseInt(options.apiPort),\r\n useProxy: options.proxy,\r\n });\r\n } catch (error: any) {\r\n logger.error('Failed to start dev server:', error.message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\n// Build Command\r\nprogram\r\n .command('build')\r\n .description('Build for production')\r\n .action(async () => {\r\n logger.info(pc.blue('Building Wexts project...'));\r\n\r\n // TODO: Build logic\r\n logger.warn('Build not yet implemented');\r\n });\r\n\r\n// Generate Command\r\nprogram\r\n .command('generate <type> <name>')\r\n .alias('g')\r\n .description('Generate code (controller|module|page)')\r\n .action(async (type: string, name: string) => {\r\n logger.info(pc.magenta(`Generating ${type}: ${name}`));\r\n\r\n // TODO: Code generation\r\n logger.warn('Code generation not yet implemented');\r\n });\r\n\r\n// Codegen Command\r\nprogram\r\n .command('codegen')\r\n .description('Generate API client from NestJS controllers')\r\n .option('-w, --watch', 'Watch mode - regenerate on changes')\r\n .option('-p, --project <path>', 'Path to NestJS project', './apps/api')\r\n .option('-o, --output <path>', 'Output path for generated client', './packages/api-client/src')\r\n .action(async (options: any) => {\r\n const { NestJSParser, ClientGenerator, CodegenWatcher } = await import('../codegen/index.js');\r\n\r\n if (options.watch) {\r\n logger.info(pc.cyan('Starting codegen in watch mode...'));\r\n const watcher = new CodegenWatcher();\r\n await watcher.watch({\r\n projectPath: options.project,\r\n outputPath: options.output,\r\n });\r\n } else {\r\n logger.info(pc.cyan('Generating API client...'));\r\n const parser = new NestJSParser(options.project);\r\n const controllers = parser.findFusionControllers();\r\n\r\n const generator = new ClientGenerator();\r\n await generator.generate({\r\n controllers,\r\n outputPath: options.output,\r\n });\r\n }\r\n });\r\n\r\n// Helper function for creating project\r\nasync function createProject(projectName: string, template: string) {\r\n logger.info(pc.cyan(`Creating wexts project: ${pc.bold(projectName)}`));\r\n logger.info(`Template: ${template}`);\r\n\r\n const projectPath = path.join(process.cwd(), projectName);\r\n\r\n if (fs.existsSync(projectPath)) {\r\n logger.error(`Directory ${projectName} already exists!`);\r\n process.exit(1);\r\n }\r\n\r\n // Helper to resolve template path\r\n function getTemplatePath(): string {\r\n // Try multiple locations\r\n const possiblePaths = [\r\n path.join(__dirname, '../../templates'), // When running from dist/cli/index.js\r\n path.join(__dirname, '../templates'), // Alternative structure\r\n path.join(process.cwd(), 'templates'), // Local dev\r\n path.resolve(__dirname, '..', '..', 'templates') // Absolute resolve\r\n ];\r\n\r\n for (const p of possiblePaths) {\r\n if (fs.existsSync(p)) {\r\n return p;\r\n }\r\n }\r\n return '';\r\n }\r\n\r\n const templatePath = getTemplatePath();\r\n\r\n if (!templatePath) {\r\n logger.error(`❌ Template directory not found!`);\r\n logger.info(`Searched in:`);\r\n logger.info(` - ${path.join(__dirname, '../../templates')}`);\r\n logger.info(` - ${path.join(__dirname, '../templates')}`);\r\n logger.info(` - ${path.join(process.cwd(), 'templates')}`);\r\n\r\n // Fallback to basic structure if templates are missing (for dev/test)\r\n logger.warn('⚠️ Using fallback scaffolding (empty structure)');\r\n fs.mkdirSync(projectPath, { recursive: true });\r\n fs.mkdirSync(path.join(projectPath, 'apps'), { recursive: true });\r\n fs.mkdirSync(path.join(projectPath, 'packages'), { recursive: true });\r\n } else {\r\n logger.info(`📦 Copying templates from: ${templatePath}`);\r\n\r\n fs.mkdirSync(projectPath, { recursive: true });\r\n fs.mkdirSync(path.join(projectPath, 'apps'), { recursive: true });\r\n fs.mkdirSync(path.join(projectPath, 'packages'), { recursive: true });\r\n\r\n // Copy NestJS API Template\r\n const apiTemplatePath = path.join(templatePath, 'nestjs-api');\r\n const apiDestPath = path.join(projectPath, 'apps/api');\r\n if (fs.existsSync(apiTemplatePath)) {\r\n fs.cpSync(apiTemplatePath, apiDestPath, { recursive: true });\r\n logger.success(' - Copied API template');\r\n } else {\r\n logger.warn(` ⚠️ API template not found at ${apiTemplatePath}`);\r\n }\r\n\r\n // Copy Next.js Web Template\r\n const webTemplatePath = path.join(templatePath, 'nextjs-web');\r\n const webDestPath = path.join(projectPath, 'apps/web');\r\n if (fs.existsSync(webTemplatePath)) {\r\n fs.cpSync(webTemplatePath, webDestPath, { recursive: true });\r\n logger.success(' - Copied Web template');\r\n } else {\r\n logger.warn(` ⚠️ Web template not found at ${webTemplatePath}`);\r\n }\r\n }\r\n\r\n // Create package.json\r\n const packageJson = {\r\n name: projectName,\r\n version: \"0.0.0\",\r\n private: true,\r\n scripts: {\r\n \"build\": \"turbo run build\",\r\n \"dev\": \"turbo run dev\",\r\n \"lint\": \"turbo run lint\",\r\n \"format\": \"prettier --write \\\"**/*.{ts,tsx,md}\\\"\"\r\n },\r\n devDependencies: {\r\n \"turbo\": \"latest\",\r\n \"prettier\": \"latest\",\r\n \"typescript\": \"^5.9.3\",\r\n \"wexts\": \"latest\"\r\n },\r\n packageManager: \"pnpm@10.0.0\",\r\n workspaces: [\r\n \"apps/*\",\r\n \"packages/*\"\r\n ]\r\n };\r\n\r\n fs.writeFileSync(\r\n path.join(projectPath, 'package.json'),\r\n JSON.stringify(packageJson, null, 2)\r\n );\r\n\r\n // Create turbo.json\r\n const turboJson = {\r\n \"$schema\": \"https://turbo.build/schema.json\",\r\n \"tasks\": {\r\n \"build\": {\r\n \"dependsOn\": [\"^build\"],\r\n \"outputs\": [\".next/**\", \"!.next/cache/**\", \"dist/**\"]\r\n },\r\n \"lint\": {},\r\n \"dev\": {\r\n \"cache\": false,\r\n \"persistent\": true\r\n }\r\n }\r\n };\r\n\r\n fs.writeFileSync(\r\n path.join(projectPath, 'turbo.json'),\r\n JSON.stringify(turboJson, null, 2)\r\n );\r\n\r\n logger.success('✅ Project structure created');\r\n logger.info('📦 Installing dependencies...');\r\n\r\n try {\r\n // Check if pnpm is installed\r\n try {\r\n execSync('pnpm --version', { stdio: 'ignore' });\r\n } catch {\r\n logger.info('Installing pnpm...');\r\n execSync('npm install -g pnpm', { stdio: 'ignore' });\r\n }\r\n\r\n execSync('pnpm install', { cwd: projectPath, stdio: 'inherit' });\r\n logger.success('✅ Dependencies installed');\r\n\r\n logger.info(pc.green(`\\n🎉 Project ${projectName} created successfully!`));\r\n logger.info(`\\nTo get started:\\n`);\r\n logger.info(pc.cyan(` cd ${projectName}`));\r\n logger.info(pc.cyan(` pnpm dev\\n`));\r\n } catch (error) {\r\n logger.error('Failed to install dependencies');\r\n }\r\n}\r\n\r\nprogram.parse();\r\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/cli/index.ts"],"sourcesContent":["#!/usr/bin/env node\r\n\r\nimport { Command } from 'commander';\r\nimport { logger } from '../core/logger';\r\nimport * as pc from 'picocolors';\r\nimport inquirer from 'inquirer';\r\nimport * as fs from 'fs';\r\nimport * as path from 'path';\r\nimport { execSync } from 'child_process';\r\n\r\nconst program = new Command();\r\n\r\nprogram\r\n .name('wexts')\r\n .description('Wexts Framework - Next.js 16 + NestJS 11')\r\n .version('2.0.0');\r\n\r\n// Interactive Mode (when no command is provided)\r\nprogram\r\n .action(async () => {\r\n console.log(pc.cyan(`\r\n╔══════════════════════════════════════════╗\r\n║ ║\r\n║ ${pc.bold('🚀 Wexts Framework v2.0')} ║\r\n║ ║\r\n║ Next.js 16 + NestJS 11 Full-Stack ║\r\n║ ║\r\n╚══════════════════════════════════════════╝\r\n `));\r\n\r\n const { action } = await inquirer.prompt([\r\n {\r\n type: 'list',\r\n name: 'action',\r\n message: 'What would you like to do?',\r\n choices: [\r\n { name: '📦 Create a new project', value: 'create' },\r\n { name: '🚀 Start development server', value: 'dev' },\r\n { name: '🔨 Build for production', value: 'build' },\r\n { name: '⚡ Generate code', value: 'generate' },\r\n { name: '🤖 Generate API client', value: 'codegen' },\r\n { name: '❌ Exit', value: 'exit' },\r\n ],\r\n },\r\n ]);\r\n\r\n if (action === 'exit') {\r\n logger.info('Goodbye! 👋');\r\n process.exit(0);\r\n }\r\n\r\n // Route to appropriate command\r\n if (action === 'create') {\r\n const { projectName, template } = await inquirer.prompt([\r\n {\r\n type: 'input',\r\n name: 'projectName',\r\n message: 'Project name:',\r\n default: 'my-wexts-app',\r\n },\r\n {\r\n type: 'list',\r\n name: 'template',\r\n message: 'Select template:',\r\n choices: [\r\n { name: '📦 Monorepo (Next.js + NestJS)', value: 'monorepo' },\r\n { name: '🎯 API only (NestJS)', value: 'api' },\r\n { name: '🌐 Web only (Next.js)', value: 'web' },\r\n ],\r\n },\r\n ]);\r\n\r\n await createProject(projectName, template);\r\n } else if (action === 'dev') {\r\n logger.info(pc.green('🚀 Starting development servers...\\n'));\r\n logger.warn('Dev server not yet implemented');\r\n } else if (action === 'build') {\r\n logger.info(pc.blue('🔨 Building project...\\n'));\r\n logger.warn('Build not yet implemented');\r\n } else if (action === 'generate') {\r\n const { type, name } = await inquirer.prompt([\r\n {\r\n type: 'list',\r\n name: 'type',\r\n message: 'What to generate?',\r\n choices: ['controller', 'module', 'service', 'page'],\r\n },\r\n {\r\n type: 'input',\r\n name: 'name',\r\n message: 'Name:',\r\n },\r\n ]);\r\n logger.info(pc.magenta(`\\n⚡ Generating ${type}: ${name}\\n`));\r\n logger.warn('Code generation not yet implemented');\r\n } else if (action === 'codegen') {\r\n logger.info(pc.cyan('\\n🤖 Generating API client...\\n'));\r\n logger.warn('Codegen not yet implemented');\r\n }\r\n });\r\n\r\n// Create Command\r\nprogram\r\n .command('create <project-name>')\r\n .description('Create a new wexts project')\r\n .option('-t, --template <template>', 'Template to use (monorepo|api|web)', 'monorepo')\r\n .action(async (projectName: string, options: any) => {\r\n await createProject(projectName, options.template);\r\n });\r\n\r\n// Dev Command\r\nprogram\r\n .command('dev')\r\n .description('Start development servers')\r\n .option('-a, --api <path>', 'Path to API project', './apps/api')\r\n .option('-w, --web <path>', 'Path to Web project', './apps/web')\r\n .option('-p, --port <port>', 'Port for web server', '3000')\r\n .option('--api-port <port>', 'Port for API server', '5050')\r\n .option('--no-proxy', 'Disable proxy server')\r\n .action(async (options: any) => {\r\n logger.info(pc.green('🚀 Starting Wexts development servers...\\n'));\r\n\r\n const { FusionDevServer } = await import('../dev-server/index.js');\r\n const server = new FusionDevServer();\r\n\r\n try {\r\n await server.start({\r\n apiPath: options.api,\r\n webPath: options.web,\r\n webPort: parseInt(options.port),\r\n apiPort: parseInt(options.apiPort),\r\n useProxy: options.proxy,\r\n });\r\n } catch (error: any) {\r\n logger.error('Failed to start dev server:', error.message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\n// Build Command\r\nprogram\r\n .command('build')\r\n .description('Build for production')\r\n .action(async () => {\r\n logger.info(pc.blue('Building Wexts project...'));\r\n\r\n // TODO: Build logic\r\n logger.warn('Build not yet implemented');\r\n });\r\n\r\n// Generate Command\r\nprogram\r\n .command('generate <type> <name>')\r\n .alias('g')\r\n .description('Generate code (controller|module|page)')\r\n .action(async (type: string, name: string) => {\r\n logger.info(pc.magenta(`Generating ${type}: ${name}`));\r\n\r\n // TODO: Code generation\r\n logger.warn('Code generation not yet implemented');\r\n });\r\n\r\n// Codegen Command\r\nprogram\r\n .command('codegen')\r\n .description('Generate API client from NestJS controllers')\r\n .option('-w, --watch', 'Watch mode - regenerate on changes')\r\n .option('-p, --project <path>', 'Path to NestJS project', './apps/api')\r\n .option('-o, --output <path>', 'Output path for generated client', './packages/api-client/src')\r\n .action(async (options: any) => {\r\n const { NestJSParser, ClientGenerator, CodegenWatcher } = await import('../codegen/index.js');\r\n\r\n if (options.watch) {\r\n logger.info(pc.cyan('Starting codegen in watch mode...'));\r\n const watcher = new CodegenWatcher();\r\n await watcher.watch({\r\n projectPath: options.project,\r\n outputPath: options.output,\r\n });\r\n } else {\r\n logger.info(pc.cyan('Generating API client...'));\r\n const parser = new NestJSParser(options.project);\r\n const controllers = parser.findFusionControllers();\r\n\r\n const generator = new ClientGenerator();\r\n await generator.generate({\r\n controllers,\r\n outputPath: options.output,\r\n });\r\n }\r\n });\r\n\r\n// Helper function for creating project\r\nasync function createProject(projectName: string, template: string) {\r\n logger.info(pc.cyan(`Creating wexts project: ${pc.bold(projectName)}`));\r\n logger.info(`Template: ${template}`);\r\n\r\n const projectPath = path.join(process.cwd(), projectName);\r\n\r\n if (fs.existsSync(projectPath)) {\r\n logger.error(`Directory ${projectName} already exists!`);\r\n process.exit(1);\r\n }\r\n\r\n // Helper to resolve template path\r\n function getTemplatePath(): string {\r\n // Try multiple locations\r\n const possiblePaths = [\r\n path.join(__dirname, '../../templates'), // When running from dist/cli/index.js\r\n path.join(__dirname, '../templates'), // Alternative structure\r\n path.join(process.cwd(), 'templates'), // Local dev\r\n path.resolve(__dirname, '..', '..', 'templates') // Absolute resolve\r\n ];\r\n\r\n for (const p of possiblePaths) {\r\n if (fs.existsSync(p)) {\r\n return p;\r\n }\r\n }\r\n return '';\r\n }\r\n\r\n const templatePath = getTemplatePath();\r\n\r\n if (!templatePath) {\r\n logger.error(`❌ Template directory not found!`);\r\n logger.info(`Searched in:`);\r\n logger.info(` - ${path.join(__dirname, '../../templates')}`);\r\n logger.info(` - ${path.join(__dirname, '../templates')}`);\r\n logger.info(` - ${path.join(process.cwd(), 'templates')}`);\r\n\r\n // Fallback to basic structure if templates are missing (for dev/test)\r\n logger.warn('⚠️ Using fallback scaffolding (empty structure)');\r\n fs.mkdirSync(projectPath, { recursive: true });\r\n fs.mkdirSync(path.join(projectPath, 'apps'), { recursive: true });\r\n fs.mkdirSync(path.join(projectPath, 'packages'), { recursive: true });\r\n } else {\r\n logger.info(`📦 Copying templates from: ${templatePath}`);\r\n\r\n fs.mkdirSync(projectPath, { recursive: true });\r\n fs.mkdirSync(path.join(projectPath, 'apps'), { recursive: true });\r\n fs.mkdirSync(path.join(projectPath, 'packages'), { recursive: true });\r\n\r\n // Copy NestJS API Template\r\n const apiTemplatePath = path.join(templatePath, 'nestjs-api');\r\n const apiDestPath = path.join(projectPath, 'apps/api');\r\n if (fs.existsSync(apiTemplatePath)) {\r\n fs.cpSync(apiTemplatePath, apiDestPath, { recursive: true });\r\n logger.success(' - Copied API template');\r\n\r\n // Copy .env.example to .env\r\n const envExamplePath = path.join(apiDestPath, '.env.example');\r\n const envPath = path.join(apiDestPath, '.env');\r\n if (fs.existsSync(envExamplePath) && !fs.existsSync(envPath)) {\r\n fs.copyFileSync(envExamplePath, envPath);\r\n logger.success(' - Created .env from .env.example');\r\n }\r\n } else {\r\n logger.warn(` ⚠️ API template not found at ${apiTemplatePath}`);\r\n }\r\n\r\n // Copy Next.js Web Template\r\n const webTemplatePath = path.join(templatePath, 'nextjs-web');\r\n const webDestPath = path.join(projectPath, 'apps/web');\r\n if (fs.existsSync(webTemplatePath)) {\r\n fs.cpSync(webTemplatePath, webDestPath, { recursive: true });\r\n logger.success(' - Copied Web template');\r\n } else {\r\n logger.warn(` ⚠️ Web template not found at ${webTemplatePath}`);\r\n }\r\n }\r\n\r\n // Create package.json\r\n const packageJson = {\r\n name: projectName,\r\n version: \"0.0.0\",\r\n private: true,\r\n scripts: {\r\n \"build\": \"pnpm exec turbo build\",\r\n \"dev\": \"pnpm exec turbo dev\",\r\n \"lint\": \"pnpm exec turbo lint\",\r\n \"format\": \"prettier --write \\\"**/*.{ts,tsx,md}\\\"\"\r\n },\r\n devDependencies: {\r\n \"turbo\": \"^2.6.1\",\r\n \"prettier\": \"latest\",\r\n \"typescript\": \"^5.9.3\",\r\n \"wexts\": \"latest\"\r\n },\r\n packageManager: \"pnpm@10.0.0\"\r\n };\r\n\r\n fs.writeFileSync(\r\n path.join(projectPath, 'package.json'),\r\n JSON.stringify(packageJson, null, 2)\r\n );\r\n\r\n // Create turbo.json\r\n const turboJson = {\r\n \"$schema\": \"https://turbo.build/schema.json\",\r\n \"tasks\": {\r\n \"build\": {\r\n \"dependsOn\": [\"^build\"],\r\n \"outputs\": [\".next/**\", \"!.next/cache/**\", \"dist/**\"]\r\n },\r\n \"lint\": {},\r\n \"dev\": {\r\n \"cache\": false,\r\n \"persistent\": true\r\n }\r\n }\r\n };\r\n\r\n fs.writeFileSync(\r\n path.join(projectPath, 'turbo.json'),\r\n JSON.stringify(turboJson, null, 2)\r\n );\r\n\r\n // Create pnpm-workspace.yaml\r\n const pnpmWorkspace = `packages:\r\n - 'apps/*'\r\n - 'packages/*'\r\n`;\r\n fs.writeFileSync(\r\n path.join(projectPath, 'pnpm-workspace.yaml'),\r\n pnpmWorkspace\r\n );\r\n\r\n logger.success('✅ Project structure created');\r\n logger.info('📦 Installing dependencies...');\r\n\r\n try {\r\n // Check if pnpm is installed\r\n try {\r\n execSync('pnpm --version', { stdio: 'ignore' });\r\n } catch {\r\n logger.info('Installing pnpm...');\r\n execSync('npm install -g pnpm', { stdio: 'ignore' });\r\n }\r\n\r\n execSync('pnpm install', { cwd: projectPath, stdio: 'inherit' });\r\n logger.success('✅ Dependencies installed');\r\n\r\n logger.info(pc.green(`\\n🎉 Project ${projectName} created successfully!`));\r\n logger.info(`\\nTo get started:\\n`);\r\n logger.info(pc.cyan(` cd ${projectName}`));\r\n logger.info(pc.cyan(` pnpm dev\\n`));\r\n } catch (error) {\r\n logger.error('Failed to install dependencies');\r\n }\r\n}\r\n\r\nprogram.parse();\r\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wexts",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.9",
|
|
4
4
|
"description": "Modern full-stack framework combining NestJS 11 and Next.js 16",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -110,4 +110,4 @@
|
|
|
110
110
|
"publishConfig": {
|
|
111
111
|
"access": "public"
|
|
112
112
|
}
|
|
113
|
-
}
|
|
113
|
+
}
|
|
Binary file
|