Skip to content

Retrieve list of files ignored/included by Git, NPM, Yarn, JSR, VSCE or other tools.

License

Notifications You must be signed in to change notification settings

Mopsgamer/view-ignored

Repository files navigation

view-ignored

npm version npm downloads github github issues

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 Target interface.
  • 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.fs and import ... "view-ignored/browser".
  • Windows. Windows paths are converted to Unix paths for compatibility with memfs based 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 invert option to true.

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,
	signedPatternIgnores,
	signedPatternCompile,
	type SignedPattern,
} 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: SignedPattern = {
	exclude: [".git", ".DS_Store"],
	include: [],
	compiled: null,
}

signedPatternCompile(internal)

export const Git: Target = {
	extractors,
	ignores(o) {
		return signedPatternIgnores({
			...o,
			internal,
			root: "/",
			target: Git,
		})
	},
}

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() // important

Browser 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 .gitignore and .git/info/exclude but does not consider global settings.
    • Starts searching from /.
    • Check this scanner by running git ls-files --others --exclude-standard --cached.
  • NPM (implementation)
    • Expecting to be compatible with PNPM, and others.
    • Reads package.json files field, .npmignore and .gitignore.
    • Starts searching from . (current working directory).
    • No additional checks for name, version or publishConfig.
    • 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.
    • Reads package.json files field, .npmignore and .gitignore.
    • Requires package.json: includes paths from main, module, browser and bin.
    • Starts searching from . (current working directory).
    • YarnClassic is available. (implementation)
  • VSCE (implementation)
    • Reads package.json files field, .vscodeignore and .gitignore.
    • Starts searching from . (current working directory).
    • Check this scanner by running vsce ls.
  • JSR (implementation)
    • Reads jsr.json(c) include and exclude fields.
    • Starts searching from . (current working directory).
  • Deno (implementation)
    • Reads jsr.json(c) and deno.json(c) include and exclude fields.
    • Starts searching from . (current working directory).

See also

License

MIT License. See LICENSE.txt for details.

About

Retrieve list of files ignored/included by Git, NPM, Yarn, JSR, VSCE or other tools.

Topics

Resources

License

Stars

Watchers

Forks

Contributors 2

  •  
  •