Jsenv filesystem
Collection of functions to interact with filesystem in Node.js
Get a relative url
import { urlToRelativeUrl } from "@jsenv/filesystem"
const projectDirectoryUrl = "file:///project/"
const jsFileUrl = "file:///project/src/file.js"
const relativeUrl = urlToRelativeUrl(jsFileUrl, projectDirectoryUrl)
console.log(relativeUrl)
List files using pattern matching
import { listFilesMatching } from "@jsenv/filesystem"
const jsFiles = await listFilesMatching({
directoryUrl: new URL("./", import.meta.url),
patterns: {
"./**/*.js": true,
"./**/*.test.js": false,
},
})
[
'file:///Users/dmail/docs/demo/a.js',
'file:///Users/dmail/docs/demo/b.js'
]
Watch a specific file changes
import { readFileSync } from "node:fs"
import { registerFileLifecycle } from "@jsenv/filesystem"
const packageJSONFileUrl = new URL("./package.json", import.meta.url)
let packageJSON = null
const unregister = registerFileLifecycle(packageJSONFileUrl, {
added: () => {
packageJSON = JSON.parse(String(readFileSync(packageJSONFileUrl)))
},
updated: () => {
packageJSON = JSON.parse(String(readFileSync(packageJSONFileUrl)))
},
removed: () => {
packageJSON = null
},
notifyExistent: true,
})
unregister()
Watch many files changes
import { registerDirectoryLifecycle } from "@jsenv/filesystem"
const directoryContentDescription = {}
const unregister = registerDirectoryLifecycle("file:///directory/", {
watchDescription: {
"./**/*": true,
"./node_modules/": false,
},
added: ({ relativeUrl, type }) => {
directoryContentDescription[relativeUrl] = type
},
removed: ({ relativeUrl }) => {
delete directoryContentDescription[relativeUrl]
},
})
unregister()
API
docs/API.md
Installation
npm install @jsenv/filesystem
Development
If you are part or want to be part of the developpers of this package, check docs/development.md