2026-03-16 13:34:05 -05:00
|
|
|
#!/usr/bin/env node
|
2026-03-18 12:13:37 -04:00
|
|
|
const { mkdirSync, cpSync, copyFileSync, readdirSync } = require('fs');
|
|
|
|
|
const { join } = require('path');
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Recursive directory copy using copyFileSync — workaround for cpSync failures
|
|
|
|
|
* on Windows paths containing non-ASCII characters (#1178).
|
|
|
|
|
*/
|
|
|
|
|
function safeCpSync(src, dest, options) {
|
|
|
|
|
try {
|
|
|
|
|
cpSync(src, dest, options);
|
|
|
|
|
} catch {
|
|
|
|
|
if (options && options.recursive) {
|
|
|
|
|
copyDirRecursive(src, dest, options && options.filter);
|
|
|
|
|
} else {
|
|
|
|
|
copyFileSync(src, dest);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function copyDirRecursive(src, dest, filter) {
|
|
|
|
|
mkdirSync(dest, { recursive: true });
|
|
|
|
|
for (const entry of readdirSync(src, { withFileTypes: true })) {
|
|
|
|
|
const srcPath = join(src, entry.name);
|
|
|
|
|
const destPath = join(dest, entry.name);
|
|
|
|
|
if (filter && !filter(srcPath)) continue;
|
|
|
|
|
if (entry.isDirectory()) {
|
|
|
|
|
copyDirRecursive(srcPath, destPath, filter);
|
|
|
|
|
} else {
|
|
|
|
|
copyFileSync(srcPath, destPath);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-03-16 13:34:05 -05:00
|
|
|
|
|
|
|
|
// Theme assets
|
|
|
|
|
mkdirSync('dist/modes/interactive/theme', { recursive: true });
|
2026-03-18 12:13:37 -04:00
|
|
|
safeCpSync('src/modes/interactive/theme', 'dist/modes/interactive/theme', {
|
2026-03-16 13:34:05 -05:00
|
|
|
recursive: true,
|
|
|
|
|
filter: (s) => !s.endsWith('.ts'),
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Export HTML templates and vendor files
|
|
|
|
|
mkdirSync('dist/core/export-html/vendor', { recursive: true });
|
2026-03-18 12:13:37 -04:00
|
|
|
safeCpSync('src/core/export-html/template.html', 'dist/core/export-html/template.html');
|
|
|
|
|
safeCpSync('src/core/export-html/template.css', 'dist/core/export-html/template.css');
|
|
|
|
|
safeCpSync('src/core/export-html/template.js', 'dist/core/export-html/template.js');
|
|
|
|
|
safeCpSync('src/core/export-html/vendor', 'dist/core/export-html/vendor', {
|
2026-03-16 13:34:05 -05:00
|
|
|
recursive: true,
|
|
|
|
|
filter: (s) => !s.endsWith('.ts'),
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// LSP defaults
|
|
|
|
|
mkdirSync('dist/core/lsp', { recursive: true });
|
2026-03-18 12:13:37 -04:00
|
|
|
safeCpSync('src/core/lsp/defaults.json', 'dist/core/lsp/defaults.json');
|
|
|
|
|
safeCpSync('src/core/lsp/lsp.md', 'dist/core/lsp/lsp.md');
|