Files
ONE-OS/axhub-make/scripts/smoke-preview-routes.mjs
王冕 a27e3b8e43 feat: sync full workspace including web modules, docs, and configurations to Gitea
Optimized the root .gitignore to exclude virtual environments, node modules,
and temp folders to ensure clean and lightweight version tracking.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-09 18:12:25 +08:00

78 lines
2.7 KiB
JavaScript

#!/usr/bin/env node
const baseUrl = process.argv[2] || 'http://localhost:51720';
const targets = process.argv.slice(3).length > 0
? process.argv.slice(3)
: [
'/prototypes/ref-antd-copy',
'/components/ref-button',
'/themes/antd-new',
];
let hasFailure = false;
for (const target of targets) {
const requestUrl = new URL(target, baseUrl).toString();
try {
const response = await fetch(requestUrl, {
redirect: 'follow',
headers: {
Accept: 'text/html',
},
});
const html = await response.text();
const htmlProxyMatches = Array.from(
html.matchAll(/src="([^"]*html-proxy[^"]*)"/g),
(match) => match[1],
);
const bootstrapProxy = htmlProxyMatches.find((value) => value.includes('index=0.js')) || null;
const hostProxy = htmlProxyMatches.find((value) => value.includes('index=1.js')) || null;
let bootstrapScript = '';
let hostScript = '';
if (bootstrapProxy) {
bootstrapScript = await fetch(new URL(bootstrapProxy, baseUrl)).then((res) => res.text());
}
if (hostProxy) {
hostScript = await fetch(new URL(hostProxy, baseUrl)).then((res) => res.text());
}
const ok = response.ok
&& html.includes('<div id="root"></div>')
&& htmlProxyMatches.length >= 2
&& !html.includes('waitForBootstrap')
&& bootstrapScript.includes('dev-template-bootstrap.js')
&& hostScript.includes('import PreviewComponent from')
&& hostScript.includes('import.meta.hot.accept(')
&& hostScript.includes(`window.AxhubDevComponent = CurrentComponent;`)
&& html.includes('<div id="root"></div>');
if (!ok) {
hasFailure = true;
console.error(`[preview-smoke] FAIL ${requestUrl}`);
console.error(` status=${response.status}`);
console.error(` containsRoot=${html.includes('<div id="root"></div>')}`);
console.error(` htmlProxyCount=${htmlProxyMatches.length}`);
console.error(` removedLegacyLoader=${!html.includes('waitForBootstrap')}`);
console.error(` bootstrapProxy=${Boolean(bootstrapProxy)}`);
console.error(` hostProxy=${Boolean(hostProxy)}`);
console.error(` hostImportsEntry=${hostScript.includes('import PreviewComponent from')}`);
console.error(` hostHasAcceptBoundary=${hostScript.includes('import.meta.hot.accept(')}`);
console.error(` hostSetsDebugGlobals=${hostScript.includes('window.AxhubDevComponent = CurrentComponent;')}`);
continue;
}
console.log(`[preview-smoke] OK ${requestUrl}`);
} catch (error) {
hasFailure = true;
console.error(`[preview-smoke] ERROR ${requestUrl}`);
console.error(` ${(error && error.message) || error}`);
}
}
if (hasFailure) {
process.exitCode = 1;
}