Skip to content

Commit c26de44

Browse files
committed
feat: support vite 7
1 parent 6202d9c commit c26de44

File tree

7 files changed

+74
-131
lines changed

7 files changed

+74
-131
lines changed

.changeset/shiny-ways-wait.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@marko/run": minor
3+
---
4+
5+
Support Vite 7

.changeset/warm-worlds-laugh.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
"@marko/run-adapter-netlify": patch
3+
"@marko/run-adapter-static": patch
4+
"@marko/run-adapter-node": patch
5+
"@marko/run-explorer": patch
6+
---
7+
8+
Update peer dependency

package-lock.json

Lines changed: 5 additions & 49 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"dependencies": {
3+
"@micro-frame/marko": "^1.10.4"
4+
}
5+
}

packages/run/src/__tests__/main.test.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,10 @@ before(async () => {
7878
.replace(/-[a-z0-9_-]+(\.\w+)/gi, "-[hash]$1")
7979
.replace(/:(\d{4,})/g, ":9999")
8080
.replace(
81-
/\s+<script[^>]+(?:marko-vite-preload.*?<\/script>|src="\/@vite\/client".*?\/>)/gs,
81+
/\s+<script[^>]+(?:marko-vite-preload.*?<\/script>|src="\/@vite\/client".*?\/>)/gms,
8282
"",
8383
)
84-
.replace(/\s+<style[^>]+marko-vite-preload.*?<\/style>/gs, "")
84+
.replace(/\s+<style[^>]+marko-vite-preload.*?<\/style>/gms, "")
8585
.replace(
8686
/^(\s*at)\s[^\n]+\s*\n?(?:\s*at\s[^\n]+\s*\n?)*$/gm,
8787
"$1 [Normalized Error Stack]",
@@ -278,6 +278,8 @@ async function testPage(
278278

279279
await snap(snapshot, { ext: ".md", dir });
280280
} finally {
281+
// TODO: figure out why the dev server fails to close sometimes without this wait
282+
await delay(50);
281283
await server.close();
282284
}
283285
}
@@ -371,3 +373,7 @@ function htmlSnapshot(html: string, prevHtml?: string) {
371373
}
372374
return `\`\`\`html\n${html}\n\`\`\`\n\n`;
373375
}
376+
377+
function delay(ms: number) {
378+
return new Promise<void>((resolve) => setTimeout(resolve, ms));
379+
}

packages/run/src/vite/plugin.ts

Lines changed: 43 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ import type {
4141
PackageData,
4242
Route,
4343
} from "./types";
44-
import { getExportIdentifiers, getViteSSRExportIdentifiers } from "./utils/ast";
44+
import { getExportIdentifiers } from "./utils/ast";
4545
import {
4646
getExternalAdapterOptions,
4747
getExternalPluginOptions,
@@ -106,10 +106,6 @@ export default function markoRun(opts: Options = {}): Plugin[] {
106106
let devServer: ViteDevServer;
107107
let routes: BuiltRoutes;
108108
let routeData!: RouteData;
109-
let getExportsFromFile: (
110-
context: PluginContext,
111-
filePath: string,
112-
) => Promise<string[]>;
113109
let resolvedConfig: ResolvedConfig;
114110
let typesFile: string | undefined;
115111
const seenErrors = new Set<string>();
@@ -121,6 +117,18 @@ export default function markoRun(opts: Options = {}): Plugin[] {
121117
routesRender: 0,
122118
};
123119

120+
async function getExportsFromFile(context: PluginContext, filePath: string) {
121+
if (devServer) {
122+
const result = await devServer.transformRequest(filePath, { ssr: false });
123+
return result ? getExportIdentifiers(context.parse(result.code)) : [];
124+
}
125+
const result = await context.load({
126+
id: filePath,
127+
resolveDependencies: false,
128+
});
129+
return result.exports || [];
130+
}
131+
124132
async function writeTypesFile(routes: BuiltRoutes) {
125133
if (
126134
routes &&
@@ -573,9 +581,9 @@ export default function markoRun(opts: Options = {}): Plugin[] {
573581
renderVirtualFilesResult = Promise.resolve();
574582
} else {
575583
// Build routes and generate code
576-
getExportsFromFile = isBuild
577-
? getExportsFromFileBuild
578-
: getExportsFromFileDev.bind(null, devServer);
584+
// getExportsFromFile = isBuild
585+
// ? getExportsFromFileBuild
586+
// : getExportsFromFileDev.bind(null, devServer);
579587
}
580588
},
581589
async resolveId(importee, importer) {
@@ -703,32 +711,33 @@ export default function markoRun(opts: Options = {}): Plugin[] {
703711
];
704712
}
705713

706-
async function getExportsFromFileBuild(
707-
context: PluginContext,
708-
filePath: string,
709-
) {
710-
const result = await context.load({
711-
id: filePath,
712-
resolveDependencies: false,
713-
});
714-
return result ? getExportIdentifiers(result.ast) : [];
715-
}
716-
717-
async function getExportsFromFileDev(
718-
devServer: ViteDevServer,
719-
context: PluginContext,
720-
filePath: string,
721-
) {
722-
const result = await devServer.transformRequest(filePath, { ssr: true });
723-
if (result) {
724-
if (result.exports) {
725-
return result.exports;
726-
}
727-
const ast = context.parse(result.code);
728-
return getViteSSRExportIdentifiers(ast);
729-
}
730-
return [];
731-
}
714+
// async function getExportsFromFileBuild(
715+
// context: PluginContext,
716+
// filePath: string,
717+
// ) {
718+
// const result = await context.load({
719+
// id: filePath,
720+
// resolveDependencies: false,
721+
// });
722+
// return result ? getExportIdentifiers(result.ast) : [];
723+
// }
724+
725+
// async function getExportsFromFileDev(
726+
// devServer: ViteDevServer,
727+
// context: PluginContext,
728+
// filePath: string,
729+
// ) {
730+
// const result = await devServer.transformRequest(filePath, { ssr: true });
731+
// // const x = await context._container.transform(filePath)
732+
// if (result) {
733+
// if (result.exports) {
734+
// return result.exports;
735+
// }
736+
// const ast = context.parse(result.code);
737+
// return getViteSSRExportIdentifiers(ast);
738+
// }
739+
// return [];
740+
// }
732741

733742
async function globFileExists(root: string, pattern: string) {
734743
return (await glob(pattern, { root })).length > 0;

packages/run/src/vite/utils/ast.ts

Lines changed: 0 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -39,49 +39,3 @@ export function getExportIdentifiers(astProgramNode: any): string[] {
3939

4040
return result;
4141
}
42-
43-
export function getViteSSRExportIdentifiers(
44-
astProgramNode: any,
45-
exportObjectName: string = "__vite_ssr_exports__",
46-
): string[] {
47-
const result: string[] = [];
48-
49-
if (t.isProgram(astProgramNode)) {
50-
for (const node of astProgramNode.body) {
51-
if (t.isExpressionStatement(node)) {
52-
if (
53-
t.isAssignmentExpression(node.expression) &&
54-
t.isMemberExpression(node.expression.left)
55-
) {
56-
// __vite_ssr_exports__.XXX = ...
57-
const { object, property } = node.expression.left;
58-
if (
59-
t.isIdentifier(object) &&
60-
object.name === exportObjectName &&
61-
t.isIdentifier(property)
62-
) {
63-
result.push(property.name);
64-
}
65-
} else if (
66-
t.isCallExpression(node.expression) &&
67-
t.isMemberExpression(node.expression.callee)
68-
) {
69-
//Object.defineProperty(__vite_ssr_exports__, "XXX", ...)
70-
const {
71-
arguments: [arg0, arg1],
72-
} = node.expression;
73-
if (
74-
t.isIdentifier(arg0) &&
75-
arg0.name === exportObjectName &&
76-
(t.isStringLiteral(arg1) ||
77-
("value" in arg1 && typeof arg1.value === "string"))
78-
) {
79-
result.push(arg1.value);
80-
}
81-
}
82-
}
83-
}
84-
}
85-
86-
return result;
87-
}

0 commit comments

Comments
 (0)