wexts 4.1.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.
- package/README.md +49 -49
- package/bin/wexts.cjs +2 -2
- package/package.json +153 -148
- package/templates/.dockerignore +43 -43
- package/templates/.env.example +17 -17
- package/templates/Dockerfile +60 -60
- package/templates/Procfile +1 -1
- package/templates/README.md +67 -67
- package/templates/api-sdk.ts +115 -115
- package/templates/docker-compose.yml +34 -34
- package/templates/nestjs-api/.env.example +3 -3
- package/templates/nestjs-api/README.md +87 -87
- package/templates/nestjs-api/nest-cli.json +6 -6
- package/templates/nestjs-api/package.json +40 -40
- package/templates/nestjs-api/prisma/migrations/20251123205437_init/migration.sql +24 -24
- package/templates/nestjs-api/prisma/migrations/migration_lock.toml +3 -3
- package/templates/nestjs-api/prisma/schema.prisma +29 -29
- package/templates/nestjs-api/src/app.module.ts +17 -17
- package/templates/nestjs-api/src/auth/auth.controller.ts +27 -27
- package/templates/nestjs-api/src/auth/auth.module.ts +37 -37
- package/templates/nestjs-api/src/auth/auth.service.ts +86 -86
- package/templates/nestjs-api/src/auth/dto/auth.dto.ts +22 -22
- package/templates/nestjs-api/src/auth/guards/jwt-auth.guard.ts +5 -5
- package/templates/nestjs-api/src/auth/strategies/jwt.strategy.ts +27 -27
- package/templates/nestjs-api/src/main.ts +32 -32
- package/templates/nestjs-api/src/prisma/prisma.module.ts +9 -9
- package/templates/nestjs-api/src/prisma/prisma.service.ts +14 -14
- package/templates/nestjs-api/src/todos/dto/todo.dto.ts +24 -24
- package/templates/nestjs-api/src/todos/todos.controller.ts +39 -39
- package/templates/nestjs-api/src/todos/todos.module.ts +11 -11
- package/templates/nestjs-api/src/todos/todos.service.ts +53 -53
- package/templates/nestjs-api/src/users/users.controller.ts +14 -14
- package/templates/nestjs-api/src/users/users.module.ts +12 -12
- package/templates/nestjs-api/src/users/users.service.ts +19 -19
- package/templates/nestjs-api/tsconfig.json +39 -39
- package/templates/nextjs-web/README.md +76 -76
- package/templates/nextjs-web/app/actions/auth.ts +108 -108
- package/templates/nextjs-web/app/dashboard/error.tsx +39 -39
- package/templates/nextjs-web/app/dashboard/loading.tsx +14 -14
- package/templates/nextjs-web/app/dashboard/page.tsx +5 -5
- package/templates/nextjs-web/app/globals.css +93 -93
- package/templates/nextjs-web/app/layout.tsx +29 -29
- package/templates/nextjs-web/app/login/page.tsx +5 -5
- package/templates/nextjs-web/app/page.tsx +28 -28
- package/templates/nextjs-web/app/register/page.tsx +5 -5
- package/templates/nextjs-web/components/ui/button.tsx +56 -56
- package/templates/nextjs-web/components/ui/card.tsx +79 -79
- package/templates/nextjs-web/components/ui/input.tsx +25 -25
- package/templates/nextjs-web/components/ui/label.tsx +24 -24
- package/templates/nextjs-web/features/auth/LoginForm.tsx +140 -140
- package/templates/nextjs-web/features/auth/RegisterForm.tsx +159 -159
- package/templates/nextjs-web/features/auth/api.ts +35 -35
- package/templates/nextjs-web/features/auth/index.ts +3 -3
- package/templates/nextjs-web/features/dashboard/DashboardView.tsx +204 -204
- package/templates/nextjs-web/features/dashboard/api.ts +9 -9
- package/templates/nextjs-web/features/dashboard/components.tsx +74 -74
- package/templates/nextjs-web/features/dashboard/index.ts +3 -3
- package/templates/nextjs-web/hooks/index.ts +4 -4
- package/templates/nextjs-web/lib/api-client.ts +89 -89
- package/templates/nextjs-web/lib/api.ts +115 -115
- package/templates/nextjs-web/lib/axios-global-config.ts +17 -17
- package/templates/nextjs-web/lib/utils.ts +6 -6
- package/templates/nextjs-web/lib/wexts-client.ts +4 -4
- package/templates/nextjs-web/next-env.d.ts +6 -6
- package/templates/nextjs-web/next.config.ts +20 -20
- package/templates/nextjs-web/package.json +37 -37
- package/templates/nextjs-web/postcss.config.js +6 -6
- package/templates/nextjs-web/tailwind.config.ts +69 -69
- package/templates/nextjs-web/tsconfig.json +41 -41
- package/templates/nixpacks.toml +11 -11
- package/templates/root-package.json +31 -31
- package/templates/server.ts +66 -66
- package/templates/tsconfig.json +30 -30
- package/dist/chunk-2KAQYLVN.js +0 -1
- package/dist/chunk-2KAQYLVN.js.map +0 -1
- package/dist/chunk-2LJVUMXW.js +0 -228
- package/dist/chunk-2LJVUMXW.js.map +0 -1
- package/dist/chunk-342VRT25.mjs +0 -504
- package/dist/chunk-342VRT25.mjs.map +0 -1
- package/dist/chunk-7HNQWJWV.js +0 -504
- package/dist/chunk-7HNQWJWV.js.map +0 -1
- package/dist/chunk-7QKLIVRF.js +0 -94
- package/dist/chunk-7QKLIVRF.js.map +0 -1
- package/dist/chunk-7SSCNCTW.mjs +0 -137
- package/dist/chunk-7SSCNCTW.mjs.map +0 -1
- package/dist/chunk-7TLSPR65.mjs +0 -95
- package/dist/chunk-7TLSPR65.mjs.map +0 -1
- package/dist/chunk-7WULUGLH.mjs +0 -22
- package/dist/chunk-7WULUGLH.mjs.map +0 -1
- package/dist/chunk-AVMQJWYD.js +0 -95
- package/dist/chunk-AVMQJWYD.js.map +0 -1
- package/dist/chunk-BG56B4DE.js +0 -106
- package/dist/chunk-BG56B4DE.js.map +0 -1
- package/dist/chunk-CLM5PNSG.mjs +0 -496
- package/dist/chunk-CLM5PNSG.mjs.map +0 -1
- package/dist/chunk-DNLGCKTT.js +0 -31
- package/dist/chunk-DNLGCKTT.js.map +0 -1
- package/dist/chunk-JHOVXH3X.mjs +0 -65
- package/dist/chunk-JHOVXH3X.mjs.map +0 -1
- package/dist/chunk-MXINIFPC.js +0 -105
- package/dist/chunk-MXINIFPC.js.map +0 -1
- package/dist/chunk-O4II6N34.js +0 -137
- package/dist/chunk-O4II6N34.js.map +0 -1
- package/dist/chunk-SE32ZPOZ.js +0 -496
- package/dist/chunk-SE32ZPOZ.js.map +0 -1
- package/dist/chunk-UAL54DVV.mjs +0 -106
- package/dist/chunk-UAL54DVV.mjs.map +0 -1
- package/dist/chunk-WCKSKU3C.js +0 -65
- package/dist/chunk-WCKSKU3C.js.map +0 -1
- package/dist/chunk-WU6FW77M.mjs +0 -105
- package/dist/chunk-WU6FW77M.mjs.map +0 -1
- package/dist/chunk-XE4OXN2W.js +0 -12
- package/dist/chunk-XE4OXN2W.js.map +0 -1
- package/dist/chunk-YBM3IJEA.mjs +0 -94
- package/dist/chunk-YBM3IJEA.mjs.map +0 -1
- package/dist/chunk-YN6WIWNQ.mjs +0 -228
- package/dist/chunk-YN6WIWNQ.mjs.map +0 -1
- package/dist/chunk-YSLEF5C5.mjs +0 -1
- package/dist/chunk-YSLEF5C5.mjs.map +0 -1
- package/dist/chunk-ZX7QIN24.mjs +0 -31
- package/dist/chunk-ZX7QIN24.mjs.map +0 -1
- package/dist/cli/index.d.mts +0 -23
- package/dist/cli/index.d.ts +0 -23
- package/dist/cli/index.js +0 -716
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/index.mjs +0 -718
- package/dist/cli/index.mjs.map +0 -1
- package/dist/client/index.d.mts +0 -21
- package/dist/client/index.d.ts +0 -21
- package/dist/client/index.js +0 -13
- package/dist/client/index.js.map +0 -1
- package/dist/client/index.mjs +0 -13
- package/dist/client/index.mjs.map +0 -1
- package/dist/codegen/index.d.mts +0 -2
- package/dist/codegen/index.d.ts +0 -2
- package/dist/codegen/index.js +0 -16
- package/dist/codegen/index.js.map +0 -1
- package/dist/codegen/index.mjs +0 -16
- package/dist/codegen/index.mjs.map +0 -1
- package/dist/decorators-BT1FFqN0.d.mts +0 -29
- package/dist/decorators-DvS58PqC.d.ts +0 -29
- package/dist/dev-server/index.d.mts +0 -1
- package/dist/dev-server/index.d.ts +0 -1
- package/dist/dev-server/index.js +0 -13
- package/dist/dev-server/index.js.map +0 -1
- package/dist/dev-server/index.mjs +0 -13
- package/dist/dev-server/index.mjs.map +0 -1
- package/dist/index-7QeQEf37.d.ts +0 -92
- package/dist/index-7RvU-jGE.d.mts +0 -66
- package/dist/index-7RvU-jGE.d.ts +0 -66
- package/dist/index-8nzxy0NN.d.mts +0 -92
- package/dist/index-Co5ZsLqq.d.ts +0 -58
- package/dist/index-D94W1__r.d.mts +0 -58
- package/dist/index-DQmyVp6F.d.mts +0 -27
- package/dist/index-KL_1BrQb.d.ts +0 -27
- package/dist/index.d.mts +0 -294
- package/dist/index.d.ts +0 -294
- package/dist/index.js +0 -424
- package/dist/index.js.map +0 -1
- package/dist/index.mjs +0 -424
- package/dist/index.mjs.map +0 -1
- package/dist/nest/index.d.mts +0 -3
- package/dist/nest/index.d.ts +0 -3
- package/dist/nest/index.js +0 -38
- package/dist/nest/index.js.map +0 -1
- package/dist/nest/index.mjs +0 -38
- package/dist/nest/index.mjs.map +0 -1
- package/dist/next/index.d.mts +0 -66
- package/dist/next/index.d.ts +0 -66
- package/dist/next/index.js +0 -289
- package/dist/next/index.js.map +0 -1
- package/dist/next/index.mjs +0 -251
- package/dist/next/index.mjs.map +0 -1
- package/dist/rpc/index.d.mts +0 -2
- package/dist/rpc/index.d.ts +0 -2
- package/dist/rpc/index.js +0 -23
- package/dist/rpc/index.js.map +0 -1
- package/dist/rpc/index.mjs +0 -23
- package/dist/rpc/index.mjs.map +0 -1
- package/dist/runtime/index.d.mts +0 -55
- package/dist/runtime/index.d.ts +0 -55
- package/dist/runtime/index.js +0 -221
- package/dist/runtime/index.js.map +0 -1
- package/dist/runtime/index.mjs +0 -221
- package/dist/runtime/index.mjs.map +0 -1
- package/dist/types/index.d.mts +0 -12
- package/dist/types/index.d.ts +0 -12
- package/dist/types/index.js +0 -2
- package/dist/types/index.js.map +0 -1
- package/dist/types/index.mjs +0 -3
- package/dist/types/index.mjs.map +0 -1
- package/dist/types-7d_fC-C3.d.mts +0 -32
- package/dist/types-7d_fC-C3.d.ts +0 -32
- package/dist/vercel-builder/index.d.mts +0 -58
- package/dist/vercel-builder/index.d.ts +0 -58
- package/dist/vercel-builder/index.js +0 -330
- package/dist/vercel-builder/index.js.map +0 -1
- package/dist/vercel-builder/index.mjs +0 -330
- package/dist/vercel-builder/index.mjs.map +0 -1
|
@@ -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"]}
|