diff --git a/lib/util/get-npmignore.js b/lib/util/get-npmignore.js index d19a8f4e..fd06f07a 100644 --- a/lib/util/get-npmignore.js +++ b/lib/util/get-npmignore.js @@ -84,17 +84,26 @@ function parseWhiteList(files) { } const ig = ignore() + const igN = ignore() + let hasN = false for (const file of files) { if (typeof file === "string" && file) { - const prefix = file.startsWith("!") ? "!" : "" const body = file.replace(SLASH_AT_BEGIN_AND_END, "") - ig.add(`${prefix}/${body}`) - ig.add(`${prefix}/${body}/**`) + if (file.startsWith("!")) { + igN.add(`${body}`) + igN.add(`${body}/**`) + hasN = true + } else { + ig.add(`/${body}`) + ig.add(`/${body}/**`) + } } } - return ig.createFilter() + return hasN + ? or(ig.createFilter(), not(igN.createFilter())) + : ig.createFilter() } /** diff --git a/tests/fixtures/no-unpublished/issue126/package.json b/tests/fixtures/no-unpublished/issue126/package.json new file mode 100644 index 00000000..85a25a9d --- /dev/null +++ b/tests/fixtures/no-unpublished/issue126/package.json @@ -0,0 +1,12 @@ +{ + "private": true, + "name": "test", + "version": "0.0.0", + "files": [ + "lib", + "!test.js" + ], + "devDependencies": { + "bbb": "0.0.0" + } +} diff --git a/tests/lib/rules/no-unpublished-require.js b/tests/lib/rules/no-unpublished-require.js index 854bc39f..c3a86134 100644 --- a/tests/lib/rules/no-unpublished-require.js +++ b/tests/lib/rules/no-unpublished-require.js @@ -240,10 +240,15 @@ ruleTester.run("no-unpublished-require", rule, { // Negative patterns in files field. { - code: "require('bbb');", + code: "require('bbb'); //XXX", filename: fixture("negative-in-files/lib/__test__/index.js"), env: { node: true }, }, + { + code: "require('bbb'); //XXX", + filename: fixture("issue126/lib/test.js"), + env: { node: true }, + }, ], invalid: [ {