view-ignored
v0.10.0
Published
Retrieve list of files ignored/included by Git, NPM, Yarn, JSR, VSCE or other tools.
Maintainers
Readme
view-ignored
Retrieve list of files ignored/included by Git, NPM, Yarn, JSR, VSCE or other tools.
Requirements
Node.js 18 or later
Highlights
- Reader. Get a list of included files using configuration file readers, not command-line wrappers.
- Plugins. Built-in targets for popular tools. Use custom
targets by implementing/extending the
Targetinterface. - TypeScript. Written in TypeScript with type definitions included.
- Lightweight. Minimal dependencies for fast performance and small bundle size.
- Easy-to-modify. Well-written and MIT-licensed.
- Browser. Can be bundled for browser use. See
ScanOptions.fsandimport ... "view-ignored/browser". - Windows. Windows paths are converted to Unix paths for compatibility with
memfsbased tests and browsers.
[!NOTE] Despite the name of the package being "view-ignored", the primary purpose is to get the list of included files, i.e., files that are not ignored. You can invert the results if you need the ignored files by setting the
invertoption totrue.
Usage
Basic example
import * as vign from "view-ignored"
import { Git as target } from "view-ignored/targets"
const ctx = await vign.scan({ target })
ctx.paths.has(".git/HEAD") // false
ctx.paths.has("src") // true
const match = ctx.paths.get("src")
if (match.kind === "external") {
console.log(match.source.path) // ".gitignore"
console.log(match.pattern) // "src/**"
}Using custom target
import {
type Extractor,
extractGitignore,
ruleTest,
ruleCompile,
type Rule,
} from "view-ignored/patterns"
import type { Target } from "view-ignored/targets"
const extractors: Extractor[] = [
{
extract: extractGitignore,
path: ".gitignore",
},
{
extract: extractGitignore,
path: ".git/info/exclude",
},
]
const internal: Rule[] = [
ruleCompile({
excludes: true,
pattern: [".git", ".DS_Store"],
compiled: null,
}),
]
export const Git: Target = {
internalRules: internal,
extractors,
root: "/",
// TODO: Git should read configs
init() {},
ignores: ruleTest,
}
const ctx = await vign.scan({ target })Streaming results
import * as vign from "view-ignored"
import { NPM as target } from "view-ignored/targets"
const stream = await vign.scanStream({ target })
stream.on("dirent", console.log)
stream.on("end", (ctx) => {
ctx.paths.has(".git/HEAD") // false
ctx.paths.has("node_modules/") // false
ctx.paths.has("package.json") // true
})
stream.start() // importantBrowser and custom FS
To avoid imports from node:fs and node:process modules,
use the browser submodule, which requires some additional options.
import * as vign from "view-ignored/browser"
// or view-ignored/browser/scan
import { Git as target } from "view-ignored/targets"
export const cwd = process.cwd()
const customFs = {
promises: {
opendir,
readFile,
},
}
vign.scan({ target, cwd, fs })Targets
The following built-in scanners are available:
- Git (implementation)
- Reads
.gitignoreand.git/info/excludebut does not consider global settings. - Starts searching from
/. - Check this scanner by running
git ls-files --others --exclude-standard --cached.
- Reads
- NPM (implementation)
- Expecting to be compatible with PNPM, and others.
- Validates
package.json. - Reads
package.jsonfilesfield,.npmignoreand.gitignore. - Starts searching from
.(current working directory). - Check this scanner by running
npm pack --dry-run.
- Bun (implementation)
- Bun tries to mimic NPM, but that does not mean it behaves the same way.
- Check this scanner by running
bun pm pack --dry-run.
- Yarn (implementation)
- Modern Berry behavior.
- Validates
package.json. - Reads
package.jsonfilesfield,.npmignoreand.gitignore. - Requires
package.json: includes paths frommain,module,browserandbin. - Starts searching from
.(current working directory). YarnClassicis available. (implementation)
- VSCE (implementation)
- Validates
package.json. - Reads
package.jsonfilesfield,.vscodeignoreand.gitignore. - Starts searching from
.(current working directory). - Check this scanner by running
vsce ls.
- Validates
- JSR (implementation)
- Validates and reads
jsr.json(c)includeandexcludefields. - Starts searching from
.(current working directory).
- Validates and reads
- Deno (implementation)
- Validates and reads
jsr.json(c)anddeno.json(c)includeandexcludefields. - Starts searching from
.(current working directory).
- Validates and reads
See also
- https://jsr.io/@m234/path - Utility to sort, convert and format paths.
License
MIT License. See LICENSE.txt for details.
