Notes/electron/bin/copy-dist.ts
2024-05-11 22:57:21 +03:00

106 lines
3.2 KiB
TypeScript

import fs = require("fs-extra");
import path = require("path");
const DEST_DIR = "./dist";
const DEST_DIR_SRC = path.join(DEST_DIR, "src");
const DEST_DIR_NODE_MODULES = path.join(DEST_DIR, "node_modules");
async function copyNodeModuleFileOrFolder(source: string) {
const adjustedSource = source.substring(source.indexOf("node_modules") + "node_modules".length);
const destination = path.join(DEST_DIR_NODE_MODULES, adjustedSource);
console.log(`Copying ${source} to ${destination}`);
await fs.ensureDir(path.dirname(destination));
await fs.copy(source, destination);
}
/**
* Removes all "../" components from a given path.
*
* @param path the path with relative components
* @returns the modified path.
*/
function trimRelativePath(path: string) {
return path.replace(/\.\.\//g, "")
}
async function copyFiles() {
const filesToCopy = ["../server/config-sample.ini"];
for (const file of filesToCopy) {
console.log(`Copying ${file}`);
await fs.copy(file, path.join(DEST_DIR, trimRelativePath(file)));
}
}
async function copyDirs() {
const dirsToCopy = [
"../common/images",
"../client/src",
"../client/libraries",
"../server/src/views",
"../server/db"];
for (const dir of dirsToCopy) {
const destPath = path.join(DEST_DIR, trimRelativePath(dir));
console.log(`Copying ${dir} -> ${destPath}`);
await fs.copy(dir, destPath);
}
}
async function copyNodeModules() {
const nodeModulesFile = [
"../client/node_modules/react/umd/react.production.min.js",
"../client/node_modules/react/umd/react.development.js",
"../client/node_modules/react-dom/umd/react-dom.production.min.js",
"../client/node_modules/react-dom/umd/react-dom.development.js",
"../client/node_modules/katex/dist/katex.min.js",
"../client/node_modules/katex/dist/contrib/mhchem.min.js",
"../client/node_modules/katex/dist/contrib/auto-render.min.js",
];
for (const file of nodeModulesFile) {
await copyNodeModuleFileOrFolder(file);
}
const nodeModulesFolder = [
"../client/node_modules/@excalidraw/excalidraw/dist/",
"../client/node_modules/katex/dist/",
"../client/node_modules/dayjs/",
"../client/node_modules/force-graph/dist/",
"../client/node_modules/boxicons/css/",
"../client/node_modules/boxicons/fonts/",
"../client/node_modules/mermaid/dist/",
"../client/node_modules/jquery/dist/",
"../client/node_modules/jquery-hotkeys/",
"../client/node_modules/print-this/",
"../client/node_modules/split.js/dist/",
"../client/node_modules/panzoom/dist/",
];
for (const folder of nodeModulesFolder) {
await copyNodeModuleFileOrFolder(folder);
}
}
async function copyServerNodeModules() {
const ignoredNodeModules = [
"better-sqlite3"
];
const baseDir = "../server/node_modules";
for (const folder of fs.readdirSync(baseDir)) {
if (!ignoredNodeModules.includes(folder)) {
await copyNodeModuleFileOrFolder(path.join(baseDir, folder));
}
}
}
try {
copyFiles();
copyDirs();
copyNodeModules();
copyServerNodeModules();
console.log("Copying complete!");
} catch (err: unknown) {
console.error("Error during copy:", err);
process.exit(1);
}