Replace cosmiconfig with lilconfig (#15232)

This commit is contained in:
fisker Cheung authored and GitHub committed 2023-09-02 01:02:22 +08:00
1 parent 6184a1ed42
commit 0d04d78367
13 files changed
+118 -83

No files matched your search

+2 -1
View File
@@ -181,6 +181,7 @@
"l’objectif",
"lcov",
"libdef",
"lilconfig",
"linearize",
"linebreak",
"linebreaks",
@@ -342,8 +343,8 @@
"typecasted",
"typecheck",
"typeof",
"Uchino",
"Ubie",
"Uchino",
"Umidbek",
"unaries",
"uncook",
+1 -1
View File
@@ -66,7 +66,7 @@ If `options.editorconfig` is `true` and an [`.editorconfig` file](https://editor
The promise will be rejected if there was an error parsing the configuration file.
The search starts at `process.cwd()`, or at `filePath` if provided. Please see the [cosmiconfig docs](https://github.com/davidtheclark/cosmiconfig#explorersearch) for details on how the resolving works.
The search starts at `process.cwd()`, or at `filePath` if provided. Please see the [lilconfig docs](https://github.com/antonk52/lilconfig) for details on how the resolving works.
```js
const configFile = await prettier.resolveConfigFile(filePath);
+1 -1
View File
@@ -3,7 +3,7 @@ id: configuration
title: Configuration File
---
Prettier uses [cosmiconfig](https://github.com/davidtheclark/cosmiconfig) for configuration file support. This means you can configure Prettier via (in order of precedence):
Prettier uses [lilconfig](https://github.com/antonk52/lilconfig) for configuration file support. This means you can configure Prettier via (in order of precedence):
- A `"prettier"` key in your `package.json` file.
- A `.prettierrc` file written in JSON or YAML.
+3 -1
View File
@@ -49,7 +49,6 @@
"ci-info": "3.8.0",
"cjk-regex": "3.0.0",
"collapse-white-space": "1.0.6",
"cosmiconfig": "8.2.0",
"css-units-list": "2.0.1",
"dashify": "2.0.0",
"diff": "5.1.0",
@@ -74,8 +73,10 @@
"ignore": "5.2.4",
"import-meta-resolve": "3.0.0",
"jest-docblock": "29.6.3",
"js-yaml": "4.1.0",
"json5": "2.2.3",
"leven": "4.0.0",
"lilconfig": "2.1.0",
"lines-and-columns": "2.0.3",
"linguist-languages": "7.26.1",
"mem": "9.0.2",
@@ -84,6 +85,7 @@
"minimist": "1.2.8",
"n-readlines": "1.0.1",
"outdent": "0.8.0",
"parse-json": "7.0.0",
"please-upgrade-node": "3.2.0",
"postcss": "8.4.28",
"postcss-less": "6.0.0",
+7 -12
View File
@@ -554,6 +554,10 @@ const nodejsFiles = [
paths: [require.resolve("@babel/code-frame")],
}),
},
{
module: getPackageFile("js-yaml/dist/js-yaml.mjs"),
path: getPackageFile("js-yaml/lib/loader.js"),
},
],
addDefaultExport: true,
},
@@ -582,19 +586,10 @@ const nodejsFiles = [
input: "src/common/mockable.js",
outputBaseName: "internal/internal",
replaceModule: [
// cosmiconfig@6 -> import-fresh can't find parentModule, since module is bundled
{
module: require.resolve("parent-module"),
path: path.join(dirname, "./shims/parent-module.cjs"),
},
// `@babel/code-frame` and `@babel/highlight` use compatible `chalk`, but they installed separately
{
module: require.resolve("chalk", {
paths: [require.resolve("@babel/highlight")],
}),
path: require.resolve("chalk", {
paths: [require.resolve("@babel/code-frame")],
}),
module: require.resolve("lilconfig"),
find: "exports.lilconfigSync = lilconfigSync;",
replacement: "",
},
],
},
-5
View File
@@ -1,5 +0,0 @@
"use strict";
const parentModule = (file) => file;
module.exports = parentModule;
+2 -2
View File
@@ -1,5 +1,5 @@
import fs from "node:fs/promises";
import { cosmiconfig } from "cosmiconfig";
import { lilconfig } from "lilconfig";
import { sync as findParentDir } from "find-parent-dir";
import getStdin from "get-stdin";
import { isCI } from "ci-info";
@@ -9,7 +9,7 @@ function writeFormattedFile(file, data) {
}
const mockable = {
cosmiconfig,
lilconfig,
findParentDir,
getStdin,
isCI: () => isCI,
+34 -10
View File
@@ -1,9 +1,12 @@
import { pathToFileURL } from "node:url";
import parseToml from "@iarna/toml/parse-async.js";
import parseJson5 from "json5/lib/parse.js";
import yaml from "js-yaml";
import parseJson from "parse-json";
import mockable from "../common/mockable.js";
import loadExternalConfig from "./load-external-config.js";
const { cosmiconfig } = mockable;
const { lilconfig } = mockable;
const searchPlaces = [
"package.json",
@@ -21,6 +24,20 @@ const searchPlaces = [
".prettierrc.toml",
];
async function loadJs(filepath /*, content*/) {
const module = await import(pathToFileURL(filepath).href);
return module.default;
}
function loadYaml(filepath, content) {
try {
return yaml.load(content);
} catch (/** @type {any} */ error) {
error.message = `YAML Error in ${filepath}:\n${error.message}`;
throw error;
}
}
const loaders = {
async ".toml"(filePath, content) {
try {
@@ -38,6 +55,19 @@ const loaders = {
throw error;
}
},
".json"(filePath, content) {
try {
return parseJson(content);
} catch (/** @type {any} */ error) {
error.message = `JSON Error in ${filePath}:\n${error.message}`;
throw error;
}
},
".js": loadJs,
".mjs": loadJs,
".yaml": loadYaml,
".yml": loadYaml,
noExt: loadYaml,
};
async function transform(result) {
@@ -73,16 +103,10 @@ async function transform(result) {
}
/**
* @param {{cache: boolean }} options
* @return {ReturnType<import("cosmiconfig").cosmiconfig>}
* @return {ReturnType<import("lilconfig").lilconfig>}
*/
function getExplorer(options) {
return cosmiconfig("prettier", {
cache: options.cache,
transform,
searchPlaces,
loaders,
});
function getExplorer() {
return lilconfig("prettier", { searchPlaces, loaders, transform });
}
export default getExplorer;
+4 -2
View File
@@ -29,7 +29,9 @@ function loadPrettierConfig(filePath, options) {
const { load, search } = getPrettierConfigExplorer({
cache: Boolean(useCache),
});
return configPath ? load(configPath) : search(filePath);
return configPath
? load(configPath)
: search(filePath ? path.resolve(filePath) : undefined);
}
async function resolveConfig(filePath, options) {
@@ -62,7 +64,7 @@ async function resolveConfig(filePath, options) {
async function resolveConfigFile(filePath) {
const { search } = getPrettierConfigExplorer({ cache: false });
const result = await search(filePath);
const result = await search(filePath ? path.resolve(filePath) : undefined);
return result ? result.filepath : null;
}
@@ -281,7 +281,7 @@ test(".js config file", async () => {
await expect(prettier.resolveConfig(file)).resolves.toMatchObject(config);
}
const cjsError = /require\(\) of ES (?:Module|module)/;
const cjsError = /module is not defined in ES module scope/;
for (const directoryName of [
"cjs-prettier-config-js-in-type-module",
"cjs-prettierrc-js-in-type-module",
+5 -6
View File
@@ -6,12 +6,12 @@ import { mockable } from "../env.js";
const { __dirname } = createEsmUtils(import.meta);
// This don't has to be the same result as `prettier.resolveConfig`,
// Because we are testing with default `cosmiconfigOptions`
describe("cosmiconfig", () => {
let cosmiconfig;
// Because we are testing with default `lilconfigOptions`
describe("lilconfig", () => {
let lilconfig;
beforeAll(async () => {
({
default: { cosmiconfig },
default: { lilconfig },
} = await import(pathToFileURL(mockable)));
});
@@ -45,8 +45,7 @@ describe("cosmiconfig", () => {
for (const { title, dirname, file, value } of configs) {
test(`async version ${title}`, async () => {
const { config, filepath } =
await cosmiconfig("prettier").search(dirname);
const { config, filepath } = await lilconfig("prettier").search(dirname);
expect(config).toEqual(value);
expect(filepath).toBe(file);
});
+3 -3
View File
@@ -3,7 +3,7 @@ import fs from "node:fs";
import path from "node:path";
import url from "node:url";
import readline from "node:readline";
import { cosmiconfig } from "cosmiconfig";
import { lilconfig } from "lilconfig";
import { prettierCli, mockable as mockableModuleFile } from "./env.js";
const normalizeToPosix =
@@ -66,8 +66,8 @@ async function run() {
// eslint-disable-next-line require-await
mockable.getStdin = async () => options.input || "";
mockable.isCI = () => Boolean(options.ci);
mockable.cosmiconfig = (moduleName, options) =>
cosmiconfig(moduleName, {
mockable.lilconfig = (moduleName, options) =>
lilconfig(moduleName, {
...options,
stopDir: url.fileURLToPath(new URL("./cli", import.meta.url)),
});
+55 -38
View File
@@ -52,7 +52,7 @@ __metadata:
languageName: node
linkType: hard
"@babel/code-frame@npm:7.22.10, @babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.22.5":
"@babel/code-frame@npm:7.22.10, @babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.21.4, @babel/code-frame@npm:^7.22.5":
version: 7.22.10
resolution: "@babel/code-frame@npm:7.22.10"
dependencies:
@@ -592,9 +592,9 @@ __metadata:
linkType: hard
"@cspell/dict-css@npm:^4.0.6":
version: 4.0.6
resolution: "@cspell/dict-css@npm:4.0.6"
checksum: fc816014e4dfd78d4a00cd311c8f96657d899e10767766cdcdfbaf61beac8dd4d23e903dc40b679f31da7df03e7d4eb593a81810c50eeddbbb190b0d605160f0
version: 4.0.7
resolution: "@cspell/dict-css@npm:4.0.7"
checksum: 17a628450665f77a7b87edf98d12aa9f406b6805ca4a7e25ff1a9a58e9a0ae190583fd030b8143af5964f85dabfd1d510021f9072c2bbd478b547ac419689451
languageName: node
linkType: hard
@@ -2915,18 +2915,6 @@ __metadata:
languageName: node
linkType: hard
"cosmiconfig@npm:8.2.0":
version: 8.2.0
resolution: "cosmiconfig@npm:8.2.0"
dependencies:
import-fresh: ^3.2.1
js-yaml: ^4.1.0
parse-json: ^5.0.0
path-type: ^4.0.0
checksum: 836d5d8efa750f3fb17b03d6ca74cd3154ed025dffd045304b3ef59637f662bde1e5dc88f8830080d180ec60841719cf4ea2ce73fb21ec694b16865c478ff297
languageName: node
linkType: hard
"cross-env@npm:7.0.3":
version: 7.0.3
resolution: "cross-env@npm:7.0.3"
@@ -3351,7 +3339,7 @@ __metadata:
languageName: node
linkType: hard
"error-ex@npm:^1.3.1":
"error-ex@npm:^1.3.1, error-ex@npm:^1.3.2":
version: 1.3.2
resolution: "error-ex@npm:1.3.2"
dependencies:
@@ -3360,7 +3348,7 @@ __metadata:
languageName: node
linkType: hard
"es-abstract@npm:^1.19.0, es-abstract@npm:^1.20.4, es-abstract@npm:^1.21.2, es-abstract@npm:^1.21.3":
"es-abstract@npm:^1.19.0, es-abstract@npm:^1.20.4, es-abstract@npm:^1.21.2, es-abstract@npm:^1.22.1":
version: 1.22.1
resolution: "es-abstract@npm:1.22.1"
dependencies:
@@ -3408,13 +3396,13 @@ __metadata:
linkType: hard
"es-iterator-helpers@npm:^1.0.12":
version: 1.0.13
resolution: "es-iterator-helpers@npm:1.0.13"
version: 1.0.14
resolution: "es-iterator-helpers@npm:1.0.14"
dependencies:
asynciterator.prototype: ^1.0.0
call-bind: ^1.0.2
define-properties: ^1.2.0
es-abstract: ^1.21.3
es-abstract: ^1.22.1
es-set-tostringtag: ^2.0.1
function-bind: ^1.1.1
get-intrinsic: ^1.2.1
@@ -3425,7 +3413,7 @@ __metadata:
internal-slot: ^1.0.5
iterator.prototype: ^1.1.0
safe-array-concat: ^1.0.0
checksum: 1b08ae7388439121fee1129cb23497abd7bf23dd440f7fa44d119c9f92f38f9b7d75b7d98453fcd15948a7eb58abb2a48c673c7250d2e15871abe3641f567ed7
checksum: 484ca398389d5e259855e2d848573233985a7e7a4126c5de62c8a554174495aea47320ae1d2b55b757ece62ac1cb8455532aa61fd123fe4e01d0567eb2d7adfa
languageName: node
linkType: hard
@@ -5799,6 +5787,17 @@ __metadata:
languageName: node
linkType: hard
"js-yaml@npm:4.1.0, js-yaml@npm:^4.1.0":
version: 4.1.0
resolution: "js-yaml@npm:4.1.0"
dependencies:
argparse: ^2.0.1
bin:
js-yaml: bin/js-yaml.js
checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a
languageName: node
linkType: hard
"js-yaml@npm:^3.13.1":
version: 3.14.1
resolution: "js-yaml@npm:3.14.1"
@@ -5811,17 +5810,6 @@ __metadata:
languageName: node
linkType: hard
"js-yaml@npm:^4.1.0":
version: 4.1.0
resolution: "js-yaml@npm:4.1.0"
dependencies:
argparse: ^2.0.1
bin:
js-yaml: bin/js-yaml.js
checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a
languageName: node
linkType: hard
"jsdoctypeparser@npm:^9.0.0":
version: 9.0.0
resolution: "jsdoctypeparser@npm:9.0.0"
@@ -5879,6 +5867,13 @@ __metadata:
languageName: node
linkType: hard
"json-parse-even-better-errors@npm:^3.0.0":
version: 3.0.0
resolution: "json-parse-even-better-errors@npm:3.0.0"
checksum: f1970b5220c7fa23d888565510752c3d5e863f93668a202fcaa719739fa41485dfc6a1db212f702ebd3c873851cc067aebc2917e3f79763cae2fdb95046f38f3
languageName: node
linkType: hard
"json-schema-traverse@npm:^0.4.1":
version: 0.4.1
resolution: "json-schema-traverse@npm:0.4.1"
@@ -5965,6 +5960,13 @@ __metadata:
languageName: node
linkType: hard
"lilconfig@npm:2.1.0":
version: 2.1.0
resolution: "lilconfig@npm:2.1.0"
checksum: 8549bb352b8192375fed4a74694cd61ad293904eee33f9d4866c2192865c44c4eb35d10782966242634e0cbc1e91fe62b1247f148dc5514918e3a966da7ea117
languageName: node
linkType: hard
"lines-and-columns@npm:2.0.3, lines-and-columns@npm:^2.0.3":
version: 2.0.3
resolution: "lines-and-columns@npm:2.0.3"
@@ -6857,6 +6859,19 @@ __metadata:
languageName: node
linkType: hard
"parse-json@npm:7.0.0":
version: 7.0.0
resolution: "parse-json@npm:7.0.0"
dependencies:
"@babel/code-frame": ^7.21.4
error-ex: ^1.3.2
json-parse-even-better-errors: ^3.0.0
lines-and-columns: ^2.0.3
type-fest: ^3.8.0
checksum: de6c756f65af568439a7ac87c830e5a8b98bd25160a8832872183588a139f9c8fd8bab96c8bc49788f5a957a59d8de7b5a3fa8a01027248b3079433f81dd5590
languageName: node
linkType: hard
"parse-json@npm:^4.0.0":
version: 4.0.0
resolution: "parse-json@npm:4.0.0"
@@ -7161,7 +7176,6 @@ __metadata:
ci-info: 3.8.0
cjk-regex: 3.0.0
collapse-white-space: 1.0.6
cosmiconfig: 8.2.0
cross-env: 7.0.3
cspell: 7.0.1
css-units-list: 2.0.1
@@ -7210,8 +7224,10 @@ __metadata:
jest-snapshot-serializer-ansi: 2.1.0
jest-snapshot-serializer-raw: 2.0.0
jest-watch-typeahead: 2.2.2
js-yaml: 4.1.0
json5: 2.2.3
leven: 4.0.0
lilconfig: 2.1.0
lines-and-columns: 2.0.3
linguist-languages: 7.26.1
magic-string: 0.30.3
@@ -7222,6 +7238,7 @@ __metadata:
n-readlines: 1.0.1
npm-run-all: 4.1.5
outdent: 0.8.0
parse-json: 7.0.0
path-browserify: 1.0.1
please-upgrade-node: 3.2.0
postcss: 8.4.28
@@ -8497,10 +8514,10 @@ __metadata:
languageName: node
linkType: hard
"type-fest@npm:^3.0.0":
version: 3.12.0
resolution: "type-fest@npm:3.12.0"
checksum: 11cb6f40e42f92c462a13677eafedf5c48353eaefa8e489a146e55fe0ae5cecd59a2ba03cd6b294345b5ea304361891a6313c23ed959fa0117f63fb71ee6cbab
"type-fest@npm:^3.0.0, type-fest@npm:^3.8.0":
version: 3.13.1
resolution: "type-fest@npm:3.13.1"
checksum: c06b0901d54391dc46de3802375f5579868949d71f93b425ce564e19a428a0d411ae8d8cb0e300d330071d86152c3ea86e744c3f2860a42a79585b6ec2fdae8e
languageName: node
linkType: hard