From 6fac964b4085ef2cb5f6cc3e6cb75d7903bb7cde Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Sat, 22 Nov 2025 12:23:00 +0800 Subject: [PATCH] Preserve explicit YAML document end marker (#18296) --- changelog_unreleased/yaml/18296.md | 33 +++ package.json | 1 + scripts/generate-changelog.js | 27 +- src/language-yaml/clean.js | 10 +- src/language-yaml/printer-yaml.js | 28 +- .../__snapshots__/format.test.js.snap | 88 +++++++ .../yaml/block-folded/block-folded-keep.yml | 5 + .../yaml/block-folded/block-folded-strip.yml | 5 + .../__snapshots__/format.test.js.snap | 45 +++- tests/format/yaml/document/end-mark-2.yml | 5 + tests/format/yaml/document/end-mark.yml | 4 + .../__snapshots__/format.test.js.snap | 2 +- .../root/__snapshots__/format.test.js.snap | 1 + .../spec/__snapshots__/format.test.js.snap | 34 ++- yarn.lock | 244 +++++++++++++++++- 15 files changed, 497 insertions(+), 35 deletions(-) create mode 100644 changelog_unreleased/yaml/18296.md create mode 100644 tests/format/yaml/block-folded/block-folded-keep.yml create mode 100644 tests/format/yaml/block-folded/block-folded-strip.yml create mode 100644 tests/format/yaml/document/end-mark-2.yml create mode 100644 tests/format/yaml/document/end-mark.yml diff --git a/changelog_unreleased/yaml/18296.md b/changelog_unreleased/yaml/18296.md new file mode 100644 index 000000000..e3c252997 --- /dev/null +++ b/changelog_unreleased/yaml/18296.md @@ -0,0 +1,33 @@ +#### Preserve explicit document end marker (#18296 by @fisker) + + +```yaml +# Input +a: a +--- +b: b +... +c: c +... +--- +d: d + +# Prettier stable +a: a +--- +b: b +--- +c: c +--- +d: d + +# Prettier main +a: a +--- +b: b +... +c: c +... +--- +d: d +``` diff --git a/package.json b/package.json index 01672aa5d..915882ad9 100644 --- a/package.json +++ b/package.json @@ -163,6 +163,7 @@ "nano-spawn": "2.0.0", "node-style-text": "2.1.2", "npm-run-all2": "8.0.4", + "open-editor": "5.1.0", "prettier": "3.6.2", "pretty-bytes": "7.1.0", "pretty-ms": "9.3.0", diff --git a/scripts/generate-changelog.js b/scripts/generate-changelog.js index f2912f246..8fdbda152 100755 --- a/scripts/generate-changelog.js +++ b/scripts/generate-changelog.js @@ -10,7 +10,9 @@ */ import fs from "node:fs/promises"; +import url from "node:url"; import enquirer from "enquirer"; +import openEditor from "open-editor"; import { CHANGELOG_CATEGORIES } from "./utils/changelog-categories.js"; const prNumberPrompt = new enquirer.NumberPrompt({ @@ -43,6 +45,19 @@ const relativePath = file.href.slice( console.log("Generated changelog file: " + relativePath); +const shouldOpenChangelog = await new enquirer.Confirm({ + message: "Open changelog file?", + initial: true, +}).run(); + +if (shouldOpenChangelog) { + try { + openEditor([url.fileURLToPath(file)]); + } catch (error) { + console.log(error); + } +} + /** * @param {number} prNumber * @returns {Promise<{ title: string; user: string }>} @@ -113,15 +128,12 @@ async function createChangelog(title, user, prNumber, category) { .replace(prNumberPart, `#${prNumber}`) .replace(userPart, `@${user}`) .replace(codeBlockPart, `\`\`\`${syntax}\n`) - .replace(inputCommentPart, getCommentForSyntax(syntax, "Input") + "\n") + .replace(inputCommentPart, generateComment(syntax, "Input") + "\n") .replace( stableCommentPart, - getCommentForSyntax(syntax, "Prettier stable") + "\n", + generateComment(syntax, "Prettier stable") + "\n", ) - .replace( - mainCommentPart, - getCommentForSyntax(syntax, "Prettier main") + "\n", - ); + .replace(mainCommentPart, generateComment(syntax, "Prettier main") + "\n"); } /** @@ -168,7 +180,7 @@ function getSyntaxFromCategory(category) { * @param {string} comment * @returns {string} */ -function getCommentForSyntax(syntax, comment) { +function generateComment(syntax, comment) { switch (syntax) { case "md": case "mdx": @@ -176,6 +188,7 @@ function getCommentForSyntax(syntax, comment) { return ``; case "sh": case "gql": + case "yaml": return `# ${comment}`; case "hbs": return `{{! ${comment} }}`; diff --git a/src/language-yaml/clean.js b/src/language-yaml/clean.js index 9e6df5684..fc614e113 100644 --- a/src/language-yaml/clean.js +++ b/src/language-yaml/clean.js @@ -13,9 +13,13 @@ function clean(original, cloned /* , parent */) { cloned.type = "quote"; break; case "document": - // We may insert explicit start/end mark - delete cloned.directivesEndMarker; - delete cloned.documentEndMarker; + // We may insert explicit marks + if (!cloned.directivesEndMarker) { + delete cloned.directivesEndMarker; + } + if (!cloned.documentEndMarker) { + delete cloned.documentEndMarker; + } break; } } diff --git a/src/language-yaml/printer-yaml.js b/src/language-yaml/printer-yaml.js index edc608133..5253eb554 100644 --- a/src/language-yaml/printer-yaml.js +++ b/src/language-yaml/printer-yaml.js @@ -149,29 +149,33 @@ function printNode(path, options, print) { const { node } = path; switch (node.type) { case "root": { + const lastDescendantNode = getLastDescendantNode(node); + const shouldPrintHardline = !( + isNode(lastDescendantNode, ["blockLiteral", "blockFolded"]) && + lastDescendantNode.chomping === "keep" + ); const parts = []; - path.each(({ node: document, next: nextDocument, isFirst }) => { + path.each(({ node: document, isFirst }) => { if (!isFirst) { parts.push(hardline); } parts.push(print()); if (shouldPrintDocumentEndMarker(path)) { - parts.push(hardline, "..."); + if (shouldPrintHardline) { + parts.push(hardline); + } + + parts.push("..."); if (hasTrailingComment(document)) { parts.push(" ", print("trailingComment")); } - } else if (nextDocument && !hasTrailingComment(nextDocument.head)) { - parts.push(hardline, "---"); } }, "children"); - const lastDescendantNode = getLastDescendantNode(node); - if ( - !isNode(lastDescendantNode, ["blockLiteral", "blockFolded"]) || - lastDescendantNode.chomping !== "keep" - ) { + if (shouldPrintHardline) { parts.push(hardline); } + return parts; } case "document": { @@ -345,6 +349,10 @@ function shouldPrintDocumentBody(document) { function shouldPrintDocumentEndMarker(path) { const document = path.node; + if (document.documentEndMarker) { + return true; + } + /** *... # trailingComment */ @@ -381,7 +389,7 @@ function shouldPrintDocumentHeadEndMarker(path) { * --- * preserve the first document head end marker */ - (path.isFirst && document.directivesEndMarker) || + document.directivesEndMarker || /** * %DIRECTIVE * --- diff --git a/tests/format/yaml/block-folded/__snapshots__/format.test.js.snap b/tests/format/yaml/block-folded/__snapshots__/format.test.js.snap index e6218a4fd..208a023ba 100644 --- a/tests/format/yaml/block-folded/__snapshots__/format.test.js.snap +++ b/tests/format/yaml/block-folded/__snapshots__/format.test.js.snap @@ -1,5 +1,93 @@ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`block-folded-keep.yml - {"proseWrap":"always"} format 1`] = ` +====================================options===================================== +parsers: ["yaml"] +printWidth: 80 +proseWrap: "always" + | printWidth +=====================================input====================================== +--- >+ + ab + + +... + +=====================================output===================================== +--- +>+ + ab + + +... +================================================================================ +`; + +exports[`block-folded-keep.yml format 1`] = ` +====================================options===================================== +parsers: ["yaml"] +printWidth: 80 + | printWidth +=====================================input====================================== +--- >+ + ab + + +... + +=====================================output===================================== +--- +>+ + ab + + +... +================================================================================ +`; + +exports[`block-folded-strip.yml - {"proseWrap":"always"} format 1`] = ` +====================================options===================================== +parsers: ["yaml"] +printWidth: 80 +proseWrap: "always" + | printWidth +=====================================input====================================== +--- >- + ab + + +... + +=====================================output===================================== +--- +>- + ab +... + +================================================================================ +`; + +exports[`block-folded-strip.yml format 1`] = ` +====================================options===================================== +parsers: ["yaml"] +printWidth: 80 + | printWidth +=====================================input====================================== +--- >- + ab + + +... + +=====================================output===================================== +--- +>- + ab +... + +================================================================================ +`; + exports[`clip.yml - {"proseWrap":"always"} format 1`] = ` ====================================options===================================== parsers: ["yaml"] diff --git a/tests/format/yaml/block-folded/block-folded-keep.yml b/tests/format/yaml/block-folded/block-folded-keep.yml new file mode 100644 index 000000000..b344c820f --- /dev/null +++ b/tests/format/yaml/block-folded/block-folded-keep.yml @@ -0,0 +1,5 @@ +--- >+ + ab + + +... diff --git a/tests/format/yaml/block-folded/block-folded-strip.yml b/tests/format/yaml/block-folded/block-folded-strip.yml new file mode 100644 index 000000000..792c58a8a --- /dev/null +++ b/tests/format/yaml/block-folded/block-folded-strip.yml @@ -0,0 +1,5 @@ +--- >- + ab + + +... diff --git a/tests/format/yaml/document/__snapshots__/format.test.js.snap b/tests/format/yaml/document/__snapshots__/format.test.js.snap index 8f362dd77..c4f2d7952 100644 --- a/tests/format/yaml/document/__snapshots__/format.test.js.snap +++ b/tests/format/yaml/document/__snapshots__/format.test.js.snap @@ -26,6 +26,48 @@ test ================================================================================ `; +exports[`end-mark.yml format 1`] = ` +====================================options===================================== +parsers: ["yaml"] +printWidth: 80 + | printWidth +=====================================input====================================== +--- +key: value +... +xxxxxxxx + +=====================================output===================================== +--- +key: value +... +xxxxxxxx + +================================================================================ +`; + +exports[`end-mark-2.yml format 1`] = ` +====================================options===================================== +parsers: ["yaml"] +printWidth: 80 + | printWidth +=====================================input====================================== +--- +key: value +... +--- +xxxxxxxx + +=====================================output===================================== +--- +key: value +... +--- +xxxxxxxx + +================================================================================ +`; + exports[`separator.yml format 1`] = ` ====================================options===================================== parsers: ["yaml"] @@ -53,10 +95,11 @@ g a --- b ---- +... c ... # d +... --- e ... diff --git a/tests/format/yaml/document/end-mark-2.yml b/tests/format/yaml/document/end-mark-2.yml new file mode 100644 index 000000000..a8a5b502b --- /dev/null +++ b/tests/format/yaml/document/end-mark-2.yml @@ -0,0 +1,5 @@ +--- +key: value +... +--- +xxxxxxxx diff --git a/tests/format/yaml/document/end-mark.yml b/tests/format/yaml/document/end-mark.yml new file mode 100644 index 000000000..ec287019d --- /dev/null +++ b/tests/format/yaml/document/end-mark.yml @@ -0,0 +1,4 @@ +--- +key: value +... +xxxxxxxx diff --git a/tests/format/yaml/prettier-ignore/__snapshots__/format.test.js.snap b/tests/format/yaml/prettier-ignore/__snapshots__/format.test.js.snap index 4d24b5515..6cc692348 100644 --- a/tests/format/yaml/prettier-ignore/__snapshots__/format.test.js.snap +++ b/tests/format/yaml/prettier-ignore/__snapshots__/format.test.js.snap @@ -19,7 +19,7 @@ aaaaa: --- aaaaa: bbbbb ---- +... aaaaa: bbbbb ================================================================================ diff --git a/tests/format/yaml/root/__snapshots__/format.test.js.snap b/tests/format/yaml/root/__snapshots__/format.test.js.snap index 3c0e3b7ec..bfdde48e3 100644 --- a/tests/format/yaml/root/__snapshots__/format.test.js.snap +++ b/tests/format/yaml/root/__snapshots__/format.test.js.snap @@ -15,6 +15,7 @@ printWidth: 80 =====================================output===================================== --- 123 +... --- 456 diff --git a/tests/format/yaml/spec/__snapshots__/format.test.js.snap b/tests/format/yaml/spec/__snapshots__/format.test.js.snap index efea79f6f..f9916e340 100644 --- a/tests/format/yaml/spec/__snapshots__/format.test.js.snap +++ b/tests/format/yaml/spec/__snapshots__/format.test.js.snap @@ -473,7 +473,7 @@ key: value =====================================output===================================== --- scalar1 ---- +... key: value ================================================================================ @@ -494,7 +494,7 @@ key: value =====================================output===================================== --- scalar1 ---- +... key: value ================================================================================ @@ -759,7 +759,7 @@ proseWrap: "always" ab - +... ================================================================================ `; @@ -782,7 +782,7 @@ useTabs: true ab - +... ================================================================================ `; @@ -802,6 +802,7 @@ proseWrap: "always" =====================================output===================================== |- ab +... ================================================================================ `; @@ -822,6 +823,7 @@ useTabs: true =====================================output===================================== |- ab +... ================================================================================ `; @@ -1104,7 +1106,6 @@ a: b a: b --- - ================================================================================ `; @@ -1124,7 +1125,6 @@ a: b a: b --- - ================================================================================ `; @@ -1140,6 +1140,7 @@ aaa: bbb =====================================output===================================== aaa: bbb +... ================================================================================ `; @@ -1156,6 +1157,7 @@ aaa: bbb =====================================output===================================== aaa: bbb +... ================================================================================ `; @@ -1653,6 +1655,7 @@ a: | cd ef +... ================================================================================ `; @@ -1679,6 +1682,7 @@ a: | cd ef +... ================================================================================ `; @@ -3148,10 +3152,12 @@ action: grand slam time: 20:03:20 player: Sammy Sosa action: strike (miss) +... --- time: 20:03:47 player: Sammy Sosa action: grand slam +... ================================================================================ `; @@ -3179,10 +3185,12 @@ action: grand slam time: 20:03:20 player: Sammy Sosa action: strike (miss) +... --- time: 20:03:47 player: Sammy Sosa action: grand slam +... ================================================================================ `; @@ -7611,9 +7619,9 @@ document =====================================output===================================== Bare document ---- +... # No document ---- +... | %!PS-Adobe-2.0 # Not the first line @@ -7638,9 +7646,9 @@ document =====================================output===================================== Bare document ---- +... # No document ---- +... | %!PS-Adobe-2.0 # Not the first line @@ -7665,8 +7673,10 @@ proseWrap: "always" =====================================output===================================== --- { matches %: 20 } +... --- # Empty +... ================================================================================ `; @@ -7691,8 +7701,10 @@ useTabs: true { ? matches % : 20 } +... --- # Empty +... ================================================================================ `; @@ -7722,6 +7734,7 @@ proseWrap: "always" %YAML1.2 --- # Empty +... ================================================================================ `; @@ -7751,6 +7764,7 @@ useTabs: true %YAML1.2 --- # Empty +... ================================================================================ `; diff --git a/yarn.lock b/yarn.lock index e556752a7..509b4d8ef 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2314,6 +2314,13 @@ __metadata: languageName: node linkType: hard +"@sec-ant/readable-stream@npm:^0.4.1": + version: 0.4.1 + resolution: "@sec-ant/readable-stream@npm:0.4.1" + checksum: 10/aac89581652ac85debe7c5303451c2ebf8bf25ca25db680e4b9b73168f6940616d9a4bbe3348981827b1159b14e2f2e6af4b7bd5735cac898c12d5c51909c102 + languageName: node + linkType: hard + "@simple-dom/interface@npm:^1.4.0": version: 1.4.0 resolution: "@simple-dom/interface@npm:1.4.0" @@ -2328,6 +2335,13 @@ __metadata: languageName: node linkType: hard +"@sindresorhus/merge-streams@npm:^4.0.0": + version: 4.0.0 + resolution: "@sindresorhus/merge-streams@npm:4.0.0" + checksum: 10/16551c787f5328c8ef05fd9831ade64369ccc992df78deb635ec6c44af217d2f1b43f8728c348cdc4e00585ff2fad6e00d8155199cbf6b154acc45fe65cbf0aa + languageName: node + linkType: hard + "@sinonjs/commons@npm:^3.0.1": version: 3.0.1 resolution: "@sinonjs/commons@npm:3.0.1" @@ -3205,6 +3219,15 @@ __metadata: languageName: node linkType: hard +"bundle-name@npm:^4.1.0": + version: 4.1.0 + resolution: "bundle-name@npm:4.1.0" + dependencies: + run-applescript: "npm:^7.0.0" + checksum: 10/1d966c8d2dbf4d9d394e53b724ac756c2414c45c01340b37743621f59cc565a435024b394ddcb62b9b335d1c9a31f4640eb648c3fec7f97ee74dc0694c9beb6c + languageName: node + linkType: hard + "c8@npm:10.1.3": version: 10.1.3 resolution: "c8@npm:10.1.3" @@ -3798,6 +3821,23 @@ __metadata: languageName: node linkType: hard +"default-browser-id@npm:^5.0.0": + version: 5.0.1 + resolution: "default-browser-id@npm:5.0.1" + checksum: 10/52c637637bcd76bfe974462a2f1dd75cb04784c2852935575760f82e1fd338e5e80d3c45a9b01fdbb1e450553a830bb163b004d2eca223c5573989f82232a072 + languageName: node + linkType: hard + +"default-browser@npm:^5.2.1": + version: 5.4.0 + resolution: "default-browser@npm:5.4.0" + dependencies: + bundle-name: "npm:^4.1.0" + default-browser-id: "npm:^5.0.0" + checksum: 10/cac0222ca5c9a3387d25337228689652ab33679a6566995c7194a75af7e554e91ec9ac92a70bfaa8e8089eae9f466ae99267bb38601282aade89b200f50a765c + languageName: node + linkType: hard + "define-lazy-prop@npm:^2.0.0": version: 2.0.0 resolution: "define-lazy-prop@npm:2.0.0" @@ -3805,6 +3845,13 @@ __metadata: languageName: node linkType: hard +"define-lazy-prop@npm:^3.0.0": + version: 3.0.0 + resolution: "define-lazy-prop@npm:3.0.0" + checksum: 10/f28421cf9ee86eecaf5f3b8fe875f13d7009c2625e97645bfff7a2a49aca678270b86c39f9c32939e5ca7ab96b551377ed4139558c795e076774287ad3af1aa4 + languageName: node + linkType: hard + "deno-path-from-file-url@npm:0.0.4": version: 0.0.4 resolution: "deno-path-from-file-url@npm:0.0.4" @@ -3918,6 +3965,13 @@ __metadata: languageName: node linkType: hard +"env-editor@npm:^1.1.0": + version: 1.3.0 + resolution: "env-editor@npm:1.3.0" + checksum: 10/d81ccbef328aad32fc8e0b751fece87ad185d0a82c700e7556c80cedc9880d7d1ac202698b4304c88cc9b7e923baa78209629238690ad747ea510bedc72f0f0f + languageName: node + linkType: hard + "env-paths@npm:^2.2.0": version: 2.2.1 resolution: "env-paths@npm:2.2.1" @@ -4532,6 +4586,26 @@ __metadata: languageName: node linkType: hard +"execa@npm:^9.3.0": + version: 9.6.0 + resolution: "execa@npm:9.6.0" + dependencies: + "@sindresorhus/merge-streams": "npm:^4.0.0" + cross-spawn: "npm:^7.0.6" + figures: "npm:^6.1.0" + get-stream: "npm:^9.0.0" + human-signals: "npm:^8.0.1" + is-plain-obj: "npm:^4.1.0" + is-stream: "npm:^4.0.1" + npm-run-path: "npm:^6.0.0" + pretty-ms: "npm:^9.2.0" + signal-exit: "npm:^4.1.0" + strip-final-newline: "npm:^4.0.0" + yoctocolors: "npm:^2.1.1" + checksum: 10/53443be93d847ff5b52d31ed3714f77aab764fb6c1d72dc7019214ab1cb1a69888e2158ba846426a8ea51443c110fe7a86de61ffb9ee5687b00120fbd739b8a4 + languageName: node + linkType: hard + "exit-x@npm:^0.2.2": version: 0.2.2 resolution: "exit-x@npm:0.2.2" @@ -4673,6 +4747,15 @@ __metadata: languageName: node linkType: hard +"figures@npm:^6.1.0": + version: 6.1.0 + resolution: "figures@npm:6.1.0" + dependencies: + is-unicode-supported: "npm:^2.0.0" + checksum: 10/9822d13630bee8e6a9f2da866713adf13854b07e0bfde042defa8bba32d47a1c0b2afa627ce73837c674cf9a5e3edce7e879ea72cb9ea7960b2390432d8e1167 + languageName: node + linkType: hard + "file-entry-cache@npm:11.1.1": version: 11.1.1 resolution: "file-entry-cache@npm:11.1.1" @@ -4925,6 +5008,16 @@ __metadata: languageName: node linkType: hard +"get-stream@npm:^9.0.0": + version: 9.0.1 + resolution: "get-stream@npm:9.0.1" + dependencies: + "@sec-ant/readable-stream": "npm:^0.4.1" + is-stream: "npm:^4.0.1" + checksum: 10/ce56e6db6bcd29ca9027b0546af035c3e93dcd154ca456b54c298901eb0e5b2ce799c5d727341a100c99e14c523f267f1205f46f153f7b75b1f4da6d98a21c5e + languageName: node + linkType: hard + "get-tsconfig@npm:^4.8.1": version: 4.13.0 resolution: "get-tsconfig@npm:4.13.0" @@ -5180,6 +5273,13 @@ __metadata: languageName: node linkType: hard +"human-signals@npm:^8.0.1": + version: 8.0.1 + resolution: "human-signals@npm:8.0.1" + checksum: 10/903389a018b16f330c5e0f6e8b76d592c79552152ea892f249e5290e71c790f5722dc9b740fedd4bdef30566754a69012aaed97a6a528da0d417fad990a6f515 + languageName: node + linkType: hard + "iconv-lite@npm:^0.6.2": version: 0.6.3 resolution: "iconv-lite@npm:0.6.3" @@ -5384,6 +5484,15 @@ __metadata: languageName: node linkType: hard +"is-docker@npm:^3.0.0": + version: 3.0.0 + resolution: "is-docker@npm:3.0.0" + bin: + is-docker: cli.js + checksum: 10/b698118f04feb7eaf3338922bd79cba064ea54a1c3db6ec8c0c8d8ee7613e7e5854d802d3ef646812a8a3ace81182a085dfa0a71cc68b06f3fa794b9783b3c90 + languageName: node + linkType: hard + "is-es5-identifier-name@npm:1.0.1": version: 1.0.1 resolution: "is-es5-identifier-name@npm:1.0.1" @@ -5442,6 +5551,17 @@ __metadata: languageName: node linkType: hard +"is-inside-container@npm:^1.0.0": + version: 1.0.0 + resolution: "is-inside-container@npm:1.0.0" + dependencies: + is-docker: "npm:^3.0.0" + bin: + is-inside-container: cli.js + checksum: 10/c50b75a2ab66ab3e8b92b3bc534e1ea72ca25766832c0623ac22d134116a98bcf012197d1caabe1d1c4bd5f84363d4aa5c36bb4b585fbcaf57be172cd10a1a03 + languageName: node + linkType: hard + "is-number@npm:^7.0.0": version: 7.0.0 resolution: "is-number@npm:7.0.0" @@ -5456,6 +5576,13 @@ __metadata: languageName: node linkType: hard +"is-plain-obj@npm:^4.1.0": + version: 4.1.0 + resolution: "is-plain-obj@npm:4.1.0" + checksum: 10/6dc45da70d04a81f35c9310971e78a6a3c7a63547ef782e3a07ee3674695081b6ca4e977fbb8efc48dae3375e0b34558d2bcd722aec9bddfa2d7db5b041be8ce + languageName: node + linkType: hard + "is-stream@npm:^2.0.0": version: 2.0.1 resolution: "is-stream@npm:2.0.1" @@ -5470,6 +5597,20 @@ __metadata: languageName: node linkType: hard +"is-stream@npm:^4.0.1": + version: 4.0.1 + resolution: "is-stream@npm:4.0.1" + checksum: 10/cbea3f1fc271b21ceb228819d0c12a0965a02b57f39423925f99530b4eb86935235f258f06310b67cd02b2d10b49e9a0998f5ececf110ab7d3760bae4055ad23 + languageName: node + linkType: hard + +"is-unicode-supported@npm:^2.0.0": + version: 2.1.0 + resolution: "is-unicode-supported@npm:2.1.0" + checksum: 10/f254e3da6b0ab1a57a94f7273a7798dd35d1d45b227759f600d0fa9d5649f9c07fa8d3c8a6360b0e376adf916d151ec24fc9a50c5295c58bae7ca54a76a063f9 + languageName: node + linkType: hard + "is-whitespace-character@npm:^1.0.0": version: 1.0.4 resolution: "is-whitespace-character@npm:1.0.4" @@ -5493,6 +5634,15 @@ __metadata: languageName: node linkType: hard +"is-wsl@npm:^3.1.0": + version: 3.1.0 + resolution: "is-wsl@npm:3.1.0" + dependencies: + is-inside-container: "npm:^1.0.0" + checksum: 10/f9734c81f2f9cf9877c5db8356bfe1ff61680f1f4c1011e91278a9c0564b395ae796addb4bf33956871041476ec82c3e5260ed57b22ac91794d4ae70a1d2f0a9 + languageName: node + linkType: hard + "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -6285,6 +6435,15 @@ __metadata: languageName: node linkType: hard +"line-column-path@npm:^3.0.0": + version: 3.0.0 + resolution: "line-column-path@npm:3.0.0" + dependencies: + type-fest: "npm:^2.0.0" + checksum: 10/124564d302e45a5c2ce7d05588ead253aca254a064db8875fa9c31e7e00d9ae5b5d7caf7f1c45ff3615739cc0960ec0490d1ac0903a978a904f2aa114641f152 + languageName: node + linkType: hard + "lines-and-columns@npm:^1.1.6": version: 1.2.4 resolution: "lines-and-columns@npm:1.2.4" @@ -6756,6 +6915,16 @@ __metadata: languageName: node linkType: hard +"npm-run-path@npm:^6.0.0": + version: 6.0.0 + resolution: "npm-run-path@npm:6.0.0" + dependencies: + path-key: "npm:^4.0.0" + unicorn-magic: "npm:^0.3.0" + checksum: 10/1a1b50aba6e6af7fd34a860ba2e252e245c4a59b316571a990356417c0cdf0414cabf735f7f52d9c330899cb56f0ab804a8e21fb12a66d53d7843e39ada4a3b6 + languageName: node + linkType: hard + "once@npm:^1.3.0": version: 1.4.0 resolution: "once@npm:1.4.0" @@ -6774,6 +6943,30 @@ __metadata: languageName: node linkType: hard +"open-editor@npm:5.1.0": + version: 5.1.0 + resolution: "open-editor@npm:5.1.0" + dependencies: + env-editor: "npm:^1.1.0" + execa: "npm:^9.3.0" + line-column-path: "npm:^3.0.0" + open: "npm:^10.1.0" + checksum: 10/55e4b3255416d81b77fa81e41f3559db814dbd64bc934735830cb2cf881f89015215b4e6f53887599f09d6d01658cc4312adae55e1b6aa1842da359623a8755b + languageName: node + linkType: hard + +"open@npm:^10.1.0": + version: 10.2.0 + resolution: "open@npm:10.2.0" + dependencies: + default-browser: "npm:^5.2.1" + define-lazy-prop: "npm:^3.0.0" + is-inside-container: "npm:^1.0.0" + wsl-utils: "npm:^0.1.0" + checksum: 10/e6ad9474734eac3549dcc7d85e952394856ccaee48107c453bd6a725b82e3b8ed5f427658935df27efa76b411aeef62888edea8a9e347e8e7c82632ec966b30e + languageName: node + linkType: hard + "open@npm:^8.4.0": version: 8.4.2 resolution: "open@npm:8.4.2" @@ -7083,6 +7276,13 @@ __metadata: languageName: node linkType: hard +"path-key@npm:^4.0.0": + version: 4.0.0 + resolution: "path-key@npm:4.0.0" + checksum: 10/8e6c314ae6d16b83e93032c61020129f6f4484590a777eed709c4a01b50e498822b00f76ceaf94bc64dbd90b327df56ceadce27da3d83393790f1219e07721d7 + languageName: node + linkType: hard + "path-scurry@npm:^1.11.1": version: 1.11.1 resolution: "path-scurry@npm:1.11.1" @@ -7352,6 +7552,7 @@ __metadata: nano-spawn: "npm:2.0.0" node-style-text: "npm:2.1.2" npm-run-all2: "npm:8.0.4" + open-editor: "npm:5.1.0" outdent: "npm:0.8.0" oxc-parser: "npm:0.98.0" parse-json: "npm:8.3.0" @@ -7413,7 +7614,7 @@ __metadata: languageName: node linkType: hard -"pretty-ms@npm:9.3.0": +"pretty-ms@npm:9.3.0, pretty-ms@npm:^9.2.0": version: 9.3.0 resolution: "pretty-ms@npm:9.3.0" dependencies: @@ -7676,6 +7877,13 @@ __metadata: languageName: node linkType: hard +"run-applescript@npm:^7.0.0": + version: 7.1.0 + resolution: "run-applescript@npm:7.1.0" + checksum: 10/8659fb5f2717b2b37a68cbfe5f678254cf24b5a82a6df3372b180c80c7c137dcd757a4166c3887e459f59a090ca414e8ea7ca97cf3ee5123db54b3b4006d7b7a + languageName: node + linkType: hard + "run-parallel@npm:^1.1.9": version: 1.2.0 resolution: "run-parallel@npm:1.2.0" @@ -7798,7 +8006,7 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^4.0.1": +"signal-exit@npm:^4.0.1, signal-exit@npm:^4.1.0": version: 4.1.0 resolution: "signal-exit@npm:4.1.0" checksum: 10/c9fa63bbbd7431066174a48ba2dd9986dfd930c3a8b59de9c29d7b6854ec1c12a80d15310869ea5166d413b99f041bfa3dd80a7947bcd44ea8e6eb3ffeabfa1f @@ -8094,6 +8302,13 @@ __metadata: languageName: node linkType: hard +"strip-final-newline@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-final-newline@npm:4.0.0" + checksum: 10/b5fe48f695d74863153a3b3155220e6e9bf51f4447832998c8edec38e6559b3af87a9fe5ac0df95570a78a26f5fa91701358842eab3c15480e27980b154a145f + languageName: node + linkType: hard + "strip-indent@npm:^4.1.1": version: 4.1.1 resolution: "strip-indent@npm:4.1.1" @@ -8497,7 +8712,7 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^2.12.2": +"type-fest@npm:^2.0.0, type-fest@npm:^2.12.2": version: 2.19.0 resolution: "type-fest@npm:2.19.0" checksum: 10/7bf9e8fdf34f92c8bb364c0af14ca875fac7e0183f2985498b77be129dc1b3b1ad0a6b3281580f19e48c6105c037fb966ad9934520c69c6434d17fd0af4eed78 @@ -8557,6 +8772,13 @@ __metadata: languageName: node linkType: hard +"unicorn-magic@npm:^0.3.0": + version: 0.3.0 + resolution: "unicorn-magic@npm:0.3.0" + checksum: 10/bdd7d7c522f9456f32a0b77af23f8854f9a7db846088c3868ec213f9550683ab6a2bdf3803577eacbafddb4e06900974385841ccb75338d17346ccef45f9cb01 + languageName: node + linkType: hard + "unified@npm:9.2.2": version: 9.2.2 resolution: "unified@npm:9.2.2" @@ -8940,6 +9162,15 @@ __metadata: languageName: node linkType: hard +"wsl-utils@npm:^0.1.0": + version: 0.1.0 + resolution: "wsl-utils@npm:0.1.0" + dependencies: + is-wsl: "npm:^3.1.0" + checksum: 10/de4c92187e04c3c27b4478f410a02e81c351dc85efa3447bf1666f34fc80baacd890a6698ec91995631714086992036013286aea3d77e6974020d40a08e00aec + languageName: node + linkType: hard + "xdg-basedir@npm:^5.1.0": version: 5.1.0 resolution: "xdg-basedir@npm:5.1.0" @@ -9050,6 +9281,13 @@ __metadata: languageName: node linkType: hard +"yoctocolors@npm:^2.1.1": + version: 2.1.2 + resolution: "yoctocolors@npm:2.1.2" + checksum: 10/6ee42d665a4cc161c7de3f015b2a65d6c65d2808bfe3b99e228bd2b1b784ef1e54d1907415c025fc12b400f26f372bfc1b71966c6c738d998325ca422eb39363 + languageName: node + linkType: hard + "zeptomatch-escape@npm:^1.0.1": version: 1.0.1 resolution: "zeptomatch-escape@npm:1.0.1"