as-services/libs/utils/fs/dirtree2static.js
devthejo 16b7e7d6aa
All checks were successful
/ build (map[dockerfile:./services/hasura/Dockerfile name:hasura]) (push) Successful in 47s
/ build (map[dockerfile:./services/web/Dockerfile name:web]) (push) Successful in 1m47s
/ build (map[dockerfile:./services/watchers/Dockerfile name:watchers]) (push) Successful in 2m37s
/ build (map[dockerfile:./services/files/Dockerfile name:files]) (push) Successful in 2m52s
/ build (map[dockerfile:./services/api/Dockerfile name:api]) (push) Successful in 3m2s
/ build (map[dockerfile:./services/app/Dockerfile name:app]) (push) Successful in 31s
/ build (map[dockerfile:./services/tasks/Dockerfile name:tasks]) (push) Successful in 2m44s
/ deploy (push) Successful in 48s
chore(init): available sources
2025-04-13 10:46:53 +02:00

53 lines
1.4 KiB
JavaScript

const fs = require("fs")
const path = require("path")
const defaultsDeep = require("lodash.defaultsdeep")
const stringifyJS = require("~/js/stringify-js")
function getName(filename) {
return path.basename(filename, path.extname(filename))
}
const defaultOptions = {
pattern: /\.(js)$/,
loader: (filename) => {
const src = path.join(
path.dirname(filename),
path.basename(filename, path.extname(filename))
)
return `require("${src}")`
},
}
module.exports = function dirtree2static(filename, options = {}, rootDir) {
const isRoot = !rootDir
if (isRoot) {
defaultsDeep(options, defaultOptions)
rootDir = filename
}
const { pattern, loader } = options
const stats = fs.lstatSync(filename)
if (stats.isDirectory()) {
const files = fs.readdirSync(filename).filter((file) => {
const absPath = `${filename}/${file}`
const relPath = absPath.slice(rootDir.length)
return (
(typeof pattern === "function"
? pattern(relPath)
: relPath.match(pattern)) ||
fs.lstatSync(`${filename}/${file}`).isDirectory()
)
})
const results = {}
for (const file of files) {
const name = getName(file)
const result = dirtree2static(`${filename}/${file}`, options, rootDir)
results[name] = result
}
if (isRoot) {
return stringifyJS(results)
}
return results
}
return loader(filename)
}