rwsdk 1.2.3 → 1.2.4-test.20260427164630
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/dist/runtime/render/assembleDocument.js +1 -1
- package/dist/runtime/render/renderDocumentHtmlStream.js +1 -1
- package/dist/runtime/render/stylesheets.js +22 -0
- package/dist/runtime/server.d.ts +1 -1
- package/dist/runtime/server.js +1 -5
- package/dist/runtime/server.test.js +11 -5
- package/dist/vite/addOptimizeDepsPlugin.d.mts +10 -0
- package/dist/vite/addOptimizeDepsPlugin.mjs +6 -0
- package/dist/vite/buildApp.mjs +18 -3
- package/dist/vite/configPlugin.mjs +21 -17
- package/dist/vite/createDirectiveLookupPlugin.mjs +11 -15
- package/dist/vite/directiveModulesDevPlugin.mjs +28 -44
- package/dist/vite/directivesFilteringPlugin.mjs +3 -0
- package/dist/vite/directivesPlugin.mjs +44 -87
- package/dist/vite/knownDepsResolverPlugin.mjs +29 -36
- package/dist/vite/linkerPlugin.mjs +1 -1
- package/dist/vite/prismaPlugin.mjs +7 -10
- package/dist/vite/ssrBridgePlugin.mjs +8 -20
- package/dist/vite/statePlugin.mjs +8 -15
- package/dist/vite/transformJsxScriptTagsPlugin.mjs +3 -3
- package/dist/vite/vitePreamblePlugin.d.mts +2 -153
- package/package.json +3 -3
|
@@ -17,6 +17,6 @@ export const assembleDocument = ({ requestInfo, pageElement, shouldSSR, }) => {
|
|
|
17
17
|
};
|
|
18
18
|
const Document = requestInfo.rw.Document;
|
|
19
19
|
return (_jsxs(Document, { ...requestInfo, children: [_jsx("script", { nonce: requestInfo.rw.nonce, dangerouslySetInnerHTML: {
|
|
20
|
-
__html: `globalThis.__RWSDK_CONTEXT = ${JSON.stringify(clientContext)}`,
|
|
20
|
+
__html: `globalThis.__RWSDK_CONTEXT = ${JSON.stringify(clientContext)};if(!globalThis.__webpack_require__){globalThis.__webpack_require__=function(id){throw new Error("rwsdk: __webpack_require__ called before client init for: "+id)};globalThis.__webpack_require__.u=function(){}}`,
|
|
21
21
|
} }), _jsx(Stylesheets, { requestInfo: requestInfo }), _jsx(Preloads, { requestInfo: requestInfo }), _jsx("div", { id: "hydrate-root", children: pageElement })] }));
|
|
22
22
|
};
|
|
@@ -20,7 +20,7 @@ export const renderDocumentHtmlStream = async ({ rscPayloadStream, Document, req
|
|
|
20
20
|
};
|
|
21
21
|
// Create the outer document with a marker for injection
|
|
22
22
|
const documentElement = (_jsxs(Document, { ...requestInfo, children: [_jsx("script", { nonce: requestInfo.rw.nonce, dangerouslySetInnerHTML: {
|
|
23
|
-
__html: `globalThis.__RWSDK_CONTEXT = ${JSON.stringify(clientContext)}`,
|
|
23
|
+
__html: `globalThis.__RWSDK_CONTEXT = ${JSON.stringify(clientContext)};if(!globalThis.__webpack_require__){globalThis.__webpack_require__=function(id){throw new Error("rwsdk: __webpack_require__ called before client init for: "+id)};globalThis.__webpack_require__.u=function(){}}`,
|
|
24
24
|
} }), _jsx(Stylesheets, { requestInfo: requestInfo }), _jsx(Preloads, { requestInfo: requestInfo }), _jsx("div", { id: "hydrate-root", children: _jsx("div", { id: "rwsdk-app-start" }) })] }));
|
|
25
25
|
const outerHtmlStream = await renderHtmlStream({
|
|
26
26
|
node: documentElement,
|
|
@@ -23,6 +23,20 @@ const findCssForModule = (scriptId, manifest) => {
|
|
|
23
23
|
css.add(href);
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
|
+
// context(justinvdm, 2026-04-23): Rolldown associates CSS with the
|
|
27
|
+
// chunk that imports the CSS file, which may be a dynamic import target
|
|
28
|
+
// rather than the entry chunk. Walk both static and dynamic imports to
|
|
29
|
+
// find CSS from transitive dependencies.
|
|
30
|
+
if (entry.imports) {
|
|
31
|
+
for (const importId of entry.imports) {
|
|
32
|
+
inner(importId);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (entry.dynamicImports) {
|
|
36
|
+
for (const importId of entry.dynamicImports) {
|
|
37
|
+
inner(importId);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
26
40
|
};
|
|
27
41
|
inner(scriptId);
|
|
28
42
|
return Array.from(css);
|
|
@@ -37,5 +51,13 @@ export const Stylesheets = async ({ requestInfo, }) => {
|
|
|
37
51
|
allStylesheets.add(toAbsoluteHref(entry));
|
|
38
52
|
}
|
|
39
53
|
}
|
|
54
|
+
for (const [, entry] of Object.entries(manifest)) {
|
|
55
|
+
if (entry.isEntry) {
|
|
56
|
+
const css = findCssForModule(entry.src ?? "", manifest);
|
|
57
|
+
for (const href of css) {
|
|
58
|
+
allStylesheets.add(toAbsoluteHref(href));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
40
62
|
return (_jsx(_Fragment, { children: Array.from(allStylesheets).map((href) => (_jsx("link", { rel: "stylesheet", href: href, precedence: "first" }, href))) }));
|
|
41
63
|
};
|
package/dist/runtime/server.d.ts
CHANGED
|
@@ -19,7 +19,7 @@ export type ServerFunctionWrap = (fn: Function, args: any[], type: "action" | "q
|
|
|
19
19
|
* handler function, its arguments, and the type ("action" or "query").
|
|
20
20
|
* Interruptors run *outside* the wrapper.
|
|
21
21
|
*
|
|
22
|
-
*
|
|
22
|
+
* Only one wrapper is active at a time; the most recent call wins.
|
|
23
23
|
*
|
|
24
24
|
* @example
|
|
25
25
|
* ```ts
|
package/dist/runtime/server.js
CHANGED
|
@@ -7,7 +7,7 @@ let globalWrap;
|
|
|
7
7
|
* handler function, its arguments, and the type ("action" or "query").
|
|
8
8
|
* Interruptors run *outside* the wrapper.
|
|
9
9
|
*
|
|
10
|
-
*
|
|
10
|
+
* Only one wrapper is active at a time; the most recent call wins.
|
|
11
11
|
*
|
|
12
12
|
* @example
|
|
13
13
|
* ```ts
|
|
@@ -23,10 +23,6 @@ let globalWrap;
|
|
|
23
23
|
* ```
|
|
24
24
|
*/
|
|
25
25
|
export function registerServerFunctionWrap(wrap) {
|
|
26
|
-
if (globalWrap) {
|
|
27
|
-
throw new Error("registerServerFunctionWrap() has already been called. " +
|
|
28
|
-
"Only one wrapper can be registered.");
|
|
29
|
-
}
|
|
30
26
|
globalWrap = wrap;
|
|
31
27
|
}
|
|
32
28
|
/**
|
|
@@ -86,11 +86,17 @@ describe("registerServerFunctionWrap", () => {
|
|
|
86
86
|
expect(wrapSpy).not.toHaveBeenCalled();
|
|
87
87
|
expect(result).toBeInstanceOf(Response);
|
|
88
88
|
});
|
|
89
|
-
it("
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
89
|
+
it("replaces the wrapper if called more than once", async () => {
|
|
90
|
+
const first = vi.fn((fn, args, _type) => fn(...args));
|
|
91
|
+
const second = vi.fn((fn, args, _type) => fn(...args));
|
|
92
|
+
registerServerFunctionWrap(first);
|
|
93
|
+
registerServerFunctionWrap(second);
|
|
94
|
+
const action = serverAction(async function run() {
|
|
95
|
+
return "ok";
|
|
96
|
+
});
|
|
97
|
+
await action();
|
|
98
|
+
expect(first).not.toHaveBeenCalled();
|
|
99
|
+
expect(second).toHaveBeenCalledOnce();
|
|
94
100
|
});
|
|
95
101
|
it("without registration, handlers work normally", async () => {
|
|
96
102
|
const action = serverAction(async function echo(msg) {
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { EnvironmentOptions } from "vite";
|
|
2
|
+
interface OptimizeDepsPlugin {
|
|
3
|
+
name: string;
|
|
4
|
+
resolveId?: (id: string, importer: string | undefined, opts: {
|
|
5
|
+
kind: string;
|
|
6
|
+
}) => any;
|
|
7
|
+
load?: (id: string) => any;
|
|
8
|
+
}
|
|
9
|
+
export declare function addOptimizeDepsPlugin(config: EnvironmentOptions, plugin: OptimizeDepsPlugin): void;
|
|
10
|
+
export {};
|
package/dist/vite/buildApp.mjs
CHANGED
|
@@ -63,14 +63,29 @@ export async function buildApp({ builder, clientEntryPoints, clientFiles, server
|
|
|
63
63
|
clientEnv.config.build ??= {};
|
|
64
64
|
clientEnv.config.build.rollupOptions ??= {};
|
|
65
65
|
const clientEntryPointsArray = Array.from(clientEntryPoints);
|
|
66
|
+
// context(justinvdm, 2026-04-23): Vite 7's Rollup tolerated a missing
|
|
67
|
+
// src/client.tsx default input (silent empty bundle). Vite 8's Rolldown
|
|
68
|
+
// raises [UNRESOLVED_ENTRY] / [INVALID_OPTION] when input doesn't resolve
|
|
69
|
+
// or is empty. Only fall back to the default if the file actually exists,
|
|
70
|
+
// and skip the client build entirely if there's nothing to build.
|
|
71
|
+
let runClientBuild = true;
|
|
66
72
|
if (clientEntryPointsArray.length === 0) {
|
|
67
|
-
|
|
68
|
-
|
|
73
|
+
const defaultClientEntry = resolve(projectRootDir, "src/client.tsx");
|
|
74
|
+
if (existsSync(defaultClientEntry)) {
|
|
75
|
+
log("No client entry points discovered, using default: src/client.tsx");
|
|
76
|
+
clientEnv.config.build.rollupOptions.input = ["src/client.tsx"];
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
log("No client entry points discovered and src/client.tsx not present; skipping client build");
|
|
80
|
+
runClientBuild = false;
|
|
81
|
+
}
|
|
69
82
|
}
|
|
70
83
|
else {
|
|
71
84
|
clientEnv.config.build.rollupOptions.input = clientEntryPointsArray;
|
|
72
85
|
}
|
|
73
|
-
|
|
86
|
+
if (runClientBuild) {
|
|
87
|
+
await builder.build(clientEnv);
|
|
88
|
+
}
|
|
74
89
|
console.log("Linking worker build...");
|
|
75
90
|
process.env.RWSDK_BUILD_PASS = "linker";
|
|
76
91
|
// Re-configure the worker environment for the linking pass
|
|
@@ -45,11 +45,13 @@ export const configPlugin = ({ silent, projectRootDir, workerEntryPathname, clie
|
|
|
45
45
|
],
|
|
46
46
|
exclude: [],
|
|
47
47
|
entries: [workerEntryPathname],
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
48
|
+
rolldownOptions: {
|
|
49
|
+
transform: {
|
|
50
|
+
jsx: "react-jsx",
|
|
51
|
+
define: {
|
|
52
|
+
"process.env.NODE_ENV": JSON.stringify(mode),
|
|
53
|
+
"__webpack_require__": "globalThis.__webpack_require__",
|
|
54
|
+
},
|
|
53
55
|
},
|
|
54
56
|
},
|
|
55
57
|
},
|
|
@@ -99,12 +101,13 @@ export const configPlugin = ({ silent, projectRootDir, workerEntryPathname, clie
|
|
|
99
101
|
"rwsdk/turnstile",
|
|
100
102
|
],
|
|
101
103
|
entries: [],
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
104
|
+
rolldownOptions: {
|
|
105
|
+
transform: {
|
|
106
|
+
jsx: "react-jsx",
|
|
107
|
+
define: {
|
|
108
|
+
"process.env.NODE_ENV": JSON.stringify(mode),
|
|
109
|
+
"__webpack_require__": "globalThis.__webpack_require__",
|
|
110
|
+
},
|
|
108
111
|
},
|
|
109
112
|
},
|
|
110
113
|
},
|
|
@@ -136,12 +139,13 @@ export const configPlugin = ({ silent, projectRootDir, workerEntryPathname, clie
|
|
|
136
139
|
"rwsdk/realtime/durableObject",
|
|
137
140
|
"rwsdk/realtime/worker",
|
|
138
141
|
],
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
142
|
+
rolldownOptions: {
|
|
143
|
+
transform: {
|
|
144
|
+
jsx: "react-jsx",
|
|
145
|
+
define: {
|
|
146
|
+
"process.env.NODE_ENV": JSON.stringify(mode),
|
|
147
|
+
"__webpack_require__": "globalThis.__webpack_require__",
|
|
148
|
+
},
|
|
145
149
|
},
|
|
146
150
|
},
|
|
147
151
|
},
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import debug from "debug";
|
|
2
2
|
import MagicString from "magic-string";
|
|
3
3
|
import path from "path";
|
|
4
|
+
import { addOptimizeDepsPlugin } from "./addOptimizeDepsPlugin.mjs";
|
|
4
5
|
import { VENDOR_CLIENT_BARREL_EXPORT_PATH, VENDOR_SERVER_BARREL_EXPORT_PATH, } from "../lib/constants.mjs";
|
|
5
6
|
export function generateLookupMap({ files, isDev, kind, exportName, }) {
|
|
6
7
|
const s = new MagicString(`
|
|
@@ -55,32 +56,27 @@ export const createDirectiveLookupPlugin = async ({ projectRootDir, files, confi
|
|
|
55
56
|
return;
|
|
56
57
|
}
|
|
57
58
|
log("Configuring environment: env=%s", env);
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
viteConfig
|
|
59
|
+
const escapedVirtualModuleName = config.virtualModuleName.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&");
|
|
60
|
+
const escapedPrefixedModuleName = `/@id/${config.virtualModuleName}`.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&");
|
|
61
|
+
const lookupFilter = new RegExp(`^(${escapedVirtualModuleName}|${escapedPrefixedModuleName})\\.js$`);
|
|
62
|
+
addOptimizeDepsPlugin(viteConfig, {
|
|
62
63
|
name: `rwsdk:${config.pluginName}`,
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
// Handle both direct virtual module name and /@id/ prefixed version
|
|
66
|
-
const escapedVirtualModuleName = config.virtualModuleName.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&");
|
|
67
|
-
const escapedPrefixedModuleName = `/@id/${config.virtualModuleName}`.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&");
|
|
68
|
-
build.onResolve({
|
|
69
|
-
filter: new RegExp(`^(${escapedVirtualModuleName}|${escapedPrefixedModuleName})\\.js$`),
|
|
70
|
-
}, () => {
|
|
64
|
+
resolveId(id) {
|
|
65
|
+
if (lookupFilter.test(id)) {
|
|
71
66
|
process.env.VERBOSE &&
|
|
72
|
-
log("
|
|
67
|
+
log("Marking %s as external", config.virtualModuleName);
|
|
73
68
|
return {
|
|
74
|
-
|
|
69
|
+
id: `${config.virtualModuleName}.js`,
|
|
75
70
|
external: true,
|
|
76
71
|
};
|
|
77
|
-
}
|
|
72
|
+
}
|
|
78
73
|
},
|
|
79
74
|
});
|
|
80
75
|
const shouldOptimizeForEnv = !config.optimizeForEnvironments ||
|
|
81
76
|
config.optimizeForEnvironments.includes(env);
|
|
82
77
|
if (shouldOptimizeForEnv) {
|
|
83
78
|
log("Applying optimizeDeps and aliasing for environment: %s", env);
|
|
79
|
+
viteConfig.optimizeDeps ??= {};
|
|
84
80
|
viteConfig.optimizeDeps.include ??= [];
|
|
85
81
|
for (const file of files) {
|
|
86
82
|
if (file.includes("node_modules")) {
|
|
@@ -99,52 +99,36 @@ export const directiveModulesDevPlugin = ({ clientFiles, serverFiles, projectRoo
|
|
|
99
99
|
else if (envName === "worker") {
|
|
100
100
|
entries.push(APP_SERVER_BARREL_PATH);
|
|
101
101
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
102
|
+
const appBarrelPaths = [
|
|
103
|
+
APP_CLIENT_BARREL_PATH,
|
|
104
|
+
APP_SERVER_BARREL_PATH,
|
|
105
|
+
];
|
|
106
|
+
const appBarrelFilter = new RegExp(`(${appBarrelPaths
|
|
107
|
+
.map((p) => p.replace(/\\/g, "\\\\"))
|
|
108
|
+
.join("|")})$`);
|
|
109
|
+
const BARREL_PREFIX = "\0rwsdk-app-barrel:";
|
|
110
|
+
env.optimizeDeps.rolldownOptions ??= {};
|
|
111
|
+
env.optimizeDeps.rolldownOptions.plugins ??= [];
|
|
112
|
+
env.optimizeDeps.rolldownOptions.plugins.unshift({
|
|
105
113
|
name: "rwsdk:app-barrel-blocker",
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
.
|
|
113
|
-
.
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
namespace: "rwsdk-app-barrel-ns",
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
// context(justinvdm, 11 Sep 2025): Prevent Vite from
|
|
125
|
-
// externalizing our application files. If we don't, paths
|
|
126
|
-
// imported in our application barrel files will be marked as
|
|
127
|
-
// external, and thus not scanned for dependencies.
|
|
128
|
-
if (args.path.startsWith("/") &&
|
|
129
|
-
(args.path.includes("/src/") ||
|
|
130
|
-
args.path.includes("/generated/")) &&
|
|
131
|
-
!args.path.includes("node_modules")) {
|
|
132
|
-
// By returning a result, we claim the module and prevent vite:dep-scan
|
|
133
|
-
// from marking it as external.
|
|
134
|
-
return {
|
|
135
|
-
path: args.path,
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
build.onLoad({ filter: /.*/, namespace: "rwsdk-app-barrel-ns" }, (args) => {
|
|
140
|
-
const isServerBarrel = args.path.includes("app-server-barrel");
|
|
114
|
+
async resolveId(id) {
|
|
115
|
+
await scanPromise;
|
|
116
|
+
if (appBarrelFilter.test(id)) {
|
|
117
|
+
return `${BARREL_PREFIX}${id}`;
|
|
118
|
+
}
|
|
119
|
+
if (id.startsWith("/") &&
|
|
120
|
+
(id.includes("/src/") || id.includes("/generated/")) &&
|
|
121
|
+
!id.includes("node_modules")) {
|
|
122
|
+
return id;
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
load(id) {
|
|
126
|
+
if (id.startsWith(BARREL_PREFIX)) {
|
|
127
|
+
const barrelPath = id.slice(BARREL_PREFIX.length);
|
|
128
|
+
const isServerBarrel = barrelPath.includes("app-server-barrel");
|
|
141
129
|
const files = isServerBarrel ? serverFiles : clientFiles;
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
contents: content,
|
|
145
|
-
loader: "js",
|
|
146
|
-
};
|
|
147
|
-
});
|
|
130
|
+
return generateAppBarrelContent(files, projectRootDir);
|
|
131
|
+
}
|
|
148
132
|
},
|
|
149
133
|
});
|
|
150
134
|
}
|
|
@@ -19,6 +19,9 @@ export const directivesFilteringPlugin = ({ clientFiles, serverFiles, projectRoo
|
|
|
19
19
|
absolute: true,
|
|
20
20
|
});
|
|
21
21
|
const info = this.getModuleInfo(absoluteId);
|
|
22
|
+
// context(justinvdm, 2026-04-23): Rollup exposes `isIncluded` on
|
|
23
|
+
// ModuleInfo; Rolldown (Vite 8) does not. Treat absent as "included"
|
|
24
|
+
// so we only delete on an explicit `false` from Rollup.
|
|
22
25
|
if (!info ||
|
|
23
26
|
(typeof info.isIncluded !== "undefined" && !info.isIncluded)) {
|
|
24
27
|
files.delete(id);
|
|
@@ -2,6 +2,7 @@ import debug from "debug";
|
|
|
2
2
|
import fs from "node:fs/promises";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { normalizeModulePath } from "../lib/normalizeModulePath.mjs";
|
|
5
|
+
import { addOptimizeDepsPlugin } from "./addOptimizeDepsPlugin.mjs";
|
|
5
6
|
import { transformClientComponents } from "./transformClientComponents.mjs";
|
|
6
7
|
import { transformServerFunctions } from "./transformServerFunctions.mjs";
|
|
7
8
|
const log = debug("rwsdk:vite:rsc-directives-plugin");
|
|
@@ -92,100 +93,56 @@ export const directivesPlugin = ({ projectRootDir, clientFiles, serverFiles, })
|
|
|
92
93
|
return;
|
|
93
94
|
}
|
|
94
95
|
process.env.VERBOSE && log("Configuring environment: env=%s", env);
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
build.onLoad({ filter: /\.(js|ts|jsx|tsx|mts|mjs|cjs)$/ }, async (args) => {
|
|
103
|
-
process.env.VERBOSE &&
|
|
104
|
-
log("Esbuild onLoad called for environment=%s, path=%s", env, args.path);
|
|
105
|
-
const normalizedPath = normalizeModulePath(args.path, projectRootDir);
|
|
106
|
-
// context(justinvdm,2025-06-15): If we're in app code,
|
|
107
|
-
// we will be doing the transform work in the vite plugin hooks,
|
|
108
|
-
// the only reason we're in esbuild land for app code is for
|
|
109
|
-
// dependency discovery, so we can skip transform work
|
|
110
|
-
// and use heuristics instead - see below inside if block
|
|
111
|
-
if (!args.path.includes("node_modules")) {
|
|
112
|
-
if (clientFiles.has(normalizedPath)) {
|
|
113
|
-
// context(justinvdm,2025-06-15): If this is a client file:
|
|
114
|
-
// * for ssr and client envs we can skip so esbuild looks at the
|
|
115
|
-
// original source code to discovery dependencies
|
|
116
|
-
// * for worker env, the transform would have just created
|
|
117
|
-
// references and dropped all imports, so we can just return empty code
|
|
118
|
-
if (env === "client" || env === "ssr") {
|
|
119
|
-
log("Esbuild onLoad skipping client module in app code for client or ssr env, path=%s", args.path);
|
|
120
|
-
return undefined;
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
log("Esbuild onLoad returning empty code for server module in app code for worker env, path=%s to bypass esbuild dependency discovery", args.path);
|
|
124
|
-
return {
|
|
125
|
-
contents: "",
|
|
126
|
-
loader: "js",
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
else if (serverFiles.has(normalizedPath)) {
|
|
131
|
-
// context(justinvdm,2025-06-15): If this is a server file:
|
|
132
|
-
// * for worker env, we can skip so esbuild looks at the
|
|
133
|
-
// original source code to discovery dependencies
|
|
134
|
-
// * for ssr and client envs, the transform would have just created
|
|
135
|
-
// references and dropped all imports, so we can just return empty code
|
|
136
|
-
if (env === "worker") {
|
|
137
|
-
log("Esbuild onLoad skipping server module in app code for worker env, path=%s", args.path);
|
|
138
|
-
return undefined;
|
|
139
|
-
}
|
|
140
|
-
else if (env === "ssr" || env === "client") {
|
|
141
|
-
log("Esbuild onLoad returning empty code for server module in app code for ssr or client env, path=%s", args.path);
|
|
142
|
-
return {
|
|
143
|
-
contents: "",
|
|
144
|
-
loader: "js",
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
}
|
|
96
|
+
const directivesFileFilter = /\.(js|ts|jsx|tsx|mts|mjs|cjs)$/;
|
|
97
|
+
async function handleDirectivesLoad(filePath) {
|
|
98
|
+
const normalizedPath = normalizeModulePath(filePath, projectRootDir);
|
|
99
|
+
if (!filePath.includes("node_modules")) {
|
|
100
|
+
if (clientFiles.has(normalizedPath)) {
|
|
101
|
+
if (env === "client" || env === "ssr") {
|
|
102
|
+
return undefined;
|
|
148
103
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
code = await fs.readFile(args.path, "utf-8");
|
|
104
|
+
else {
|
|
105
|
+
return { code: "", moduleType: "js" };
|
|
152
106
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
107
|
+
}
|
|
108
|
+
else if (serverFiles.has(normalizedPath)) {
|
|
109
|
+
if (env === "worker") {
|
|
156
110
|
return undefined;
|
|
157
111
|
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
clientFiles,
|
|
161
|
-
isEsbuild: true,
|
|
162
|
-
});
|
|
163
|
-
if (clientResult) {
|
|
164
|
-
process.env.VERBOSE &&
|
|
165
|
-
log("Esbuild client component transformation successful for environment=%s, path=%s", env, args.path);
|
|
166
|
-
process.env.VERBOSE &&
|
|
167
|
-
log("Esbuild client component transformation for environment=%s, path=%s, code: %j", env, args.path, clientResult.code);
|
|
168
|
-
return {
|
|
169
|
-
contents: clientResult.code,
|
|
170
|
-
loader: getLoader(args.path),
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
const serverResult = transformServerFunctions(code, normalizedPath, env, serverFiles);
|
|
174
|
-
if (serverResult) {
|
|
175
|
-
process.env.VERBOSE &&
|
|
176
|
-
log("Esbuild server function transformation successful for environment=%s, path=%s", env, args.path);
|
|
177
|
-
return {
|
|
178
|
-
contents: serverResult.code,
|
|
179
|
-
loader: getLoader(args.path),
|
|
180
|
-
};
|
|
112
|
+
else if (env === "ssr" || env === "client") {
|
|
113
|
+
return { code: "", moduleType: "js" };
|
|
181
114
|
}
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
let code;
|
|
118
|
+
try {
|
|
119
|
+
code = await fs.readFile(filePath, "utf-8");
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return undefined;
|
|
123
|
+
}
|
|
124
|
+
const clientResult = await transformClientComponents(code, normalizedPath, { environmentName: env, clientFiles, isEsbuild: true });
|
|
125
|
+
if (clientResult) {
|
|
126
|
+
return { code: clientResult.code, moduleType: getLoader(filePath) };
|
|
127
|
+
}
|
|
128
|
+
const serverResult = transformServerFunctions(code, normalizedPath, env, serverFiles);
|
|
129
|
+
if (serverResult) {
|
|
130
|
+
return { code: serverResult.code, moduleType: getLoader(filePath) };
|
|
131
|
+
}
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
addOptimizeDepsPlugin(config, {
|
|
135
|
+
name: "rsc-directives-transform",
|
|
136
|
+
async load(id) {
|
|
137
|
+
if (!directivesFileFilter.test(id)) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
const result = await handleDirectivesLoad(id);
|
|
141
|
+
if (result) {
|
|
142
|
+
return { code: result.code, moduleType: result.moduleType };
|
|
143
|
+
}
|
|
185
144
|
},
|
|
186
145
|
});
|
|
187
|
-
process.env.VERBOSE &&
|
|
188
|
-
log("Environment configuration complete for env=%s", env);
|
|
189
146
|
},
|
|
190
147
|
};
|
|
191
148
|
};
|
|
@@ -91,44 +91,34 @@ export const knownDepsResolverPlugin = ({ projectRootDir, }) => {
|
|
|
91
91
|
// Log a clean summary instead of all the individual mappings
|
|
92
92
|
const totalMappings = Object.values(ENV_IMPORT_MAPPINGS).reduce((sum, mappings) => sum + mappings.size, 0);
|
|
93
93
|
log("Known dependencies resolver configured with %d total mappings across %d environments", totalMappings, Object.keys(ENV_IMPORT_MAPPINGS).length);
|
|
94
|
-
function
|
|
94
|
+
function createResolverPlugin(envName, mappings) {
|
|
95
95
|
if (!mappings) {
|
|
96
96
|
return null;
|
|
97
97
|
}
|
|
98
|
-
// Create reverse mapping from slugified names to original imports
|
|
99
|
-
// Vite converts "react-dom/server.edge" -> "react-dom_server__edge"
|
|
100
|
-
// Pattern: / becomes _, . becomes __
|
|
101
98
|
const slugifiedToOriginal = new Map();
|
|
102
|
-
for (const [original
|
|
99
|
+
for (const [original] of mappings) {
|
|
103
100
|
const slugified = original.replace(/\//g, "_").replace(/\./g, "__");
|
|
104
101
|
slugifiedToOriginal.set(slugified, original);
|
|
105
102
|
}
|
|
106
103
|
return {
|
|
107
|
-
name: `rwsdk:known-dependencies-resolver
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
if (
|
|
113
|
-
|
|
114
|
-
if (originalImport) {
|
|
115
|
-
resolved = mappings.get(originalImport);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
if (!resolved) {
|
|
119
|
-
resolved = resolveKnownImport(args.path, envName, projectRootDir);
|
|
104
|
+
name: `rwsdk:known-dependencies-resolver-${envName}`,
|
|
105
|
+
resolveId(id) {
|
|
106
|
+
let resolved = mappings.get(id);
|
|
107
|
+
if (!resolved) {
|
|
108
|
+
const originalImport = slugifiedToOriginal.get(id);
|
|
109
|
+
if (originalImport) {
|
|
110
|
+
resolved = mappings.get(originalImport);
|
|
120
111
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
return
|
|
128
|
-
path: resolved,
|
|
129
|
-
};
|
|
112
|
+
}
|
|
113
|
+
if (!resolved) {
|
|
114
|
+
resolved = resolveKnownImport(id, envName, projectRootDir);
|
|
115
|
+
}
|
|
116
|
+
if (resolved) {
|
|
117
|
+
if (id === "react-server-dom-webpack/client.edge") {
|
|
118
|
+
return;
|
|
130
119
|
}
|
|
131
|
-
|
|
120
|
+
return resolved;
|
|
121
|
+
}
|
|
132
122
|
},
|
|
133
123
|
};
|
|
134
124
|
}
|
|
@@ -152,17 +142,20 @@ export const knownDepsResolverPlugin = ({ projectRootDir, }) => {
|
|
|
152
142
|
config.environments[envName] = {};
|
|
153
143
|
}
|
|
154
144
|
const envConfig = config.environments[envName];
|
|
155
|
-
|
|
156
|
-
if (esbuildPlugin && mappings) {
|
|
145
|
+
if (mappings) {
|
|
157
146
|
envConfig.optimizeDeps ??= {};
|
|
158
|
-
envConfig.optimizeDeps.
|
|
159
|
-
envConfig.optimizeDeps.
|
|
160
|
-
envConfig.optimizeDeps.
|
|
161
|
-
envConfig.optimizeDeps.
|
|
162
|
-
envConfig.optimizeDeps.
|
|
147
|
+
envConfig.optimizeDeps.rolldownOptions ??= {};
|
|
148
|
+
envConfig.optimizeDeps.rolldownOptions.transform ??= {};
|
|
149
|
+
envConfig.optimizeDeps.rolldownOptions.transform.define ??= {};
|
|
150
|
+
envConfig.optimizeDeps.rolldownOptions.transform.define["process.env.NODE_ENV"] = JSON.stringify(process.env.NODE_ENV);
|
|
151
|
+
envConfig.optimizeDeps.rolldownOptions.plugins ??= [];
|
|
152
|
+
const plugin = createResolverPlugin(envName, mappings);
|
|
153
|
+
if (plugin) {
|
|
154
|
+
envConfig.optimizeDeps.rolldownOptions.plugins.push(plugin);
|
|
155
|
+
}
|
|
163
156
|
envConfig.optimizeDeps.include ??= [];
|
|
164
157
|
envConfig.optimizeDeps.include.push(...predefinedImports);
|
|
165
|
-
log("Added
|
|
158
|
+
log("Added optimizeDeps plugin and includes for environment: %s", envName);
|
|
166
159
|
}
|
|
167
160
|
const aliases = ensureAliasArray(envConfig);
|
|
168
161
|
for (const [find, replacement] of mappings) {
|
|
@@ -9,7 +9,7 @@ export function linkWorkerBundle({ code, manifestContent, projectRootDir, base,
|
|
|
9
9
|
const manifest = JSON.parse(manifestContent);
|
|
10
10
|
// 1. Replace the manifest placeholder with the actual manifest content.
|
|
11
11
|
log("Injecting manifest into worker bundle");
|
|
12
|
-
newCode = newCode.replace(/['"]__RWSDK_MANIFEST_PLACEHOLDER__['"]/, manifestContent);
|
|
12
|
+
newCode = newCode.replace(/['"`]__RWSDK_MANIFEST_PLACEHOLDER__['"`]/, manifestContent);
|
|
13
13
|
// 2. Replace asset placeholders with their final hashed paths.
|
|
14
14
|
log("Replacing asset placeholders in final worker bundle");
|
|
15
15
|
for (const [key, value] of Object.entries(manifest)) {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { resolve } from "node:path";
|
|
2
|
+
import { addOptimizeDepsPlugin } from "./addOptimizeDepsPlugin.mjs";
|
|
2
3
|
import { checkPrismaStatus } from "./checkIsUsingPrisma.mjs";
|
|
3
4
|
import { ensureAliasArray } from "./ensureAliasArray.mjs";
|
|
4
5
|
import { invalidateCacheIfPrismaClientChanged } from "./invalidateCacheIfPrismaClientChanged.mjs";
|
|
@@ -21,17 +22,13 @@ export const prismaPlugin = async ({ projectRootDir, }) => {
|
|
|
21
22
|
return;
|
|
22
23
|
}
|
|
23
24
|
const wasmPath = resolve(projectRootDir, "node_modules/.prisma/client/wasm.js");
|
|
24
|
-
|
|
25
|
-
config
|
|
26
|
-
config.optimizeDeps.esbuildOptions.plugins ??= [];
|
|
27
|
-
config.optimizeDeps.esbuildOptions.plugins.push({
|
|
25
|
+
const prismaFilter = /^.prisma\/client\/default/;
|
|
26
|
+
addOptimizeDepsPlugin(config, {
|
|
28
27
|
name: "rwsdk:prisma",
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
return
|
|
32
|
-
|
|
33
|
-
};
|
|
34
|
-
});
|
|
28
|
+
resolveId(id) {
|
|
29
|
+
if (prismaFilter.test(id)) {
|
|
30
|
+
return wasmPath;
|
|
31
|
+
}
|
|
35
32
|
},
|
|
36
33
|
});
|
|
37
34
|
ensureAliasArray(config).push({
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import debug from "debug";
|
|
2
2
|
import MagicString from "magic-string";
|
|
3
3
|
import { INTERMEDIATE_SSR_BRIDGE_PATH } from "../lib/constants.mjs";
|
|
4
|
+
import { addOptimizeDepsPlugin } from "./addOptimizeDepsPlugin.mjs";
|
|
4
5
|
import { externalModulesSet } from "./constants.mjs";
|
|
5
6
|
import { findSsrImportCallSites } from "./findSsrSpecifiers.mjs";
|
|
6
7
|
const log = debug("rwsdk:vite:ssr-bridge-plugin");
|
|
@@ -49,31 +50,18 @@ export const ssrBridgePlugin = ({ clientFiles, serverFiles, }) => {
|
|
|
49
50
|
configEnvironment(env, config) {
|
|
50
51
|
log("Configuring environment: env=%s", env);
|
|
51
52
|
if (env === "worker") {
|
|
52
|
-
// Configure esbuild to mark rwsdk/__ssr paths as external for worker environment
|
|
53
|
-
log("Configuring esbuild options for worker environment");
|
|
54
53
|
config.optimizeDeps ??= {};
|
|
55
|
-
config.optimizeDeps.esbuildOptions ??= {};
|
|
56
|
-
config.optimizeDeps.esbuildOptions.plugins ??= [];
|
|
57
54
|
config.optimizeDeps.include ??= [];
|
|
58
|
-
config
|
|
55
|
+
addOptimizeDepsPlugin(config, {
|
|
59
56
|
name: "rwsdk-ssr-external",
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
args.path.startsWith(VIRTUAL_SSR_PREFIX)) {
|
|
67
|
-
log("Marking as external: %s", args.path);
|
|
68
|
-
return {
|
|
69
|
-
path: args.path,
|
|
70
|
-
external: true,
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
});
|
|
57
|
+
resolveId(id) {
|
|
58
|
+
if (id === "rwsdk/__ssr_bridge" ||
|
|
59
|
+
id.startsWith(VIRTUAL_SSR_PREFIX)) {
|
|
60
|
+
log("Marking as external: %s", id);
|
|
61
|
+
return { id, external: true };
|
|
62
|
+
}
|
|
74
63
|
},
|
|
75
64
|
});
|
|
76
|
-
log("Worker environment esbuild configuration complete");
|
|
77
65
|
}
|
|
78
66
|
},
|
|
79
67
|
async resolveId(id, importer, options) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import debug from "debug";
|
|
2
2
|
import fs from "node:fs/promises";
|
|
3
3
|
import { RW_STATE_EXPORT_PATH } from "../lib/constants.mjs";
|
|
4
|
+
import { addOptimizeDepsPlugin } from "./addOptimizeDepsPlugin.mjs";
|
|
4
5
|
import { maybeResolveEnvImport } from "./envResolvers.mjs";
|
|
5
6
|
const log = debug("rwsdk:vite:state-plugin");
|
|
6
7
|
const VIRTUAL_STATE_PREFIX = "virtual:rwsdk:state:";
|
|
@@ -22,22 +23,14 @@ export const statePlugin = ({ projectRootDir, }) => {
|
|
|
22
23
|
},
|
|
23
24
|
configEnvironment(env, config) {
|
|
24
25
|
if (env === "worker") {
|
|
25
|
-
|
|
26
|
-
config
|
|
27
|
-
config.optimizeDeps.esbuildOptions.plugins ??= [];
|
|
28
|
-
config.optimizeDeps.esbuildOptions.plugins.push({
|
|
26
|
+
const stateFilter = new RegExp(`^(${RW_STATE_EXPORT_PATH}|${VIRTUAL_STATE_PREFIX}.*)$`);
|
|
27
|
+
addOptimizeDepsPlugin(config, {
|
|
29
28
|
name: "rwsdk-state-external",
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
log("Marking as external: %s", args.path);
|
|
36
|
-
return {
|
|
37
|
-
path: args.path,
|
|
38
|
-
external: true,
|
|
39
|
-
};
|
|
40
|
-
});
|
|
29
|
+
resolveId(id) {
|
|
30
|
+
if (stateFilter.test(id)) {
|
|
31
|
+
log("Marking as external: %s", id);
|
|
32
|
+
return { id, external: true };
|
|
33
|
+
}
|
|
41
34
|
},
|
|
42
35
|
});
|
|
43
36
|
}
|
|
@@ -105,9 +105,9 @@ export async function transformJsxScriptTagsCode(code, clientEntryPoints, manife
|
|
|
105
105
|
.forEach((callExpr) => {
|
|
106
106
|
const expression = callExpr.getExpression();
|
|
107
107
|
const expressionText = expression.getText();
|
|
108
|
-
if (expressionText
|
|
109
|
-
expressionText
|
|
110
|
-
expressionText
|
|
108
|
+
if (!expressionText.endsWith("jsx") &&
|
|
109
|
+
!expressionText.endsWith("jsxs") &&
|
|
110
|
+
!expressionText.endsWith("jsxDEV")) {
|
|
111
111
|
return;
|
|
112
112
|
}
|
|
113
113
|
const args = callExpr.getArguments();
|
|
@@ -1,153 +1,2 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare const vitePreamblePlugin: () =>
|
|
3
|
-
configResolved(config: ResolvedConfig): void;
|
|
4
|
-
hotUpdate?: import("rollup").ObjectHook<(this: import("rollup").MinimalPluginContext & {
|
|
5
|
-
environment: import("vite").DevEnvironment;
|
|
6
|
-
}, options: import("vite").HotUpdateOptions) => Array<import("vite").EnvironmentModuleNode> | void | Promise<Array<import("vite").EnvironmentModuleNode> | void>>;
|
|
7
|
-
resolveId?: import("rollup").ObjectHook<(this: import("rollup").PluginContext, source: string, importer: string | undefined, options: {
|
|
8
|
-
attributes: Record<string, string>;
|
|
9
|
-
custom?: import("rollup").CustomPluginOptions;
|
|
10
|
-
ssr?: boolean | undefined;
|
|
11
|
-
isEntry: boolean;
|
|
12
|
-
}) => Promise<import("rollup").ResolveIdResult> | import("rollup").ResolveIdResult, {
|
|
13
|
-
filter?: {
|
|
14
|
-
id?: RegExp | RegExp[] | {
|
|
15
|
-
include?: RegExp | RegExp[] | undefined;
|
|
16
|
-
exclude?: RegExp | RegExp[] | undefined;
|
|
17
|
-
};
|
|
18
|
-
};
|
|
19
|
-
}>;
|
|
20
|
-
load?: import("rollup").ObjectHook<(this: import("rollup").PluginContext, id: string, options?: {
|
|
21
|
-
ssr?: boolean | undefined;
|
|
22
|
-
}) => Promise<import("rollup").LoadResult> | import("rollup").LoadResult, {
|
|
23
|
-
filter?: {
|
|
24
|
-
id?: string | RegExp | (string | RegExp)[] | {
|
|
25
|
-
include?: string | RegExp | (string | RegExp)[] | undefined;
|
|
26
|
-
exclude?: string | RegExp | (string | RegExp)[] | undefined;
|
|
27
|
-
};
|
|
28
|
-
};
|
|
29
|
-
}>;
|
|
30
|
-
transform?: import("rollup").ObjectHook<(this: import("rollup").TransformPluginContext, code: string, id: string, options?: {
|
|
31
|
-
ssr?: boolean | undefined;
|
|
32
|
-
}) => Promise<import("rollup").TransformResult> | import("rollup").TransformResult, {
|
|
33
|
-
filter?: {
|
|
34
|
-
id?: string | RegExp | (string | RegExp)[] | {
|
|
35
|
-
include?: string | RegExp | (string | RegExp)[] | undefined;
|
|
36
|
-
exclude?: string | RegExp | (string | RegExp)[] | undefined;
|
|
37
|
-
};
|
|
38
|
-
code?: string | RegExp | (string | RegExp)[] | {
|
|
39
|
-
include?: string | RegExp | (string | RegExp)[] | undefined;
|
|
40
|
-
exclude?: string | RegExp | (string | RegExp)[] | undefined;
|
|
41
|
-
};
|
|
42
|
-
};
|
|
43
|
-
}>;
|
|
44
|
-
sharedDuringBuild?: boolean;
|
|
45
|
-
perEnvironmentStartEndDuringDev?: boolean;
|
|
46
|
-
perEnvironmentWatchChangeDuringDev?: boolean;
|
|
47
|
-
enforce?: "pre" | "post";
|
|
48
|
-
apply?: "serve" | "build" | ((this: void, config: import("vite").UserConfig, env: import("vite").ConfigEnv) => boolean);
|
|
49
|
-
applyToEnvironment?: (environment: {
|
|
50
|
-
name: string;
|
|
51
|
-
getTopLevelConfig(): ResolvedConfig;
|
|
52
|
-
config: ResolvedConfig & {
|
|
53
|
-
define?: Record<string, any>;
|
|
54
|
-
resolve: Required<import("vite").ResolveOptions>;
|
|
55
|
-
consumer: "client" | "server";
|
|
56
|
-
keepProcessEnv?: boolean;
|
|
57
|
-
optimizeDeps: import("vite").DepOptimizationOptions;
|
|
58
|
-
dev: import("vite").ResolvedDevEnvironmentOptions;
|
|
59
|
-
build: import("vite").ResolvedBuildEnvironmentOptions;
|
|
60
|
-
plugins: readonly import("vite").Plugin[];
|
|
61
|
-
};
|
|
62
|
-
logger: import("vite").Logger;
|
|
63
|
-
}) => boolean | Promise<boolean> | import("vite").PluginOption;
|
|
64
|
-
config?: import("rollup").ObjectHook<(this: import("vite").ConfigPluginContext, config: import("vite").UserConfig, env: import("vite").ConfigEnv) => Omit<import("vite").UserConfig, "plugins"> | null | void | Promise<Omit<import("vite").UserConfig, "plugins"> | null | void>>;
|
|
65
|
-
configEnvironment?: import("rollup").ObjectHook<(this: import("vite").ConfigPluginContext, name: string, config: import("vite").EnvironmentOptions, env: import("vite").ConfigEnv & {
|
|
66
|
-
isSsrTargetWebworker?: boolean;
|
|
67
|
-
}) => import("vite").EnvironmentOptions | null | void | Promise<import("vite").EnvironmentOptions | null | void>>;
|
|
68
|
-
configureServer?: import("rollup").ObjectHook<import("vite").ServerHook>;
|
|
69
|
-
configurePreviewServer?: import("rollup").ObjectHook<import("vite").PreviewServerHook>;
|
|
70
|
-
transformIndexHtml?: import("vite").IndexHtmlTransform;
|
|
71
|
-
buildApp?: import("rollup").ObjectHook<import("vite").BuildAppHook>;
|
|
72
|
-
handleHotUpdate?: import("rollup").ObjectHook<(this: import("vite").MinimalPluginContextWithoutEnvironment, ctx: import("vite").HmrContext) => Array<import("vite").ModuleNode> | void | Promise<Array<import("vite").ModuleNode> | void>>;
|
|
73
|
-
api?: any;
|
|
74
|
-
cacheKey?: string | undefined;
|
|
75
|
-
name: string;
|
|
76
|
-
version?: string | undefined;
|
|
77
|
-
renderError?: import("rollup").ObjectHook<(this: import("rollup").PluginContext, error?: Error | undefined) => void | Promise<void>, {
|
|
78
|
-
sequential?: boolean;
|
|
79
|
-
}> | undefined;
|
|
80
|
-
augmentChunkHash?: import("rollup").ObjectHook<(this: import("rollup").PluginContext, chunk: import("rollup").RenderedChunk) => string | void, {}> | undefined;
|
|
81
|
-
generateBundle?: import("rollup").ObjectHook<(this: import("rollup").PluginContext, options: import("rollup").NormalizedOutputOptions, bundle: import("rollup").OutputBundle, isWrite: boolean) => void | Promise<void>, {}> | undefined;
|
|
82
|
-
outputOptions?: import("rollup").ObjectHook<(this: import("rollup").PluginContext, options: import("rollup").OutputOptions) => import("rollup").OutputOptions | import("rollup").NullValue, {}> | undefined;
|
|
83
|
-
renderChunk?: import("rollup").ObjectHook<(this: import("rollup").PluginContext, code: string, chunk: import("rollup").RenderedChunk, options: import("rollup").NormalizedOutputOptions, meta: {
|
|
84
|
-
chunks: Record<string, import("rollup").RenderedChunk>;
|
|
85
|
-
}) => string | {
|
|
86
|
-
code: string;
|
|
87
|
-
map?: import("rollup").SourceMapInput;
|
|
88
|
-
} | import("rollup").NullValue | Promise<string | {
|
|
89
|
-
code: string;
|
|
90
|
-
map?: import("rollup").SourceMapInput;
|
|
91
|
-
} | import("rollup").NullValue>, {}> | undefined;
|
|
92
|
-
renderDynamicImport?: import("rollup").ObjectHook<(this: import("rollup").PluginContext, options: {
|
|
93
|
-
customResolution: string | null;
|
|
94
|
-
format: import("rollup").InternalModuleFormat;
|
|
95
|
-
moduleId: string;
|
|
96
|
-
targetModuleId: string | null;
|
|
97
|
-
chunk: import("rollup").PreRenderedChunkWithFileName;
|
|
98
|
-
targetChunk: import("rollup").PreRenderedChunkWithFileName | null;
|
|
99
|
-
getTargetChunkImports: () => import("rollup").DynamicImportTargetChunk[] | null;
|
|
100
|
-
targetModuleAttributes: Record<string, string>;
|
|
101
|
-
}) => {
|
|
102
|
-
left: string;
|
|
103
|
-
right: string;
|
|
104
|
-
} | import("rollup").NullValue, {}> | undefined;
|
|
105
|
-
renderStart?: import("rollup").ObjectHook<(this: import("rollup").PluginContext, outputOptions: import("rollup").NormalizedOutputOptions, inputOptions: import("rollup").NormalizedInputOptions) => void | Promise<void>, {
|
|
106
|
-
sequential?: boolean;
|
|
107
|
-
}> | undefined;
|
|
108
|
-
resolveFileUrl?: import("rollup").ObjectHook<import("rollup").ResolveFileUrlHook, {}> | undefined;
|
|
109
|
-
resolveImportMeta?: import("rollup").ObjectHook<import("rollup").ResolveImportMetaHook, {}> | undefined;
|
|
110
|
-
writeBundle?: import("rollup").ObjectHook<(this: import("rollup").PluginContext, options: import("rollup").NormalizedOutputOptions, bundle: import("rollup").OutputBundle) => void | Promise<void>, {
|
|
111
|
-
sequential?: boolean;
|
|
112
|
-
}> | undefined;
|
|
113
|
-
footer?: import("rollup").ObjectHook<import("rollup").AddonHook, {}> | undefined;
|
|
114
|
-
banner?: import("rollup").ObjectHook<import("rollup").AddonHook, {}> | undefined;
|
|
115
|
-
intro?: import("rollup").ObjectHook<import("rollup").AddonHook, {}> | undefined;
|
|
116
|
-
outro?: import("rollup").ObjectHook<import("rollup").AddonHook, {}> | undefined;
|
|
117
|
-
buildEnd?: import("rollup").ObjectHook<(this: import("rollup").PluginContext, error?: Error | undefined) => void | Promise<void>, {
|
|
118
|
-
sequential?: boolean;
|
|
119
|
-
}> | undefined;
|
|
120
|
-
buildStart?: import("rollup").ObjectHook<(this: import("rollup").PluginContext, options: import("rollup").NormalizedInputOptions) => void | Promise<void>, {
|
|
121
|
-
sequential?: boolean;
|
|
122
|
-
}> | undefined;
|
|
123
|
-
closeBundle?: import("rollup").ObjectHook<(this: import("rollup").PluginContext, error?: Error | undefined) => void | Promise<void>, {
|
|
124
|
-
sequential?: boolean;
|
|
125
|
-
}> | undefined;
|
|
126
|
-
closeWatcher?: import("rollup").ObjectHook<(this: import("rollup").PluginContext) => void | Promise<void>, {
|
|
127
|
-
sequential?: boolean;
|
|
128
|
-
}> | undefined;
|
|
129
|
-
moduleParsed?: import("rollup").ObjectHook<(this: import("rollup").PluginContext, info: import("rollup").ModuleInfo) => void | Promise<void>, {
|
|
130
|
-
sequential?: boolean;
|
|
131
|
-
}> | undefined;
|
|
132
|
-
onLog?: import("rollup").ObjectHook<(this: import("rollup").MinimalPluginContext, level: import("rollup").LogLevel, log: import("rollup").RollupLog) => boolean | import("rollup").NullValue, {}> | undefined;
|
|
133
|
-
options?: import("rollup").ObjectHook<(this: import("rollup").MinimalPluginContext, options: import("rollup").InputOptions) => import("rollup").InputOptions | import("rollup").NullValue | Promise<import("rollup").InputOptions | import("rollup").NullValue>, {}> | undefined;
|
|
134
|
-
resolveDynamicImport?: import("rollup").ObjectHook<(this: import("rollup").PluginContext, specifier: string | import("rollup").AstNode, importer: string, options: {
|
|
135
|
-
attributes: Record<string, string>;
|
|
136
|
-
importerAttributes: Record<string, string>;
|
|
137
|
-
}) => import("rollup").ResolveIdResult | Promise<import("rollup").ResolveIdResult>, {}> | undefined;
|
|
138
|
-
shouldTransformCachedModule?: import("rollup").ObjectHook<(this: import("rollup").PluginContext, options: {
|
|
139
|
-
ast: import("rollup").ProgramNode;
|
|
140
|
-
attributes: Record<string, string>;
|
|
141
|
-
code: string;
|
|
142
|
-
id: string;
|
|
143
|
-
meta: import("rollup").CustomPluginOptions;
|
|
144
|
-
moduleSideEffects: boolean | "no-treeshake";
|
|
145
|
-
resolvedSources: import("rollup").ResolvedIdMap;
|
|
146
|
-
syntheticNamedExports: boolean | string;
|
|
147
|
-
}) => boolean | import("rollup").NullValue | Promise<boolean | import("rollup").NullValue>, {}> | undefined;
|
|
148
|
-
watchChange?: import("rollup").ObjectHook<(this: import("rollup").PluginContext, id: string, change: {
|
|
149
|
-
event: import("rollup").ChangeEvent;
|
|
150
|
-
}) => void | Promise<void>, {
|
|
151
|
-
sequential?: boolean;
|
|
152
|
-
}> | undefined;
|
|
153
|
-
};
|
|
1
|
+
import type { Plugin } from "vite";
|
|
2
|
+
export declare const vitePreamblePlugin: () => Plugin;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rwsdk",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.4-test.20260427164630",
|
|
4
4
|
"description": "Build fast, server-driven webapps on Cloudflare with SSR, RSC, and realtime",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -198,7 +198,7 @@
|
|
|
198
198
|
"react": ">=19.2.0-0 <19.3.0 || >=19.3.0-0 <20.0.0",
|
|
199
199
|
"react-dom": ">=19.2.0-0 <19.3.0 || >=19.3.0-0 <20.0.0",
|
|
200
200
|
"react-server-dom-webpack": ">=19.2.0-0 <19.3.0 || >=19.3.0-0 <20.0.0",
|
|
201
|
-
"vite": "^6.2.6 || 7.x",
|
|
201
|
+
"vite": "^6.2.6 || 7.x || 8.x",
|
|
202
202
|
"wrangler": "^4.77.0"
|
|
203
203
|
},
|
|
204
204
|
"peerDependenciesMeta": {
|
|
@@ -220,7 +220,7 @@
|
|
|
220
220
|
"semver": "~7.7.4",
|
|
221
221
|
"tsx": "~4.21.0",
|
|
222
222
|
"typescript": "~6.0.2",
|
|
223
|
-
"vite": "~
|
|
223
|
+
"vite": "~8.0.9",
|
|
224
224
|
"vitest": "~4.1.2"
|
|
225
225
|
}
|
|
226
226
|
}
|