diff --git a/package.json b/package.json index 2536c3cb5..37587c9ec 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,6 @@ "import-meta-resolve": "4.1.0", "is-es5-identifier-name": "1.0.0", "jest-docblock": "30.0.0-alpha.7", - "js-yaml": "4.1.0", "json5": "2.2.3", "leven": "4.0.0", "linguist-languages": "7.29.0", @@ -104,6 +103,7 @@ "url-or-path": "2.6.1", "vnopts": "2.0.2", "wcwidth.js": "2.0.0", + "yaml": "1.10.2", "yaml-unist-parser": "2.0.5" }, "devDependencies": { diff --git a/scripts/build/build-javascript-module.js b/scripts/build/build-javascript-module.js index 876dec206..8ac8a1272 100644 --- a/scripts/build/build-javascript-module.js +++ b/scripts/build/build-javascript-module.js @@ -202,6 +202,16 @@ function getEsbuildOptions({ packageConfig, file, cliOptions }) { ); } + // Current version of `yaml` is not tree-shakable, + // but when we update it, we may reduce size, + // since the UMD version don't need expose `__parsePrettierYamlConfig` + if (file.output.format === "umd" && file.output.file === "plugins/yaml.js") { + replaceModule.push({ + module: path.join(PROJECT_ROOT, file.input), + text: 'export * from "../language-yaml/index.js";', + }); + } + const { buildOptions } = file; const shouldMinify = cliOptions.minify ?? buildOptions.minify ?? file.platform === "universal"; diff --git a/scripts/build/config.js b/scripts/build/config.js index ddcb30699..882336798 100644 --- a/scripts/build/config.js +++ b/scripts/build/config.js @@ -761,11 +761,6 @@ const nodejsFiles = [ find: "const readBuffer = new Buffer(this.options.readChunk);", replacement: "const readBuffer = Buffer.alloc(this.options.readChunk);", }, - { - module: getPackageFile("js-yaml/dist/js-yaml.mjs"), - find: "var dump = dumper.dump;", - replacement: "var dump;", - }, // `parse-json` use another copy of `@babel/code-frame` { module: require.resolve("@babel/code-frame", { diff --git a/src/config/prettier-config/loaders.js b/src/config/prettier-config/loaders.js index 22f165bda..48a29d33e 100644 --- a/src/config/prettier-config/loaders.js +++ b/src/config/prettier-config/loaders.js @@ -1,5 +1,4 @@ import { pathToFileURL } from "node:url"; -import { load as parseYaml } from "js-yaml"; import json5 from "json5"; import parseJson from "parse-json"; import { parse as parseToml } from "smol-toml"; @@ -53,8 +52,16 @@ async function loadConfigFromPackageYaml(file) { return prettier; } +let parseYaml; async function loadYaml(file) { const content = await readFile(file); + + if (!parseYaml) { + ({ __parsePrettierYamlConfig: parseYaml } = await import( + "../../plugins/yaml.js" + )); + } + try { return parseYaml(content); } catch (/** @type {any} */ error) { diff --git a/src/plugins/yaml.js b/src/plugins/yaml.js index 1cd45dd48..2692f68a8 100644 --- a/src/plugins/yaml.js +++ b/src/plugins/yaml.js @@ -1 +1,11 @@ +/* +Be careful when changing this file, +when bundle UMD version +build script will change the file content +to remove the `__parsePrettierYamlConfig` export. +*/ export * from "../language-yaml/index.js"; + +// Exposed to parser prettier yaml config +import YAML from "yaml"; +export const __parsePrettierYamlConfig = YAML.parse; diff --git a/tests/integration/__tests__/config-invalid.js b/tests/integration/__tests__/config-invalid.js index c198f2d37..316f9314a 100644 --- a/tests/integration/__tests__/config-invalid.js +++ b/tests/integration/__tests__/config-invalid.js @@ -149,18 +149,13 @@ describe("Invalid yaml file", () => { stdout: "", write: [], stderr: expect.stringContaining( - /* cSpell:disable */ + // Keep the outdent, since error message changes between versions outdent` - end of the stream or a document separator is expected (2:1) - - 1 | a - 2 | -b - -----^ + Map keys must be unique; "a" is repeated ` .split("\n") .map((line) => `[error] ${line}`) .join("\n"), - /* cSpell:enable */ ), }); }); diff --git a/tests/integration/cli/config/invalid/broken-yaml/.prettierrc.yaml b/tests/integration/cli/config/invalid/broken-yaml/.prettierrc.yaml index 3c72356ec..341bbd84a 100644 --- a/tests/integration/cli/config/invalid/broken-yaml/.prettierrc.yaml +++ b/tests/integration/cli/config/invalid/broken-yaml/.prettierrc.yaml @@ -1,2 +1,2 @@ - a --b +a: +a: diff --git a/yarn.lock b/yarn.lock index 0ca111b9a..e8bbc94e4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5905,17 +5905,6 @@ __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: "npm:^2.0.1" - bin: - js-yaml: bin/js-yaml.js - checksum: 10/c138a34a3fd0d08ebaf71273ad4465569a483b8a639e0b118ff65698d257c2791d3199e3f303631f2cb98213fa7b5f5d6a4621fd0fff819421b990d30d967140 - languageName: node - linkType: hard - "js-yaml@npm:^3.13.1": version: 3.14.1 resolution: "js-yaml@npm:3.14.1" @@ -5928,6 +5917,17 @@ __metadata: languageName: node linkType: hard +"js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: "npm:^2.0.1" + bin: + js-yaml: bin/js-yaml.js + checksum: 10/c138a34a3fd0d08ebaf71273ad4465569a483b8a639e0b118ff65698d257c2791d3199e3f303631f2cb98213fa7b5f5d6a4621fd0fff819421b990d30d967140 + languageName: node + linkType: hard + "jsbn@npm:1.1.0": version: 1.1.0 resolution: "jsbn@npm:1.1.0" @@ -7050,7 +7050,6 @@ __metadata: jest-snapshot-serializer-ansi: "npm:2.2.1" jest-snapshot-serializer-raw: "npm:2.0.0" jest-watch-typeahead: "npm:2.2.2" - js-yaml: "npm:4.1.0" json5: "npm:2.2.3" knip: "npm:5.50.5" leven: "npm:4.0.0" @@ -7098,6 +7097,7 @@ __metadata: url-or-path: "npm:2.6.1" vnopts: "npm:2.0.2" wcwidth.js: "npm:2.0.0" + yaml: "npm:1.10.2" yaml-unist-parser: "npm:2.0.5" bin: prettier: ./bin/prettier.cjs @@ -8755,7 +8755,7 @@ __metadata: languageName: node linkType: hard -"yaml@npm:^1.10.2": +"yaml@npm:1.10.2, yaml@npm:^1.10.2": version: 1.10.2 resolution: "yaml@npm:1.10.2" checksum: 10/e088b37b4d4885b70b50c9fa1b7e54bd2e27f5c87205f9deaffd1fb293ab263d9c964feadb9817a7b129a5bf30a06582cb08750f810568ecc14f3cdbabb79cb3