From 1571913aa1dd5e2eba2b3892e16a60d6197f02eb Mon Sep 17 00:00:00 2001 From: Greg Walker Date: Thu, 6 May 2021 14:55:00 -0500 Subject: [PATCH] [utils] [new] create internal replacement for `pkg-up` and `read-pkg-up` --- utils/CHANGELOG.md | 8 ++++--- utils/package.json | 1 + utils/pkgUp.js | 8 +++++++ utils/readPkgUp.js | 52 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 utils/pkgUp.js create mode 100644 utils/readPkgUp.js diff --git a/utils/CHANGELOG.md b/utils/CHANGELOG.md index 241a205b4..7d08f1963 100644 --- a/utils/CHANGELOG.md +++ b/utils/CHANGELOG.md @@ -8,6 +8,7 @@ This change log adheres to standards from [Keep a CHANGELOG](http://keepachangel ### Added - `fileExistsWithCaseSync`: add `strict` argument ([#1262], thanks [@sergei-startsev]) - add `visit`, to support dynamic imports ([#1660], [#2212], thanks [@maxkomarychev], [@aladdin-add], [@Hypnosphi]) +- create internal replacement for `pkg-up` and `read-pkg-up` ([#2047], [@mgwalker]) ## v2.6.2 - 2021-08-08 @@ -96,6 +97,7 @@ Yanked due to critical issue with cache key resulting from #839. [#2212]: https://github.com/import-js/eslint-plugin-import/pull/2212 [#2160]: https://github.com/import-js/eslint-plugin-import/pull/2160 +[#2047]: https://github.com/import-js/eslint-plugin-import/pull/2047 [#2026]: https://github.com/import-js/eslint-plugin-import/pull/2026 [#1786]: https://github.com/import-js/eslint-plugin-import/pull/1786 [#1671]: https://github.com/import-js/eslint-plugin-import/pull/1671 @@ -121,15 +123,15 @@ Yanked due to critical issue with cache key resulting from #839. [@brettz9]: https://github.com/brettz9 [@christophercurrie]: https://github.com/christophercurrie [@hulkish]: https://github.com/hulkish +[@Hypnosphi]: https://github.com/Hypnosphi [@iamnapo]: https://github.com/iamnapo [@JounQin]: https://github.com/JounQin [@kaiyoma]: https://github.com/kaiyoma [@manuth]: https://github.com/manuth +[@maxkomarychev]: https://github.com/maxkomarychev +[@mgwalker]: https://github.com/mgwalker [@pmcelhaney]: https://github.com/pmcelhaney [@sergei-startsev]: https://github.com/sergei-startsev [@sompylasar]: https://github.com/sompylasar [@timkraut]: https://github.com/timkraut [@vikr01]: https://github.com/vikr01 -[@maxkomarychev]: https://github.com/maxkomarychev -[@aladdin-add]: https://github.com/aladdin-add -[@Hypnosphi]: https://github.com/Hypnosphi \ No newline at end of file diff --git a/utils/package.json b/utils/package.json index f726b7958..787ce83a7 100644 --- a/utils/package.json +++ b/utils/package.json @@ -27,6 +27,7 @@ "homepage": "https://github.com/import-js/eslint-plugin-import#readme", "dependencies": { "debug": "^3.2.7", + "find-up": "^2.1.0", "pkg-dir": "^2.0.0" } } diff --git a/utils/pkgUp.js b/utils/pkgUp.js new file mode 100644 index 000000000..f73e3f7b2 --- /dev/null +++ b/utils/pkgUp.js @@ -0,0 +1,8 @@ +'use strict'; +exports.__esModule = true; + +const findUp = require('find-up'); + +exports.default = function pkgUp(opts) { + return findUp.sync('package.json', opts); +}; diff --git a/utils/readPkgUp.js b/utils/readPkgUp.js new file mode 100644 index 000000000..245afde68 --- /dev/null +++ b/utils/readPkgUp.js @@ -0,0 +1,52 @@ +'use strict'; +exports.__esModule = true; + +const fs = require('fs'); +const pkgUp = require('./pkgUp').default; + +function stripBOM(str) { + return str.replace(/^\uFEFF/, ''); +} + +/** + * Derived significantly from read-pkg-up@2.0.0. See license below. + * + * @copyright Sindre Sorhus + * MIT License + * + * Copyright (c) Sindre Sorhus (https://sindresorhus.com) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +exports.default = function readPkgUp(opts) { + const fp = pkgUp(opts.cwd); + + if (!fp) { + return {}; + } + + try { + return { + pkg: JSON.parse(stripBOM(fs.readFileSync(fp, { encoding: 'utf-8' }))), + path: fp, + }; + } catch (e) { + return {}; + } +};