import fs from 'node:fs' import path from 'node:path' import assert from 'node:assert/strict' import {createRequire} from 'node:module' import {build} from 'esbuild' const require=createRequire(import.meta.url),output=fs.mkdtempSync(path.resolve('.tmp/composer-add-menu-ssr-')) const file=path.join(output,'fixture.tsx'),location=value=>JSON.stringify(path.resolve(value).replaceAll('\\','/')) fs.writeFileSync(file,`import React from'react';import{renderToString}from'react-dom/server';import Add from ${location('src/renderer/src/workbuddy/composer/add-menu/SourceComposerAddMenu')};import{SourceFilesSubmenu,SourceModeSubmenu,SourceConnectorsSubmenu,SourceReferenceFilesSubmenu}from ${location('src/renderer/src/workbuddy/composer/add-menu/SourceSubmenus')};export const results=[renderToString(),renderToString({}}}/>),renderToString({}}}/>),renderToString(),renderToString()];`) await build({entryPoints:[file],bundle:true,platform:'node',format:'cjs',jsx:'automatic',outfile:path.join(output,'fixture.cjs'),loader:{'.css':'empty'},external:['react','react-dom/server','@floating-ui/react'],logLevel:'warning'}) const {results}=require(path.join(output,'fixture.cjs')) assert(results[0].includes('wb-composer__add-button')&&results[0].includes('aria-label="添加"')) assert(results[1].includes('本地文件')) assert(results[2].includes('cr-mode-submenu')&&results[2].includes('role="switch"')) assert(results[3].includes('cr-connectors-submenu')) assert(results[4].includes('cr-reference-files-submenu')) fs.writeFileSync(path.join(output,'report.json'),JSON.stringify({result:'PASS',checks:5,scope:'Actual React SSR with no document/window; no original runtime access'},null,2)) console.log(JSON.stringify({result:'PASS',checks:5,output}))