Skip to content

Commit 10e9e3e

Browse files
committed
chore: code review changes
1 parent b4b4953 commit 10e9e3e

File tree

6 files changed

+23
-30
lines changed

6 files changed

+23
-30
lines changed

src/generators/web/index.mjs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export default {
4444
const requireFn = createRequire(import.meta.url);
4545

4646
// Process all entries: convert JSX to HTML/CSS/JS
47-
const { results, css, jsChunks } = await processJSXEntries(
47+
const { results, css, chunks } = await processJSXEntries(
4848
entries,
4949
template,
5050
astBuilders,
@@ -60,7 +60,7 @@ export default {
6060
}
6161

6262
// Write code-split JavaScript chunks
63-
for (const chunk of jsChunks) {
63+
for (const chunk of chunks) {
6464
await writeFile(join(output, chunk.fileName), chunk.code, 'utf-8');
6565
}
6666

src/generators/web/template.html

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@
1515

1616
<!-- Apply theme before paint to avoid Flash of Unstyled Content -->
1717
<script>document.documentElement.setAttribute("data-theme",localStorage.getItem("theme")||(matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"));</script>
18-
19-
{{importMap}}
18+
<script type="importmap">{{importMap}}</script>
2019
</head>
2120

2221
<body>

src/generators/web/ui/components/CodeBox.jsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export const getLanguageDisplayName = language => {
2020
};
2121

2222
/** @param {import('react').PropsWithChildren<{ className: string }>} props */
23-
export default ({ className, children, ...props }) => {
23+
export default ({ className, ...props }) => {
2424
const matches = className?.match(/language-(?<language>[a-zA-Z]+)/);
2525

2626
const language = matches?.groups?.language ?? '';
@@ -48,8 +48,6 @@ export default ({ className, children, ...props }) => {
4848
className={className}
4949
buttonText="Copy to clipboard"
5050
{...props}
51-
>
52-
{children}
53-
</BaseCodeBox>
51+
/>
5452
);
5553
};

src/generators/web/utils/bundle.mjs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,11 +109,11 @@ export default async function bundleCode(codeMap, { server = false } = {}) {
109109
.filter(c => c.fileName.endsWith('.css'))
110110
.map(f => f.source)
111111
.join(''),
112-
jsChunks: chunks.map(({ fileName, code, isEntry }) => ({
112+
chunks: chunks.map(({ fileName, code, isEntry }) => ({
113113
fileName: fileName.replace('_virtual_', ''),
114114
isEntry,
115115
code,
116116
})),
117-
importMapHtml: `<script type="importmap">${importMap?.source}</script>`,
117+
importMap: importMap?.source.toString(),
118118
};
119119
}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22
* Creates an enhanced require function that can resolve code-split chunks
33
* from a virtual file system before falling back to Node.js require.
44
*
5-
* @param {Array<{fileName: string, code: string}>} jsChunks - Array of code-split chunks from bundler.
5+
* @param {Array<{fileName: string, code: string}>} chunks - Array of code-split chunks from bundler.
66
* @param {ReturnType<import('node:module').createRequire>} requireFn - Node.js require function for external packages.
77
*/
8-
export function createEnhancedRequire(jsChunks, requireFn) {
8+
export function createChunkedRequire(chunks, requireFn) {
99
// Create a virtual file system from code-split chunks
1010
const chunkModules = Object.fromEntries(
11-
jsChunks.map(c => [`./${c.fileName}`, c.code])
11+
chunks.map(c => [`./${c.fileName}`, c.code])
1212
);
1313

1414
/**

src/generators/web/utils/processing.mjs

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import HTMLMinifier from '@minify-html/node';
44
import { jsx, toJs } from 'estree-util-to-js';
55

66
import bundleCode from './bundle.mjs';
7-
import { createEnhancedRequire } from './chunkHelper.mjs';
7+
import { createChunkedRequire } from './chunks.mjs';
88

99
/**
1010
* Executes server-side JavaScript code in an isolated context with virtual module support.
@@ -21,13 +21,13 @@ export async function executeServerCode(serverCodeMap, requireFn) {
2121
const dehydratedMap = new Map();
2222

2323
// Bundle all server-side code, which may produce code-split chunks
24-
const { jsChunks } = await bundleCode(serverCodeMap, { server: true });
24+
const { chunks } = await bundleCode(serverCodeMap, { server: true });
2525

26-
const entryChunks = jsChunks.filter(c => c.isEntry);
27-
const otherChunks = jsChunks.filter(c => !c.isEntry);
26+
const entryChunks = chunks.filter(c => c.isEntry);
27+
const otherChunks = chunks.filter(c => !c.isEntry);
2828

2929
// Create enhanced require function that can resolve code-split chunks
30-
const enhancedRequire = createEnhancedRequire(otherChunks, requireFn);
30+
const enhancedRequire = createChunkedRequire(otherChunks, requireFn);
3131

3232
// Execute each bundled entry and collect dehydrated HTML results
3333
for (const chunk of entryChunks) {
@@ -81,28 +81,24 @@ export async function processJSXEntries(
8181
// Bundle all client code at once (with code splitting for shared chunks)
8282
const clientBundle = await bundleCode(clientCodeMap);
8383

84-
// Process each entry to create final HTML
85-
const results = entries.map(({ data }) => {
86-
const fileName = `${data.api}.js`;
84+
const titleSuffix = `Node.js v${version} Documentation`;
8785

88-
const title = `${data.heading.data.name} | Node.js v${version} Documentation`;
86+
// Process each entry to create final HTML
87+
const results = entries.map(({ data: { api, heading } }) => {
88+
const fileName = `${api}.js`;
8989

9090
// Replace template placeholders with actual content
9191
const renderedHtml = template
92-
.replace('{{title}}', title)
92+
.replace('{{title}}', `${heading.data.name} | ${titleSuffix}`)
9393
.replace('{{dehydrated}}', serverBundle.get(fileName) ?? '')
94-
.replace('{{importMap}}', clientBundle.importMapHtml)
94+
.replace('{{importMap}}', clientBundle.importMap ?? '')
9595
.replace('{{entrypoint}}', `./${fileName}?${randomUUID()}`);
9696

9797
// Minify HTML (input must be a Buffer)
9898
const finalHTMLBuffer = HTMLMinifier.minify(Buffer.from(renderedHtml), {});
9999

100-
return { html: finalHTMLBuffer, api: data.api };
100+
return { html: finalHTMLBuffer, api };
101101
});
102102

103-
return {
104-
results,
105-
css: clientBundle.css ?? '',
106-
jsChunks: clientBundle.jsChunks,
107-
};
103+
return { results, ...clientBundle };
108104
}

0 commit comments

Comments
 (0)