From 741126932184df549a6ed0cd3de6dd3599b537e7 Mon Sep 17 00:00:00 2001 From: Ben Houston Date: Wed, 29 Nov 2023 09:32:35 -0500 Subject: [PATCH] cross platform clean script. --- package.json | 7 +++--- scripts/clean.js | 58 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 scripts/clean.js diff --git a/package.json b/package.json index a00f3822..a1649225 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "@behave-graph/monorepo", "version": "0.9.10", "private": true, + "type": "module", "description": "Simple, extensible behavior graph engine", "keywords": [ "behavior", @@ -25,9 +26,9 @@ "scripts": { "build": "lerna run build", "changeset:add": "changeset add", - "clean:dist": "rm -rf packages/*/dist apps/*/dist", - "clean:node_modules": "rm -rf node_modules packages/*/node_modules apps/*/node_modules", - "clean": "npm run clean:dist && npm run clean:node_modules", + "clean:node_modules": "node scripts/clean.js --node_modules", + "clean:dist": "node scripts/clean.js --dist", + "clean": "node scripts/clean.js --node_modules --dist", "watch": "lerna run watch --parallel --stream", "docs": "typedoc", "format": "eslint \"{apps,packages}/*/src/**/*.{js,ts,tsx,json}\" --fix && prettier \"{apps,packages}/*/src/**/*.{js,ts,tsx,json}\" --check --write", diff --git a/scripts/clean.js b/scripts/clean.js new file mode 100644 index 00000000..1d99088b --- /dev/null +++ b/scripts/clean.js @@ -0,0 +1,58 @@ +import fs from 'fs/promises'; +import path from 'path'; +import process from 'process'; + +const getSubDirectories = async (directory) => { + try { + const stats = await fs.stat(directory); + + if (stats.isDirectory()) { + // get the subdirectories of the packages directory + const subDirectoryPath = path.join(process.cwd(), directory); + const dirNames = await fs.readdir(subDirectoryPath); + return dirNames.map((dirName) => path.join(directory, dirName)); + } + } catch (error) { + return []; + } +}; + +// Function to asynchronously delete a directory +async function deleteDirectory(directory) { + try { + const stats = await fs.stat(directory); + + if (stats.isDirectory()) { + try { + await fs.rm(directory, { recursive: true }); + } catch (error) { + console.error(`Error deleting ${directory}: ${error.message}`); + } + } + } catch (error) { + //console.error(`Error deleting ${directory}: ${error.message}`); + } +} +const isNodeModulesFlagSet = process.argv.includes('--node_modules'); +const isDistFlagSet = process.argv.includes('--dist'); + +const main = async () => { + const projectDirectories = [ + '.', + ...(await getSubDirectories('packages')), + ...(await getSubDirectories('apps')), + ...(await getSubDirectories('examples')) + ]; + + const directoriesToDelete = []; + projectDirectories.forEach((directory) => { + if (isNodeModulesFlagSet) + directoriesToDelete.push(path.join(directory, 'node_modules')); + if (isDistFlagSet) directoriesToDelete.push(path.join(directory, 'dist')); + }); + + // Run deletion operations in parallel + await Promise.all(directoriesToDelete.map(deleteDirectory)); +}; + +main();