wexts 3.0.2 → 4.0.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.
Files changed (276) hide show
  1. package/README.md +49 -346
  2. package/bin/wexts.cjs +2 -0
  3. package/dist/chunk-2KAQYLVN.js +0 -0
  4. package/dist/chunk-2KAQYLVN.js.map +1 -1
  5. package/dist/{chunk-O42L6HOX.js → chunk-2LJVUMXW.js} +79 -93
  6. package/dist/chunk-2LJVUMXW.js.map +1 -0
  7. package/dist/chunk-7QKLIVRF.js +94 -0
  8. package/dist/chunk-7QKLIVRF.js.map +1 -0
  9. package/dist/{chunk-FCEZDH42.mjs → chunk-7WULUGLH.mjs} +5 -3
  10. package/dist/chunk-7WULUGLH.mjs.map +1 -0
  11. package/dist/{chunk-WF65EDRZ.js → chunk-BG56B4DE.js} +20 -2
  12. package/dist/chunk-BG56B4DE.js.map +1 -0
  13. package/dist/chunk-CLM5PNSG.mjs +496 -0
  14. package/dist/chunk-CLM5PNSG.mjs.map +1 -0
  15. package/dist/chunk-DNLGCKTT.js +31 -0
  16. package/dist/chunk-DNLGCKTT.js.map +1 -0
  17. package/dist/{chunk-VNNVLQLJ.mjs → chunk-JHOVXH3X.mjs} +2 -2
  18. package/dist/chunk-JHOVXH3X.mjs.map +1 -0
  19. package/dist/chunk-MXINIFPC.js +105 -0
  20. package/dist/chunk-MXINIFPC.js.map +1 -0
  21. package/dist/chunk-SE32ZPOZ.js +496 -0
  22. package/dist/chunk-SE32ZPOZ.js.map +1 -0
  23. package/dist/{chunk-STTOPUZ2.mjs → chunk-UAL54DVV.mjs} +21 -3
  24. package/dist/chunk-UAL54DVV.mjs.map +1 -0
  25. package/dist/{chunk-3OM7CHCA.js → chunk-WCKSKU3C.js} +1 -1
  26. package/dist/chunk-WCKSKU3C.js.map +1 -0
  27. package/dist/chunk-WU6FW77M.mjs +105 -0
  28. package/dist/chunk-WU6FW77M.mjs.map +1 -0
  29. package/dist/chunk-XE4OXN2W.js +0 -0
  30. package/dist/chunk-XE4OXN2W.js.map +1 -1
  31. package/dist/chunk-YBM3IJEA.mjs +94 -0
  32. package/dist/chunk-YBM3IJEA.mjs.map +1 -0
  33. package/dist/{chunk-KXYLEUSW.mjs → chunk-YN6WIWNQ.mjs} +69 -83
  34. package/dist/chunk-YN6WIWNQ.mjs.map +1 -0
  35. package/dist/chunk-YSLEF5C5.mjs +0 -0
  36. package/dist/chunk-YSLEF5C5.mjs.map +0 -0
  37. package/dist/chunk-ZX7QIN24.mjs +31 -0
  38. package/dist/chunk-ZX7QIN24.mjs.map +1 -0
  39. package/dist/cli/index.d.mts +10 -0
  40. package/dist/cli/index.d.ts +10 -0
  41. package/dist/cli/index.js +292 -292
  42. package/dist/cli/index.js.map +1 -1
  43. package/dist/cli/index.mjs +294 -293
  44. package/dist/cli/index.mjs.map +1 -1
  45. package/dist/client/index.d.mts +10 -1
  46. package/dist/client/index.d.ts +10 -1
  47. package/dist/client/index.js +4 -2
  48. package/dist/client/index.js.map +1 -1
  49. package/dist/client/index.mjs +6 -4
  50. package/dist/client/index.mjs.map +0 -0
  51. package/dist/codegen/index.d.mts +2 -1
  52. package/dist/codegen/index.d.ts +2 -1
  53. package/dist/codegen/index.js +5 -3
  54. package/dist/codegen/index.js.map +1 -1
  55. package/dist/codegen/index.mjs +7 -5
  56. package/dist/codegen/index.mjs.map +0 -0
  57. package/dist/decorators-BT1FFqN0.d.mts +29 -0
  58. package/dist/decorators-DvS58PqC.d.ts +29 -0
  59. package/dist/dev-server/index.d.mts +1 -1
  60. package/dist/dev-server/index.d.ts +1 -1
  61. package/dist/dev-server/index.js +3 -3
  62. package/dist/dev-server/index.js.map +1 -1
  63. package/dist/dev-server/index.mjs +3 -3
  64. package/dist/dev-server/index.mjs.map +0 -0
  65. package/dist/{index-SjUaHgFr.d.ts → index-7QeQEf37.d.ts} +27 -10
  66. package/dist/{index-tFGPFVfQ.d.mts → index-7RvU-jGE.d.mts} +0 -1
  67. package/dist/{index-tFGPFVfQ.d.ts → index-7RvU-jGE.d.ts} +0 -1
  68. package/dist/{index-SjUaHgFr.d.mts → index-8nzxy0NN.d.mts} +27 -10
  69. package/dist/index-Co5ZsLqq.d.ts +58 -0
  70. package/dist/index-D94W1__r.d.mts +58 -0
  71. package/dist/index-DQmyVp6F.d.mts +27 -0
  72. package/dist/index-KL_1BrQb.d.ts +27 -0
  73. package/dist/index.d.mts +17 -6
  74. package/dist/index.d.ts +17 -6
  75. package/dist/index.js +57 -30
  76. package/dist/index.js.map +1 -1
  77. package/dist/index.mjs +48 -21
  78. package/dist/index.mjs.map +1 -1
  79. package/dist/nest/index.d.mts +3 -1
  80. package/dist/nest/index.d.ts +3 -1
  81. package/dist/nest/index.js +20 -2
  82. package/dist/nest/index.js.map +1 -1
  83. package/dist/nest/index.mjs +21 -3
  84. package/dist/nest/index.mjs.map +0 -0
  85. package/dist/next/index.d.mts +7 -2
  86. package/dist/next/index.d.ts +7 -2
  87. package/dist/next/index.js +72 -5
  88. package/dist/next/index.js.map +1 -1
  89. package/dist/next/index.mjs +70 -4
  90. package/dist/next/index.mjs.map +1 -1
  91. package/dist/rpc/index.d.mts +2 -0
  92. package/dist/rpc/index.d.ts +2 -0
  93. package/dist/rpc/index.js +23 -0
  94. package/dist/rpc/index.js.map +1 -0
  95. package/dist/rpc/index.mjs +23 -0
  96. package/dist/{chunk-7NSRDJ5C.mjs.map → rpc/index.mjs.map} +0 -0
  97. package/dist/runtime/index.d.mts +55 -0
  98. package/dist/runtime/index.d.ts +55 -0
  99. package/dist/runtime/index.js +213 -0
  100. package/dist/runtime/index.js.map +1 -0
  101. package/dist/runtime/index.mjs +213 -0
  102. package/dist/runtime/index.mjs.map +1 -0
  103. package/dist/types/index.d.mts +0 -0
  104. package/dist/types/index.d.ts +0 -0
  105. package/dist/types/index.js +0 -0
  106. package/dist/types/index.js.map +1 -1
  107. package/dist/types/index.mjs +1 -1
  108. package/dist/types/index.mjs.map +0 -0
  109. package/dist/types-7d_fC-C3.d.mts +32 -0
  110. package/dist/types-7d_fC-C3.d.ts +32 -0
  111. package/dist/vercel-builder/index.d.mts +58 -0
  112. package/dist/vercel-builder/index.d.ts +58 -0
  113. package/dist/vercel-builder/index.js +330 -0
  114. package/dist/vercel-builder/index.js.map +1 -0
  115. package/dist/vercel-builder/index.mjs +330 -0
  116. package/dist/vercel-builder/index.mjs.map +1 -0
  117. package/package.json +37 -16
  118. package/templates/.dockerignore +43 -43
  119. package/templates/.env.example +0 -0
  120. package/templates/Dockerfile +60 -60
  121. package/templates/Procfile +1 -1
  122. package/templates/README.md +67 -58
  123. package/templates/api-sdk.ts +115 -115
  124. package/templates/docker-compose.yml +34 -34
  125. package/templates/nestjs-api/.env.example +0 -0
  126. package/templates/nestjs-api/README.md +87 -79
  127. package/templates/nestjs-api/nest-cli.json +6 -6
  128. package/templates/nestjs-api/package-lock.json +5623 -5623
  129. package/templates/nestjs-api/package.json +40 -40
  130. package/templates/nestjs-api/prisma/dev.db +0 -0
  131. package/templates/nestjs-api/prisma/migrations/20251123205437_init/migration.sql +0 -0
  132. package/templates/nestjs-api/prisma/migrations/migration_lock.toml +0 -0
  133. package/templates/nestjs-api/prisma/schema.prisma +29 -29
  134. package/templates/nestjs-api/src/app.module.ts +17 -17
  135. package/templates/nestjs-api/src/auth/auth.controller.ts +27 -27
  136. package/templates/nestjs-api/src/auth/auth.module.ts +37 -29
  137. package/templates/nestjs-api/src/auth/auth.service.ts +86 -86
  138. package/templates/nestjs-api/src/auth/dto/auth.dto.ts +22 -22
  139. package/templates/nestjs-api/src/auth/guards/jwt-auth.guard.ts +5 -5
  140. package/templates/nestjs-api/src/auth/strategies/jwt.strategy.ts +27 -19
  141. package/templates/nestjs-api/src/main.ts +32 -32
  142. package/templates/nestjs-api/src/prisma/prisma.module.ts +9 -9
  143. package/templates/nestjs-api/src/prisma/prisma.service.ts +14 -14
  144. package/templates/nestjs-api/src/todos/dto/todo.dto.ts +24 -24
  145. package/templates/nestjs-api/src/todos/todos.controller.ts +39 -39
  146. package/templates/nestjs-api/src/todos/todos.module.ts +11 -11
  147. package/templates/nestjs-api/src/todos/todos.service.ts +53 -53
  148. package/templates/nestjs-api/src/users/users.controller.ts +14 -14
  149. package/templates/nestjs-api/src/users/users.module.ts +12 -12
  150. package/templates/nestjs-api/src/users/users.service.ts +19 -19
  151. package/templates/nestjs-api/tsconfig.json +39 -39
  152. package/templates/nextjs-web/README.md +76 -68
  153. package/templates/nextjs-web/app/actions/auth.ts +108 -108
  154. package/templates/nextjs-web/app/dashboard/error.tsx +39 -39
  155. package/templates/nextjs-web/app/dashboard/loading.tsx +14 -14
  156. package/templates/nextjs-web/app/dashboard/page.tsx +5 -5
  157. package/templates/nextjs-web/app/globals.css +93 -93
  158. package/templates/nextjs-web/app/layout.tsx +29 -29
  159. package/templates/nextjs-web/app/login/page.tsx +5 -5
  160. package/templates/nextjs-web/app/page.tsx +28 -28
  161. package/templates/nextjs-web/app/register/page.tsx +5 -5
  162. package/templates/nextjs-web/components/ui/button.tsx +56 -56
  163. package/templates/nextjs-web/components/ui/card.tsx +79 -79
  164. package/templates/nextjs-web/components/ui/input.tsx +25 -25
  165. package/templates/nextjs-web/components/ui/label.tsx +24 -24
  166. package/templates/nextjs-web/features/auth/LoginForm.tsx +140 -140
  167. package/templates/nextjs-web/features/auth/RegisterForm.tsx +159 -159
  168. package/templates/nextjs-web/features/auth/api.ts +35 -35
  169. package/templates/nextjs-web/features/auth/index.ts +3 -3
  170. package/templates/nextjs-web/features/dashboard/DashboardView.tsx +204 -204
  171. package/templates/nextjs-web/features/dashboard/api.ts +9 -9
  172. package/templates/nextjs-web/features/dashboard/components.tsx +74 -74
  173. package/templates/nextjs-web/features/dashboard/index.ts +3 -3
  174. package/templates/nextjs-web/hooks/index.ts +4 -4
  175. package/templates/nextjs-web/lib/api-client.ts +89 -89
  176. package/templates/nextjs-web/lib/api.ts +115 -115
  177. package/templates/nextjs-web/lib/axios-global-config.ts +17 -17
  178. package/templates/nextjs-web/lib/utils.ts +6 -6
  179. package/templates/nextjs-web/lib/wexts-client.ts +4 -4
  180. package/templates/nextjs-web/next-env.d.ts +6 -6
  181. package/templates/nextjs-web/next.config.ts +20 -20
  182. package/templates/nextjs-web/package-lock.json +3254 -3254
  183. package/templates/nextjs-web/package.json +37 -37
  184. package/templates/nextjs-web/postcss.config.js +6 -6
  185. package/templates/nextjs-web/tailwind.config.ts +69 -69
  186. package/templates/nextjs-web/tsconfig.json +1 -1
  187. package/templates/nixpacks.toml +11 -11
  188. package/templates/root-package.json +31 -31
  189. package/templates/server.ts +66 -66
  190. package/templates/tsconfig.json +30 -30
  191. package/dist/chunk-2MCBBWEA.js +0 -1
  192. package/dist/chunk-2MCBBWEA.js.map +0 -1
  193. package/dist/chunk-3OM7CHCA.js.map +0 -1
  194. package/dist/chunk-63MTCWU2.mjs +0 -361
  195. package/dist/chunk-63MTCWU2.mjs.map +0 -1
  196. package/dist/chunk-667BQCEM.js +0 -375
  197. package/dist/chunk-667BQCEM.js.map +0 -1
  198. package/dist/chunk-67IJ6H4J.mjs +0 -44
  199. package/dist/chunk-67IJ6H4J.mjs.map +0 -1
  200. package/dist/chunk-6SVQEGEX.mjs +0 -44
  201. package/dist/chunk-6SVQEGEX.mjs.map +0 -1
  202. package/dist/chunk-7NSRDJ5C.mjs +0 -1
  203. package/dist/chunk-ASDXAK6G.js +0 -44
  204. package/dist/chunk-ASDXAK6G.js.map +0 -1
  205. package/dist/chunk-CKZ4VSCB.mjs +0 -18
  206. package/dist/chunk-CKZ4VSCB.mjs.map +0 -1
  207. package/dist/chunk-DW6GOKMF.js +0 -57
  208. package/dist/chunk-DW6GOKMF.js.map +0 -1
  209. package/dist/chunk-EFZPSZWO.mjs +0 -1
  210. package/dist/chunk-EFZPSZWO.mjs.map +0 -1
  211. package/dist/chunk-FCEZDH42.mjs.map +0 -1
  212. package/dist/chunk-FYGXL4V7.js +0 -361
  213. package/dist/chunk-FYGXL4V7.js.map +0 -1
  214. package/dist/chunk-GKVPGKAH.js +0 -66
  215. package/dist/chunk-GKVPGKAH.js.map +0 -1
  216. package/dist/chunk-GWP6PNSP.js +0 -225
  217. package/dist/chunk-GWP6PNSP.js.map +0 -1
  218. package/dist/chunk-HQKTXE7E.mjs +0 -225
  219. package/dist/chunk-HQKTXE7E.mjs.map +0 -1
  220. package/dist/chunk-HSFLZUJN.mjs +0 -57
  221. package/dist/chunk-HSFLZUJN.mjs.map +0 -1
  222. package/dist/chunk-HU63F22V.js +0 -361
  223. package/dist/chunk-HU63F22V.js.map +0 -1
  224. package/dist/chunk-J5LGTIGS.mjs +0 -10
  225. package/dist/chunk-J5LGTIGS.mjs.map +0 -1
  226. package/dist/chunk-JMBD6DOP.js +0 -225
  227. package/dist/chunk-JMBD6DOP.js.map +0 -1
  228. package/dist/chunk-K7EIJSYQ.js +0 -1
  229. package/dist/chunk-K7EIJSYQ.js.map +0 -1
  230. package/dist/chunk-KXYLEUSW.mjs.map +0 -1
  231. package/dist/chunk-MTHKZO55.js +0 -44
  232. package/dist/chunk-MTHKZO55.js.map +0 -1
  233. package/dist/chunk-NNQFLD7O.mjs +0 -361
  234. package/dist/chunk-NNQFLD7O.mjs.map +0 -1
  235. package/dist/chunk-NU2UB242.js +0 -82
  236. package/dist/chunk-NU2UB242.js.map +0 -1
  237. package/dist/chunk-NULGSZFE.mjs +0 -57
  238. package/dist/chunk-NULGSZFE.mjs.map +0 -1
  239. package/dist/chunk-O42L6HOX.js.map +0 -1
  240. package/dist/chunk-ONXNE2A6.mjs +0 -375
  241. package/dist/chunk-ONXNE2A6.mjs.map +0 -1
  242. package/dist/chunk-OTBYRUBE.mjs +0 -225
  243. package/dist/chunk-OTBYRUBE.mjs.map +0 -1
  244. package/dist/chunk-OTSAVKLY.mjs +0 -66
  245. package/dist/chunk-OTSAVKLY.mjs.map +0 -1
  246. package/dist/chunk-PZ5AY32C.js +0 -10
  247. package/dist/chunk-PZ5AY32C.js.map +0 -1
  248. package/dist/chunk-QP2TMRLG.js +0 -57
  249. package/dist/chunk-QP2TMRLG.js.map +0 -1
  250. package/dist/chunk-RS23R3ZQ.mjs +0 -82
  251. package/dist/chunk-RS23R3ZQ.mjs.map +0 -1
  252. package/dist/chunk-STTOPUZ2.mjs.map +0 -1
  253. package/dist/chunk-VMT3LALB.mjs +0 -51
  254. package/dist/chunk-VMT3LALB.mjs.map +0 -1
  255. package/dist/chunk-VNNVLQLJ.mjs.map +0 -1
  256. package/dist/chunk-W3YRVEFQ.js +0 -66
  257. package/dist/chunk-W3YRVEFQ.js.map +0 -1
  258. package/dist/chunk-WF65EDRZ.js.map +0 -1
  259. package/dist/chunk-WMHVXEYQ.mjs +0 -66
  260. package/dist/chunk-WMHVXEYQ.mjs.map +0 -1
  261. package/dist/chunk-XVKTIYHY.js +0 -51
  262. package/dist/chunk-XVKTIYHY.js.map +0 -1
  263. package/dist/codegen-MRZDLCYI.js +0 -13
  264. package/dist/codegen-MRZDLCYI.js.map +0 -1
  265. package/dist/codegen-UI5HTMXE.mjs +0 -13
  266. package/dist/codegen-UI5HTMXE.mjs.map +0 -1
  267. package/dist/dev-server-JKRVBWPY.mjs +0 -13
  268. package/dist/dev-server-JKRVBWPY.mjs.map +0 -1
  269. package/dist/dev-server-TLL7UQMR.js +0 -13
  270. package/dist/dev-server-TLL7UQMR.js.map +0 -1
  271. package/dist/index-BsNaOUtH.d.mts +0 -44
  272. package/dist/index-BsNaOUtH.d.ts +0 -44
  273. package/dist/index-CrbXnXsO.d.ts +0 -62
  274. package/dist/index-kEbGExWM.d.mts +0 -62
  275. package/templates/nestjs-api/.env +0 -4
  276. package/templates/nextjs-web/.env +0 -1
@@ -1,9 +1,9 @@
1
- import { Module, Global } from '@nestjs/common';
2
- import { PrismaService } from './prisma.service';
3
-
4
- @Global()
5
- @Module({
6
- providers: [PrismaService],
7
- exports: [PrismaService],
8
- })
9
- export class PrismaModule { }
1
+ import { Module, Global } from '@nestjs/common';
2
+ import { PrismaService } from './prisma.service';
3
+
4
+ @Global()
5
+ @Module({
6
+ providers: [PrismaService],
7
+ exports: [PrismaService],
8
+ })
9
+ export class PrismaModule { }
@@ -1,14 +1,14 @@
1
- import { Injectable, OnModuleInit, OnModuleDestroy } from '@nestjs/common';
2
- import { PrismaClient } from '@prisma/client';
3
-
4
- @Injectable()
5
- export class PrismaService extends PrismaClient implements OnModuleInit, OnModuleDestroy {
6
- async onModuleInit() {
7
- await this.$connect();
8
- console.log('✅ Prisma connected');
9
- }
10
-
11
- async onModuleDestroy() {
12
- await this.$disconnect();
13
- }
14
- }
1
+ import { Injectable, OnModuleInit, OnModuleDestroy } from '@nestjs/common';
2
+ import { PrismaClient } from '@prisma/client';
3
+
4
+ @Injectable()
5
+ export class PrismaService extends PrismaClient implements OnModuleInit, OnModuleDestroy {
6
+ async onModuleInit() {
7
+ await this.$connect();
8
+ console.log('✅ Prisma connected');
9
+ }
10
+
11
+ async onModuleDestroy() {
12
+ await this.$disconnect();
13
+ }
14
+ }
@@ -1,24 +1,24 @@
1
- import { IsString, IsBoolean, IsOptional } from 'class-validator';
2
-
3
- export class CreateTodoDto {
4
- @IsString()
5
- title: string;
6
-
7
- @IsString()
8
- @IsOptional()
9
- description?: string;
10
- }
11
-
12
- export class UpdateTodoDto {
13
- @IsString()
14
- @IsOptional()
15
- title?: string;
16
-
17
- @IsString()
18
- @IsOptional()
19
- description?: string;
20
-
21
- @IsBoolean()
22
- @IsOptional()
23
- completed?: boolean;
24
- }
1
+ import { IsString, IsBoolean, IsOptional } from 'class-validator';
2
+
3
+ export class CreateTodoDto {
4
+ @IsString()
5
+ title: string;
6
+
7
+ @IsString()
8
+ @IsOptional()
9
+ description?: string;
10
+ }
11
+
12
+ export class UpdateTodoDto {
13
+ @IsString()
14
+ @IsOptional()
15
+ title?: string;
16
+
17
+ @IsString()
18
+ @IsOptional()
19
+ description?: string;
20
+
21
+ @IsBoolean()
22
+ @IsOptional()
23
+ completed?: boolean;
24
+ }
@@ -1,39 +1,39 @@
1
- import { Controller, Get, Post, Put, Delete, Body, Param, UseGuards, Request } from '@nestjs/common';
2
- import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard';
3
- import { TodosService } from './todos.service';
4
- import { CreateTodoDto, UpdateTodoDto } from './dto/todo.dto';
5
-
6
- @Controller('todos')
7
- @UseGuards(JwtAuthGuard)
8
- export class TodosController {
9
- constructor(private todosService: TodosService) { }
10
-
11
- @Get()
12
- async findAll(@Request() req) {
13
- return this.todosService.findAll(req.user.userId);
14
- }
15
-
16
- @Get(':id')
17
- async findOne(@Param('id') id: string, @Request() req) {
18
- return this.todosService.findOne(id, req.user.userId);
19
- }
20
-
21
- @Post()
22
- async create(@Body() dto: CreateTodoDto, @Request() req) {
23
- return this.todosService.create(dto, req.user.userId);
24
- }
25
-
26
- @Put(':id')
27
- async update(
28
- @Param('id') id: string,
29
- @Body() dto: UpdateTodoDto,
30
- @Request() req,
31
- ) {
32
- return this.todosService.update(id, dto, req.user.userId);
33
- }
34
-
35
- @Delete(':id')
36
- async remove(@Param('id') id: string, @Request() req) {
37
- return this.todosService.remove(id, req.user.userId);
38
- }
39
- }
1
+ import { Controller, Get, Post, Put, Delete, Body, Param, UseGuards, Request } from '@nestjs/common';
2
+ import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard';
3
+ import { TodosService } from './todos.service';
4
+ import { CreateTodoDto, UpdateTodoDto } from './dto/todo.dto';
5
+
6
+ @Controller('todos')
7
+ @UseGuards(JwtAuthGuard)
8
+ export class TodosController {
9
+ constructor(private todosService: TodosService) { }
10
+
11
+ @Get()
12
+ async findAll(@Request() req) {
13
+ return this.todosService.findAll(req.user.userId);
14
+ }
15
+
16
+ @Get(':id')
17
+ async findOne(@Param('id') id: string, @Request() req) {
18
+ return this.todosService.findOne(id, req.user.userId);
19
+ }
20
+
21
+ @Post()
22
+ async create(@Body() dto: CreateTodoDto, @Request() req) {
23
+ return this.todosService.create(dto, req.user.userId);
24
+ }
25
+
26
+ @Put(':id')
27
+ async update(
28
+ @Param('id') id: string,
29
+ @Body() dto: UpdateTodoDto,
30
+ @Request() req,
31
+ ) {
32
+ return this.todosService.update(id, dto, req.user.userId);
33
+ }
34
+
35
+ @Delete(':id')
36
+ async remove(@Param('id') id: string, @Request() req) {
37
+ return this.todosService.remove(id, req.user.userId);
38
+ }
39
+ }
@@ -1,11 +1,11 @@
1
- import { Module } from '@nestjs/common';
2
- import { TodosService } from './todos.service';
3
- import { TodosController } from './todos.controller';
4
- import { PrismaModule } from '../prisma/prisma.module';
5
-
6
- @Module({
7
- imports: [PrismaModule], // ✅ Import PrismaModule
8
- controllers: [TodosController],
9
- providers: [TodosService],
10
- })
11
- export class TodosModule { }
1
+ import { Module } from '@nestjs/common';
2
+ import { TodosService } from './todos.service';
3
+ import { TodosController } from './todos.controller';
4
+ import { PrismaModule } from '../prisma/prisma.module';
5
+
6
+ @Module({
7
+ imports: [PrismaModule], // ✅ Import PrismaModule
8
+ controllers: [TodosController],
9
+ providers: [TodosService],
10
+ })
11
+ export class TodosModule { }
@@ -1,53 +1,53 @@
1
- import { Injectable, NotFoundException, ForbiddenException } from '@nestjs/common';
2
- import { PrismaService } from '../prisma/prisma.service';
3
- import { CreateTodoDto, UpdateTodoDto } from './dto/todo.dto';
4
-
5
- @Injectable()
6
- export class TodosService {
7
- constructor(private prisma: PrismaService) { }
8
-
9
- async findAll(userId: string) {
10
- return this.prisma.todo.findMany({
11
- where: { userId },
12
- orderBy: { createdAt: 'desc' },
13
- });
14
- }
15
-
16
- async findOne(id: string, userId: string) {
17
- const todo = await this.prisma.todo.findUnique({ where: { id } });
18
-
19
- if (!todo) {
20
- throw new NotFoundException('Todo not found');
21
- }
22
-
23
- if (todo.userId !== userId) {
24
- throw new ForbiddenException('Access denied');
25
- }
26
-
27
- return todo;
28
- }
29
-
30
- async create(dto: CreateTodoDto, userId: string) {
31
- return this.prisma.todo.create({
32
- data: {
33
- ...dto,
34
- userId,
35
- },
36
- });
37
- }
38
-
39
- async update(id: string, dto: UpdateTodoDto, userId: string) {
40
- await this.findOne(id, userId); // Check ownership
41
-
42
- return this.prisma.todo.update({
43
- where: { id },
44
- data: dto,
45
- });
46
- }
47
-
48
- async remove(id: string, userId: string) {
49
- await this.findOne(id, userId); // Check ownership
50
-
51
- return this.prisma.todo.delete({ where: { id } });
52
- }
53
- }
1
+ import { Injectable, NotFoundException, ForbiddenException } from '@nestjs/common';
2
+ import { PrismaService } from '../prisma/prisma.service';
3
+ import { CreateTodoDto, UpdateTodoDto } from './dto/todo.dto';
4
+
5
+ @Injectable()
6
+ export class TodosService {
7
+ constructor(private prisma: PrismaService) { }
8
+
9
+ async findAll(userId: string) {
10
+ return this.prisma.todo.findMany({
11
+ where: { userId },
12
+ orderBy: { createdAt: 'desc' },
13
+ });
14
+ }
15
+
16
+ async findOne(id: string, userId: string) {
17
+ const todo = await this.prisma.todo.findUnique({ where: { id } });
18
+
19
+ if (!todo) {
20
+ throw new NotFoundException('Todo not found');
21
+ }
22
+
23
+ if (todo.userId !== userId) {
24
+ throw new ForbiddenException('Access denied');
25
+ }
26
+
27
+ return todo;
28
+ }
29
+
30
+ async create(dto: CreateTodoDto, userId: string) {
31
+ return this.prisma.todo.create({
32
+ data: {
33
+ ...dto,
34
+ userId,
35
+ },
36
+ });
37
+ }
38
+
39
+ async update(id: string, dto: UpdateTodoDto, userId: string) {
40
+ await this.findOne(id, userId); // Check ownership
41
+
42
+ return this.prisma.todo.update({
43
+ where: { id },
44
+ data: dto,
45
+ });
46
+ }
47
+
48
+ async remove(id: string, userId: string) {
49
+ await this.findOne(id, userId); // Check ownership
50
+
51
+ return this.prisma.todo.delete({ where: { id } });
52
+ }
53
+ }
@@ -1,14 +1,14 @@
1
- import { Controller, Get, UseGuards, Request } from '@nestjs/common';
2
- import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard';
3
- import { UsersService } from './users.service';
4
-
5
- @Controller('users')
6
- @UseGuards(JwtAuthGuard)
7
- export class UsersController {
8
- constructor(private usersService: UsersService) { }
9
-
10
- @Get('me')
11
- async getMe(@Request() req) {
12
- return this.usersService.findById(req.user.userId);
13
- }
14
- }
1
+ import { Controller, Get, UseGuards, Request } from '@nestjs/common';
2
+ import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard';
3
+ import { UsersService } from './users.service';
4
+
5
+ @Controller('users')
6
+ @UseGuards(JwtAuthGuard)
7
+ export class UsersController {
8
+ constructor(private usersService: UsersService) { }
9
+
10
+ @Get('me')
11
+ async getMe(@Request() req) {
12
+ return this.usersService.findById(req.user.userId);
13
+ }
14
+ }
@@ -1,12 +1,12 @@
1
- import { Module } from '@nestjs/common';
2
- import { UsersService } from './users.service';
3
- import { UsersController } from './users.controller';
4
- import { PrismaModule } from '../prisma/prisma.module';
5
-
6
- @Module({
7
- imports: [PrismaModule], // ✅ Import PrismaModule
8
- controllers: [UsersController],
9
- providers: [UsersService],
10
- exports: [UsersService],
11
- })
12
- export class UsersModule { }
1
+ import { Module } from '@nestjs/common';
2
+ import { UsersService } from './users.service';
3
+ import { UsersController } from './users.controller';
4
+ import { PrismaModule } from '../prisma/prisma.module';
5
+
6
+ @Module({
7
+ imports: [PrismaModule], // ✅ Import PrismaModule
8
+ controllers: [UsersController],
9
+ providers: [UsersService],
10
+ exports: [UsersService],
11
+ })
12
+ export class UsersModule { }
@@ -1,19 +1,19 @@
1
- import { Injectable } from '@nestjs/common';
2
- import { PrismaService } from '../prisma/prisma.service';
3
-
4
- @Injectable()
5
- export class UsersService {
6
- constructor(private prisma: PrismaService) { }
7
-
8
- async findById(id: string) {
9
- return this.prisma.user.findUnique({
10
- where: { id },
11
- select: {
12
- id: true,
13
- email: true,
14
- name: true,
15
- createdAt: true,
16
- },
17
- });
18
- }
19
- }
1
+ import { Injectable } from '@nestjs/common';
2
+ import { PrismaService } from '../prisma/prisma.service';
3
+
4
+ @Injectable()
5
+ export class UsersService {
6
+ constructor(private prisma: PrismaService) { }
7
+
8
+ async findById(id: string) {
9
+ return this.prisma.user.findUnique({
10
+ where: { id },
11
+ select: {
12
+ id: true,
13
+ email: true,
14
+ name: true,
15
+ createdAt: true,
16
+ },
17
+ });
18
+ }
19
+ }
@@ -1,40 +1,40 @@
1
- {
2
- "compilerOptions": {
3
- "module": "commonjs",
4
- "declaration": true,
5
- "removeComments": true,
6
- "emitDecoratorMetadata": true,
7
- "experimentalDecorators": true,
8
- "allowSyntheticDefaultImports": true,
9
- "target": "ES2021",
10
- "sourceMap": true,
11
- "outDir": "./dist",
12
- "baseUrl": "./",
13
- "incremental": true,
14
- "skipLibCheck": true,
15
- "strictNullChecks": false,
16
- "noImplicitAny": false,
17
- "strictBindCallApply": false,
18
- "forceConsistentCasingInFileNames": false,
19
- "noFallthroughCasesInSwitch": false,
20
- "moduleResolution": "node",
21
- "esModuleInterop": true,
22
- "paths": {
23
- "wexts/nest": [
24
- "node_modules/wexts/dist/nest/index"
25
- ],
26
- "wexts/next": [
27
- "node_modules/wexts/dist/next/index"
28
- ],
29
- "wexts/client": [
30
- "node_modules/wexts/dist/client/index"
31
- ],
32
- "wexts/types": [
33
- "node_modules/wexts/dist/types/index"
34
- ],
35
- "wexts": [
36
- "node_modules/wexts/dist/index"
37
- ]
38
- }
39
- }
1
+ {
2
+ "compilerOptions": {
3
+ "module": "commonjs",
4
+ "declaration": true,
5
+ "removeComments": true,
6
+ "emitDecoratorMetadata": true,
7
+ "experimentalDecorators": true,
8
+ "allowSyntheticDefaultImports": true,
9
+ "target": "ES2021",
10
+ "sourceMap": true,
11
+ "outDir": "./dist",
12
+ "baseUrl": "./",
13
+ "incremental": true,
14
+ "skipLibCheck": true,
15
+ "strictNullChecks": false,
16
+ "noImplicitAny": false,
17
+ "strictBindCallApply": false,
18
+ "forceConsistentCasingInFileNames": false,
19
+ "noFallthroughCasesInSwitch": false,
20
+ "moduleResolution": "node",
21
+ "esModuleInterop": true,
22
+ "paths": {
23
+ "wexts/nest": [
24
+ "node_modules/wexts/dist/nest/index"
25
+ ],
26
+ "wexts/next": [
27
+ "node_modules/wexts/dist/next/index"
28
+ ],
29
+ "wexts/client": [
30
+ "node_modules/wexts/dist/client/index"
31
+ ],
32
+ "wexts/types": [
33
+ "node_modules/wexts/dist/types/index"
34
+ ],
35
+ "wexts": [
36
+ "node_modules/wexts/dist/index"
37
+ ]
38
+ }
39
+ }
40
40
  }
@@ -1,68 +1,76 @@
1
- # Fusion Next.js Web
2
-
3
- Modern Next.js 16 frontend with wexts integration.
4
-
5
- ## Features
6
-
7
- - ✅ Next.js 16 (App Router)
8
- - ✅ React 19
9
- - Tailwind CSS v4
10
- - ✅ TypeScript
11
- - wexts Provider & Hooks
12
- - ✅ Authentication Flow
13
- - ✅ Todo Management Dashboard
14
-
15
- ## Setup
16
-
17
- ```bash
18
- # Install dependencies
19
- npm install
20
-
21
- # Copy environment variables
22
- cp .env.local.example .env.local
23
-
24
- # Update NEXT_PUBLIC_API_URL in .env.local to point to your API
25
-
26
- # Start development server
27
- npm run dev
28
- ```
29
-
30
- ## Project Structure
31
-
32
- ```
33
- app/
34
- ├── layout.tsx # Root layout with FusionProvider
35
- ├── page.tsx # Homepage with auth redirect
36
- ├── globals.css # Global styles
37
- ├── login/
38
- │ └── page.tsx # Login page
39
- ├── register/
40
- │ └── page.tsx # Registration page
41
- └── dashboard/
42
- └── page.tsx # Protected dashboard with todos
43
- ```
44
-
45
- ## Using Fusion Hooks
46
-
47
- ```tsx
48
- import { useFusion, useAuth } from 'wexts/next';
49
-
50
- function MyComponent() {
51
- const { client } = useFusion();
52
- const { user, isAuthenticated } = useAuth();
53
-
54
- // Make API calls
55
- const data = await client.get('/endpoint');
56
- }
57
- ```
58
-
59
- ## Building for Production
60
-
61
- ```bash
62
- npm run build
63
- npm start
64
- ```
65
-
66
- ## Environment Variables
67
-
68
- - `NEXT_PUBLIC_API_URL` - Backend API URL (default: http://localhost:5050)
1
+ # Deprecated Legacy Web Template
2
+
3
+ This template predates the verified `examples/hello-rpc` runtime/RPC/security model. It is retained for compatibility and should not be used as the production reference.
4
+
5
+ Use `examples/hello-rpc` for the canonical generated-RPC path.
6
+
7
+ ---
8
+
9
+ # Fusion Next.js Web
10
+
11
+ Modern Next.js 16 frontend with wexts integration.
12
+
13
+ ## Features
14
+
15
+ - ✅ Next.js 16 (App Router)
16
+ - ✅ React 19
17
+ - ✅ Tailwind CSS v4
18
+ - TypeScript
19
+ - ✅ wexts Provider & Hooks
20
+ - ✅ Authentication Flow
21
+ - Todo Management Dashboard
22
+
23
+ ## Setup
24
+
25
+ ```bash
26
+ # Install dependencies
27
+ npm install
28
+
29
+ # Copy environment variables
30
+ cp .env.local.example .env.local
31
+
32
+ # Update NEXT_PUBLIC_API_URL in .env.local to point to your API
33
+
34
+ # Start development server
35
+ npm run dev
36
+ ```
37
+
38
+ ## Project Structure
39
+
40
+ ```
41
+ app/
42
+ ├── layout.tsx # Root layout with FusionProvider
43
+ ├── page.tsx # Homepage with auth redirect
44
+ ├── globals.css # Global styles
45
+ ├── login/
46
+ │ └── page.tsx # Login page
47
+ ├── register/
48
+ │ └── page.tsx # Registration page
49
+ └── dashboard/
50
+ └── page.tsx # Protected dashboard with todos
51
+ ```
52
+
53
+ ## Using Fusion Hooks
54
+
55
+ ```tsx
56
+ import { useFusion, useAuth } from 'wexts/next';
57
+
58
+ function MyComponent() {
59
+ const { client } = useFusion();
60
+ const { user, isAuthenticated } = useAuth();
61
+
62
+ // Make API calls
63
+ const data = await client.get('/endpoint');
64
+ }
65
+ ```
66
+
67
+ ## Building for Production
68
+
69
+ ```bash
70
+ npm run build
71
+ npm start
72
+ ```
73
+
74
+ ## Environment Variables
75
+
76
+ - `NEXT_PUBLIC_API_URL` - Backend API URL (default: http://localhost:5050)