From 2d43f48eeb8c57f37e1ff4506d9c484e13c2f576 Mon Sep 17 00:00:00 2001 From: Sebastian Good <2230835+scagood@users.noreply.github.com> Date: Tue, 10 Oct 2023 05:11:53 +0200 Subject: [PATCH] fix: Normalise `package.json#files` before checking ignores and whitelist (#123) (fixes #122) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 唯然 --- lib/util/get-npmignore.js | 6 ++++-- tests/fixtures/no-unpublished/issue99/bin.js | 1 + tests/fixtures/no-unpublished/issue99/index.js | 0 tests/fixtures/no-unpublished/issue99/package.json | 8 ++++++++ tests/lib/rules/no-unpublished-require.js | 13 +++++++++++++ 5 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 tests/fixtures/no-unpublished/issue99/bin.js create mode 100644 tests/fixtures/no-unpublished/issue99/index.js create mode 100644 tests/fixtures/no-unpublished/issue99/package.json diff --git a/lib/util/get-npmignore.js b/lib/util/get-npmignore.js index a8180750..605316b7 100644 --- a/lib/util/get-npmignore.js +++ b/lib/util/get-npmignore.js @@ -12,7 +12,6 @@ const exists = require("./exists") const getPackageJson = require("./get-package-json") const cache = new Cache() -const SLASH_AT_BEGIN_AND_END = /^!?\/+|^!|\/+$/gu const PARENT_RELATIVE_PATH = /^\.\./u const NEVER_IGNORED = /^(?:readme\.[^.]*|(?:licen[cs]e|changes|changelog|history)(?:\.[^.]*)?)$/iu @@ -90,7 +89,10 @@ function parseWhiteList(files) { for (const file of files) { if (typeof file === "string" && file) { - const body = file.replace(SLASH_AT_BEGIN_AND_END, "") + const body = path.posix + .normalize(file.replace(/^!/u, "")) + .replace(/\/+$/u, "") + if (file.startsWith("!")) { igN.add(`${body}`) igN.add(`${body}/**`) diff --git a/tests/fixtures/no-unpublished/issue99/bin.js b/tests/fixtures/no-unpublished/issue99/bin.js new file mode 100644 index 00000000..908ba841 --- /dev/null +++ b/tests/fixtures/no-unpublished/issue99/bin.js @@ -0,0 +1 @@ +#!/usr/bin/env node diff --git a/tests/fixtures/no-unpublished/issue99/index.js b/tests/fixtures/no-unpublished/issue99/index.js new file mode 100644 index 00000000..e69de29b diff --git a/tests/fixtures/no-unpublished/issue99/package.json b/tests/fixtures/no-unpublished/issue99/package.json new file mode 100644 index 00000000..2d285a1b --- /dev/null +++ b/tests/fixtures/no-unpublished/issue99/package.json @@ -0,0 +1,8 @@ +{ + "bin": "./bin.js", + "exports": "./index.js", + "files": [ + "./index.js", + "bin.js" + ] +} diff --git a/tests/lib/rules/no-unpublished-require.js b/tests/lib/rules/no-unpublished-require.js index 809f3261..da3e0e1e 100644 --- a/tests/lib/rules/no-unpublished-require.js +++ b/tests/lib/rules/no-unpublished-require.js @@ -240,6 +240,19 @@ ruleTester.run("no-unpublished-require", rule, { env: { node: true }, }, + // https://github.com/eslint-community/eslint-plugin-n/issues/122 + // Allow files to start with './' in package.json#files + { + filename: fixture("issue99/test/bin.js"), + code: "require('./index.js');", + env: { node: true }, + }, + { + filename: fixture("issue99/test/bin.js"), + code: "require('.');", + env: { node: true }, + }, + // allowModules option { filename: fixture("1/test.js"),