|
1 | 1 | 'use strict'; |
2 | 2 |
|
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'; |
5 | 6 |
|
6 | 7 | import { processJSXEntries } from './utils/processing.mjs'; |
7 | 8 | import getConfig from '../../utils/configuration/index.mjs'; |
@@ -39,6 +40,38 @@ export async function generate(input) { |
39 | 40 | } |
40 | 41 |
|
41 | 42 | 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 | + } |
42 | 75 | } |
43 | 76 |
|
44 | 77 | return results.map(({ html }) => ({ html: html.toString(), css })); |
|
0 commit comments