Skip to content

Commit 56ae71a

Browse files
committed
feat(web): support copying static directories via pathsToCopy
1 parent f78dea3 commit 56ae71a

2 files changed

Lines changed: 36 additions & 2 deletions

File tree

src/generators/web/generate.mjs

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
'use strict';
22

3-
import { readFile } from 'node:fs/promises';
4-
import { join } from 'node:path';
3+
import { constants } from 'node:fs';
4+
import { readFile, stat, cp, copyFile, mkdir } from 'node:fs/promises';
5+
import { join, basename, dirname } from 'node:path';
56

67
import { processJSXEntries } from './utils/processing.mjs';
78
import getConfig from '../../utils/configuration/index.mjs';
@@ -39,6 +40,38 @@ export async function generate(input) {
3940
}
4041

4142
await writeFile(join(config.output, 'styles.css'), css, 'utf-8');
43+
44+
if (Array.isArray(config.pathsToCopy)) {
45+
for (const item of config.pathsToCopy) {
46+
const copyTasks =
47+
typeof item === 'string'
48+
? [{ src: item, dest: join(config.output, basename(item)) }]
49+
: Object.entries(item).map(([src, dest]) => ({
50+
src,
51+
dest: join(config.output, dest),
52+
}));
53+
54+
for (const { src, dest } of copyTasks) {
55+
try {
56+
const fileStats = await stat(src);
57+
58+
if (fileStats.isDirectory()) {
59+
await cp(src, dest, { recursive: true, force: true });
60+
} else {
61+
await mkdir(dirname(dest), { recursive: true });
62+
await copyFile(src, dest, constants.COPYFILE_FICLONE);
63+
}
64+
} catch (err) {
65+
if (err.code !== 'ENOENT') {
66+
console.error(
67+
`Failed to copy asset from ${src} to ${dest}:`,
68+
err
69+
);
70+
}
71+
}
72+
}
73+
}
74+
}
4275
}
4376

4477
return results.map(({ html }) => ({ html: html.toString(), css }));

src/utils/configuration/index.mjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ export const getDefaultConfig = lazy(() =>
3232
repository: 'nodejs/node',
3333
ref: 'HEAD',
3434
}),
35+
pathsToCopy: ['assets', 'public', 'static'],
3536
},
3637

3738
// The number of wasm memory instances is severely limited on

0 commit comments

Comments
 (0)