mirror of
https://github.com/ragestudio/comty.git
synced 2025-06-09 10:34:17 +00:00
58 lines
1.6 KiB
JavaScript
58 lines
1.6 KiB
JavaScript
const fs = require("fs")
|
|
const path = require("path")
|
|
|
|
const rootPath = process.cwd()
|
|
const packagesPath = path.resolve(rootPath, "packages")
|
|
|
|
async function readIgnoredPackages() {
|
|
const packages = await fs.promises.readFile(path.resolve(rootPath, ".ignorepackages"), "utf-8").catch(() => "")
|
|
|
|
return packages.split("\n")
|
|
}
|
|
|
|
async function filterPackages(packages, ignore = []) {
|
|
const gitIgnore = fs.readFileSync(path.resolve(rootPath, ".gitignore"), "utf-8")
|
|
|
|
// create a regex to match all packages that are in the gitignore file
|
|
const gitIgnoreRegex = gitIgnore.split("\n").map((line) => {
|
|
// remove comments
|
|
if (line.startsWith("#")) return
|
|
|
|
return line.replace(/(\/)/g, "\\/").replace(/(\*)/g, "(.*)")
|
|
}).filter((line) => line)
|
|
|
|
// filter packages that are in the gitignore file
|
|
packages = packages.filter((packageName) => {
|
|
// filter ignored packages
|
|
if (ignore.includes(packageName)) {
|
|
return false
|
|
}
|
|
|
|
const resolvedPath = path.resolve(packagesPath, packageName)
|
|
|
|
return !gitIgnoreRegex.some((regex) => {
|
|
return resolvedPath.match(regex)
|
|
})
|
|
})
|
|
|
|
packages = packages.filter((packageName) => {
|
|
return fs.statSync(path.resolve(packagesPath, packageName)).isDirectory()
|
|
})
|
|
|
|
return packages
|
|
}
|
|
|
|
async function getPackages({ ignore = [] } = {}) {
|
|
let packages = await fs.promises.readdir(packagesPath)
|
|
|
|
const ignoredPackages = await readIgnoredPackages()
|
|
|
|
packages = filterPackages(packages, [
|
|
...ignore,
|
|
...ignoredPackages,
|
|
])
|
|
|
|
return packages
|
|
}
|
|
|
|
module.exports = getPackages |