Notes/bin/cleanupNodeModules.ts
Panagiotis Papadopoulos 6fe23f9a13 chore(cleanupNodeModules): remove commented out paths
extra note on mermaid: that should be packed by webpack now, so we just need to move it to devDeps and and we should be good
2025-03-26 09:15:33 +01:00

79 lines
2.4 KiB
TypeScript

import fs from "fs-extra";
import path from "path";
function main() {
if (process.argv.length !== 3) {
console.error("More than one path was supplied as argument. Aborting.");
process.exit(1);
}
const basePath = process.argv[2];
if (!fs.existsSync(basePath)) {
console.error(`Supplied path '${basePath}' does not exist. Aborting.`)
process.exit(1);
}
cleanupNodeModules(basePath);
}
function cleanupNodeModules(basePath: string) {
const nodeModulesContent = fs.readdirSync(path.join(basePath, "./node_modules"), { recursive: true, withFileTypes: true });
//const libDir = fs.readdirSync(path.join(basePath, "./libraries"), { recursive: true, withFileTypes: true });
/**
* Delete unnecessary folders
*/
const filterableDirs = new Set([
"demo",
"demos",
"doc",
"docs",
"example",
"examples",
"test",
"tests"
]);
nodeModulesContent
.filter(el => el.isDirectory() && filterableDirs.has(el.name))
.forEach(dir => fs.removeSync(path.join(dir.parentPath, dir.name)));
/**
* Delete unnecessary files based on file extension
* TODO filter out useless (README).md files
*/
const filterableFileExt = new Set([
"ts",
"map"
]);
nodeModulesContent
// TriliumNextTODO: check if we can improve this naive file ext matching, without introducing any additional dependency
.filter(el => el.isFile() && filterableFileExt.has(el.name.split(".").at(-1) || ""))
.forEach(file => fs.removeSync(path.join(file.parentPath, file.name)));
/**
* Delete specific unnecessary folders
* TODO: use basePath
* TODO: check if we want removeSync to throw an error, if path does not exist anymore -> currently it will silently fail
*/
const extraFoldersDelete = new Set([
'build/node_modules/@excalidraw/excalidraw/dist/dev',
'build/node_modules/boxicons/svg',
'build/node_modules/boxicons/node_modules',
'build/node_modules/boxicons/src',
'build/node_modules/boxicons/iconjar',
'build/node_modules/@jimp/plugin-print/fonts',
'build/node_modules/jimp/dist/browser'
]);
nodeModulesContent
.filter(el => el.isDirectory() && extraFoldersDelete.has(path.join(el.parentPath, el.name)))
.forEach(dir => fs.removeSync(path.join(dir.parentPath, dir.name)))
}
main()