Skip to content

Commit

Permalink
fix: account for directories and files prefixed with ./ (#140)
Browse files Browse the repository at this point in the history
  • Loading branch information
wraithgar authored Oct 26, 2022
1 parent 2ec75c0 commit d5b653c
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 3 deletions.
9 changes: 7 additions & 2 deletions lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -294,8 +294,13 @@ class PackWalker extends IgnoreWalker {

// if we have a files array in our package, we need to pull rules from it
if (files) {
for (const file of files) {
for (let file of files) {
// invert the rule because these are things we want to include
if (file.startsWith('/')) {
file = file.slice(1)
} else if (file.startsWith('./')) {
file = file.slice(2)
}
const inverse = `!${file}`
try {
// if an entry in the files array is a specific file, then we need to include it as a
Expand All @@ -305,7 +310,7 @@ class PackWalker extends IgnoreWalker {
// if we have a file and we know that, it's strictly required
if (stat.isFile()) {
strict.unshift(inverse)
this.requiredFiles.push(file.startsWith('/') ? file.slice(1) : file)
this.requiredFiles.push(file)
} else if (stat.isDirectory()) {
// otherwise, it's a default ignore, and since we got here we know it's not a pattern
// so we include the directory contents
Expand Down
42 changes: 42 additions & 0 deletions test/package-json-dir-with-slashes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
// In v1, this would exclude the 'lib/two.js' file, because
// the .npmignore is deeper in the tree and thus had higher
// precedence. In v2, because /lib/two.js is in the files
// list as a file path, it will be included no matter what.
'use strict'

const Arborist = require('@npmcli/arborist')
const t = require('tap')
const packlist = require('../')

const pkg = t.testdir({
'package.json': JSON.stringify({
files: [
'/lib',
'./lib2',
],
}),
lib: {
'one.js': 'one',
'two.js': 'two',
'tre.js': 'tre',
'for.js': 'for',
'.npmignore': 'two.js',
},
lib2: {
'fiv.js': 'fiv',
'.DS_Store': 'a store of ds',
},
})

t.test('package with slash directories', async (t) => {
const arborist = new Arborist({ path: pkg })
const tree = await arborist.loadActual()
const files = await packlist(tree)
t.same(files, [
'lib2/fiv.js',
'lib/for.js',
'lib/one.js',
'lib/tre.js',
'package.json',
])
})
2 changes: 1 addition & 1 deletion test/package-json-files-with-slashes.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ const pkg = t.testdir({
},
})

t.test('package with negated files', async (t) => {
t.test('package with slash files', async (t) => {
const arborist = new Arborist({ path: pkg })
const tree = await arborist.loadActual()
const files = await packlist(tree)
Expand Down

0 comments on commit d5b653c

Please sign in to comment.