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/cli.js
ADDED
|
@@ -0,0 +1,565 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* vinext CLI — drop-in replacement for the `next` command
|
|
4
|
+
*
|
|
5
|
+
* vinext dev Start development server (Vite)
|
|
6
|
+
* vinext build Build for production
|
|
7
|
+
* vinext start Start production server
|
|
8
|
+
* vinext deploy Deploy to Cloudflare Workers
|
|
9
|
+
* vinext lint Run linter (delegates to eslint/oxlint)
|
|
10
|
+
*
|
|
11
|
+
* Automatically configures Vite with the vinext plugin — no vite.config.ts
|
|
12
|
+
* needed for most Next.js apps.
|
|
13
|
+
*/
|
|
14
|
+
import vinext, { clientOutputConfig, clientTreeshakeConfig } from "./index.js";
|
|
15
|
+
import path from "node:path";
|
|
16
|
+
import fs from "node:fs";
|
|
17
|
+
import { createRequire } from "node:module";
|
|
18
|
+
import { execSync } from "node:child_process";
|
|
19
|
+
import { deploy as runDeploy } from "./deploy.js";
|
|
20
|
+
import { runCheck, formatReport } from "./check.js";
|
|
21
|
+
import { init as runInit } from "./init.js";
|
|
22
|
+
let _viteModule = null;
|
|
23
|
+
/**
|
|
24
|
+
* Dynamically load Vite from the project root. Falls back to the bundled
|
|
25
|
+
* copy if the project doesn't have its own Vite installation.
|
|
26
|
+
*/
|
|
27
|
+
async function loadVite() {
|
|
28
|
+
if (_viteModule)
|
|
29
|
+
return _viteModule;
|
|
30
|
+
const projectRoot = process.cwd();
|
|
31
|
+
let vitePath;
|
|
32
|
+
try {
|
|
33
|
+
// Resolve "vite" from the project root, not from vinext's location
|
|
34
|
+
const require = createRequire(path.join(projectRoot, "package.json"));
|
|
35
|
+
vitePath = require.resolve("vite");
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// Fallback: use the Vite that ships with vinext (works for non-linked installs)
|
|
39
|
+
vitePath = "vite";
|
|
40
|
+
}
|
|
41
|
+
const vite = (await import(/* @vite-ignore */ vitePath));
|
|
42
|
+
_viteModule = vite;
|
|
43
|
+
return vite;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get the Vite version string. Returns "unknown" before loadVite() is called.
|
|
47
|
+
*/
|
|
48
|
+
function getViteVersion() {
|
|
49
|
+
return _viteModule?.version ?? "unknown";
|
|
50
|
+
}
|
|
51
|
+
const VERSION = "0.0.1";
|
|
52
|
+
// ─── CLI Argument Parsing ──────────────────────────────────────────────────────
|
|
53
|
+
const command = process.argv[2];
|
|
54
|
+
const rawArgs = process.argv.slice(3);
|
|
55
|
+
function parseArgs(args) {
|
|
56
|
+
const result = {};
|
|
57
|
+
for (let i = 0; i < args.length; i++) {
|
|
58
|
+
const arg = args[i];
|
|
59
|
+
if (arg === "--help" || arg === "-h") {
|
|
60
|
+
result.help = true;
|
|
61
|
+
}
|
|
62
|
+
else if (arg === "--turbopack") {
|
|
63
|
+
result.turbopack = true; // no-op, accepted for script compat
|
|
64
|
+
}
|
|
65
|
+
else if (arg === "--experimental-https") {
|
|
66
|
+
result.experimental = true; // no-op
|
|
67
|
+
}
|
|
68
|
+
else if (arg === "--port" || arg === "-p") {
|
|
69
|
+
result.port = parseInt(args[++i], 10);
|
|
70
|
+
}
|
|
71
|
+
else if (arg.startsWith("--port=")) {
|
|
72
|
+
result.port = parseInt(arg.split("=")[1], 10);
|
|
73
|
+
}
|
|
74
|
+
else if (arg === "--hostname" || arg === "-H") {
|
|
75
|
+
result.hostname = args[++i];
|
|
76
|
+
}
|
|
77
|
+
else if (arg.startsWith("--hostname=")) {
|
|
78
|
+
result.hostname = arg.split("=")[1];
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
/** Parse a numeric flag like --tpr-coverage 95 or --tpr-coverage=95. */
|
|
84
|
+
function parseNumericFlag(args, flag) {
|
|
85
|
+
const idx = args.indexOf(flag);
|
|
86
|
+
if (idx !== -1 && args[idx + 1]) {
|
|
87
|
+
const val = parseInt(args[idx + 1], 10);
|
|
88
|
+
if (!isNaN(val))
|
|
89
|
+
return val;
|
|
90
|
+
}
|
|
91
|
+
const eq = args.find((a) => a.startsWith(`${flag}=`));
|
|
92
|
+
if (eq) {
|
|
93
|
+
const val = parseInt(eq.split("=")[1], 10);
|
|
94
|
+
if (!isNaN(val))
|
|
95
|
+
return val;
|
|
96
|
+
}
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
// ─── Auto-configuration ───────────────────────────────────────────────────────
|
|
100
|
+
/**
|
|
101
|
+
* Build the Vite config automatically. If a vite.config.ts exists in the
|
|
102
|
+
* project, Vite will merge our config with it (theirs takes precedence).
|
|
103
|
+
* If there's no vite.config, this provides everything needed.
|
|
104
|
+
*/
|
|
105
|
+
function hasAppDir() {
|
|
106
|
+
return (fs.existsSync(path.join(process.cwd(), "app")) ||
|
|
107
|
+
fs.existsSync(path.join(process.cwd(), "src", "app")));
|
|
108
|
+
}
|
|
109
|
+
function hasViteConfig() {
|
|
110
|
+
return (fs.existsSync(path.join(process.cwd(), "vite.config.ts")) ||
|
|
111
|
+
fs.existsSync(path.join(process.cwd(), "vite.config.js")) ||
|
|
112
|
+
fs.existsSync(path.join(process.cwd(), "vite.config.mjs")));
|
|
113
|
+
}
|
|
114
|
+
function buildViteConfig(overrides = {}) {
|
|
115
|
+
const hasConfig = hasViteConfig();
|
|
116
|
+
// If a vite.config exists, let Vite load it — only set root and overrides.
|
|
117
|
+
// The user's config already has vinext() + rsc() plugins configured.
|
|
118
|
+
// Adding them here too would duplicate the RSC transform (causes
|
|
119
|
+
// "Identifier has already been declared" errors in production builds).
|
|
120
|
+
if (hasConfig) {
|
|
121
|
+
return {
|
|
122
|
+
root: process.cwd(),
|
|
123
|
+
...overrides,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
// No vite.config — auto-configure everything.
|
|
127
|
+
// vinext() auto-registers @vitejs/plugin-rsc when app/ is detected,
|
|
128
|
+
// so we only need vinext() in the plugins array.
|
|
129
|
+
const config = {
|
|
130
|
+
root: process.cwd(),
|
|
131
|
+
configFile: false,
|
|
132
|
+
plugins: [vinext()],
|
|
133
|
+
// Deduplicate React packages to prevent "Invalid hook call" errors
|
|
134
|
+
// when vinext is symlinked (bun link / npm link) and both vinext's
|
|
135
|
+
// and the project's node_modules contain React.
|
|
136
|
+
resolve: {
|
|
137
|
+
dedupe: [
|
|
138
|
+
"react",
|
|
139
|
+
"react-dom",
|
|
140
|
+
"react/jsx-runtime",
|
|
141
|
+
"react/jsx-dev-runtime",
|
|
142
|
+
],
|
|
143
|
+
},
|
|
144
|
+
...overrides,
|
|
145
|
+
};
|
|
146
|
+
return config;
|
|
147
|
+
}
|
|
148
|
+
// ─── Commands ─────────────────────────────────────────────────────────────────
|
|
149
|
+
async function dev() {
|
|
150
|
+
const parsed = parseArgs(rawArgs);
|
|
151
|
+
if (parsed.help)
|
|
152
|
+
return printHelp("dev");
|
|
153
|
+
const vite = await loadVite();
|
|
154
|
+
const port = parsed.port ?? 3000;
|
|
155
|
+
const host = parsed.hostname ?? "localhost";
|
|
156
|
+
console.log(`\n vinext dev (Vite ${getViteVersion()})\n`);
|
|
157
|
+
const config = buildViteConfig({
|
|
158
|
+
server: { port, host },
|
|
159
|
+
});
|
|
160
|
+
const server = await vite.createServer(config);
|
|
161
|
+
await server.listen();
|
|
162
|
+
server.printUrls();
|
|
163
|
+
}
|
|
164
|
+
async function buildApp() {
|
|
165
|
+
const parsed = parseArgs(rawArgs);
|
|
166
|
+
if (parsed.help)
|
|
167
|
+
return printHelp("build");
|
|
168
|
+
const vite = await loadVite();
|
|
169
|
+
console.log(`\n vinext build (Vite ${getViteVersion()})\n`);
|
|
170
|
+
const isApp = hasAppDir();
|
|
171
|
+
if (isApp) {
|
|
172
|
+
// App Router: use createBuilder for multi-environment RSC builds
|
|
173
|
+
const config = buildViteConfig();
|
|
174
|
+
const builder = await vite.createBuilder(config);
|
|
175
|
+
await builder.buildApp();
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
// Pages Router: client + SSR builds
|
|
179
|
+
const appRoot = process.cwd();
|
|
180
|
+
console.log(" Building client...");
|
|
181
|
+
await vite.build({
|
|
182
|
+
root: appRoot,
|
|
183
|
+
plugins: [vinext()],
|
|
184
|
+
build: {
|
|
185
|
+
outDir: "dist/client",
|
|
186
|
+
manifest: true,
|
|
187
|
+
ssrManifest: true,
|
|
188
|
+
rollupOptions: {
|
|
189
|
+
input: "virtual:vinext-client-entry",
|
|
190
|
+
output: clientOutputConfig,
|
|
191
|
+
treeshake: clientTreeshakeConfig,
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
});
|
|
195
|
+
console.log(" Building server...");
|
|
196
|
+
await vite.build({
|
|
197
|
+
root: appRoot,
|
|
198
|
+
plugins: [vinext()],
|
|
199
|
+
build: {
|
|
200
|
+
outDir: "dist/server",
|
|
201
|
+
ssr: "virtual:vinext-server-entry",
|
|
202
|
+
rollupOptions: {
|
|
203
|
+
output: {
|
|
204
|
+
entryFileNames: "entry.js",
|
|
205
|
+
},
|
|
206
|
+
},
|
|
207
|
+
},
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
console.log("\n Build complete. Run `vinext start` to start the production server.\n");
|
|
211
|
+
}
|
|
212
|
+
async function start() {
|
|
213
|
+
const parsed = parseArgs(rawArgs);
|
|
214
|
+
if (parsed.help)
|
|
215
|
+
return printHelp("start");
|
|
216
|
+
const port = parsed.port ?? parseInt(process.env.PORT ?? "3000", 10);
|
|
217
|
+
const host = parsed.hostname ?? "0.0.0.0";
|
|
218
|
+
console.log(`\n vinext start (port ${port})\n`);
|
|
219
|
+
const { startProdServer } = (await import(
|
|
220
|
+
/* @vite-ignore */ "./server/prod-server.js"));
|
|
221
|
+
await startProdServer({
|
|
222
|
+
port,
|
|
223
|
+
host,
|
|
224
|
+
outDir: path.resolve(process.cwd(), "dist"),
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
async function lint() {
|
|
228
|
+
const parsed = parseArgs(rawArgs);
|
|
229
|
+
if (parsed.help)
|
|
230
|
+
return printHelp("lint");
|
|
231
|
+
console.log(`\n vinext lint\n`);
|
|
232
|
+
// Try oxlint first (fast), fall back to eslint
|
|
233
|
+
const cwd = process.cwd();
|
|
234
|
+
const hasOxlint = fs.existsSync(path.join(cwd, "node_modules", ".bin", "oxlint"));
|
|
235
|
+
const hasEslint = fs.existsSync(path.join(cwd, "node_modules", ".bin", "eslint"));
|
|
236
|
+
// Check for next lint config (eslint-config-next)
|
|
237
|
+
const hasNextLintConfig = fs.existsSync(path.join(cwd, ".eslintrc.json")) ||
|
|
238
|
+
fs.existsSync(path.join(cwd, ".eslintrc.js")) ||
|
|
239
|
+
fs.existsSync(path.join(cwd, ".eslintrc.cjs")) ||
|
|
240
|
+
fs.existsSync(path.join(cwd, "eslint.config.js")) ||
|
|
241
|
+
fs.existsSync(path.join(cwd, "eslint.config.mjs"));
|
|
242
|
+
try {
|
|
243
|
+
if (hasEslint && hasNextLintConfig) {
|
|
244
|
+
console.log(" Using eslint (with existing config)\n");
|
|
245
|
+
execSync("npx eslint .", { cwd, stdio: "inherit" });
|
|
246
|
+
}
|
|
247
|
+
else if (hasOxlint) {
|
|
248
|
+
console.log(" Using oxlint\n");
|
|
249
|
+
execSync("npx oxlint .", { cwd, stdio: "inherit" });
|
|
250
|
+
}
|
|
251
|
+
else if (hasEslint) {
|
|
252
|
+
console.log(" Using eslint\n");
|
|
253
|
+
execSync("npx eslint .", { cwd, stdio: "inherit" });
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
console.log(" No linter found. Install eslint or oxlint:\n\n" +
|
|
257
|
+
" npm install -D eslint eslint-config-next\n" +
|
|
258
|
+
" # or\n" +
|
|
259
|
+
" npm install -D oxlint\n");
|
|
260
|
+
process.exit(1);
|
|
261
|
+
}
|
|
262
|
+
console.log("\n Lint passed.\n");
|
|
263
|
+
}
|
|
264
|
+
catch {
|
|
265
|
+
process.exit(1);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
async function deployCommand() {
|
|
269
|
+
const parsed = parseArgs(rawArgs);
|
|
270
|
+
if (parsed.help)
|
|
271
|
+
return printHelp("deploy");
|
|
272
|
+
await loadVite();
|
|
273
|
+
console.log(`\n vinext deploy (Vite ${getViteVersion()})\n`);
|
|
274
|
+
// Parse deploy-specific flags
|
|
275
|
+
const preview = rawArgs.includes("--preview");
|
|
276
|
+
const skipBuild = rawArgs.includes("--skip-build");
|
|
277
|
+
const dryRun = rawArgs.includes("--dry-run");
|
|
278
|
+
const experimentalTPR = rawArgs.includes("--experimental-tpr");
|
|
279
|
+
// Parse --name flag
|
|
280
|
+
let name;
|
|
281
|
+
const nameIdx = rawArgs.indexOf("--name");
|
|
282
|
+
if (nameIdx !== -1 && rawArgs[nameIdx + 1]) {
|
|
283
|
+
name = rawArgs[nameIdx + 1];
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
const nameEq = rawArgs.find((a) => a.startsWith("--name="));
|
|
287
|
+
if (nameEq)
|
|
288
|
+
name = nameEq.split("=")[1];
|
|
289
|
+
}
|
|
290
|
+
// Parse TPR flags
|
|
291
|
+
const tprCoverage = parseNumericFlag(rawArgs, "--tpr-coverage");
|
|
292
|
+
const tprLimit = parseNumericFlag(rawArgs, "--tpr-limit");
|
|
293
|
+
const tprWindow = parseNumericFlag(rawArgs, "--tpr-window");
|
|
294
|
+
await runDeploy({
|
|
295
|
+
root: process.cwd(),
|
|
296
|
+
preview,
|
|
297
|
+
skipBuild,
|
|
298
|
+
dryRun,
|
|
299
|
+
name,
|
|
300
|
+
experimentalTPR,
|
|
301
|
+
tprCoverage,
|
|
302
|
+
tprLimit,
|
|
303
|
+
tprWindow,
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
async function check() {
|
|
307
|
+
const parsed = parseArgs(rawArgs);
|
|
308
|
+
if (parsed.help)
|
|
309
|
+
return printHelp("check");
|
|
310
|
+
const root = process.cwd();
|
|
311
|
+
console.log(`\n vinext check\n`);
|
|
312
|
+
console.log(" Scanning project...\n");
|
|
313
|
+
const result = runCheck(root);
|
|
314
|
+
console.log(formatReport(result));
|
|
315
|
+
}
|
|
316
|
+
async function initCommand() {
|
|
317
|
+
const parsed = parseArgs(rawArgs);
|
|
318
|
+
if (parsed.help)
|
|
319
|
+
return printHelp("init");
|
|
320
|
+
console.log(`\n vinext init\n`);
|
|
321
|
+
// Parse init-specific flags
|
|
322
|
+
const port = parsed.port ?? 3001;
|
|
323
|
+
const skipCheck = rawArgs.includes("--skip-check");
|
|
324
|
+
const force = rawArgs.includes("--force");
|
|
325
|
+
await runInit({
|
|
326
|
+
root: process.cwd(),
|
|
327
|
+
port,
|
|
328
|
+
skipCheck,
|
|
329
|
+
force,
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
// ─── Help ─────────────────────────────────────────────────────────────────────
|
|
333
|
+
function printHelp(cmd) {
|
|
334
|
+
if (cmd === "dev") {
|
|
335
|
+
console.log(`
|
|
336
|
+
vinext dev - Start development server
|
|
337
|
+
|
|
338
|
+
Usage: vinext dev [options]
|
|
339
|
+
|
|
340
|
+
Options:
|
|
341
|
+
-p, --port <port> Port to listen on (default: 3000)
|
|
342
|
+
-H, --hostname <host> Hostname to bind to (default: localhost)
|
|
343
|
+
--turbopack Accepted for compatibility (no-op, Vite is always used)
|
|
344
|
+
-h, --help Show this help
|
|
345
|
+
`);
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
if (cmd === "build") {
|
|
349
|
+
console.log(`
|
|
350
|
+
vinext build - Build for production
|
|
351
|
+
|
|
352
|
+
Usage: vinext build [options]
|
|
353
|
+
|
|
354
|
+
Automatically detects App Router (app/) or Pages Router (pages/) and
|
|
355
|
+
runs the appropriate multi-environment build via Vite.
|
|
356
|
+
|
|
357
|
+
Options:
|
|
358
|
+
-h, --help Show this help
|
|
359
|
+
`);
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
if (cmd === "start") {
|
|
363
|
+
console.log(`
|
|
364
|
+
vinext start - Start production server
|
|
365
|
+
|
|
366
|
+
Usage: vinext start [options]
|
|
367
|
+
|
|
368
|
+
Serves the output from \`vinext build\`. Supports SSR, static files,
|
|
369
|
+
compression, and all middleware.
|
|
370
|
+
|
|
371
|
+
Options:
|
|
372
|
+
-p, --port <port> Port to listen on (default: 3000, or PORT env)
|
|
373
|
+
-H, --hostname <host> Hostname to bind to (default: 0.0.0.0)
|
|
374
|
+
-h, --help Show this help
|
|
375
|
+
`);
|
|
376
|
+
return;
|
|
377
|
+
}
|
|
378
|
+
if (cmd === "deploy") {
|
|
379
|
+
console.log(`
|
|
380
|
+
vinext deploy - Deploy to Cloudflare Workers
|
|
381
|
+
|
|
382
|
+
Usage: vinext deploy [options]
|
|
383
|
+
|
|
384
|
+
One-command deployment to Cloudflare Workers. Automatically:
|
|
385
|
+
- Detects App Router or Pages Router
|
|
386
|
+
- Generates wrangler.jsonc, worker/index.ts, vite.config.ts if missing
|
|
387
|
+
- Installs @cloudflare/vite-plugin and wrangler if needed
|
|
388
|
+
- Builds the project with Vite
|
|
389
|
+
- Deploys via wrangler
|
|
390
|
+
|
|
391
|
+
Options:
|
|
392
|
+
--preview Deploy to a preview environment
|
|
393
|
+
--name <name> Custom Worker name (default: from package.json)
|
|
394
|
+
--skip-build Skip the build step (use existing dist/)
|
|
395
|
+
--dry-run Generate config files without building or deploying
|
|
396
|
+
-h, --help Show this help
|
|
397
|
+
|
|
398
|
+
Experimental:
|
|
399
|
+
--experimental-tpr Enable Traffic-aware Pre-Rendering
|
|
400
|
+
--tpr-coverage <pct> Traffic coverage target, 0–100 (default: 90)
|
|
401
|
+
--tpr-limit <count> Hard cap on pages to pre-render (default: 1000)
|
|
402
|
+
--tpr-window <hours> Analytics lookback window in hours (default: 24)
|
|
403
|
+
|
|
404
|
+
TPR (Traffic-aware Pre-Rendering) uses Cloudflare zone analytics to determine
|
|
405
|
+
which pages get the most traffic and pre-renders them into KV cache during
|
|
406
|
+
deploy. This feature is experimental and must be explicitly enabled. Requires
|
|
407
|
+
a custom domain (zone analytics are unavailable on *.workers.dev) and the
|
|
408
|
+
CLOUDFLARE_API_TOKEN environment variable with Zone.Analytics read permission.
|
|
409
|
+
|
|
410
|
+
Examples:
|
|
411
|
+
vinext deploy Build and deploy to production
|
|
412
|
+
vinext deploy --preview Deploy to a preview URL
|
|
413
|
+
vinext deploy --dry-run See what files would be generated
|
|
414
|
+
vinext deploy --name my-app Deploy with a custom Worker name
|
|
415
|
+
vinext deploy --experimental-tpr Enable TPR during deploy
|
|
416
|
+
vinext deploy --experimental-tpr --tpr-coverage 95 Cover 95% of traffic
|
|
417
|
+
vinext deploy --experimental-tpr --tpr-limit 500 Cap at 500 pages
|
|
418
|
+
`);
|
|
419
|
+
return;
|
|
420
|
+
}
|
|
421
|
+
if (cmd === "check") {
|
|
422
|
+
console.log(`
|
|
423
|
+
vinext check - Scan Next.js app for compatibility
|
|
424
|
+
|
|
425
|
+
Usage: vinext check [options]
|
|
426
|
+
|
|
427
|
+
Scans your Next.js project and produces a compatibility report showing
|
|
428
|
+
which imports, config options, libraries, and conventions are supported,
|
|
429
|
+
partially supported, or unsupported by vinext.
|
|
430
|
+
|
|
431
|
+
Options:
|
|
432
|
+
-h, --help Show this help
|
|
433
|
+
`);
|
|
434
|
+
return;
|
|
435
|
+
}
|
|
436
|
+
if (cmd === "init") {
|
|
437
|
+
console.log(`
|
|
438
|
+
vinext init - Migrate a Next.js project to run under vinext
|
|
439
|
+
|
|
440
|
+
Usage: vinext init [options]
|
|
441
|
+
|
|
442
|
+
One-command migration: installs dependencies, configures ESM,
|
|
443
|
+
generates vite.config.ts, and adds npm scripts. Your Next.js
|
|
444
|
+
setup continues to work alongside vinext.
|
|
445
|
+
|
|
446
|
+
Options:
|
|
447
|
+
-p, --port <port> Dev server port for the vinext script (default: 3001)
|
|
448
|
+
--skip-check Skip the compatibility check step
|
|
449
|
+
--force Overwrite existing vite.config.ts
|
|
450
|
+
-h, --help Show this help
|
|
451
|
+
|
|
452
|
+
Examples:
|
|
453
|
+
vinext init Migrate with defaults
|
|
454
|
+
vinext init -p 4000 Use port 4000 for dev:vinext
|
|
455
|
+
vinext init --force Overwrite existing vite.config.ts
|
|
456
|
+
vinext init --skip-check Skip the compatibility report
|
|
457
|
+
`);
|
|
458
|
+
return;
|
|
459
|
+
}
|
|
460
|
+
if (cmd === "lint") {
|
|
461
|
+
console.log(`
|
|
462
|
+
vinext lint - Run linter
|
|
463
|
+
|
|
464
|
+
Usage: vinext lint [options]
|
|
465
|
+
|
|
466
|
+
Delegates to your project's eslint (with eslint-config-next) or oxlint.
|
|
467
|
+
If neither is installed, suggests how to add one.
|
|
468
|
+
|
|
469
|
+
Options:
|
|
470
|
+
-h, --help Show this help
|
|
471
|
+
`);
|
|
472
|
+
return;
|
|
473
|
+
}
|
|
474
|
+
console.log(`
|
|
475
|
+
vinext v${VERSION} - Run Next.js apps on Vite
|
|
476
|
+
|
|
477
|
+
Usage: vinext <command> [options]
|
|
478
|
+
|
|
479
|
+
Commands:
|
|
480
|
+
dev Start development server
|
|
481
|
+
build Build for production
|
|
482
|
+
start Start production server
|
|
483
|
+
deploy Deploy to Cloudflare Workers
|
|
484
|
+
init Migrate a Next.js project to vinext
|
|
485
|
+
check Scan Next.js app for compatibility
|
|
486
|
+
lint Run linter
|
|
487
|
+
|
|
488
|
+
Options:
|
|
489
|
+
-h, --help Show this help
|
|
490
|
+
--version Show version
|
|
491
|
+
|
|
492
|
+
Examples:
|
|
493
|
+
vinext dev Start dev server on port 3000
|
|
494
|
+
vinext dev -p 4000 Start dev server on port 4000
|
|
495
|
+
vinext build Build for production
|
|
496
|
+
vinext start Start production server
|
|
497
|
+
vinext deploy Deploy to Cloudflare Workers
|
|
498
|
+
vinext init Migrate a Next.js project
|
|
499
|
+
vinext check Check compatibility
|
|
500
|
+
vinext lint Run linter
|
|
501
|
+
|
|
502
|
+
vinext is a drop-in replacement for the \`next\` CLI.
|
|
503
|
+
No vite.config.ts needed — just run \`vinext dev\` in your Next.js project.
|
|
504
|
+
`);
|
|
505
|
+
}
|
|
506
|
+
// ─── Entry ────────────────────────────────────────────────────────────────────
|
|
507
|
+
if (command === "--version" || command === "-v") {
|
|
508
|
+
console.log(`vinext v${VERSION}`);
|
|
509
|
+
process.exit(0);
|
|
510
|
+
}
|
|
511
|
+
if (command === "--help" || command === "-h" || !command) {
|
|
512
|
+
printHelp();
|
|
513
|
+
if (!command)
|
|
514
|
+
process.exit(0);
|
|
515
|
+
process.exit(0);
|
|
516
|
+
}
|
|
517
|
+
switch (command) {
|
|
518
|
+
case "dev":
|
|
519
|
+
dev().catch((e) => {
|
|
520
|
+
console.error(e);
|
|
521
|
+
process.exit(1);
|
|
522
|
+
});
|
|
523
|
+
break;
|
|
524
|
+
case "build":
|
|
525
|
+
buildApp().catch((e) => {
|
|
526
|
+
console.error(e);
|
|
527
|
+
process.exit(1);
|
|
528
|
+
});
|
|
529
|
+
break;
|
|
530
|
+
case "start":
|
|
531
|
+
start().catch((e) => {
|
|
532
|
+
console.error(e);
|
|
533
|
+
process.exit(1);
|
|
534
|
+
});
|
|
535
|
+
break;
|
|
536
|
+
case "deploy":
|
|
537
|
+
deployCommand().catch((e) => {
|
|
538
|
+
console.error(e);
|
|
539
|
+
process.exit(1);
|
|
540
|
+
});
|
|
541
|
+
break;
|
|
542
|
+
case "init":
|
|
543
|
+
initCommand().catch((e) => {
|
|
544
|
+
console.error(e);
|
|
545
|
+
process.exit(1);
|
|
546
|
+
});
|
|
547
|
+
break;
|
|
548
|
+
case "check":
|
|
549
|
+
check().catch((e) => {
|
|
550
|
+
console.error(e);
|
|
551
|
+
process.exit(1);
|
|
552
|
+
});
|
|
553
|
+
break;
|
|
554
|
+
case "lint":
|
|
555
|
+
lint().catch((e) => {
|
|
556
|
+
console.error(e);
|
|
557
|
+
process.exit(1);
|
|
558
|
+
});
|
|
559
|
+
break;
|
|
560
|
+
default:
|
|
561
|
+
console.error(`\n Unknown command: ${command}\n`);
|
|
562
|
+
printHelp();
|
|
563
|
+
process.exit(1);
|
|
564
|
+
}
|
|
565
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;GAWG;AAEH,OAAO,MAAM,EAAE,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAC/E,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAmB5C,IAAI,WAAW,GAAsB,IAAI,CAAC;AAE1C;;;GAGG;AACH,KAAK,UAAU,QAAQ;IACrB,IAAI,WAAW;QAAE,OAAO,WAAW,CAAC;IAEpC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAClC,IAAI,QAAgB,CAAC;IAErB,IAAI,CAAC;QACH,mEAAmE;QACnE,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;QACtE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,gFAAgF;QAChF,QAAQ,GAAG,MAAM,CAAC;IACpB,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAe,CAAC;IACvE,WAAW,GAAG,IAAI,CAAC;IACnB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,cAAc;IACrB,OAAO,WAAW,EAAE,OAAO,IAAI,SAAS,CAAC;AAC3C,CAAC;AAED,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,kFAAkF;AAElF,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAUtC,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACrC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QACrB,CAAC;aAAM,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;YACjC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,oCAAoC;QAC/D,CAAC;aAAM,IAAI,GAAG,KAAK,sBAAsB,EAAE,CAAC;YAC1C,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,QAAQ;QACtC,CAAC;aAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC5C,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxC,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACrC,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAChD,CAAC;aAAM,IAAI,GAAG,KAAK,YAAY,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAChD,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACzC,MAAM,CAAC,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,wEAAwE;AACxE,SAAS,gBAAgB,CAAC,IAAc,EAAE,IAAY;IACpD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC;IAC9B,CAAC;IACD,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;IACtD,IAAI,EAAE,EAAE,CAAC;QACP,MAAM,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC;IAC9B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,iFAAiF;AAEjF;;;;GAIG;AACH,SAAS,SAAS;IAChB,OAAO,CACL,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;QAC9C,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CACtD,CAAC;AACJ,CAAC;AAED,SAAS,aAAa;IACpB,OAAO,CACL,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,gBAAgB,CAAC,CAAC;QACzD,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,gBAAgB,CAAC,CAAC;QACzD,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAC3D,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,YAAqC,EAAE;IAC9D,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;IAElC,2EAA2E;IAC3E,qEAAqE;IACrE,iEAAiE;IACjE,uEAAuE;IACvE,IAAI,SAAS,EAAE,CAAC;QACd,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE;YACnB,GAAG,SAAS;SACb,CAAC;IACJ,CAAC;IAED,8CAA8C;IAC9C,oEAAoE;IACpE,iDAAiD;IACjD,MAAM,MAAM,GAA4B;QACtC,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE;QACnB,UAAU,EAAE,KAAK;QACjB,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC;QACnB,mEAAmE;QACnE,mEAAmE;QACnE,gDAAgD;QAChD,OAAO,EAAE;YACP,MAAM,EAAE;gBACN,OAAO;gBACP,WAAW;gBACX,mBAAmB;gBACnB,uBAAuB;aACxB;SACF;QACD,GAAG,SAAS;KACb,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,iFAAiF;AAEjF,KAAK,UAAU,GAAG;IAChB,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,MAAM,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;IAEzC,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAC;IAE9B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC;IACjC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,IAAI,WAAW,CAAC;IAE5C,OAAO,CAAC,GAAG,CAAC,yBAAyB,cAAc,EAAE,KAAK,CAAC,CAAC;IAE5D,MAAM,MAAM,GAAG,eAAe,CAAC;QAC7B,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;KACvB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;IACtB,MAAM,CAAC,SAAS,EAAE,CAAC;AACrB,CAAC;AAED,KAAK,UAAU,QAAQ;IACrB,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,MAAM,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC;IAE3C,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAC;IAE9B,OAAO,CAAC,GAAG,CAAC,2BAA2B,cAAc,EAAE,KAAK,CAAC,CAAC;IAE9D,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAE1B,IAAI,KAAK,EAAE,CAAC;QACV,iEAAiE;QACjE,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;SAAM,CAAC;QACN,oCAAoC;QACpC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAE9B,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACpC,MAAM,IAAI,CAAC,KAAK,CAAC;YACf,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC;YACnB,KAAK,EAAE;gBACL,MAAM,EAAE,aAAa;gBACrB,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,IAAI;gBACjB,aAAa,EAAE;oBACb,KAAK,EAAE,6BAA6B;oBACpC,MAAM,EAAE,kBAAkB;oBAC1B,SAAS,EAAE,qBAAqB;iBACjC;aACF;SACF,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACpC,MAAM,IAAI,CAAC,KAAK,CAAC;YACf,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC;YACnB,KAAK,EAAE;gBACL,MAAM,EAAE,aAAa;gBACrB,GAAG,EAAE,6BAA6B;gBAClC,aAAa,EAAE;oBACb,MAAM,EAAE;wBACN,cAAc,EAAE,UAAU;qBAC3B;iBACF;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;AAC1F,CAAC;AAED,KAAK,UAAU,KAAK;IAClB,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,MAAM,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC;IAE3C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;IACrE,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,IAAI,SAAS,CAAC;IAE1C,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,KAAK,CAAC,CAAC;IAElD,MAAM,EAAE,eAAe,EAAE,GAAG,CAAC,MAAM,MAAM;IACvC,kBAAkB,CAAC,yBAAyB,CAC7C,CAMA,CAAC;IAEF,MAAM,eAAe,CAAC;QACpB,IAAI;QACJ,IAAI;QACJ,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC;KAC5C,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,MAAM,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC;IAE1C,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAEjC,+CAA+C;IAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,SAAS,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClF,MAAM,SAAS,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAElF,kDAAkD;IAClD,MAAM,iBAAiB,GACrB,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;QAC/C,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC7C,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;QAC9C,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;QACjD,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAErD,IAAI,CAAC;QACH,IAAI,SAAS,IAAI,iBAAiB,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;YACvD,QAAQ,CAAC,cAAc,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACtD,CAAC;aAAM,IAAI,SAAS,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAChC,QAAQ,CAAC,cAAc,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACtD,CAAC;aAAM,IAAI,SAAS,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAChC,QAAQ,CAAC,cAAc,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACtD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CACT,kDAAkD;gBAChD,gDAAgD;gBAChD,YAAY;gBACZ,6BAA6B,CAChC,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa;IAC1B,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,MAAM,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC;IAE5C,MAAM,QAAQ,EAAE,CAAC;IACjB,OAAO,CAAC,GAAG,CAAC,4BAA4B,cAAc,EAAE,KAAK,CAAC,CAAC;IAE/D,8BAA8B;IAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IAE/D,oBAAoB;IACpB,IAAI,IAAwB,CAAC;IAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,OAAO,KAAK,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC;QAC3C,IAAI,GAAG,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;QAC5D,IAAI,MAAM;YAAE,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,kBAAkB;IAClB,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAE5D,MAAM,SAAS,CAAC;QACd,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE;QACnB,OAAO;QACP,SAAS;QACT,MAAM;QACN,IAAI;QACJ,eAAe;QACf,WAAW;QACX,QAAQ;QACR,SAAS;KACV,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,KAAK;IAClB,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,MAAM,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC;IAE3C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAEvC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,KAAK,UAAU,WAAW;IACxB,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,MAAM,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC;IAE1C,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAEjC,4BAA4B;IAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC;IACjC,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAE1C,MAAM,OAAO,CAAC;QACZ,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE;QACnB,IAAI;QACJ,SAAS;QACT,KAAK;KACN,CAAC,CAAC;AACL,CAAC;AAED,iFAAiF;AAEjF,SAAS,SAAS,CAAC,GAAY;IAC7B,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;CAUf,CAAC,CAAC;QACC,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;CAUf,CAAC,CAAC;QACC,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;CAYf,CAAC,CAAC;QACC,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCf,CAAC,CAAC;QACC,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;CAWf,CAAC,CAAC;QACC,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;CAoBf,CAAC,CAAC;QACC,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;CAUf,CAAC,CAAC;QACC,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC;YACF,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BlB,CAAC,CAAC;AACH,CAAC;AAED,iFAAiF;AAEjF,IAAI,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;IACzD,SAAS,EAAE,CAAC;IACZ,IAAI,CAAC,OAAO;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,QAAQ,OAAO,EAAE,CAAC;IAChB,KAAK,KAAK;QACR,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YAChB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,MAAM;IAER,KAAK,OAAO;QACV,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACrB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,MAAM;IAER,KAAK,OAAO;QACV,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YAClB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,MAAM;IAER,KAAK,QAAQ;QACX,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1B,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,MAAM;IAER,KAAK,MAAM;QACT,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACxB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,MAAM;IAER,KAAK,OAAO;QACV,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YAClB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,MAAM;IAER,KAAK,MAAM;QACT,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACjB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,MAAM;IAER;QACE,OAAO,CAAC,KAAK,CAAC,wBAAwB,OAAO,IAAI,CAAC,CAAC;QACnD,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry.d.ts","sourceRoot":"","sources":["../../src/client/entry.ts"],"names":[],"mappings":"AAeA,OAAO,aAAa,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client-side hydration entry point.
|
|
3
|
+
*
|
|
4
|
+
* This module is injected as a <script type="module"> in the SSR HTML.
|
|
5
|
+
* It reads __NEXT_DATA__ from the window, dynamically imports the page
|
|
6
|
+
* component, and hydrates it onto #__next.
|
|
7
|
+
*
|
|
8
|
+
* The actual page import path is injected at serve-time by the plugin
|
|
9
|
+
* via a virtual module or inline script.
|
|
10
|
+
*/
|
|
11
|
+
import React from "react";
|
|
12
|
+
import { hydrateRoot } from "react-dom/client";
|
|
13
|
+
// Eagerly import the router shim so its module-level popstate listener is
|
|
14
|
+
// registered. Without this, browser back/forward buttons do nothing because
|
|
15
|
+
// navigateClient() is never invoked on history changes.
|
|
16
|
+
import "next/router";
|
|
17
|
+
// Read the SSR data injected by the server
|
|
18
|
+
const nextData = window.__NEXT_DATA__;
|
|
19
|
+
const { pageProps } = nextData?.props ?? { pageProps: {} };
|
|
20
|
+
const pageModulePath = nextData?.__pageModule;
|
|
21
|
+
const appModulePath = nextData?.__appModule;
|
|
22
|
+
/** Defense-in-depth: validate module paths from __NEXT_DATA__. */
|
|
23
|
+
function isValidModulePath(p) {
|
|
24
|
+
if (typeof p !== "string" || p.length === 0)
|
|
25
|
+
return false;
|
|
26
|
+
// Must start with / or ./ (relative Vite module paths)
|
|
27
|
+
if (!p.startsWith("/") && !p.startsWith("./"))
|
|
28
|
+
return false;
|
|
29
|
+
// Must not contain protocol (prevents importing from external URLs)
|
|
30
|
+
if (p.includes("://"))
|
|
31
|
+
return false;
|
|
32
|
+
// Must not traverse directories
|
|
33
|
+
if (p.includes(".."))
|
|
34
|
+
return false;
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
async function hydrate() {
|
|
38
|
+
if (!isValidModulePath(pageModulePath)) {
|
|
39
|
+
console.error("[vinext] Invalid or missing __pageModule in __NEXT_DATA__");
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
// Dynamically import the page module
|
|
43
|
+
const pageModule = await import(/* @vite-ignore */ pageModulePath);
|
|
44
|
+
const PageComponent = pageModule.default;
|
|
45
|
+
if (!PageComponent) {
|
|
46
|
+
console.error("[vinext] Page module has no default export");
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
let element;
|
|
50
|
+
// If there's a custom _app, wrap the page with it
|
|
51
|
+
if (appModulePath) {
|
|
52
|
+
if (!isValidModulePath(appModulePath)) {
|
|
53
|
+
console.error("[vinext] Invalid __appModule in __NEXT_DATA__");
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
try {
|
|
57
|
+
const appModule = await import(/* @vite-ignore */ appModulePath);
|
|
58
|
+
const AppComponent = appModule.default;
|
|
59
|
+
element = React.createElement(AppComponent, {
|
|
60
|
+
Component: PageComponent,
|
|
61
|
+
pageProps,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// No _app, render page directly
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// @ts-expect-error -- element is assigned in the _app branch above, or falls through here
|
|
70
|
+
if (!element) {
|
|
71
|
+
element = React.createElement(PageComponent, pageProps);
|
|
72
|
+
}
|
|
73
|
+
const container = document.getElementById("__next");
|
|
74
|
+
if (!container) {
|
|
75
|
+
console.error("[vinext] No #__next element found");
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const root = hydrateRoot(container, element);
|
|
79
|
+
// Expose root on window so the router shim (a separate module) can
|
|
80
|
+
// re-render the tree during client-side navigation. import.meta.hot.data
|
|
81
|
+
// is module-scoped and cannot be read across module boundaries.
|
|
82
|
+
window.__VINEXT_ROOT__ = root;
|
|
83
|
+
}
|
|
84
|
+
hydrate();
|
|
85
|
+
//# sourceMappingURL=entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry.js","sourceRoot":"","sources":["../../src/client/entry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,0EAA0E;AAC1E,6EAA6E;AAC7E,wDAAwD;AACxD,OAAO,aAAa,CAAC;AAErB,2CAA2C;AAC3C,MAAM,QAAQ,GAAI,MAAc,CAAC,aAAa,CAAC;AAC/C,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,EAAE,KAAK,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AAC3D,MAAM,cAAc,GAAG,QAAQ,EAAE,YAAY,CAAC;AAC9C,MAAM,aAAa,GAAG,QAAQ,EAAE,WAAW,CAAC;AAE5C,kEAAkE;AAClE,SAAS,iBAAiB,CAAC,CAAU;IACnC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1D,uDAAuD;IACvD,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5D,oEAAoE;IACpE,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,gCAAgC;IAChC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,OAAO;IACpB,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC3E,OAAO;IACT,CAAC;IAED,qCAAqC;IACrC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;IACnE,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,CAAC;IAEzC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;IAED,IAAI,OAA2B,CAAC;IAEhC,kDAAkD;IAClD,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE,CAAC;YACtC,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;gBACjE,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC;gBACvC,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,YAAY,EAAE;oBAC1C,SAAS,EAAE,aAAa;oBACxB,SAAS;iBACV,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,gCAAgC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAED,0FAA0F;IAC1F,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IACpD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACnD,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAE7C,mEAAmE;IACnE,yEAAyE;IACzE,gEAAgE;IAC/D,MAAc,CAAC,eAAe,GAAG,IAAI,CAAC;AACzC,CAAC;AAED,OAAO,EAAE,CAAC"}
|