MCPcopy Create free account
hub / github.com/adobe/react-spectrum / render

Function render

packages/dev/s2-docs/ssg.tsx:21–89  ·  view source on GitHub ↗
(routes)

Source from the content-addressed store, hash-verified

19}
20
21export async function render(routes) {
22 let pages = Object.keys(routes);
23 if (isMainThread) {
24 let workerCount = Math.min(availableParallelism(), pages.length);
25 if (workerCount > 1) {
26 let routesPerWorker = Math.floor(pages.length / workerCount);
27 let remainder = pages.length % workerCount;
28 let offset = 0;
29 let workers: Promise<void>[] = [];
30
31 for (let i = 0; i < workerCount; i++) {
32 let routeCount = routesPerWorker + (i < remainder ? 1 : 0);
33 let workerRoutes = pages.slice(offset, offset + routeCount);
34 offset += routeCount;
35
36 workers.push(
37 new Promise((resolve, reject) => {
38 let worker = new Worker(process.argv[1], {workerData: workerRoutes});
39 worker.once('error', reject);
40 worker.once('exit', code => {
41 if (code === 0) {
42 resolve();
43 } else {
44 reject(new Error(`Rendering worker exited with code ${code}`));
45 }
46 });
47 })
48 );
49 }
50
51 await Promise.all(workers);
52 return;
53 }
54 } else {
55 pages = workerData;
56 }
57
58 for (let page of pages) {
59 console.log('rendering ' + page);
60 try {
61 let mod = await routes[page]();
62 let Page = mod.default;
63 let url = page.slice(base.length, -4);
64 let {html, rsc} = await prerenderHTML(
65 <Page
66 currentPage={{
67 url: '/' + url,
68 name: url + '.html',
69 tableOfContents: mod.tableOfContents
70 }}
71 />,
72 {component: Page}
73 );
74
75 let distPath = page.slice(baseDir.length, -4);
76 mkdirSync('dist/' + dirname(distPath), {recursive: true});
77
78 let htmlStream = createWriteStream('dist/' + distPath + '.html');

Callers 2

ssg-s2.tsxFile · 0.90
ssg-react-aria.tsxFile · 0.90

Calls 4

prerenderHTMLFunction · 0.85
sliceMethod · 0.80
pushMethod · 0.80
resolveFunction · 0.70

Tested by

no test coverage detected