wexts 4.0.0 → 4.1.5

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 (189) hide show
  1. package/README.md +49 -49
  2. package/bin/wexts.cjs +2 -2
  3. package/package.json +153 -148
  4. package/templates/.dockerignore +43 -43
  5. package/templates/.env.example +17 -17
  6. package/templates/Dockerfile +60 -60
  7. package/templates/Procfile +1 -1
  8. package/templates/README.md +67 -67
  9. package/templates/api-sdk.ts +115 -115
  10. package/templates/docker-compose.yml +34 -34
  11. package/templates/nestjs-api/.env.example +3 -3
  12. package/templates/nestjs-api/README.md +87 -87
  13. package/templates/nestjs-api/nest-cli.json +6 -6
  14. package/templates/nestjs-api/package.json +40 -40
  15. package/templates/nestjs-api/prisma/migrations/20251123205437_init/migration.sql +24 -24
  16. package/templates/nestjs-api/prisma/migrations/migration_lock.toml +3 -3
  17. package/templates/nestjs-api/prisma/schema.prisma +29 -29
  18. package/templates/nestjs-api/src/app.module.ts +17 -17
  19. package/templates/nestjs-api/src/auth/auth.controller.ts +27 -27
  20. package/templates/nestjs-api/src/auth/auth.module.ts +37 -37
  21. package/templates/nestjs-api/src/auth/auth.service.ts +86 -86
  22. package/templates/nestjs-api/src/auth/dto/auth.dto.ts +22 -22
  23. package/templates/nestjs-api/src/auth/guards/jwt-auth.guard.ts +5 -5
  24. package/templates/nestjs-api/src/auth/strategies/jwt.strategy.ts +27 -27
  25. package/templates/nestjs-api/src/main.ts +32 -32
  26. package/templates/nestjs-api/src/prisma/prisma.module.ts +9 -9
  27. package/templates/nestjs-api/src/prisma/prisma.service.ts +14 -14
  28. package/templates/nestjs-api/src/todos/dto/todo.dto.ts +24 -24
  29. package/templates/nestjs-api/src/todos/todos.controller.ts +39 -39
  30. package/templates/nestjs-api/src/todos/todos.module.ts +11 -11
  31. package/templates/nestjs-api/src/todos/todos.service.ts +53 -53
  32. package/templates/nestjs-api/src/users/users.controller.ts +14 -14
  33. package/templates/nestjs-api/src/users/users.module.ts +12 -12
  34. package/templates/nestjs-api/src/users/users.service.ts +19 -19
  35. package/templates/nestjs-api/tsconfig.json +39 -39
  36. package/templates/nextjs-web/README.md +76 -76
  37. package/templates/nextjs-web/app/actions/auth.ts +108 -108
  38. package/templates/nextjs-web/app/dashboard/error.tsx +39 -39
  39. package/templates/nextjs-web/app/dashboard/loading.tsx +14 -14
  40. package/templates/nextjs-web/app/dashboard/page.tsx +5 -5
  41. package/templates/nextjs-web/app/globals.css +93 -93
  42. package/templates/nextjs-web/app/layout.tsx +29 -29
  43. package/templates/nextjs-web/app/login/page.tsx +5 -5
  44. package/templates/nextjs-web/app/page.tsx +28 -28
  45. package/templates/nextjs-web/app/register/page.tsx +5 -5
  46. package/templates/nextjs-web/components/ui/button.tsx +56 -56
  47. package/templates/nextjs-web/components/ui/card.tsx +79 -79
  48. package/templates/nextjs-web/components/ui/input.tsx +25 -25
  49. package/templates/nextjs-web/components/ui/label.tsx +24 -24
  50. package/templates/nextjs-web/features/auth/LoginForm.tsx +140 -140
  51. package/templates/nextjs-web/features/auth/RegisterForm.tsx +159 -159
  52. package/templates/nextjs-web/features/auth/api.ts +35 -35
  53. package/templates/nextjs-web/features/auth/index.ts +3 -3
  54. package/templates/nextjs-web/features/dashboard/DashboardView.tsx +204 -204
  55. package/templates/nextjs-web/features/dashboard/api.ts +9 -9
  56. package/templates/nextjs-web/features/dashboard/components.tsx +74 -74
  57. package/templates/nextjs-web/features/dashboard/index.ts +3 -3
  58. package/templates/nextjs-web/hooks/index.ts +4 -4
  59. package/templates/nextjs-web/lib/api-client.ts +89 -89
  60. package/templates/nextjs-web/lib/api.ts +115 -115
  61. package/templates/nextjs-web/lib/axios-global-config.ts +17 -17
  62. package/templates/nextjs-web/lib/utils.ts +6 -6
  63. package/templates/nextjs-web/lib/wexts-client.ts +4 -4
  64. package/templates/nextjs-web/next-env.d.ts +6 -6
  65. package/templates/nextjs-web/next.config.ts +20 -20
  66. package/templates/nextjs-web/package.json +37 -37
  67. package/templates/nextjs-web/postcss.config.js +6 -6
  68. package/templates/nextjs-web/tailwind.config.ts +69 -69
  69. package/templates/nextjs-web/tsconfig.json +41 -41
  70. package/templates/nixpacks.toml +11 -11
  71. package/templates/root-package.json +31 -31
  72. package/templates/server.ts +66 -66
  73. package/templates/tsconfig.json +30 -30
  74. package/dist/chunk-2KAQYLVN.js +0 -1
  75. package/dist/chunk-2KAQYLVN.js.map +0 -1
  76. package/dist/chunk-2LJVUMXW.js +0 -228
  77. package/dist/chunk-2LJVUMXW.js.map +0 -1
  78. package/dist/chunk-7QKLIVRF.js +0 -94
  79. package/dist/chunk-7QKLIVRF.js.map +0 -1
  80. package/dist/chunk-7WULUGLH.mjs +0 -22
  81. package/dist/chunk-7WULUGLH.mjs.map +0 -1
  82. package/dist/chunk-BG56B4DE.js +0 -106
  83. package/dist/chunk-BG56B4DE.js.map +0 -1
  84. package/dist/chunk-CLM5PNSG.mjs +0 -496
  85. package/dist/chunk-CLM5PNSG.mjs.map +0 -1
  86. package/dist/chunk-DNLGCKTT.js +0 -31
  87. package/dist/chunk-DNLGCKTT.js.map +0 -1
  88. package/dist/chunk-JHOVXH3X.mjs +0 -65
  89. package/dist/chunk-JHOVXH3X.mjs.map +0 -1
  90. package/dist/chunk-MXINIFPC.js +0 -105
  91. package/dist/chunk-MXINIFPC.js.map +0 -1
  92. package/dist/chunk-SE32ZPOZ.js +0 -496
  93. package/dist/chunk-SE32ZPOZ.js.map +0 -1
  94. package/dist/chunk-UAL54DVV.mjs +0 -106
  95. package/dist/chunk-UAL54DVV.mjs.map +0 -1
  96. package/dist/chunk-WCKSKU3C.js +0 -65
  97. package/dist/chunk-WCKSKU3C.js.map +0 -1
  98. package/dist/chunk-WU6FW77M.mjs +0 -105
  99. package/dist/chunk-WU6FW77M.mjs.map +0 -1
  100. package/dist/chunk-XE4OXN2W.js +0 -12
  101. package/dist/chunk-XE4OXN2W.js.map +0 -1
  102. package/dist/chunk-YBM3IJEA.mjs +0 -94
  103. package/dist/chunk-YBM3IJEA.mjs.map +0 -1
  104. package/dist/chunk-YN6WIWNQ.mjs +0 -228
  105. package/dist/chunk-YN6WIWNQ.mjs.map +0 -1
  106. package/dist/chunk-YSLEF5C5.mjs +0 -1
  107. package/dist/chunk-YSLEF5C5.mjs.map +0 -1
  108. package/dist/chunk-ZX7QIN24.mjs +0 -31
  109. package/dist/chunk-ZX7QIN24.mjs.map +0 -1
  110. package/dist/cli/index.d.mts +0 -11
  111. package/dist/cli/index.d.ts +0 -11
  112. package/dist/cli/index.js +0 -332
  113. package/dist/cli/index.js.map +0 -1
  114. package/dist/cli/index.mjs +0 -334
  115. package/dist/cli/index.mjs.map +0 -1
  116. package/dist/client/index.d.mts +0 -21
  117. package/dist/client/index.d.ts +0 -21
  118. package/dist/client/index.js +0 -12
  119. package/dist/client/index.js.map +0 -1
  120. package/dist/client/index.mjs +0 -12
  121. package/dist/client/index.mjs.map +0 -1
  122. package/dist/codegen/index.d.mts +0 -2
  123. package/dist/codegen/index.d.ts +0 -2
  124. package/dist/codegen/index.js +0 -15
  125. package/dist/codegen/index.js.map +0 -1
  126. package/dist/codegen/index.mjs +0 -15
  127. package/dist/codegen/index.mjs.map +0 -1
  128. package/dist/decorators-BT1FFqN0.d.mts +0 -29
  129. package/dist/decorators-DvS58PqC.d.ts +0 -29
  130. package/dist/dev-server/index.d.mts +0 -1
  131. package/dist/dev-server/index.d.ts +0 -1
  132. package/dist/dev-server/index.js +0 -13
  133. package/dist/dev-server/index.js.map +0 -1
  134. package/dist/dev-server/index.mjs +0 -13
  135. package/dist/dev-server/index.mjs.map +0 -1
  136. package/dist/index-7QeQEf37.d.ts +0 -92
  137. package/dist/index-7RvU-jGE.d.mts +0 -66
  138. package/dist/index-7RvU-jGE.d.ts +0 -66
  139. package/dist/index-8nzxy0NN.d.mts +0 -92
  140. package/dist/index-Co5ZsLqq.d.ts +0 -58
  141. package/dist/index-D94W1__r.d.mts +0 -58
  142. package/dist/index-DQmyVp6F.d.mts +0 -27
  143. package/dist/index-KL_1BrQb.d.ts +0 -27
  144. package/dist/index.d.mts +0 -258
  145. package/dist/index.d.ts +0 -258
  146. package/dist/index.js +0 -410
  147. package/dist/index.js.map +0 -1
  148. package/dist/index.mjs +0 -410
  149. package/dist/index.mjs.map +0 -1
  150. package/dist/nest/index.d.mts +0 -3
  151. package/dist/nest/index.d.ts +0 -3
  152. package/dist/nest/index.js +0 -38
  153. package/dist/nest/index.js.map +0 -1
  154. package/dist/nest/index.mjs +0 -38
  155. package/dist/nest/index.mjs.map +0 -1
  156. package/dist/next/index.d.mts +0 -66
  157. package/dist/next/index.d.ts +0 -66
  158. package/dist/next/index.js +0 -226
  159. package/dist/next/index.js.map +0 -1
  160. package/dist/next/index.mjs +0 -188
  161. package/dist/next/index.mjs.map +0 -1
  162. package/dist/rpc/index.d.mts +0 -2
  163. package/dist/rpc/index.d.ts +0 -2
  164. package/dist/rpc/index.js +0 -23
  165. package/dist/rpc/index.js.map +0 -1
  166. package/dist/rpc/index.mjs +0 -23
  167. package/dist/rpc/index.mjs.map +0 -1
  168. package/dist/runtime/index.d.mts +0 -55
  169. package/dist/runtime/index.d.ts +0 -55
  170. package/dist/runtime/index.js +0 -213
  171. package/dist/runtime/index.js.map +0 -1
  172. package/dist/runtime/index.mjs +0 -213
  173. package/dist/runtime/index.mjs.map +0 -1
  174. package/dist/types/index.d.mts +0 -12
  175. package/dist/types/index.d.ts +0 -12
  176. package/dist/types/index.js +0 -2
  177. package/dist/types/index.js.map +0 -1
  178. package/dist/types/index.mjs +0 -3
  179. package/dist/types/index.mjs.map +0 -1
  180. package/dist/types-7d_fC-C3.d.mts +0 -32
  181. package/dist/types-7d_fC-C3.d.ts +0 -32
  182. package/dist/vercel-builder/index.d.mts +0 -58
  183. package/dist/vercel-builder/index.d.ts +0 -58
  184. package/dist/vercel-builder/index.js +0 -330
  185. package/dist/vercel-builder/index.js.map +0 -1
  186. package/dist/vercel-builder/index.mjs +0 -330
  187. package/dist/vercel-builder/index.mjs.map +0 -1
  188. package/templates/nestjs-api/package-lock.json +0 -5623
  189. package/templates/nextjs-web/package-lock.json +0 -3254
@@ -1,58 +0,0 @@
1
- /**
2
- * Wexts Vercel Build Output API builder.
3
- *
4
- * Produces the `.vercel/output` tree (Build Output API v3) that Vercel
5
- * uses for deployment. This module is invoked by `wexts vercel-build`.
6
- *
7
- * Layout produced:
8
- * .vercel/output/
9
- * config.json – { version: 3 }
10
- * static/ – public / static assets copied here
11
- * functions/
12
- * index.func/
13
- * index.js – serverless entry point
14
- * package.json – { type: "module" } or cjs
15
- * .vc-config.json – Vercel function config
16
- * ...copied runtime files
17
- */
18
- interface VercelBuildOptions {
19
- /** Project root (cwd). Defaults to process.cwd(). */
20
- rootDir?: string;
21
- /** Path to NestJS/API project for codegen. */
22
- apiProjectPath?: string;
23
- /** Output directory for generated RPC client. */
24
- rpcOutputPath?: string;
25
- /** Path to wexts.runtime.js config. */
26
- runtimeConfigPath?: string;
27
- /** Node.js runtime version for the Vercel function. */
28
- nodeVersion?: string;
29
- /** Max duration in seconds for the serverless function. */
30
- maxDuration?: number;
31
- /** Memory size in MB for the serverless function. */
32
- memory?: number;
33
- /** Regions to deploy to. */
34
- regions?: string[];
35
- /** Skip the RPC codegen step. */
36
- skipCodegen?: boolean;
37
- /** Skip the Next.js / project build step. */
38
- skipBuild?: boolean;
39
- }
40
- interface VercelBuildResult {
41
- outputDir: string;
42
- configPath: string;
43
- functionDir: string;
44
- staticDir: string;
45
- errors: string[];
46
- warnings: string[];
47
- }
48
- /**
49
- * Build the `.vercel/output` directory from a Wexts project.
50
- */
51
- declare function buildVercelOutput(options?: VercelBuildOptions): Promise<VercelBuildResult>;
52
- interface ValidationResult {
53
- errors: string[];
54
- warnings: string[];
55
- }
56
- declare function validateOutput(outputDir: string): ValidationResult;
57
-
58
- export { type ValidationResult, type VercelBuildOptions, type VercelBuildResult, buildVercelOutput, validateOutput };
@@ -1,58 +0,0 @@
1
- /**
2
- * Wexts Vercel Build Output API builder.
3
- *
4
- * Produces the `.vercel/output` tree (Build Output API v3) that Vercel
5
- * uses for deployment. This module is invoked by `wexts vercel-build`.
6
- *
7
- * Layout produced:
8
- * .vercel/output/
9
- * config.json – { version: 3 }
10
- * static/ – public / static assets copied here
11
- * functions/
12
- * index.func/
13
- * index.js – serverless entry point
14
- * package.json – { type: "module" } or cjs
15
- * .vc-config.json – Vercel function config
16
- * ...copied runtime files
17
- */
18
- interface VercelBuildOptions {
19
- /** Project root (cwd). Defaults to process.cwd(). */
20
- rootDir?: string;
21
- /** Path to NestJS/API project for codegen. */
22
- apiProjectPath?: string;
23
- /** Output directory for generated RPC client. */
24
- rpcOutputPath?: string;
25
- /** Path to wexts.runtime.js config. */
26
- runtimeConfigPath?: string;
27
- /** Node.js runtime version for the Vercel function. */
28
- nodeVersion?: string;
29
- /** Max duration in seconds for the serverless function. */
30
- maxDuration?: number;
31
- /** Memory size in MB for the serverless function. */
32
- memory?: number;
33
- /** Regions to deploy to. */
34
- regions?: string[];
35
- /** Skip the RPC codegen step. */
36
- skipCodegen?: boolean;
37
- /** Skip the Next.js / project build step. */
38
- skipBuild?: boolean;
39
- }
40
- interface VercelBuildResult {
41
- outputDir: string;
42
- configPath: string;
43
- functionDir: string;
44
- staticDir: string;
45
- errors: string[];
46
- warnings: string[];
47
- }
48
- /**
49
- * Build the `.vercel/output` directory from a Wexts project.
50
- */
51
- declare function buildVercelOutput(options?: VercelBuildOptions): Promise<VercelBuildResult>;
52
- interface ValidationResult {
53
- errors: string[];
54
- warnings: string[];
55
- }
56
- declare function validateOutput(outputDir: string): ValidationResult;
57
-
58
- export { type ValidationResult, type VercelBuildOptions, type VercelBuildResult, buildVercelOutput, validateOutput };
@@ -1,330 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
-
3
- var _chunkXE4OXN2Wjs = require('../chunk-XE4OXN2W.js');
4
-
5
- // src/vercel-builder/index.ts
6
- var _fs = require('fs'); var fs = _interopRequireWildcard(_fs);
7
- var _path = require('path'); var path = _interopRequireWildcard(_path);
8
- var _child_process = require('child_process');
9
- async function buildVercelOutput(options = {}) {
10
- const rootDir = path.resolve(_nullishCoalesce(options.rootDir, () => ( process.cwd())));
11
- const outputDir = path.join(rootDir, ".vercel", "output");
12
- const staticDir = path.join(outputDir, "static");
13
- const functionDir = path.join(outputDir, "functions", "index.func");
14
- const configPath = path.join(outputDir, "config.json");
15
- const errors = [];
16
- const warnings = [];
17
- if (fs.existsSync(outputDir)) {
18
- fs.rmSync(outputDir, {
19
- recursive: true,
20
- force: true
21
- });
22
- }
23
- if (!options.skipCodegen) {
24
- const apiDir = path.resolve(rootDir, _nullishCoalesce(options.apiProjectPath, () => ( "apps/api")));
25
- const rpcOut = path.resolve(rootDir, _nullishCoalesce(options.rpcOutputPath, () => ( "apps/web/lib/wexts")));
26
- if (fs.existsSync(apiDir)) {
27
- console.log("\u{1F527} Running RPC codegen...");
28
- const result = _child_process.spawnSync.call(void 0, "npx", [
29
- "wexts",
30
- "generate",
31
- "-p",
32
- apiDir,
33
- "-o",
34
- rpcOut
35
- ], {
36
- cwd: rootDir,
37
- stdio: "inherit",
38
- shell: process.platform === "win32"
39
- });
40
- if (result.status !== 0) {
41
- errors.push("RPC codegen failed.");
42
- return {
43
- outputDir,
44
- configPath,
45
- functionDir,
46
- staticDir,
47
- errors,
48
- warnings
49
- };
50
- }
51
- } else {
52
- warnings.push(`API directory not found at ${apiDir}; skipping codegen.`);
53
- }
54
- }
55
- if (!options.skipBuild) {
56
- console.log("\u{1F3D7}\uFE0F Building project...");
57
- const apiDir = path.resolve(rootDir, _nullishCoalesce(options.apiProjectPath, () => ( "apps/api")));
58
- if (fs.existsSync(path.join(apiDir, "tsconfig.json"))) {
59
- const tscResult = _child_process.spawnSync.call(void 0, "npx", [
60
- "tsc",
61
- "-p",
62
- path.join(apiDir, "tsconfig.json")
63
- ], {
64
- cwd: rootDir,
65
- stdio: "inherit",
66
- shell: process.platform === "win32"
67
- });
68
- if (tscResult.status !== 0) {
69
- errors.push("API TypeScript compilation failed.");
70
- return {
71
- outputDir,
72
- configPath,
73
- functionDir,
74
- staticDir,
75
- errors,
76
- warnings
77
- };
78
- }
79
- }
80
- const webDir = path.resolve(rootDir, "apps/web");
81
- if (fs.existsSync(webDir)) {
82
- const nextResult = _child_process.spawnSync.call(void 0, "npx", [
83
- "next",
84
- "build",
85
- webDir
86
- ], {
87
- cwd: rootDir,
88
- stdio: "inherit",
89
- shell: process.platform === "win32",
90
- env: {
91
- ...process.env,
92
- NODE_ENV: "production"
93
- }
94
- });
95
- if (nextResult.status !== 0) {
96
- errors.push("Next.js build failed.");
97
- return {
98
- outputDir,
99
- configPath,
100
- functionDir,
101
- staticDir,
102
- errors,
103
- warnings
104
- };
105
- }
106
- }
107
- }
108
- console.log("\u{1F4E6} Creating .vercel/output...");
109
- fs.mkdirSync(functionDir, {
110
- recursive: true
111
- });
112
- fs.mkdirSync(staticDir, {
113
- recursive: true
114
- });
115
- const config = {
116
- version: 3
117
- };
118
- fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
119
- const vcConfig = {
120
- runtime: `nodejs${_nullishCoalesce(options.nodeVersion, () => ( "20"))}.x`,
121
- handler: "index.js",
122
- launcherType: "Nodejs",
123
- maxDuration: _nullishCoalesce(options.maxDuration, () => ( 30)),
124
- ...options.memory ? {
125
- memory: options.memory
126
- } : {},
127
- ..._optionalChain([options, 'access', _ => _.regions, 'optionalAccess', _2 => _2.length]) ? {
128
- regions: options.regions
129
- } : {}
130
- };
131
- fs.writeFileSync(path.join(functionDir, ".vc-config.json"), JSON.stringify(vcConfig, null, 2));
132
- const runtimeConfigSrc = path.resolve(rootDir, _nullishCoalesce(options.runtimeConfigPath, () => ( "wexts.runtime.js")));
133
- const apiDistDir = path.resolve(rootDir, _nullishCoalesce(options.apiProjectPath, () => ( "apps/api")), "dist");
134
- if (fs.existsSync(apiDistDir)) {
135
- const targetApiDist = path.join(functionDir, "apps", "api", "dist");
136
- fs.mkdirSync(path.dirname(targetApiDist), {
137
- recursive: true
138
- });
139
- fs.cpSync(apiDistDir, targetApiDist, {
140
- recursive: true
141
- });
142
- } else {
143
- warnings.push("API dist not found; function may not have service implementations.");
144
- }
145
- const manifestCandidates = [
146
- path.resolve(rootDir, _nullishCoalesce(options.rpcOutputPath, () => ( "apps/web/lib/wexts")), "wexts.rpc.manifest.json")
147
- ];
148
- for (const manifestPath of manifestCandidates) {
149
- if (fs.existsSync(manifestPath)) {
150
- const relPath = path.relative(rootDir, manifestPath);
151
- const dest = path.join(functionDir, relPath);
152
- fs.mkdirSync(path.dirname(dest), {
153
- recursive: true
154
- });
155
- fs.copyFileSync(manifestPath, dest);
156
- break;
157
- }
158
- }
159
- if (fs.existsSync(runtimeConfigSrc)) {
160
- fs.copyFileSync(runtimeConfigSrc, path.join(functionDir, "wexts.runtime.js"));
161
- } else {
162
- warnings.push(`Runtime config not found at ${runtimeConfigSrc}.`);
163
- }
164
- const entryJs = generateServerlessEntry();
165
- fs.writeFileSync(path.join(functionDir, "index.js"), entryJs);
166
- const funcPkg = generateFunctionPackageJson(rootDir);
167
- fs.writeFileSync(path.join(functionDir, "package.json"), JSON.stringify(funcPkg, null, 2));
168
- const publicDir = path.join(rootDir, "apps/web/public");
169
- if (fs.existsSync(publicDir)) {
170
- fs.cpSync(publicDir, staticDir, {
171
- recursive: true
172
- });
173
- }
174
- const nextStaticDir = path.join(rootDir, "apps/web/.next/static");
175
- if (fs.existsSync(nextStaticDir)) {
176
- const dest = path.join(staticDir, "_next", "static");
177
- fs.mkdirSync(path.dirname(dest), {
178
- recursive: true
179
- });
180
- fs.cpSync(nextStaticDir, dest, {
181
- recursive: true
182
- });
183
- }
184
- const validation = validateOutput(outputDir);
185
- errors.push(...validation.errors);
186
- warnings.push(...validation.warnings);
187
- if (errors.length === 0) {
188
- console.log("\u2705 Vercel Build Output created successfully.");
189
- console.log(` Output: ${outputDir}`);
190
- } else {
191
- console.error("\u274C Vercel build completed with errors:");
192
- for (const err of errors) {
193
- console.error(` \u2022 ${err}`);
194
- }
195
- }
196
- return {
197
- outputDir,
198
- configPath,
199
- functionDir,
200
- staticDir,
201
- errors,
202
- warnings
203
- };
204
- }
205
- _chunkXE4OXN2Wjs.__name.call(void 0, buildVercelOutput, "buildVercelOutput");
206
- function generateServerlessEntry() {
207
- return `// Wexts serverless entry for Vercel
208
- // Auto-generated by wexts vercel-build \u2014 do not edit.
209
- const path = require('path');
210
-
211
- let handlerPromise;
212
-
213
- function getHandler() {
214
- if (!handlerPromise) {
215
- handlerPromise = (async () => {
216
- const { createWextsHandler } = require('wexts/runtime');
217
- const runtimeConfigPath = path.join(__dirname, 'wexts.runtime.js');
218
- let runtimeConfig = {};
219
- try {
220
- runtimeConfig = require(runtimeConfigPath);
221
- runtimeConfig = runtimeConfig.default || runtimeConfig;
222
- } catch (_e) {
223
- // No runtime config \u2014 use defaults
224
- }
225
- return createWextsHandler({
226
- ...runtimeConfig,
227
- dev: false,
228
- });
229
- })();
230
- }
231
- return handlerPromise;
232
- }
233
-
234
- module.exports = async (req, res) => {
235
- const handler = await getHandler();
236
- return handler(req, res);
237
- };
238
- `;
239
- }
240
- _chunkXE4OXN2Wjs.__name.call(void 0, generateServerlessEntry, "generateServerlessEntry");
241
- function generateFunctionPackageJson(rootDir) {
242
- const projectPkgPath = path.join(rootDir, "package.json");
243
- let projectPkg = {};
244
- if (fs.existsSync(projectPkgPath)) {
245
- projectPkg = JSON.parse(fs.readFileSync(projectPkgPath, "utf8"));
246
- }
247
- const deps = {};
248
- const rawDeps = _nullishCoalesce(projectPkg.dependencies, () => ( {}));
249
- for (const [name, version] of Object.entries(rawDeps)) {
250
- if (version.startsWith("workspace:")) {
251
- const resolved = resolveWorkspaceDependencyVersion(rootDir, name);
252
- if (resolved) {
253
- deps[name] = resolved;
254
- }
255
- } else {
256
- deps[name] = version;
257
- }
258
- }
259
- return {
260
- name: "wexts-vercel-function",
261
- version: "0.0.0",
262
- private: true,
263
- main: "index.js",
264
- dependencies: deps
265
- };
266
- }
267
- _chunkXE4OXN2Wjs.__name.call(void 0, generateFunctionPackageJson, "generateFunctionPackageJson");
268
- function resolveWorkspaceDependencyVersion(rootDir, name) {
269
- const candidates = [
270
- path.join(rootDir, "packages", "package.json"),
271
- path.join(rootDir, "packages", name, "package.json"),
272
- path.join(rootDir, "node_modules", name, "package.json")
273
- ];
274
- for (const candidate of candidates) {
275
- if (fs.existsSync(candidate)) {
276
- try {
277
- const pkg = JSON.parse(fs.readFileSync(candidate, "utf8"));
278
- if (pkg.name === name && pkg.version) {
279
- return `^${pkg.version}`;
280
- }
281
- } catch (e) {
282
- }
283
- }
284
- }
285
- return void 0;
286
- }
287
- _chunkXE4OXN2Wjs.__name.call(void 0, resolveWorkspaceDependencyVersion, "resolveWorkspaceDependencyVersion");
288
- function validateOutput(outputDir) {
289
- const errors = [];
290
- const warnings = [];
291
- const configPath = path.join(outputDir, "config.json");
292
- if (!fs.existsSync(configPath)) {
293
- errors.push("Missing .vercel/output/config.json");
294
- } else {
295
- const config = JSON.parse(fs.readFileSync(configPath, "utf8"));
296
- if (config.version !== 3) {
297
- errors.push(`config.json version must be 3, got ${config.version}`);
298
- }
299
- }
300
- const funcDir = path.join(outputDir, "functions", "index.func");
301
- if (!fs.existsSync(funcDir)) {
302
- errors.push("Missing .vercel/output/functions/index.func");
303
- } else {
304
- if (!fs.existsSync(path.join(funcDir, "index.js"))) {
305
- errors.push("Missing index.js in function directory");
306
- }
307
- if (!fs.existsSync(path.join(funcDir, ".vc-config.json"))) {
308
- errors.push("Missing .vc-config.json in function directory");
309
- }
310
- const funcPkgPath = path.join(funcDir, "package.json");
311
- if (!fs.existsSync(funcPkgPath)) {
312
- errors.push("Missing package.json in function directory");
313
- } else {
314
- const funcPkgContent = fs.readFileSync(funcPkgPath, "utf8");
315
- if (funcPkgContent.includes("workspace:")) {
316
- errors.push("Function package.json contains workspace:* protocol \u2014 not deployable.");
317
- }
318
- }
319
- }
320
- return {
321
- errors,
322
- warnings
323
- };
324
- }
325
- _chunkXE4OXN2Wjs.__name.call(void 0, validateOutput, "validateOutput");
326
-
327
-
328
-
329
- exports.buildVercelOutput = buildVercelOutput; exports.validateOutput = validateOutput;
330
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Volumes/Projects/wexts/packages/dist/vercel-builder/index.js","../../src/vercel-builder/index.ts"],"names":["buildVercelOutput","options","rootDir","resolve","process","cwd","outputDir","join","staticDir","functionDir","configPath","errors","warnings","existsSync","fs","rmSync","recursive","force","skipCodegen","apiDir","apiProjectPath","rpcOut","rpcOutputPath","console","log","result","spawnSync","stdio","shell","platform","status","push","skipBuild","tscResult","webDir","nextResult","env","NODE_ENV","mkdirSync","config","version","writeFileSync","JSON","stringify","vcConfig","runtime","nodeVersion","handler","launcherType","maxDuration","memory","regions","length","runtimeConfigSrc","runtimeConfigPath","apiDistDir","targetApiDist","dirname","cpSync","manifestCandidates","manifestPath","relPath","relative","dest","copyFileSync","entryJs","generateServerlessEntry","funcPkg","generateFunctionPackageJson","publicDir","nextStaticDir","validation","validateOutput","readFileSync","dependencies","entries","resolveWorkspaceDependencyVersion","resolved","deps","name","undefined","funcDir"],"mappings":"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","file":"/Volumes/Projects/wexts/packages/dist/vercel-builder/index.js","sourcesContent":[null,"/**\n * Wexts Vercel Build Output API builder.\n *\n * Produces the `.vercel/output` tree (Build Output API v3) that Vercel\n * uses for deployment. This module is invoked by `wexts vercel-build`.\n *\n * Layout produced:\n * .vercel/output/\n * config.json – { version: 3 }\n * static/ – public / static assets copied here\n * functions/\n * index.func/\n * index.js – serverless entry point\n * package.json – { type: \"module\" } or cjs\n * .vc-config.json – Vercel function config\n * ...copied runtime files\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { spawnSync } from 'child_process';\n\nexport interface VercelBuildOptions {\n /** Project root (cwd). Defaults to process.cwd(). */\n rootDir?: string;\n /** Path to NestJS/API project for codegen. */\n apiProjectPath?: string;\n /** Output directory for generated RPC client. */\n rpcOutputPath?: string;\n /** Path to wexts.runtime.js config. */\n runtimeConfigPath?: string;\n /** Node.js runtime version for the Vercel function. */\n nodeVersion?: string;\n /** Max duration in seconds for the serverless function. */\n maxDuration?: number;\n /** Memory size in MB for the serverless function. */\n memory?: number;\n /** Regions to deploy to. */\n regions?: string[];\n /** Skip the RPC codegen step. */\n skipCodegen?: boolean;\n /** Skip the Next.js / project build step. */\n skipBuild?: boolean;\n}\n\nexport interface VercelBuildResult {\n outputDir: string;\n configPath: string;\n functionDir: string;\n staticDir: string;\n errors: string[];\n warnings: string[];\n}\n\n/**\n * Build the `.vercel/output` directory from a Wexts project.\n */\nexport async function buildVercelOutput(\n options: VercelBuildOptions = {},\n): Promise<VercelBuildResult> {\n const rootDir = path.resolve(options.rootDir ?? process.cwd());\n const outputDir = path.join(rootDir, '.vercel', 'output');\n const staticDir = path.join(outputDir, 'static');\n const functionDir = path.join(outputDir, 'functions', 'index.func');\n const configPath = path.join(outputDir, 'config.json');\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // ── 0. Clean previous output ────────────────────────────────────────\n if (fs.existsSync(outputDir)) {\n fs.rmSync(outputDir, { recursive: true, force: true });\n }\n\n // ── 1. Run RPC codegen ──────────────────────────────────────────────\n if (!options.skipCodegen) {\n const apiDir = path.resolve(rootDir, options.apiProjectPath ?? 'apps/api');\n const rpcOut = path.resolve(rootDir, options.rpcOutputPath ?? 'apps/web/lib/wexts');\n\n if (fs.existsSync(apiDir)) {\n console.log('🔧 Running RPC codegen...');\n const result = spawnSync(\n 'npx',\n ['wexts', 'generate', '-p', apiDir, '-o', rpcOut],\n { cwd: rootDir, stdio: 'inherit', shell: process.platform === 'win32' },\n );\n if (result.status !== 0) {\n errors.push('RPC codegen failed.');\n return { outputDir, configPath, functionDir, staticDir, errors, warnings };\n }\n } else {\n warnings.push(`API directory not found at ${apiDir}; skipping codegen.`);\n }\n }\n\n // ── 2. Build the project ────────────────────────────────────────────\n if (!options.skipBuild) {\n console.log('🏗️ Building project...');\n // Build API (TypeScript)\n const apiDir = path.resolve(rootDir, options.apiProjectPath ?? 'apps/api');\n if (fs.existsSync(path.join(apiDir, 'tsconfig.json'))) {\n const tscResult = spawnSync('npx', ['tsc', '-p', path.join(apiDir, 'tsconfig.json')], {\n cwd: rootDir,\n stdio: 'inherit',\n shell: process.platform === 'win32',\n });\n if (tscResult.status !== 0) {\n errors.push('API TypeScript compilation failed.');\n return { outputDir, configPath, functionDir, staticDir, errors, warnings };\n }\n }\n\n // Build Next.js\n const webDir = path.resolve(rootDir, 'apps/web');\n if (fs.existsSync(webDir)) {\n const nextResult = spawnSync('npx', ['next', 'build', webDir], {\n cwd: rootDir,\n stdio: 'inherit',\n shell: process.platform === 'win32',\n env: { ...process.env, NODE_ENV: 'production' },\n });\n if (nextResult.status !== 0) {\n errors.push('Next.js build failed.');\n return { outputDir, configPath, functionDir, staticDir, errors, warnings };\n }\n }\n }\n\n // ── 3. Create output structure ──────────────────────────────────────\n console.log('📦 Creating .vercel/output...');\n fs.mkdirSync(functionDir, { recursive: true });\n fs.mkdirSync(staticDir, { recursive: true });\n\n // ── 4. Write config.json ────────────────────────────────────────────\n const config = { version: 3 as const };\n fs.writeFileSync(configPath, JSON.stringify(config, null, 2));\n\n // ── 5. Write .vc-config.json for the function ───────────────────────\n const vcConfig = {\n runtime: `nodejs${options.nodeVersion ?? '20'}.x`,\n handler: 'index.js',\n launcherType: 'Nodejs',\n maxDuration: options.maxDuration ?? 30,\n ...(options.memory ? { memory: options.memory } : {}),\n ...(options.regions?.length ? { regions: options.regions } : {}),\n };\n fs.writeFileSync(\n path.join(functionDir, '.vc-config.json'),\n JSON.stringify(vcConfig, null, 2),\n );\n\n // ── 6. Copy runtime files into the function ─────────────────────────\n const runtimeConfigSrc = path.resolve(\n rootDir,\n options.runtimeConfigPath ?? 'wexts.runtime.js',\n );\n\n // Copy API dist\n const apiDistDir = path.resolve(rootDir, options.apiProjectPath ?? 'apps/api', 'dist');\n if (fs.existsSync(apiDistDir)) {\n const targetApiDist = path.join(functionDir, 'apps', 'api', 'dist');\n fs.mkdirSync(path.dirname(targetApiDist), { recursive: true });\n fs.cpSync(apiDistDir, targetApiDist, { recursive: true });\n } else {\n warnings.push('API dist not found; function may not have service implementations.');\n }\n\n // Copy RPC manifest\n const manifestCandidates = [\n path.resolve(rootDir, options.rpcOutputPath ?? 'apps/web/lib/wexts', 'wexts.rpc.manifest.json'),\n ];\n for (const manifestPath of manifestCandidates) {\n if (fs.existsSync(manifestPath)) {\n const relPath = path.relative(rootDir, manifestPath);\n const dest = path.join(functionDir, relPath);\n fs.mkdirSync(path.dirname(dest), { recursive: true });\n fs.copyFileSync(manifestPath, dest);\n break;\n }\n }\n\n // Copy wexts.runtime.js (adjusted for Vercel paths)\n if (fs.existsSync(runtimeConfigSrc)) {\n fs.copyFileSync(runtimeConfigSrc, path.join(functionDir, 'wexts.runtime.js'));\n } else {\n warnings.push(`Runtime config not found at ${runtimeConfigSrc}.`);\n }\n\n // ── 7. Write serverless entry point ─────────────────────────────────\n const entryJs = generateServerlessEntry();\n fs.writeFileSync(path.join(functionDir, 'index.js'), entryJs);\n\n // ── 8. Write package.json for the function (no workspace:* deps) ───\n const funcPkg = generateFunctionPackageJson(rootDir);\n fs.writeFileSync(\n path.join(functionDir, 'package.json'),\n JSON.stringify(funcPkg, null, 2),\n );\n\n // ── 9. Copy static assets ───────────────────────────────────────────\n const publicDir = path.join(rootDir, 'apps/web/public');\n if (fs.existsSync(publicDir)) {\n fs.cpSync(publicDir, staticDir, { recursive: true });\n }\n\n // ── 10. Copy Next.js static output if standalone/export exists ──────\n const nextStaticDir = path.join(rootDir, 'apps/web/.next/static');\n if (fs.existsSync(nextStaticDir)) {\n const dest = path.join(staticDir, '_next', 'static');\n fs.mkdirSync(path.dirname(dest), { recursive: true });\n fs.cpSync(nextStaticDir, dest, { recursive: true });\n }\n\n // ── 11. Validate the output ─────────────────────────────────────────\n const validation = validateOutput(outputDir);\n errors.push(...validation.errors);\n warnings.push(...validation.warnings);\n\n if (errors.length === 0) {\n console.log('✅ Vercel Build Output created successfully.');\n console.log(` Output: ${outputDir}`);\n } else {\n console.error('❌ Vercel build completed with errors:');\n for (const err of errors) {\n console.error(` • ${err}`);\n }\n }\n\n return { outputDir, configPath, functionDir, staticDir, errors, warnings };\n}\n\n// ─── Helpers ──────────────────────────────────────────────────────────────\n\nfunction generateServerlessEntry(): string {\n return `// Wexts serverless entry for Vercel\n// Auto-generated by wexts vercel-build — do not edit.\nconst path = require('path');\n\nlet handlerPromise;\n\nfunction getHandler() {\n if (!handlerPromise) {\n handlerPromise = (async () => {\n const { createWextsHandler } = require('wexts/runtime');\n const runtimeConfigPath = path.join(__dirname, 'wexts.runtime.js');\n let runtimeConfig = {};\n try {\n runtimeConfig = require(runtimeConfigPath);\n runtimeConfig = runtimeConfig.default || runtimeConfig;\n } catch (_e) {\n // No runtime config — use defaults\n }\n return createWextsHandler({\n ...runtimeConfig,\n dev: false,\n });\n })();\n }\n return handlerPromise;\n}\n\nmodule.exports = async (req, res) => {\n const handler = await getHandler();\n return handler(req, res);\n};\n`;\n}\n\nfunction generateFunctionPackageJson(rootDir: string): Record<string, unknown> {\n const projectPkgPath = path.join(rootDir, 'package.json');\n let projectPkg: Record<string, unknown> = {};\n if (fs.existsSync(projectPkgPath)) {\n projectPkg = JSON.parse(fs.readFileSync(projectPkgPath, 'utf8'));\n }\n\n // Collect dependencies but resolve workspace:* to real versions\n const deps: Record<string, string> = {};\n const rawDeps = (projectPkg.dependencies ?? {}) as Record<string, string>;\n for (const [name, version] of Object.entries(rawDeps)) {\n if (version.startsWith('workspace:')) {\n // Resolve from the monorepo\n const resolved = resolveWorkspaceDependencyVersion(rootDir, name);\n if (resolved) {\n deps[name] = resolved;\n }\n // Skip if not resolvable — it'll be caught by validation\n } else {\n deps[name] = version;\n }\n }\n\n return {\n name: 'wexts-vercel-function',\n version: '0.0.0',\n private: true,\n main: 'index.js',\n dependencies: deps,\n };\n}\n\nfunction resolveWorkspaceDependencyVersion(rootDir: string, name: string): string | undefined {\n // Walk common monorepo locations\n const candidates = [\n path.join(rootDir, 'packages', 'package.json'), // packages/ (the main wexts package)\n path.join(rootDir, 'packages', name, 'package.json'), // packages/<name>\n path.join(rootDir, 'node_modules', name, 'package.json'), // fallback\n ];\n\n for (const candidate of candidates) {\n if (fs.existsSync(candidate)) {\n try {\n const pkg = JSON.parse(fs.readFileSync(candidate, 'utf8'));\n if (pkg.name === name && pkg.version) {\n return `^${pkg.version}`;\n }\n } catch {\n // ignore\n }\n }\n }\n\n return undefined;\n}\n\nexport interface ValidationResult {\n errors: string[];\n warnings: string[];\n}\n\nexport function validateOutput(outputDir: string): ValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n const configPath = path.join(outputDir, 'config.json');\n if (!fs.existsSync(configPath)) {\n errors.push('Missing .vercel/output/config.json');\n } else {\n const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));\n if (config.version !== 3) {\n errors.push(`config.json version must be 3, got ${config.version}`);\n }\n }\n\n const funcDir = path.join(outputDir, 'functions', 'index.func');\n if (!fs.existsSync(funcDir)) {\n errors.push('Missing .vercel/output/functions/index.func');\n } else {\n if (!fs.existsSync(path.join(funcDir, 'index.js'))) {\n errors.push('Missing index.js in function directory');\n }\n if (!fs.existsSync(path.join(funcDir, '.vc-config.json'))) {\n errors.push('Missing .vc-config.json in function directory');\n }\n const funcPkgPath = path.join(funcDir, 'package.json');\n if (!fs.existsSync(funcPkgPath)) {\n errors.push('Missing package.json in function directory');\n } else {\n const funcPkgContent = fs.readFileSync(funcPkgPath, 'utf8');\n if (funcPkgContent.includes('workspace:')) {\n errors.push('Function package.json contains workspace:* protocol — not deployable.');\n }\n }\n }\n\n return { errors, warnings };\n}\n"]}