vinext 0.0.0 → 0.0.1
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/LICENSE +21 -0
- package/README.md +1 -0
- package/dist/build/static-export.d.ts +78 -0
- package/dist/build/static-export.d.ts.map +1 -0
- package/dist/build/static-export.js +553 -0
- package/dist/build/static-export.js.map +1 -0
- package/dist/check.d.ts +52 -0
- package/dist/check.d.ts.map +1 -0
- package/dist/check.js +483 -0
- package/dist/check.js.map +1 -0
- package/dist/cli.d.ts +15 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +565 -0
- package/dist/cli.js.map +1 -0
- package/dist/client/entry.d.ts +2 -0
- package/dist/client/entry.d.ts.map +1 -0
- package/dist/client/entry.js +85 -0
- package/dist/client/entry.js.map +1 -0
- package/dist/cloudflare/index.d.ts +8 -0
- package/dist/cloudflare/index.d.ts.map +1 -0
- package/dist/cloudflare/index.js +8 -0
- package/dist/cloudflare/index.js.map +1 -0
- package/dist/cloudflare/kv-cache-handler.d.ts +68 -0
- package/dist/cloudflare/kv-cache-handler.d.ts.map +1 -0
- package/dist/cloudflare/kv-cache-handler.js +304 -0
- package/dist/cloudflare/kv-cache-handler.js.map +1 -0
- package/dist/cloudflare/tpr.d.ts +78 -0
- package/dist/cloudflare/tpr.d.ts.map +1 -0
- package/dist/cloudflare/tpr.js +672 -0
- package/dist/cloudflare/tpr.js.map +1 -0
- package/dist/config/config-matchers.d.ts +106 -0
- package/dist/config/config-matchers.d.ts.map +1 -0
- package/dist/config/config-matchers.js +499 -0
- package/dist/config/config-matchers.js.map +1 -0
- package/dist/config/next-config.d.ts +153 -0
- package/dist/config/next-config.d.ts.map +1 -0
- package/dist/config/next-config.js +274 -0
- package/dist/config/next-config.js.map +1 -0
- package/dist/deploy.d.ts +87 -0
- package/dist/deploy.d.ts.map +1 -0
- package/dist/deploy.js +644 -0
- package/dist/deploy.js.map +1 -0
- package/dist/index.d.ts +156 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3287 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +55 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +201 -0
- package/dist/init.js.map +1 -0
- package/dist/routing/app-router.d.ts +96 -0
- package/dist/routing/app-router.d.ts.map +1 -0
- package/dist/routing/app-router.js +815 -0
- package/dist/routing/app-router.js.map +1 -0
- package/dist/routing/pages-router.d.ts +52 -0
- package/dist/routing/pages-router.d.ts.map +1 -0
- package/dist/routing/pages-router.js +239 -0
- package/dist/routing/pages-router.js.map +1 -0
- package/dist/server/api-handler.d.ts +18 -0
- package/dist/server/api-handler.d.ts.map +1 -0
- package/dist/server/api-handler.js +169 -0
- package/dist/server/api-handler.js.map +1 -0
- package/dist/server/app-dev-server.d.ts +42 -0
- package/dist/server/app-dev-server.d.ts.map +1 -0
- package/dist/server/app-dev-server.js +2718 -0
- package/dist/server/app-dev-server.js.map +1 -0
- package/dist/server/app-router-entry.d.ts +18 -0
- package/dist/server/app-router-entry.d.ts.map +1 -0
- package/dist/server/app-router-entry.js +34 -0
- package/dist/server/app-router-entry.js.map +1 -0
- package/dist/server/dev-server.d.ts +40 -0
- package/dist/server/dev-server.d.ts.map +1 -0
- package/dist/server/dev-server.js +758 -0
- package/dist/server/dev-server.js.map +1 -0
- package/dist/server/html.d.ts +22 -0
- package/dist/server/html.d.ts.map +1 -0
- package/dist/server/html.js +29 -0
- package/dist/server/html.js.map +1 -0
- package/dist/server/image-optimization.d.ts +56 -0
- package/dist/server/image-optimization.d.ts.map +1 -0
- package/dist/server/image-optimization.js +103 -0
- package/dist/server/image-optimization.js.map +1 -0
- package/dist/server/instrumentation.d.ts +68 -0
- package/dist/server/instrumentation.d.ts.map +1 -0
- package/dist/server/instrumentation.js +90 -0
- package/dist/server/instrumentation.js.map +1 -0
- package/dist/server/isr-cache.d.ts +61 -0
- package/dist/server/isr-cache.d.ts.map +1 -0
- package/dist/server/isr-cache.js +134 -0
- package/dist/server/isr-cache.js.map +1 -0
- package/dist/server/metadata-routes.d.ts +103 -0
- package/dist/server/metadata-routes.d.ts.map +1 -0
- package/dist/server/metadata-routes.js +270 -0
- package/dist/server/metadata-routes.js.map +1 -0
- package/dist/server/middleware.d.ts +77 -0
- package/dist/server/middleware.d.ts.map +1 -0
- package/dist/server/middleware.js +228 -0
- package/dist/server/middleware.js.map +1 -0
- package/dist/server/prod-server.d.ts +78 -0
- package/dist/server/prod-server.d.ts.map +1 -0
- package/dist/server/prod-server.js +712 -0
- package/dist/server/prod-server.js.map +1 -0
- package/dist/shims/amp.d.ts +17 -0
- package/dist/shims/amp.d.ts.map +1 -0
- package/dist/shims/amp.js +21 -0
- package/dist/shims/amp.js.map +1 -0
- package/dist/shims/app.d.ts +12 -0
- package/dist/shims/app.d.ts.map +1 -0
- package/dist/shims/app.js +2 -0
- package/dist/shims/app.js.map +1 -0
- package/dist/shims/cache-runtime.d.ts +68 -0
- package/dist/shims/cache-runtime.d.ts.map +1 -0
- package/dist/shims/cache-runtime.js +437 -0
- package/dist/shims/cache-runtime.js.map +1 -0
- package/dist/shims/cache.d.ts +243 -0
- package/dist/shims/cache.d.ts.map +1 -0
- package/dist/shims/cache.js +415 -0
- package/dist/shims/cache.js.map +1 -0
- package/dist/shims/client-only.d.ts +18 -0
- package/dist/shims/client-only.d.ts.map +1 -0
- package/dist/shims/client-only.js +18 -0
- package/dist/shims/client-only.js.map +1 -0
- package/dist/shims/config.d.ts +27 -0
- package/dist/shims/config.d.ts.map +1 -0
- package/dist/shims/config.js +30 -0
- package/dist/shims/config.js.map +1 -0
- package/dist/shims/constants.d.ts +13 -0
- package/dist/shims/constants.d.ts.map +1 -0
- package/dist/shims/constants.js +13 -0
- package/dist/shims/constants.js.map +1 -0
- package/dist/shims/document.d.ts +33 -0
- package/dist/shims/document.d.ts.map +1 -0
- package/dist/shims/document.js +32 -0
- package/dist/shims/document.js.map +1 -0
- package/dist/shims/dynamic.d.ts +33 -0
- package/dist/shims/dynamic.d.ts.map +1 -0
- package/dist/shims/dynamic.js +148 -0
- package/dist/shims/dynamic.js.map +1 -0
- package/dist/shims/error-boundary.d.ts +33 -0
- package/dist/shims/error-boundary.d.ts.map +1 -0
- package/dist/shims/error-boundary.js +88 -0
- package/dist/shims/error-boundary.js.map +1 -0
- package/dist/shims/error.d.ts +16 -0
- package/dist/shims/error.d.ts.map +1 -0
- package/dist/shims/error.js +45 -0
- package/dist/shims/error.js.map +1 -0
- package/dist/shims/fetch-cache.d.ts +61 -0
- package/dist/shims/fetch-cache.d.ts.map +1 -0
- package/dist/shims/fetch-cache.js +307 -0
- package/dist/shims/fetch-cache.js.map +1 -0
- package/dist/shims/font-google.d.ts +122 -0
- package/dist/shims/font-google.d.ts.map +1 -0
- package/dist/shims/font-google.js +387 -0
- package/dist/shims/font-google.js.map +1 -0
- package/dist/shims/font-local.d.ts +61 -0
- package/dist/shims/font-local.d.ts.map +1 -0
- package/dist/shims/font-local.js +303 -0
- package/dist/shims/font-local.js.map +1 -0
- package/dist/shims/form.d.ts +30 -0
- package/dist/shims/form.d.ts.map +1 -0
- package/dist/shims/form.js +78 -0
- package/dist/shims/form.js.map +1 -0
- package/dist/shims/head-state.d.ts +11 -0
- package/dist/shims/head-state.d.ts.map +1 -0
- package/dist/shims/head-state.js +47 -0
- package/dist/shims/head-state.js.map +1 -0
- package/dist/shims/head.d.ts +28 -0
- package/dist/shims/head.d.ts.map +1 -0
- package/dist/shims/head.js +148 -0
- package/dist/shims/head.js.map +1 -0
- package/dist/shims/headers.d.ts +150 -0
- package/dist/shims/headers.d.ts.map +1 -0
- package/dist/shims/headers.js +412 -0
- package/dist/shims/headers.js.map +1 -0
- package/dist/shims/image-config.d.ts +30 -0
- package/dist/shims/image-config.d.ts.map +1 -0
- package/dist/shims/image-config.js +91 -0
- package/dist/shims/image-config.js.map +1 -0
- package/dist/shims/image.d.ts +63 -0
- package/dist/shims/image.d.ts.map +1 -0
- package/dist/shims/image.js +284 -0
- package/dist/shims/image.js.map +1 -0
- package/dist/shims/internal/api-utils.d.ts +12 -0
- package/dist/shims/internal/api-utils.d.ts.map +1 -0
- package/dist/shims/internal/api-utils.js +7 -0
- package/dist/shims/internal/api-utils.js.map +1 -0
- package/dist/shims/internal/app-router-context.d.ts +21 -0
- package/dist/shims/internal/app-router-context.d.ts.map +1 -0
- package/dist/shims/internal/app-router-context.js +15 -0
- package/dist/shims/internal/app-router-context.js.map +1 -0
- package/dist/shims/internal/cookies.d.ts +9 -0
- package/dist/shims/internal/cookies.d.ts.map +1 -0
- package/dist/shims/internal/cookies.js +9 -0
- package/dist/shims/internal/cookies.js.map +1 -0
- package/dist/shims/internal/router-context.d.ts +2 -0
- package/dist/shims/internal/router-context.d.ts.map +1 -0
- package/dist/shims/internal/router-context.js +9 -0
- package/dist/shims/internal/router-context.js.map +1 -0
- package/dist/shims/internal/utils.d.ts +48 -0
- package/dist/shims/internal/utils.d.ts.map +1 -0
- package/dist/shims/internal/utils.js +35 -0
- package/dist/shims/internal/utils.js.map +1 -0
- package/dist/shims/internal/work-unit-async-storage.d.ts +12 -0
- package/dist/shims/internal/work-unit-async-storage.d.ts.map +1 -0
- package/dist/shims/internal/work-unit-async-storage.js +13 -0
- package/dist/shims/internal/work-unit-async-storage.js.map +1 -0
- package/dist/shims/layout-segment-context.d.ts +21 -0
- package/dist/shims/layout-segment-context.d.ts.map +1 -0
- package/dist/shims/layout-segment-context.js +27 -0
- package/dist/shims/layout-segment-context.js.map +1 -0
- package/dist/shims/legacy-image.d.ts +52 -0
- package/dist/shims/legacy-image.d.ts.map +1 -0
- package/dist/shims/legacy-image.js +46 -0
- package/dist/shims/legacy-image.js.map +1 -0
- package/dist/shims/link.d.ts +48 -0
- package/dist/shims/link.d.ts.map +1 -0
- package/dist/shims/link.js +395 -0
- package/dist/shims/link.js.map +1 -0
- package/dist/shims/metadata.d.ts +184 -0
- package/dist/shims/metadata.d.ts.map +1 -0
- package/dist/shims/metadata.js +472 -0
- package/dist/shims/metadata.js.map +1 -0
- package/dist/shims/navigation-state.d.ts +14 -0
- package/dist/shims/navigation-state.d.ts.map +1 -0
- package/dist/shims/navigation-state.js +77 -0
- package/dist/shims/navigation-state.js.map +1 -0
- package/dist/shims/navigation.d.ts +201 -0
- package/dist/shims/navigation.d.ts.map +1 -0
- package/dist/shims/navigation.js +672 -0
- package/dist/shims/navigation.js.map +1 -0
- package/dist/shims/og.d.ts +20 -0
- package/dist/shims/og.d.ts.map +1 -0
- package/dist/shims/og.js +19 -0
- package/dist/shims/og.js.map +1 -0
- package/dist/shims/router-state.d.ts +11 -0
- package/dist/shims/router-state.d.ts.map +1 -0
- package/dist/shims/router-state.js +56 -0
- package/dist/shims/router-state.js.map +1 -0
- package/dist/shims/router.d.ts +103 -0
- package/dist/shims/router.d.ts.map +1 -0
- package/dist/shims/router.js +536 -0
- package/dist/shims/router.js.map +1 -0
- package/dist/shims/script.d.ts +58 -0
- package/dist/shims/script.d.ts.map +1 -0
- package/dist/shims/script.js +163 -0
- package/dist/shims/script.js.map +1 -0
- package/dist/shims/server-only.d.ts +19 -0
- package/dist/shims/server-only.d.ts.map +1 -0
- package/dist/shims/server-only.js +19 -0
- package/dist/shims/server-only.js.map +1 -0
- package/dist/shims/server.d.ts +178 -0
- package/dist/shims/server.d.ts.map +1 -0
- package/dist/shims/server.js +377 -0
- package/dist/shims/server.js.map +1 -0
- package/dist/shims/web-vitals.d.ts +24 -0
- package/dist/shims/web-vitals.d.ts.map +1 -0
- package/dist/shims/web-vitals.js +17 -0
- package/dist/shims/web-vitals.js.map +1 -0
- package/dist/utils/hash.d.ts +6 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/hash.js +20 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/project.d.ts +36 -0
- package/dist/utils/project.d.ts.map +1 -0
- package/dist/utils/project.js +112 -0
- package/dist/utils/project.js.map +1 -0
- package/dist/utils/query.d.ts +10 -0
- package/dist/utils/query.d.ts.map +1 -0
- package/dist/utils/query.js +27 -0
- package/dist/utils/query.js.map +1 -0
- package/package.json +65 -7
- package/index.js +0 -1
package/dist/deploy.js
ADDED
|
@@ -0,0 +1,644 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vinext deploy — one-command Cloudflare Workers deployment.
|
|
3
|
+
*
|
|
4
|
+
* Takes any Next.js app and deploys it to Cloudflare Workers:
|
|
5
|
+
*
|
|
6
|
+
* 1. Detects App Router vs Pages Router
|
|
7
|
+
* 2. Auto-generates missing config files (wrangler.jsonc, worker/index.ts, vite.config.ts)
|
|
8
|
+
* 3. Ensures dependencies are installed (@cloudflare/vite-plugin, wrangler, @vitejs/plugin-rsc)
|
|
9
|
+
* 4. Runs the Vite build
|
|
10
|
+
* 5. Deploys to Cloudflare Workers via wrangler
|
|
11
|
+
*
|
|
12
|
+
* Design: Everything is auto-generated into a `.vinext/` directory (not the
|
|
13
|
+
* project root) to avoid cluttering the user's project. If the user already
|
|
14
|
+
* has these files, we use theirs.
|
|
15
|
+
*/
|
|
16
|
+
import fs from "node:fs";
|
|
17
|
+
import path from "node:path";
|
|
18
|
+
import { execSync } from "node:child_process";
|
|
19
|
+
import { createBuilder, build } from "vite";
|
|
20
|
+
import { ensureESModule as _ensureESModule, renameCJSConfigs as _renameCJSConfigs, detectPackageManager as _detectPackageManager, } from "./utils/project.js";
|
|
21
|
+
import { runTPR } from "./cloudflare/tpr.js";
|
|
22
|
+
// ─── Detection ───────────────────────────────────────────────────────────────
|
|
23
|
+
export function detectProject(root) {
|
|
24
|
+
const hasApp = fs.existsSync(path.join(root, "app")) ||
|
|
25
|
+
fs.existsSync(path.join(root, "src", "app"));
|
|
26
|
+
const hasPages = fs.existsSync(path.join(root, "pages")) ||
|
|
27
|
+
fs.existsSync(path.join(root, "src", "pages"));
|
|
28
|
+
// Prefer App Router if both exist
|
|
29
|
+
const isAppRouter = hasApp;
|
|
30
|
+
const isPagesRouter = !hasApp && hasPages;
|
|
31
|
+
const hasViteConfig = fs.existsSync(path.join(root, "vite.config.ts")) ||
|
|
32
|
+
fs.existsSync(path.join(root, "vite.config.js")) ||
|
|
33
|
+
fs.existsSync(path.join(root, "vite.config.mjs"));
|
|
34
|
+
const hasWranglerConfig = fs.existsSync(path.join(root, "wrangler.jsonc")) ||
|
|
35
|
+
fs.existsSync(path.join(root, "wrangler.json")) ||
|
|
36
|
+
fs.existsSync(path.join(root, "wrangler.toml"));
|
|
37
|
+
const hasWorkerEntry = fs.existsSync(path.join(root, "worker", "index.ts")) ||
|
|
38
|
+
fs.existsSync(path.join(root, "worker", "index.js"));
|
|
39
|
+
// Check node_modules for installed packages
|
|
40
|
+
const hasCloudflarePlugin = fs.existsSync(path.join(root, "node_modules", "@cloudflare", "vite-plugin"));
|
|
41
|
+
const hasRscPlugin = fs.existsSync(path.join(root, "node_modules", "@vitejs", "plugin-rsc"));
|
|
42
|
+
const hasWrangler = fs.existsSync(path.join(root, "node_modules", ".bin", "wrangler"));
|
|
43
|
+
// Derive project name from package.json or directory name
|
|
44
|
+
let projectName = path.basename(root);
|
|
45
|
+
const pkgPath = path.join(root, "package.json");
|
|
46
|
+
if (fs.existsSync(pkgPath)) {
|
|
47
|
+
try {
|
|
48
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
|
|
49
|
+
if (pkg.name) {
|
|
50
|
+
// Sanitize: Workers names must be lowercase alphanumeric + hyphens
|
|
51
|
+
projectName = pkg.name
|
|
52
|
+
.replace(/^@[^/]+\//, "") // strip npm scope
|
|
53
|
+
.replace(/[^a-z0-9-]/g, "-")
|
|
54
|
+
.replace(/-+/g, "-")
|
|
55
|
+
.replace(/^-|-$/g, "");
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
// ignore parse errors
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Detect ISR usage (rough heuristic: search for `revalidate` exports)
|
|
63
|
+
const hasISR = detectISR(root, isAppRouter);
|
|
64
|
+
// Detect "type": "module" in package.json
|
|
65
|
+
let hasTypeModule = false;
|
|
66
|
+
if (fs.existsSync(pkgPath)) {
|
|
67
|
+
try {
|
|
68
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
|
|
69
|
+
hasTypeModule = pkg.type === "module";
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
// ignore
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Detect MDX usage
|
|
76
|
+
const hasMDX = detectMDX(root, isAppRouter, hasPages);
|
|
77
|
+
// Detect CodeHike dependency
|
|
78
|
+
let hasCodeHike = false;
|
|
79
|
+
if (fs.existsSync(pkgPath)) {
|
|
80
|
+
try {
|
|
81
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
|
|
82
|
+
const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
83
|
+
hasCodeHike = "codehike" in allDeps;
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
// ignore
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Detect native Node modules that need stubbing for Workers
|
|
90
|
+
const nativeModulesToStub = detectNativeModules(root);
|
|
91
|
+
return {
|
|
92
|
+
root,
|
|
93
|
+
isAppRouter,
|
|
94
|
+
isPagesRouter,
|
|
95
|
+
hasViteConfig,
|
|
96
|
+
hasWranglerConfig,
|
|
97
|
+
hasWorkerEntry,
|
|
98
|
+
hasCloudflarePlugin,
|
|
99
|
+
hasRscPlugin,
|
|
100
|
+
hasWrangler,
|
|
101
|
+
projectName,
|
|
102
|
+
hasISR,
|
|
103
|
+
hasTypeModule,
|
|
104
|
+
hasMDX,
|
|
105
|
+
hasCodeHike,
|
|
106
|
+
nativeModulesToStub,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
function detectISR(root, isAppRouter) {
|
|
110
|
+
if (!isAppRouter)
|
|
111
|
+
return false;
|
|
112
|
+
try {
|
|
113
|
+
// Check root-level app/ first, then fall back to src/app/
|
|
114
|
+
let appDir = path.join(root, "app");
|
|
115
|
+
if (!fs.existsSync(appDir)) {
|
|
116
|
+
appDir = path.join(root, "src", "app");
|
|
117
|
+
}
|
|
118
|
+
if (!fs.existsSync(appDir))
|
|
119
|
+
return false;
|
|
120
|
+
// Quick check: search .ts/.tsx files in app/ for `export const revalidate`
|
|
121
|
+
return scanDirForPattern(appDir, /export\s+const\s+revalidate\s*=/);
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
function scanDirForPattern(dir, pattern) {
|
|
128
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
129
|
+
for (const entry of entries) {
|
|
130
|
+
const fullPath = path.join(dir, entry.name);
|
|
131
|
+
if (entry.isDirectory() && !entry.name.startsWith(".") && entry.name !== "node_modules") {
|
|
132
|
+
if (scanDirForPattern(fullPath, pattern))
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
else if (entry.isFile() && /\.(ts|tsx|js|jsx)$/.test(entry.name)) {
|
|
136
|
+
try {
|
|
137
|
+
const content = fs.readFileSync(fullPath, "utf-8");
|
|
138
|
+
if (pattern.test(content))
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
// skip unreadable files
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Detect .mdx files in the project's app/ or pages/ directory,
|
|
150
|
+
* or `pageExtensions` including "mdx" in next.config.
|
|
151
|
+
*/
|
|
152
|
+
function detectMDX(root, isAppRouter, hasPages) {
|
|
153
|
+
// Check next.config for pageExtensions with mdx
|
|
154
|
+
const configFiles = ["next.config.ts", "next.config.mjs", "next.config.js", "next.config.cjs"];
|
|
155
|
+
for (const f of configFiles) {
|
|
156
|
+
const p = path.join(root, f);
|
|
157
|
+
if (fs.existsSync(p)) {
|
|
158
|
+
try {
|
|
159
|
+
const content = fs.readFileSync(p, "utf-8");
|
|
160
|
+
if (/pageExtensions.*mdx/i.test(content) || /@next\/mdx/.test(content))
|
|
161
|
+
return true;
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
// ignore
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// Check for .mdx files in app/ or pages/ (with src/ fallback)
|
|
169
|
+
const dirs = [];
|
|
170
|
+
if (isAppRouter) {
|
|
171
|
+
const appDir = fs.existsSync(path.join(root, "app"))
|
|
172
|
+
? path.join(root, "app")
|
|
173
|
+
: path.join(root, "src", "app");
|
|
174
|
+
dirs.push(appDir);
|
|
175
|
+
}
|
|
176
|
+
if (hasPages) {
|
|
177
|
+
const pagesDir = fs.existsSync(path.join(root, "pages"))
|
|
178
|
+
? path.join(root, "pages")
|
|
179
|
+
: path.join(root, "src", "pages");
|
|
180
|
+
dirs.push(pagesDir);
|
|
181
|
+
}
|
|
182
|
+
for (const dir of dirs) {
|
|
183
|
+
if (fs.existsSync(dir) && scanDirForExtension(dir, ".mdx"))
|
|
184
|
+
return true;
|
|
185
|
+
}
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
function scanDirForExtension(dir, ext) {
|
|
189
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
190
|
+
for (const entry of entries) {
|
|
191
|
+
const fullPath = path.join(dir, entry.name);
|
|
192
|
+
if (entry.isDirectory() && !entry.name.startsWith(".") && entry.name !== "node_modules") {
|
|
193
|
+
if (scanDirForExtension(fullPath, ext))
|
|
194
|
+
return true;
|
|
195
|
+
}
|
|
196
|
+
else if (entry.isFile() && entry.name.endsWith(ext)) {
|
|
197
|
+
return true;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
/** Known native Node modules that can't run in Workers */
|
|
203
|
+
const NATIVE_MODULES_TO_STUB = [
|
|
204
|
+
"@resvg/resvg-js",
|
|
205
|
+
"satori",
|
|
206
|
+
"lightningcss",
|
|
207
|
+
"@napi-rs/canvas",
|
|
208
|
+
"sharp",
|
|
209
|
+
];
|
|
210
|
+
/**
|
|
211
|
+
* Detect native Node modules in dependencies that need stubbing for Workers.
|
|
212
|
+
*/
|
|
213
|
+
function detectNativeModules(root) {
|
|
214
|
+
const pkgPath = path.join(root, "package.json");
|
|
215
|
+
if (!fs.existsSync(pkgPath))
|
|
216
|
+
return [];
|
|
217
|
+
try {
|
|
218
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
|
|
219
|
+
const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
220
|
+
return NATIVE_MODULES_TO_STUB.filter((mod) => mod in allDeps);
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
return [];
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// ─── Project Preparation (pre-build transforms) ─────────────────────────────
|
|
227
|
+
//
|
|
228
|
+
// These are delegated to shared utilities in ./utils/project.ts so they can
|
|
229
|
+
// be reused by both `vinext deploy` and `vinext init`.
|
|
230
|
+
/** @see {@link _ensureESModule} */
|
|
231
|
+
export const ensureESModule = _ensureESModule;
|
|
232
|
+
/** @see {@link _renameCJSConfigs} */
|
|
233
|
+
export const renameCJSConfigs = _renameCJSConfigs;
|
|
234
|
+
// ─── File Generation ─────────────────────────────────────────────────────────
|
|
235
|
+
/** Generate wrangler.jsonc content */
|
|
236
|
+
export function generateWranglerConfig(info) {
|
|
237
|
+
const today = new Date().toISOString().split("T")[0];
|
|
238
|
+
const config = {
|
|
239
|
+
$schema: "node_modules/wrangler/config-schema.json",
|
|
240
|
+
name: info.projectName,
|
|
241
|
+
compatibility_date: today,
|
|
242
|
+
compatibility_flags: ["nodejs_compat"],
|
|
243
|
+
main: "./worker/index.ts",
|
|
244
|
+
assets: {
|
|
245
|
+
not_found_handling: "none",
|
|
246
|
+
// Expose static assets to the Worker via env.ASSETS so the image
|
|
247
|
+
// optimization handler can fetch source images programmatically.
|
|
248
|
+
binding: "ASSETS",
|
|
249
|
+
},
|
|
250
|
+
// Cloudflare Images binding for next/image optimization.
|
|
251
|
+
// Enables resize, format negotiation (AVIF/WebP), and quality transforms
|
|
252
|
+
// at the edge. No user setup needed — wrangler creates the binding automatically.
|
|
253
|
+
images: {
|
|
254
|
+
binding: "IMAGES",
|
|
255
|
+
},
|
|
256
|
+
};
|
|
257
|
+
if (info.hasISR) {
|
|
258
|
+
config.kv_namespaces = [
|
|
259
|
+
{
|
|
260
|
+
binding: "VINEXT_CACHE",
|
|
261
|
+
id: "<your-kv-namespace-id>",
|
|
262
|
+
},
|
|
263
|
+
];
|
|
264
|
+
}
|
|
265
|
+
return JSON.stringify(config, null, 2) + "\n";
|
|
266
|
+
}
|
|
267
|
+
/** Generate worker/index.ts for App Router */
|
|
268
|
+
export function generateAppRouterWorkerEntry() {
|
|
269
|
+
return `/**
|
|
270
|
+
* Cloudflare Worker entry point — auto-generated by vinext deploy.
|
|
271
|
+
* Edit freely or delete to regenerate on next deploy.
|
|
272
|
+
*
|
|
273
|
+
* For apps without image optimization, you can use vinext/server/app-router-entry
|
|
274
|
+
* directly in wrangler.jsonc: "main": "vinext/server/app-router-entry"
|
|
275
|
+
*/
|
|
276
|
+
import { handleImageOptimization } from "vinext/server/image-optimization";
|
|
277
|
+
import handler from "vinext/server/app-router-entry";
|
|
278
|
+
|
|
279
|
+
interface Env {
|
|
280
|
+
ASSETS: Fetcher;
|
|
281
|
+
IMAGES: {
|
|
282
|
+
input(stream: ReadableStream): {
|
|
283
|
+
transform(options: Record<string, unknown>): {
|
|
284
|
+
output(options: { format: string; quality: number }): Promise<{ response(): Response }>;
|
|
285
|
+
};
|
|
286
|
+
};
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
export default {
|
|
291
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
292
|
+
const url = new URL(request.url);
|
|
293
|
+
|
|
294
|
+
// Image optimization via Cloudflare Images binding
|
|
295
|
+
if (url.pathname === "/_vinext/image") {
|
|
296
|
+
return handleImageOptimization(request, {
|
|
297
|
+
fetchAsset: (path) => env.ASSETS.fetch(new Request(new URL(path, request.url))),
|
|
298
|
+
transformImage: async (body, { width, format, quality }) => {
|
|
299
|
+
const result = await env.IMAGES.input(body).transform(width > 0 ? { width } : {}).output({ format, quality });
|
|
300
|
+
return result.response();
|
|
301
|
+
},
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
// Delegate everything else to vinext
|
|
306
|
+
return handler.fetch(request);
|
|
307
|
+
},
|
|
308
|
+
};
|
|
309
|
+
`;
|
|
310
|
+
}
|
|
311
|
+
/** Generate worker/index.ts for Pages Router */
|
|
312
|
+
export function generatePagesRouterWorkerEntry() {
|
|
313
|
+
return `/**
|
|
314
|
+
* Cloudflare Worker entry point — auto-generated by vinext deploy.
|
|
315
|
+
* Edit freely or delete to regenerate on next deploy.
|
|
316
|
+
*/
|
|
317
|
+
import { handleImageOptimization } from "vinext/server/image-optimization";
|
|
318
|
+
|
|
319
|
+
// @ts-expect-error — virtual module resolved by vinext at build time
|
|
320
|
+
import { renderPage, handleApiRoute } from "virtual:vinext-server-entry";
|
|
321
|
+
|
|
322
|
+
interface Env {
|
|
323
|
+
ASSETS: Fetcher;
|
|
324
|
+
IMAGES: {
|
|
325
|
+
input(stream: ReadableStream): {
|
|
326
|
+
transform(options: Record<string, unknown>): {
|
|
327
|
+
output(options: { format: string; quality: number }): Promise<{ response(): Response }>;
|
|
328
|
+
};
|
|
329
|
+
};
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
export default {
|
|
334
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
335
|
+
try {
|
|
336
|
+
const url = new URL(request.url);
|
|
337
|
+
const pathname = url.pathname;
|
|
338
|
+
const urlWithQuery = pathname + url.search;
|
|
339
|
+
|
|
340
|
+
// Block protocol-relative URL open redirect attacks (//evil.com/).
|
|
341
|
+
if (pathname.startsWith("//")) {
|
|
342
|
+
return new Response("404 Not Found", { status: 404 });
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
// ── Image optimization via Cloudflare Images binding ──────────
|
|
346
|
+
if (pathname === "/_vinext/image") {
|
|
347
|
+
return handleImageOptimization(request, {
|
|
348
|
+
fetchAsset: (path) => env.ASSETS.fetch(new Request(new URL(path, request.url))),
|
|
349
|
+
transformImage: async (body, { width, format, quality }) => {
|
|
350
|
+
const result = await env.IMAGES.input(body).transform(width > 0 ? { width } : {}).output({ format, quality });
|
|
351
|
+
return result.response();
|
|
352
|
+
},
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
// API routes
|
|
357
|
+
if (pathname.startsWith("/api/") || pathname === "/api") {
|
|
358
|
+
return await handleApiRoute(request, urlWithQuery);
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
// Page routes
|
|
362
|
+
return await renderPage(request, urlWithQuery, null);
|
|
363
|
+
} catch (error) {
|
|
364
|
+
console.error("[vinext] Worker error:", error);
|
|
365
|
+
return new Response("Internal Server Error", { status: 500 });
|
|
366
|
+
}
|
|
367
|
+
},
|
|
368
|
+
};
|
|
369
|
+
`;
|
|
370
|
+
}
|
|
371
|
+
/** Generate vite.config.ts for App Router */
|
|
372
|
+
export function generateAppRouterViteConfig(info) {
|
|
373
|
+
const imports = [
|
|
374
|
+
`import { defineConfig } from "vite";`,
|
|
375
|
+
`import vinext from "vinext";`,
|
|
376
|
+
`import rsc from "@vitejs/plugin-rsc";`,
|
|
377
|
+
`import { cloudflare } from "@cloudflare/vite-plugin";`,
|
|
378
|
+
];
|
|
379
|
+
if (info?.nativeModulesToStub && info.nativeModulesToStub.length > 0) {
|
|
380
|
+
imports.push(`import path from "node:path";`);
|
|
381
|
+
}
|
|
382
|
+
const plugins = [];
|
|
383
|
+
if (info?.hasMDX) {
|
|
384
|
+
plugins.push(` // vinext auto-injects @mdx-js/rollup with plugins from next.config`);
|
|
385
|
+
}
|
|
386
|
+
plugins.push(` vinext(),`);
|
|
387
|
+
plugins.push(` rsc({
|
|
388
|
+
entries: {
|
|
389
|
+
rsc: "virtual:vinext-rsc-entry",
|
|
390
|
+
ssr: "virtual:vinext-app-ssr-entry",
|
|
391
|
+
client: "virtual:vinext-app-browser-entry",
|
|
392
|
+
},
|
|
393
|
+
}),`);
|
|
394
|
+
plugins.push(` cloudflare({
|
|
395
|
+
viteEnvironment: {
|
|
396
|
+
name: "rsc",
|
|
397
|
+
childEnvironments: ["ssr"],
|
|
398
|
+
},
|
|
399
|
+
}),`);
|
|
400
|
+
// Build resolve.alias for native module stubs (tsconfig paths are handled
|
|
401
|
+
// automatically by vite-tsconfig-paths inside the vinext plugin)
|
|
402
|
+
let resolveBlock = "";
|
|
403
|
+
const aliases = [];
|
|
404
|
+
if (info?.nativeModulesToStub && info.nativeModulesToStub.length > 0) {
|
|
405
|
+
for (const mod of info.nativeModulesToStub) {
|
|
406
|
+
aliases.push(` "${mod}": path.resolve(__dirname, "empty-stub.js"),`);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
if (aliases.length > 0) {
|
|
410
|
+
resolveBlock = `\n resolve: {\n alias: {\n${aliases.join("\n")}\n },\n },`;
|
|
411
|
+
}
|
|
412
|
+
return `${imports.join("\n")}
|
|
413
|
+
|
|
414
|
+
export default defineConfig({
|
|
415
|
+
plugins: [
|
|
416
|
+
${plugins.join("\n")}
|
|
417
|
+
],${resolveBlock}
|
|
418
|
+
});
|
|
419
|
+
`;
|
|
420
|
+
}
|
|
421
|
+
/** Generate vite.config.ts for Pages Router */
|
|
422
|
+
export function generatePagesRouterViteConfig(info) {
|
|
423
|
+
const imports = [
|
|
424
|
+
`import { defineConfig } from "vite";`,
|
|
425
|
+
`import vinext from "vinext";`,
|
|
426
|
+
`import { cloudflare } from "@cloudflare/vite-plugin";`,
|
|
427
|
+
];
|
|
428
|
+
if (info?.nativeModulesToStub && info.nativeModulesToStub.length > 0) {
|
|
429
|
+
imports.push(`import path from "node:path";`);
|
|
430
|
+
}
|
|
431
|
+
// Build resolve.alias for native module stubs (tsconfig paths are handled
|
|
432
|
+
// automatically by vite-tsconfig-paths inside the vinext plugin)
|
|
433
|
+
let resolveBlock = "";
|
|
434
|
+
const aliases = [];
|
|
435
|
+
if (info?.nativeModulesToStub && info.nativeModulesToStub.length > 0) {
|
|
436
|
+
for (const mod of info.nativeModulesToStub) {
|
|
437
|
+
aliases.push(` "${mod}": path.resolve(__dirname, "empty-stub.js"),`);
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
if (aliases.length > 0) {
|
|
441
|
+
resolveBlock = `\n resolve: {\n alias: {\n${aliases.join("\n")}\n },\n },`;
|
|
442
|
+
}
|
|
443
|
+
return `${imports.join("\n")}
|
|
444
|
+
|
|
445
|
+
export default defineConfig({
|
|
446
|
+
plugins: [
|
|
447
|
+
vinext(),
|
|
448
|
+
cloudflare(),
|
|
449
|
+
],${resolveBlock}
|
|
450
|
+
});
|
|
451
|
+
`;
|
|
452
|
+
}
|
|
453
|
+
export function getMissingDeps(info) {
|
|
454
|
+
const missing = [];
|
|
455
|
+
if (!info.hasCloudflarePlugin) {
|
|
456
|
+
missing.push({ name: "@cloudflare/vite-plugin", version: "latest" });
|
|
457
|
+
}
|
|
458
|
+
if (!info.hasWrangler) {
|
|
459
|
+
missing.push({ name: "wrangler", version: "latest" });
|
|
460
|
+
}
|
|
461
|
+
if (info.isAppRouter && !info.hasRscPlugin) {
|
|
462
|
+
missing.push({ name: "@vitejs/plugin-rsc", version: "latest" });
|
|
463
|
+
}
|
|
464
|
+
if (info.hasMDX) {
|
|
465
|
+
// Check if @mdx-js/rollup is already installed
|
|
466
|
+
const hasMdxRollup = fs.existsSync(path.join(info.root, "node_modules", "@mdx-js", "rollup"));
|
|
467
|
+
if (!hasMdxRollup) {
|
|
468
|
+
missing.push({ name: "@mdx-js/rollup", version: "latest" });
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
return missing;
|
|
472
|
+
}
|
|
473
|
+
function installDeps(root, deps) {
|
|
474
|
+
if (deps.length === 0)
|
|
475
|
+
return;
|
|
476
|
+
const depsStr = deps.map((d) => `${d.name}@${d.version}`).join(" ");
|
|
477
|
+
const installCmd = detectPackageManager(root);
|
|
478
|
+
console.log(` Installing: ${deps.map((d) => d.name).join(", ")}`);
|
|
479
|
+
execSync(`${installCmd} ${depsStr}`, {
|
|
480
|
+
cwd: root,
|
|
481
|
+
stdio: "inherit",
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
const detectPackageManager = _detectPackageManager;
|
|
485
|
+
export function getFilesToGenerate(info) {
|
|
486
|
+
const files = [];
|
|
487
|
+
if (!info.hasWranglerConfig) {
|
|
488
|
+
files.push({
|
|
489
|
+
path: path.join(info.root, "wrangler.jsonc"),
|
|
490
|
+
content: generateWranglerConfig(info),
|
|
491
|
+
description: "wrangler.jsonc",
|
|
492
|
+
});
|
|
493
|
+
}
|
|
494
|
+
if (!info.hasWorkerEntry) {
|
|
495
|
+
const workerContent = info.isAppRouter
|
|
496
|
+
? generateAppRouterWorkerEntry()
|
|
497
|
+
: generatePagesRouterWorkerEntry();
|
|
498
|
+
files.push({
|
|
499
|
+
path: path.join(info.root, "worker", "index.ts"),
|
|
500
|
+
content: workerContent,
|
|
501
|
+
description: "worker/index.ts",
|
|
502
|
+
});
|
|
503
|
+
}
|
|
504
|
+
if (!info.hasViteConfig) {
|
|
505
|
+
const viteContent = info.isAppRouter
|
|
506
|
+
? generateAppRouterViteConfig(info)
|
|
507
|
+
: generatePagesRouterViteConfig(info);
|
|
508
|
+
files.push({
|
|
509
|
+
path: path.join(info.root, "vite.config.ts"),
|
|
510
|
+
content: viteContent,
|
|
511
|
+
description: "vite.config.ts",
|
|
512
|
+
});
|
|
513
|
+
}
|
|
514
|
+
return files;
|
|
515
|
+
}
|
|
516
|
+
function writeGeneratedFiles(files) {
|
|
517
|
+
for (const file of files) {
|
|
518
|
+
const dir = path.dirname(file.path);
|
|
519
|
+
if (!fs.existsSync(dir)) {
|
|
520
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
521
|
+
}
|
|
522
|
+
fs.writeFileSync(file.path, file.content, "utf-8");
|
|
523
|
+
console.log(` Created ${file.description}`);
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
// ─── Build ───────────────────────────────────────────────────────────────────
|
|
527
|
+
async function runBuild(info) {
|
|
528
|
+
console.log("\n Building for Cloudflare Workers...\n");
|
|
529
|
+
// Use Vite's JS API for the build. The user's vite.config.ts (or our
|
|
530
|
+
// generated one) has the cloudflare() plugin which handles the Worker
|
|
531
|
+
// output format. We just need to trigger the build.
|
|
532
|
+
//
|
|
533
|
+
// For App Router, createBuilder().buildApp() handles multi-environment builds.
|
|
534
|
+
// For Pages Router, a single build() call suffices (cloudflare plugin manages it).
|
|
535
|
+
if (info.isAppRouter) {
|
|
536
|
+
const builder = await createBuilder({ root: info.root });
|
|
537
|
+
await builder.buildApp();
|
|
538
|
+
}
|
|
539
|
+
else {
|
|
540
|
+
await build({ root: info.root });
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
// ─── Deploy ──────────────────────────────────────────────────────────────────
|
|
544
|
+
function runWranglerDeploy(root, preview) {
|
|
545
|
+
const wranglerBin = path.join(root, "node_modules", ".bin", "wrangler");
|
|
546
|
+
const execOpts = {
|
|
547
|
+
cwd: root,
|
|
548
|
+
stdio: "pipe",
|
|
549
|
+
encoding: "utf-8",
|
|
550
|
+
};
|
|
551
|
+
// wrangler deploy outputs the URL to stdout
|
|
552
|
+
const args = preview ? ["deploy", "--env", "preview"] : ["deploy"];
|
|
553
|
+
const cmd = `"${wranglerBin}" ${args.join(" ")}`;
|
|
554
|
+
console.log(preview ? "\n Deploying to preview..." : "\n Deploying to production...");
|
|
555
|
+
const output = execSync(cmd, execOpts);
|
|
556
|
+
// Parse the deployed URL from wrangler output
|
|
557
|
+
// Wrangler prints: "Published <name> (version_id)\n https://<name>.<subdomain>.workers.dev"
|
|
558
|
+
const urlMatch = output.match(/https:\/\/[^\s]+\.workers\.dev[^\s]*/);
|
|
559
|
+
const deployedUrl = urlMatch ? urlMatch[0] : null;
|
|
560
|
+
// Also print raw output for transparency
|
|
561
|
+
if (output.trim()) {
|
|
562
|
+
for (const line of output.trim().split("\n")) {
|
|
563
|
+
console.log(` ${line}`);
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
return deployedUrl ?? "(URL not detected in wrangler output)";
|
|
567
|
+
}
|
|
568
|
+
// ─── Main Entry ──────────────────────────────────────────────────────────────
|
|
569
|
+
export async function deploy(options) {
|
|
570
|
+
const root = path.resolve(options.root);
|
|
571
|
+
console.log("\n vinext deploy\n");
|
|
572
|
+
// Step 1: Detect project structure
|
|
573
|
+
const info = detectProject(root);
|
|
574
|
+
if (!info.isAppRouter && !info.isPagesRouter) {
|
|
575
|
+
console.error(" Error: No app/ or pages/ directory found.");
|
|
576
|
+
console.error(" vinext deploy requires a Next.js project with an app/ or pages/ directory");
|
|
577
|
+
console.error(" (also checks src/app/ and src/pages/).\n");
|
|
578
|
+
process.exit(1);
|
|
579
|
+
}
|
|
580
|
+
if (options.name) {
|
|
581
|
+
info.projectName = options.name;
|
|
582
|
+
}
|
|
583
|
+
console.log(` Project: ${info.projectName}`);
|
|
584
|
+
console.log(` Router: ${info.isAppRouter ? "App Router" : "Pages Router"}`);
|
|
585
|
+
console.log(` ISR: ${info.hasISR ? "detected" : "none"}`);
|
|
586
|
+
// Step 2: Check and install missing dependencies
|
|
587
|
+
const missingDeps = getMissingDeps(info);
|
|
588
|
+
if (missingDeps.length > 0) {
|
|
589
|
+
console.log();
|
|
590
|
+
installDeps(root, missingDeps);
|
|
591
|
+
// Re-detect after install
|
|
592
|
+
info.hasCloudflarePlugin = true;
|
|
593
|
+
info.hasWrangler = true;
|
|
594
|
+
if (info.isAppRouter)
|
|
595
|
+
info.hasRscPlugin = true;
|
|
596
|
+
}
|
|
597
|
+
// Step 3: Ensure ESM + rename CJS configs
|
|
598
|
+
if (!info.hasTypeModule) {
|
|
599
|
+
const renamedConfigs = renameCJSConfigs(root);
|
|
600
|
+
for (const [oldName, newName] of renamedConfigs) {
|
|
601
|
+
console.log(` Renamed ${oldName} → ${newName} (CJS → .cjs)`);
|
|
602
|
+
}
|
|
603
|
+
if (ensureESModule(root)) {
|
|
604
|
+
console.log(` Added "type": "module" to package.json`);
|
|
605
|
+
info.hasTypeModule = true;
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
// Step 4: Generate missing config files
|
|
609
|
+
const filesToGenerate = getFilesToGenerate(info);
|
|
610
|
+
if (filesToGenerate.length > 0) {
|
|
611
|
+
console.log();
|
|
612
|
+
writeGeneratedFiles(filesToGenerate);
|
|
613
|
+
}
|
|
614
|
+
if (options.dryRun) {
|
|
615
|
+
console.log("\n Dry run complete. Files generated but no build or deploy performed.\n");
|
|
616
|
+
return;
|
|
617
|
+
}
|
|
618
|
+
// Step 5: Build
|
|
619
|
+
if (!options.skipBuild) {
|
|
620
|
+
await runBuild(info);
|
|
621
|
+
}
|
|
622
|
+
else {
|
|
623
|
+
console.log("\n Skipping build (--skip-build)");
|
|
624
|
+
}
|
|
625
|
+
// Step 6: TPR — pre-render hot pages into KV cache (experimental, opt-in)
|
|
626
|
+
if (options.experimentalTPR) {
|
|
627
|
+
console.log();
|
|
628
|
+
const tprResult = await runTPR({
|
|
629
|
+
root,
|
|
630
|
+
coverage: Math.max(1, Math.min(100, options.tprCoverage ?? 90)),
|
|
631
|
+
limit: Math.max(1, options.tprLimit ?? 1000),
|
|
632
|
+
window: Math.max(1, options.tprWindow ?? 24),
|
|
633
|
+
});
|
|
634
|
+
if (tprResult.skipped) {
|
|
635
|
+
console.log(` TPR: Skipped (${tprResult.skipped})`);
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
// Step 7: Deploy via wrangler
|
|
639
|
+
const url = runWranglerDeploy(root, options.preview ?? false);
|
|
640
|
+
console.log("\n ─────────────────────────────────────────");
|
|
641
|
+
console.log(` Deployed to: ${url}`);
|
|
642
|
+
console.log(" ─────────────────────────────────────────\n");
|
|
643
|
+
}
|
|
644
|
+
//# sourceMappingURL=deploy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../src/deploy.ts"],"names":[],"mappings":"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"}
|