@moritzwilksch/diffle 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/README.md +1 -0
  2. package/dist/client/assets/{angular-html-NJfvXMBu.js → angular-html-CraLFapW.js} +1 -1
  3. package/dist/client/assets/{angular-ts-3VmQ16GC.js → angular-ts-C-gKrZEA.js} +1 -1
  4. package/dist/client/assets/{apl-CaYQRkUE.js → apl-DcEIHBcT.js} +1 -1
  5. package/dist/client/assets/{astro-CGsy8jQJ.js → astro-CS7nbqPe.js} +1 -1
  6. package/dist/client/assets/{blade-CbyPPxmo.js → blade-CT-502NN.js} +1 -1
  7. package/dist/client/assets/{c-BaJwvHpK.js → c-BQKV0Hkt.js} +1 -1
  8. package/dist/client/assets/{chapel-BokLUCVc.js → chapel-BCYGR4L8.js} +1 -1
  9. package/dist/client/assets/{cobol-I7_VFdfF.js → cobol-DoeuBdBp.js} +1 -1
  10. package/dist/client/assets/{coffee-BJ7WLX7y.js → coffee-DBTgw5Xi.js} +1 -1
  11. package/dist/client/assets/{cpp-DSFvuOlH.js → cpp-DuKXiW1V.js} +1 -1
  12. package/dist/client/assets/{crystal-DLLJ7kug.js → crystal-D7dpJ5vh.js} +1 -1
  13. package/dist/client/assets/{css-CW7SLGV7.js → css-DR0PL2gL.js} +1 -1
  14. package/dist/client/assets/{edge-DQEyTxuu.js → edge-P-_Xo2an.js} +1 -1
  15. package/dist/client/assets/{elixir-Dwvydtjv.js → elixir-DPa248tx.js} +1 -1
  16. package/dist/client/assets/{elm-DPrZsI-D.js → elm-B9XwOAh4.js} +1 -1
  17. package/dist/client/assets/{erb-By39__m0.js → erb-Yu_Dx0YE.js} +1 -1
  18. package/dist/client/assets/{git-rebase-CBF3buEb.js → git-rebase-MOViGtay.js} +1 -1
  19. package/dist/client/assets/{glimmer-js-C4TvHlaw.js → glimmer-js-DhoYq85k.js} +1 -1
  20. package/dist/client/assets/{glimmer-ts-BPhq137Q.js → glimmer-ts-CelbVgxs.js} +1 -1
  21. package/dist/client/assets/{glsl-BlwDtIwk.js → glsl-Clwy1awS.js} +1 -1
  22. package/dist/client/assets/{graphql-BgMqs-o1.js → graphql-pnPD7j9S.js} +1 -1
  23. package/dist/client/assets/{hack-DrMUHl8k.js → hack-ta_IzCca.js} +1 -1
  24. package/dist/client/assets/{haml-BWbuOop2.js → haml-D-oC_hfA.js} +1 -1
  25. package/dist/client/assets/{handlebars-D-TP7YFr.js → handlebars-C9reMjSe.js} +1 -1
  26. package/dist/client/assets/{html-RkKdupbJ.js → html-D3jW6nBt.js} +1 -1
  27. package/dist/client/assets/{html-derivative-BiXkRfVa.js → html-derivative-DsI_4EzH.js} +1 -1
  28. package/dist/client/assets/{http-CF05Tv0R.js → http-BpsibR8r.js} +1 -1
  29. package/dist/client/assets/{hurl-p-K5zx-F.js → hurl-BbPWgVHJ.js} +1 -1
  30. package/dist/client/assets/index-Djt_eZkA.css +2 -0
  31. package/dist/client/assets/{index-Dw_tHgT2.js → index-Ds4Ef0WZ.js} +95 -95
  32. package/dist/client/assets/{java-DZgPGAdX.js → java-CVcWdqVm.js} +1 -1
  33. package/dist/client/assets/{javascript-UpC6uRwd.js → javascript-c8yOibC-.js} +1 -1
  34. package/dist/client/assets/{jinja-BwlD6UdE.js → jinja-DOH9XbI5.js} +1 -1
  35. package/dist/client/assets/{jison-CXzrtNYv.js → jison-B96_TtVG.js} +1 -1
  36. package/dist/client/assets/{json-CvzeYtbd.js → json-BMCvm-g-.js} +1 -1
  37. package/dist/client/assets/{jsx-CRRNRy_v.js → jsx-BXQozcNG.js} +1 -1
  38. package/dist/client/assets/{julia-n9zQTAkT.js → julia-CQS1Mgj0.js} +1 -1
  39. package/dist/client/assets/{just-Cqgx3k16.js → just-51JKqBS7.js} +1 -1
  40. package/dist/client/assets/{latex-CtWS0r44.js → latex-DtO9pfae.js} +1 -1
  41. package/dist/client/assets/{liquid-DYOfxp51.js → liquid-CTYDD9Gq.js} +1 -1
  42. package/dist/client/assets/{lua-BH2jjxbT.js → lua-iluZylUu.js} +1 -1
  43. package/dist/client/assets/{marko-yGXqh8Mu.js → marko-CZCCockj.js} +1 -1
  44. package/dist/client/assets/{mdc-DBTGzC9c.js → mdc-DEpslmme.js} +1 -1
  45. package/dist/client/assets/{nginx-C6OOwetR.js → nginx-CwLLMK1r.js} +1 -1
  46. package/dist/client/assets/{nim-B-51OZwP.js → nim-Dg17HfV-.js} +1 -1
  47. package/dist/client/assets/{org-rdh6JnaZ.js → org-DGI74mxU.js} +1 -1
  48. package/dist/client/assets/{perl-BEpLn7O_.js → perl-HTdGazIE.js} +1 -1
  49. package/dist/client/assets/{php-uM1K2nIh.js → php-BPC7L42D.js} +1 -1
  50. package/dist/client/assets/{pug-CX5jxSmg.js → pug-BFaQieuK.js} +1 -1
  51. package/dist/client/assets/{qml-BjaL9kT9.js → qml-5SWK7ise.js} +1 -1
  52. package/dist/client/assets/{r-CbP_oADb.js → r-DyxS1nVU.js} +1 -1
  53. package/dist/client/assets/{razor-ClgwHmG8.js → razor-DGdoGPRR.js} +1 -1
  54. package/dist/client/assets/{regexp-DkGv1hXs.js → regexp-qwIAiOz1.js} +1 -1
  55. package/dist/client/assets/{rst-KbuceK-d.js → rst-CybOpvxA.js} +1 -1
  56. package/dist/client/assets/{ruby-IyWK5TqJ.js → ruby-BlZBbrW3.js} +1 -1
  57. package/dist/client/assets/{sas-CGY91YIG.js → sas-BiEmdI58.js} +1 -1
  58. package/dist/client/assets/{scss-C5azgOdY.js → scss-DBpO4Lfr.js} +1 -1
  59. package/dist/client/assets/{shellscript-Do9KSXv1.js → shellscript-DBElAgJQ.js} +1 -1
  60. package/dist/client/assets/{shellsession-DG2DOiiH.js → shellsession-MwT1Bu9i.js} +1 -1
  61. package/dist/client/assets/{soy-BLO2pcf_.js → soy-CHoAeSyI.js} +1 -1
  62. package/dist/client/assets/{sql-NhQC2aCy.js → sql-BKpKY9eo.js} +1 -1
  63. package/dist/client/assets/{stata-BT8bwSiP.js → stata-PK6Iqp1E.js} +1 -1
  64. package/dist/client/assets/{surrealql-DeFUr0Sz.js → surrealql-Cs_ar_kp.js} +1 -1
  65. package/dist/client/assets/{svelte-TRjcWU3h.js → svelte-DNO5T4WC.js} +1 -1
  66. package/dist/client/assets/{templ-C1Ef7mnt.js → templ-Bx_xQYDK.js} +1 -1
  67. package/dist/client/assets/{tex-DWZKUBNC.js → tex-zSrOlTEM.js} +1 -1
  68. package/dist/client/assets/{ts-tags-BPGHRwAa.js → ts-tags-B8vwSbnq.js} +1 -1
  69. package/dist/client/assets/{tsx-DFPjrnBq.js → tsx-CR3AhwxQ.js} +1 -1
  70. package/dist/client/assets/{twig-BnaDylmD.js → twig-CDhR91v4.js} +1 -1
  71. package/dist/client/assets/{typescript-CtjU5LIe.js → typescript-CVW_f4Gd.js} +1 -1
  72. package/dist/client/assets/{typst-CKVv919t.js → typst-D47xzRuy.js} +1 -1
  73. package/dist/client/assets/{vue-DQGhQ-pk.js → vue-ChwX07aX.js} +1 -1
  74. package/dist/client/assets/{vue-html-BtU_VFsU.js → vue-html-DPqld8Yg.js} +1 -1
  75. package/dist/client/assets/{vue-vine-Bg_4C7Q_.js → vue-vine-BtNqhT2A.js} +1 -1
  76. package/dist/client/assets/{xml-DupdE_s3.js → xml-D8XY15fU.js} +1 -1
  77. package/dist/client/assets/{xsl-BkEIn0qW.js → xsl-B0WLNJZB.js} +1 -1
  78. package/dist/client/assets/{yaml-BuH0PmqQ.js → yaml-BBkl09Jv.js} +1 -1
  79. package/dist/client/index.html +2 -2
  80. package/dist/server/main.js +242 -75
  81. package/package.json +1 -1
  82. package/dist/client/assets/index-C-uvIS11.css +0 -2
@@ -1 +1 @@
1
- import{t as e}from"./index-Dw_tHgT2.js";import{t}from"./java-DZgPGAdX.js";var n=e({default:()=>i}),r=Object.freeze(JSON.parse(`{"displayName":"XML","name":"xml","patterns":[{"begin":"(<\\\\?)\\\\s*([-0-9A-Z_a-z]+)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.xml"}},"end":"(\\\\?>)","name":"meta.tag.preprocessor.xml","patterns":[{"match":" ([-A-Za-z]+)","name":"entity.other.attribute-name.xml"},{"include":"#doublequotedString"},{"include":"#singlequotedString"}]},{"begin":"(<!)(DOCTYPE)\\\\s+([:A-Z_a-z][-.0-:A-Z_a-z]*)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"keyword.other.doctype.xml"},"3":{"name":"variable.language.documentroot.xml"}},"end":"\\\\s*(>)","name":"meta.tag.sgml.doctype.xml","patterns":[{"include":"#internalSubset"}]},{"include":"#comments"},{"begin":"(<)((?:([-0-9A-Z_a-z]+)(:))?([-0-:A-Z_a-z]+))(?=(\\\\s[^>]*)?></\\\\2>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.xml"},"3":{"name":"entity.name.tag.namespace.xml"},"4":{"name":"punctuation.separator.namespace.xml"},"5":{"name":"entity.name.tag.localname.xml"}},"end":"(>)(</)((?:([-0-9A-Z_a-z]+)(:))?([-0-:A-Z_a-z]+))(>)","endCaptures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"punctuation.definition.tag.xml"},"3":{"name":"entity.name.tag.xml"},"4":{"name":"entity.name.tag.namespace.xml"},"5":{"name":"punctuation.separator.namespace.xml"},"6":{"name":"entity.name.tag.localname.xml"},"7":{"name":"punctuation.definition.tag.xml"}},"name":"meta.tag.no-content.xml","patterns":[{"include":"#tagStuff"}]},{"begin":"(</?)(?:([-.\\\\w]+)((:)))?([-.:\\\\w]+)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.namespace.xml"},"3":{"name":"entity.name.tag.xml"},"4":{"name":"punctuation.separator.namespace.xml"},"5":{"name":"entity.name.tag.localname.xml"}},"end":"(/?>)","name":"meta.tag.xml","patterns":[{"include":"#tagStuff"}]},{"include":"#entity"},{"include":"#bare-ampersand"},{"begin":"<%@","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.xml"}},"end":"%>","endCaptures":{"0":{"name":"punctuation.section.embedded.end.xml"}},"name":"source.java-props.embedded.xml","patterns":[{"match":"page|include|taglib","name":"keyword.other.page-props.xml"}]},{"begin":"<%[!=]?(?!--)","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.xml"}},"end":"(?!--)%>","endCaptures":{"0":{"name":"punctuation.section.embedded.end.xml"}},"name":"source.java.embedded.xml","patterns":[{"include":"source.java"}]},{"begin":"<!\\\\[CDATA\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"]]>","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.unquoted.cdata.xml"}],"repository":{"EntityDecl":{"begin":"(<!)(ENTITY)\\\\s+(%\\\\s+)?([:A-Z_a-z][-.0-:A-Z_a-z]*)(\\\\s+(?:SYSTEM|PUBLIC)\\\\s+)?","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"keyword.other.entity.xml"},"3":{"name":"punctuation.definition.entity.xml"},"4":{"name":"variable.language.entity.xml"},"5":{"name":"keyword.other.entitytype.xml"}},"end":"(>)","patterns":[{"include":"#doublequotedString"},{"include":"#singlequotedString"}]},"bare-ampersand":{"match":"&","name":"invalid.illegal.bad-ampersand.xml"},"comments":{"patterns":[{"begin":"<%--","captures":{"0":{"name":"punctuation.definition.comment.xml"},"end":"--%>","name":"comment.block.xml"}},{"begin":"<!--","captures":{"0":{"name":"punctuation.definition.comment.xml"}},"end":"-->","name":"comment.block.xml","patterns":[{"begin":"--(?!>)","captures":{"0":{"name":"invalid.illegal.bad-comments-or-CDATA.xml"}}}]}]},"doublequotedString":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.double.xml","patterns":[{"include":"#entity"},{"include":"#bare-ampersand"}]},"entity":{"captures":{"1":{"name":"punctuation.definition.constant.xml"},"3":{"name":"punctuation.definition.constant.xml"}},"match":"(&)([:A-Z_a-z][-.0-:A-Z_a-z]*|#[0-9]+|#x\\\\h+)(;)","name":"constant.character.entity.xml"},"internalSubset":{"begin":"(\\\\[)","captures":{"1":{"name":"punctuation.definition.constant.xml"}},"end":"(])","name":"meta.internalsubset.xml","patterns":[{"include":"#EntityDecl"},{"include":"#parameterEntity"},{"include":"#comments"}]},"parameterEntity":{"captures":{"1":{"name":"punctuation.definition.constant.xml"},"3":{"name":"punctuation.definition.constant.xml"}},"match":"(%)([:A-Z_a-z][-.0-:A-Z_a-z]*)(;)","name":"constant.character.parameter-entity.xml"},"singlequotedString":{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.single.xml","patterns":[{"include":"#entity"},{"include":"#bare-ampersand"}]},"tagStuff":{"patterns":[{"captures":{"1":{"name":"entity.other.attribute-name.namespace.xml"},"2":{"name":"entity.other.attribute-name.xml"},"3":{"name":"punctuation.separator.namespace.xml"},"4":{"name":"entity.other.attribute-name.localname.xml"}},"match":"(?:^|\\\\s+)(?:([-.\\\\w]+)((:)))?([-.:\\\\w]+)\\\\s*="},{"include":"#doublequotedString"},{"include":"#singlequotedString"}]}},"scopeName":"text.xml","embeddedLangs":["java"]}`)),i=[...t,r];export{n,i as t};
1
+ import{t as e}from"./index-Ds4Ef0WZ.js";import{t}from"./java-CVcWdqVm.js";var n=e({default:()=>i}),r=Object.freeze(JSON.parse(`{"displayName":"XML","name":"xml","patterns":[{"begin":"(<\\\\?)\\\\s*([-0-9A-Z_a-z]+)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.xml"}},"end":"(\\\\?>)","name":"meta.tag.preprocessor.xml","patterns":[{"match":" ([-A-Za-z]+)","name":"entity.other.attribute-name.xml"},{"include":"#doublequotedString"},{"include":"#singlequotedString"}]},{"begin":"(<!)(DOCTYPE)\\\\s+([:A-Z_a-z][-.0-:A-Z_a-z]*)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"keyword.other.doctype.xml"},"3":{"name":"variable.language.documentroot.xml"}},"end":"\\\\s*(>)","name":"meta.tag.sgml.doctype.xml","patterns":[{"include":"#internalSubset"}]},{"include":"#comments"},{"begin":"(<)((?:([-0-9A-Z_a-z]+)(:))?([-0-:A-Z_a-z]+))(?=(\\\\s[^>]*)?></\\\\2>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.xml"},"3":{"name":"entity.name.tag.namespace.xml"},"4":{"name":"punctuation.separator.namespace.xml"},"5":{"name":"entity.name.tag.localname.xml"}},"end":"(>)(</)((?:([-0-9A-Z_a-z]+)(:))?([-0-:A-Z_a-z]+))(>)","endCaptures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"punctuation.definition.tag.xml"},"3":{"name":"entity.name.tag.xml"},"4":{"name":"entity.name.tag.namespace.xml"},"5":{"name":"punctuation.separator.namespace.xml"},"6":{"name":"entity.name.tag.localname.xml"},"7":{"name":"punctuation.definition.tag.xml"}},"name":"meta.tag.no-content.xml","patterns":[{"include":"#tagStuff"}]},{"begin":"(</?)(?:([-.\\\\w]+)((:)))?([-.:\\\\w]+)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.namespace.xml"},"3":{"name":"entity.name.tag.xml"},"4":{"name":"punctuation.separator.namespace.xml"},"5":{"name":"entity.name.tag.localname.xml"}},"end":"(/?>)","name":"meta.tag.xml","patterns":[{"include":"#tagStuff"}]},{"include":"#entity"},{"include":"#bare-ampersand"},{"begin":"<%@","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.xml"}},"end":"%>","endCaptures":{"0":{"name":"punctuation.section.embedded.end.xml"}},"name":"source.java-props.embedded.xml","patterns":[{"match":"page|include|taglib","name":"keyword.other.page-props.xml"}]},{"begin":"<%[!=]?(?!--)","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.xml"}},"end":"(?!--)%>","endCaptures":{"0":{"name":"punctuation.section.embedded.end.xml"}},"name":"source.java.embedded.xml","patterns":[{"include":"source.java"}]},{"begin":"<!\\\\[CDATA\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"]]>","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.unquoted.cdata.xml"}],"repository":{"EntityDecl":{"begin":"(<!)(ENTITY)\\\\s+(%\\\\s+)?([:A-Z_a-z][-.0-:A-Z_a-z]*)(\\\\s+(?:SYSTEM|PUBLIC)\\\\s+)?","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"keyword.other.entity.xml"},"3":{"name":"punctuation.definition.entity.xml"},"4":{"name":"variable.language.entity.xml"},"5":{"name":"keyword.other.entitytype.xml"}},"end":"(>)","patterns":[{"include":"#doublequotedString"},{"include":"#singlequotedString"}]},"bare-ampersand":{"match":"&","name":"invalid.illegal.bad-ampersand.xml"},"comments":{"patterns":[{"begin":"<%--","captures":{"0":{"name":"punctuation.definition.comment.xml"},"end":"--%>","name":"comment.block.xml"}},{"begin":"<!--","captures":{"0":{"name":"punctuation.definition.comment.xml"}},"end":"-->","name":"comment.block.xml","patterns":[{"begin":"--(?!>)","captures":{"0":{"name":"invalid.illegal.bad-comments-or-CDATA.xml"}}}]}]},"doublequotedString":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.double.xml","patterns":[{"include":"#entity"},{"include":"#bare-ampersand"}]},"entity":{"captures":{"1":{"name":"punctuation.definition.constant.xml"},"3":{"name":"punctuation.definition.constant.xml"}},"match":"(&)([:A-Z_a-z][-.0-:A-Z_a-z]*|#[0-9]+|#x\\\\h+)(;)","name":"constant.character.entity.xml"},"internalSubset":{"begin":"(\\\\[)","captures":{"1":{"name":"punctuation.definition.constant.xml"}},"end":"(])","name":"meta.internalsubset.xml","patterns":[{"include":"#EntityDecl"},{"include":"#parameterEntity"},{"include":"#comments"}]},"parameterEntity":{"captures":{"1":{"name":"punctuation.definition.constant.xml"},"3":{"name":"punctuation.definition.constant.xml"}},"match":"(%)([:A-Z_a-z][-.0-:A-Z_a-z]*)(;)","name":"constant.character.parameter-entity.xml"},"singlequotedString":{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.single.xml","patterns":[{"include":"#entity"},{"include":"#bare-ampersand"}]},"tagStuff":{"patterns":[{"captures":{"1":{"name":"entity.other.attribute-name.namespace.xml"},"2":{"name":"entity.other.attribute-name.xml"},"3":{"name":"punctuation.separator.namespace.xml"},"4":{"name":"entity.other.attribute-name.localname.xml"}},"match":"(?:^|\\\\s+)(?:([-.\\\\w]+)((:)))?([-.:\\\\w]+)\\\\s*="},{"include":"#doublequotedString"},{"include":"#singlequotedString"}]}},"scopeName":"text.xml","embeddedLangs":["java"]}`)),i=[...t,r];export{n,i as t};
@@ -1 +1 @@
1
- import{t as e}from"./xml-DupdE_s3.js";var t=Object.freeze(JSON.parse(`{"displayName":"XSL","name":"xsl","patterns":[{"begin":"(<)(xsl)((:))(template)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.namespace.xml"},"3":{"name":"entity.name.tag.xml"},"4":{"name":"punctuation.separator.namespace.xml"},"5":{"name":"entity.name.tag.localname.xml"}},"end":"(>)","name":"meta.tag.xml.template","patterns":[{"captures":{"1":{"name":"entity.other.attribute-name.namespace.xml"},"2":{"name":"entity.other.attribute-name.xml"},"3":{"name":"punctuation.separator.namespace.xml"},"4":{"name":"entity.other.attribute-name.localname.xml"}},"match":" (?:([-0-9A-Z_a-z]+)((:)))?([-A-Za-z]+)"},{"include":"#doublequotedString"},{"include":"#singlequotedString"}]},{"include":"text.xml"}],"repository":{"doublequotedString":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.double.xml"},"singlequotedString":{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.single.xml"}},"scopeName":"text.xml.xsl","embeddedLangs":["xml"]}`)),n=[...e,t];export{n as default};
1
+ import{t as e}from"./xml-D8XY15fU.js";var t=Object.freeze(JSON.parse(`{"displayName":"XSL","name":"xsl","patterns":[{"begin":"(<)(xsl)((:))(template)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.namespace.xml"},"3":{"name":"entity.name.tag.xml"},"4":{"name":"punctuation.separator.namespace.xml"},"5":{"name":"entity.name.tag.localname.xml"}},"end":"(>)","name":"meta.tag.xml.template","patterns":[{"captures":{"1":{"name":"entity.other.attribute-name.namespace.xml"},"2":{"name":"entity.other.attribute-name.xml"},"3":{"name":"punctuation.separator.namespace.xml"},"4":{"name":"entity.other.attribute-name.localname.xml"}},"match":" (?:([-0-9A-Z_a-z]+)((:)))?([-A-Za-z]+)"},{"include":"#doublequotedString"},{"include":"#singlequotedString"}]},{"include":"text.xml"}],"repository":{"doublequotedString":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.double.xml"},"singlequotedString":{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.single.xml"}},"scopeName":"text.xml.xsl","embeddedLangs":["xml"]}`)),n=[...e,t];export{n as default};
@@ -1 +1 @@
1
- import{t as e}from"./index-Dw_tHgT2.js";var t=e({default:()=>n}),n=[Object.freeze(JSON.parse(`{"displayName":"YAML","fileTypes":["yaml","yml","rviz","reek","clang-format","yaml-tmlanguage","syntax","sublime-syntax"],"firstLineMatch":"^%YAML( ?1.\\\\d+)?","name":"yaml","patterns":[{"include":"#comment"},{"include":"#property"},{"include":"#directive"},{"match":"^---","name":"entity.other.document.begin.yaml"},{"match":"^\\\\.{3}","name":"entity.other.document.end.yaml"},{"include":"#node"}],"repository":{"block-collection":{"patterns":[{"include":"#block-sequence"},{"include":"#block-mapping"}]},"block-mapping":{"patterns":[{"include":"#block-pair"}]},"block-node":{"patterns":[{"include":"#prototype"},{"include":"#block-scalar"},{"include":"#block-collection"},{"include":"#flow-scalar-plain-out"},{"include":"#flow-node"}]},"block-pair":{"patterns":[{"begin":"\\\\?","beginCaptures":{"1":{"name":"punctuation.definition.key-value.begin.yaml"}},"end":"(?=\\\\?)|^ *(:)|(:)","endCaptures":{"1":{"name":"punctuation.separator.key-value.mapping.yaml"},"2":{"name":"invalid.illegal.expected-newline.yaml"}},"name":"meta.block-mapping.yaml","patterns":[{"include":"#block-node"}]},{"begin":"(?=(?:[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?]\\\\S)([^:\\\\s]|:\\\\S|\\\\s+(?![#\\\\s]))*\\\\s*:(\\\\s|$))","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))","patterns":[{"include":"#flow-scalar-plain-out-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?]\\\\S","beginCaptures":{"0":{"name":"entity.name.tag.yaml"}},"contentName":"entity.name.tag.yaml","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))","name":"string.unquoted.plain.out.yaml"}]},{"match":":(?=\\\\s|$)","name":"punctuation.separator.key-value.mapping.yaml"}]},"block-scalar":{"begin":"(?:(\\\\|)|(>))([1-9])?([-+])?(.*\\\\n?)","beginCaptures":{"1":{"name":"keyword.control.flow.block-scalar.literal.yaml"},"2":{"name":"keyword.control.flow.block-scalar.folded.yaml"},"3":{"name":"constant.numeric.indentation-indicator.yaml"},"4":{"name":"storage.modifier.chomping-indicator.yaml"},"5":{"patterns":[{"include":"#comment"},{"match":".+","name":"invalid.illegal.expected-comment-or-newline.yaml"}]}},"end":"^(?=\\\\S)|(?!\\\\G)","patterns":[{"begin":"^( +)(?! )","end":"^(?!\\\\1|\\\\s*$)","name":"string.unquoted.block.yaml"}]},"block-sequence":{"match":"(-)(?!\\\\S)","name":"punctuation.definition.block.sequence.item.yaml"},"comment":{"begin":"(?:^([\\\\t ]*)|[\\\\t ]+)(?=#\\\\p{print}*$)","beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.yaml"}},"end":"(?!\\\\G)","patterns":[{"begin":"#","beginCaptures":{"0":{"name":"punctuation.definition.comment.yaml"}},"end":"\\\\n","name":"comment.line.number-sign.yaml"}]},"directive":{"begin":"^%","beginCaptures":{"0":{"name":"punctuation.definition.directive.begin.yaml"}},"end":"(?=$|[\\\\t ]+($|#))","name":"meta.directive.yaml","patterns":[{"captures":{"1":{"name":"keyword.other.directive.yaml.yaml"},"2":{"name":"constant.numeric.yaml-version.yaml"}},"match":"\\\\G(YAML)[\\\\t ]+(\\\\d+\\\\.\\\\d+)"},{"captures":{"1":{"name":"keyword.other.directive.tag.yaml"},"2":{"name":"storage.type.tag-handle.yaml"},"3":{"name":"support.type.tag-prefix.yaml"}},"match":"\\\\G(TAG)(?:[\\\\t ]+(!(?:[-0-9A-Za-z]*!)?)(?:[\\\\t ]+(!(?:%\\\\h{2}|[]!#$\\\\&-;=?-\\\\[_a-z~])*|(?![]!,\\\\[{}])(?:%\\\\h{2}|[]!#$\\\\&-;=?-\\\\[_a-z~])+))?)?"},{"captures":{"1":{"name":"support.other.directive.reserved.yaml"},"2":{"name":"string.unquoted.directive-name.yaml"},"3":{"name":"string.unquoted.directive-parameter.yaml"}},"match":"\\\\G(\\\\w+)(?:[\\\\t ]+(\\\\w+)(?:[\\\\t ]+(\\\\w+))?)?"},{"match":"\\\\S+","name":"invalid.illegal.unrecognized.yaml"}]},"flow-alias":{"captures":{"1":{"name":"keyword.control.flow.alias.yaml"},"2":{"name":"punctuation.definition.alias.yaml"},"3":{"name":"variable.other.alias.yaml"},"4":{"name":"invalid.illegal.character.anchor.yaml"}},"match":"((\\\\*))([^],/\\\\[{}\\\\s]+)([^],}\\\\s]\\\\S*)?"},"flow-collection":{"patterns":[{"include":"#flow-sequence"},{"include":"#flow-mapping"}]},"flow-mapping":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.mapping.begin.yaml"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.mapping.end.yaml"}},"name":"meta.flow-mapping.yaml","patterns":[{"include":"#prototype"},{"match":",","name":"punctuation.separator.mapping.yaml"},{"include":"#flow-pair"}]},"flow-node":{"patterns":[{"include":"#prototype"},{"include":"#flow-alias"},{"include":"#flow-collection"},{"include":"#flow-scalar"}]},"flow-pair":{"patterns":[{"begin":"\\\\?","beginCaptures":{"0":{"name":"punctuation.definition.key-value.begin.yaml"}},"end":"(?=[],}])","name":"meta.flow-pair.explicit.yaml","patterns":[{"include":"#prototype"},{"include":"#flow-pair"},{"include":"#flow-node"},{"begin":":(?=\\\\s|$|[],\\\\[{}])","beginCaptures":{"0":{"name":"punctuation.separator.key-value.mapping.yaml"}},"end":"(?=[],}])","patterns":[{"include":"#flow-value"}]}]},{"begin":"(?=(?:[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?][^],\\\\[{}\\\\s])([^],:\\\\[{}\\\\s]|:[^],\\\\[{}\\\\s]|\\\\s+(?![#\\\\s]))*\\\\s*:(\\\\s|$))","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])","name":"meta.flow-pair.key.yaml","patterns":[{"include":"#flow-scalar-plain-in-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?][^],\\\\[{}\\\\s]","beginCaptures":{"0":{"name":"entity.name.tag.yaml"}},"contentName":"entity.name.tag.yaml","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])","name":"string.unquoted.plain.in.yaml"}]},{"include":"#flow-node"},{"begin":":(?=\\\\s|$|[],\\\\[{}])","captures":{"0":{"name":"punctuation.separator.key-value.mapping.yaml"}},"end":"(?=[],}])","name":"meta.flow-pair.yaml","patterns":[{"include":"#flow-value"}]}]},"flow-scalar":{"patterns":[{"include":"#flow-scalar-double-quoted"},{"include":"#flow-scalar-single-quoted"},{"include":"#flow-scalar-plain-in"}]},"flow-scalar-double-quoted":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.yaml"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.yaml"}},"name":"string.quoted.double.yaml","patterns":[{"match":"\\\\\\\\([ \\"/0LN\\\\\\\\_abefnprtv]|x\\\\d\\\\d|u\\\\d{4}|U\\\\d{8})","name":"constant.character.escape.yaml"},{"match":"\\\\\\\\\\\\n","name":"constant.character.escape.double-quoted.newline.yaml"}]},"flow-scalar-plain-in":{"patterns":[{"include":"#flow-scalar-plain-in-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?][^],\\\\[{}\\\\s]","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])","name":"string.unquoted.plain.in.yaml"}]},"flow-scalar-plain-in-implicit-type":{"patterns":[{"captures":{"1":{"name":"constant.language.null.yaml"},"2":{"name":"constant.language.boolean.yaml"},"3":{"name":"constant.numeric.integer.yaml"},"4":{"name":"constant.numeric.float.yaml"},"5":{"name":"constant.other.timestamp.yaml"},"6":{"name":"constant.language.value.yaml"},"7":{"name":"constant.language.merge.yaml"}},"match":"(?:(null|Null|NULL|~)|([Yy]|yes|Yes|YES|[Nn]|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)|([-+]?0b[01_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*)|[-+]?0x[_\\\\h]+|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)|([-+]?(?:[0-9][0-9_]*)?\\\\.[.0-9]*(?:[Ee][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))|(\\\\d{4}-\\\\d{2}-\\\\d{2}|\\\\d{4}-\\\\d{1,2}-\\\\d{1,2}(?:[Tt]|[\\\\t ]+)\\\\d{1,2}:\\\\d{2}:\\\\d{2}(?:\\\\.\\\\d*)?(?:[\\\\t ]*Z|[-+]\\\\d{1,2}(?::\\\\d{1,2})?)?)|(=)|(<<))(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])"}]},"flow-scalar-plain-out":{"patterns":[{"include":"#flow-scalar-plain-out-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?]\\\\S","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))","name":"string.unquoted.plain.out.yaml"}]},"flow-scalar-plain-out-implicit-type":{"patterns":[{"captures":{"1":{"name":"constant.language.null.yaml"},"2":{"name":"constant.language.boolean.yaml"},"3":{"name":"constant.numeric.integer.yaml"},"4":{"name":"constant.numeric.float.yaml"},"5":{"name":"constant.other.timestamp.yaml"},"6":{"name":"constant.language.value.yaml"},"7":{"name":"constant.language.merge.yaml"}},"match":"(?:(null|Null|NULL|~)|([Yy]|yes|Yes|YES|[Nn]|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)|([-+]?0b[01_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*)|[-+]?0x[_\\\\h]+|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)|([-+]?(?:[0-9][0-9_]*)?\\\\.[.0-9]*(?:[Ee][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))|(\\\\d{4}-\\\\d{2}-\\\\d{2}|\\\\d{4}-\\\\d{1,2}-\\\\d{1,2}(?:[Tt]|[\\\\t ]+)\\\\d{1,2}:\\\\d{2}:\\\\d{2}(?:\\\\.\\\\d*)?(?:[\\\\t ]*Z|[-+]\\\\d{1,2}(?::\\\\d{1,2})?)?)|(=)|(<<))(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))"}]},"flow-scalar-single-quoted":{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.yaml"}},"end":"'(?!')","endCaptures":{"0":{"name":"punctuation.definition.string.end.yaml"}},"name":"string.quoted.single.yaml","patterns":[{"match":"''","name":"constant.character.escape.single-quoted.yaml"}]},"flow-sequence":{"begin":"\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.sequence.begin.yaml"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.sequence.end.yaml"}},"name":"meta.flow-sequence.yaml","patterns":[{"include":"#prototype"},{"match":",","name":"punctuation.separator.sequence.yaml"},{"include":"#flow-pair"},{"include":"#flow-node"}]},"flow-value":{"patterns":[{"begin":"\\\\G(?![],}])","end":"(?=[],}])","name":"meta.flow-pair.value.yaml","patterns":[{"include":"#flow-node"}]}]},"node":{"patterns":[{"include":"#block-node"}]},"property":{"begin":"(?=[!\\\\&])","end":"(?!\\\\G)","name":"meta.property.yaml","patterns":[{"captures":{"1":{"name":"keyword.control.property.anchor.yaml"},"2":{"name":"punctuation.definition.anchor.yaml"},"3":{"name":"entity.name.type.anchor.yaml"},"4":{"name":"invalid.illegal.character.anchor.yaml"}},"match":"\\\\G((&))([^],/\\\\[{}\\\\s]+)(\\\\S+)?"},{"match":"\\\\G!(?:<(?:%\\\\h{2}|[]!#$\\\\&-;=?-\\\\[_a-z~])+>|(?:[-0-9A-Za-z]*!)?(?:%\\\\h{2}|[#$\\\\&-+\\\\--;=?-Z_a-z~])+|)(?=[\\\\t ]|$)","name":"storage.type.tag-handle.yaml"},{"match":"\\\\S+","name":"invalid.illegal.tag-handle.yaml"}]},"prototype":{"patterns":[{"include":"#comment"},{"include":"#property"}]}},"scopeName":"source.yaml","aliases":["yml"]}`))];export{t as n,n as t};
1
+ import{t as e}from"./index-Ds4Ef0WZ.js";var t=e({default:()=>n}),n=[Object.freeze(JSON.parse(`{"displayName":"YAML","fileTypes":["yaml","yml","rviz","reek","clang-format","yaml-tmlanguage","syntax","sublime-syntax"],"firstLineMatch":"^%YAML( ?1.\\\\d+)?","name":"yaml","patterns":[{"include":"#comment"},{"include":"#property"},{"include":"#directive"},{"match":"^---","name":"entity.other.document.begin.yaml"},{"match":"^\\\\.{3}","name":"entity.other.document.end.yaml"},{"include":"#node"}],"repository":{"block-collection":{"patterns":[{"include":"#block-sequence"},{"include":"#block-mapping"}]},"block-mapping":{"patterns":[{"include":"#block-pair"}]},"block-node":{"patterns":[{"include":"#prototype"},{"include":"#block-scalar"},{"include":"#block-collection"},{"include":"#flow-scalar-plain-out"},{"include":"#flow-node"}]},"block-pair":{"patterns":[{"begin":"\\\\?","beginCaptures":{"1":{"name":"punctuation.definition.key-value.begin.yaml"}},"end":"(?=\\\\?)|^ *(:)|(:)","endCaptures":{"1":{"name":"punctuation.separator.key-value.mapping.yaml"},"2":{"name":"invalid.illegal.expected-newline.yaml"}},"name":"meta.block-mapping.yaml","patterns":[{"include":"#block-node"}]},{"begin":"(?=(?:[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?]\\\\S)([^:\\\\s]|:\\\\S|\\\\s+(?![#\\\\s]))*\\\\s*:(\\\\s|$))","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))","patterns":[{"include":"#flow-scalar-plain-out-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?]\\\\S","beginCaptures":{"0":{"name":"entity.name.tag.yaml"}},"contentName":"entity.name.tag.yaml","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))","name":"string.unquoted.plain.out.yaml"}]},{"match":":(?=\\\\s|$)","name":"punctuation.separator.key-value.mapping.yaml"}]},"block-scalar":{"begin":"(?:(\\\\|)|(>))([1-9])?([-+])?(.*\\\\n?)","beginCaptures":{"1":{"name":"keyword.control.flow.block-scalar.literal.yaml"},"2":{"name":"keyword.control.flow.block-scalar.folded.yaml"},"3":{"name":"constant.numeric.indentation-indicator.yaml"},"4":{"name":"storage.modifier.chomping-indicator.yaml"},"5":{"patterns":[{"include":"#comment"},{"match":".+","name":"invalid.illegal.expected-comment-or-newline.yaml"}]}},"end":"^(?=\\\\S)|(?!\\\\G)","patterns":[{"begin":"^( +)(?! )","end":"^(?!\\\\1|\\\\s*$)","name":"string.unquoted.block.yaml"}]},"block-sequence":{"match":"(-)(?!\\\\S)","name":"punctuation.definition.block.sequence.item.yaml"},"comment":{"begin":"(?:^([\\\\t ]*)|[\\\\t ]+)(?=#\\\\p{print}*$)","beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.yaml"}},"end":"(?!\\\\G)","patterns":[{"begin":"#","beginCaptures":{"0":{"name":"punctuation.definition.comment.yaml"}},"end":"\\\\n","name":"comment.line.number-sign.yaml"}]},"directive":{"begin":"^%","beginCaptures":{"0":{"name":"punctuation.definition.directive.begin.yaml"}},"end":"(?=$|[\\\\t ]+($|#))","name":"meta.directive.yaml","patterns":[{"captures":{"1":{"name":"keyword.other.directive.yaml.yaml"},"2":{"name":"constant.numeric.yaml-version.yaml"}},"match":"\\\\G(YAML)[\\\\t ]+(\\\\d+\\\\.\\\\d+)"},{"captures":{"1":{"name":"keyword.other.directive.tag.yaml"},"2":{"name":"storage.type.tag-handle.yaml"},"3":{"name":"support.type.tag-prefix.yaml"}},"match":"\\\\G(TAG)(?:[\\\\t ]+(!(?:[-0-9A-Za-z]*!)?)(?:[\\\\t ]+(!(?:%\\\\h{2}|[]!#$\\\\&-;=?-\\\\[_a-z~])*|(?![]!,\\\\[{}])(?:%\\\\h{2}|[]!#$\\\\&-;=?-\\\\[_a-z~])+))?)?"},{"captures":{"1":{"name":"support.other.directive.reserved.yaml"},"2":{"name":"string.unquoted.directive-name.yaml"},"3":{"name":"string.unquoted.directive-parameter.yaml"}},"match":"\\\\G(\\\\w+)(?:[\\\\t ]+(\\\\w+)(?:[\\\\t ]+(\\\\w+))?)?"},{"match":"\\\\S+","name":"invalid.illegal.unrecognized.yaml"}]},"flow-alias":{"captures":{"1":{"name":"keyword.control.flow.alias.yaml"},"2":{"name":"punctuation.definition.alias.yaml"},"3":{"name":"variable.other.alias.yaml"},"4":{"name":"invalid.illegal.character.anchor.yaml"}},"match":"((\\\\*))([^],/\\\\[{}\\\\s]+)([^],}\\\\s]\\\\S*)?"},"flow-collection":{"patterns":[{"include":"#flow-sequence"},{"include":"#flow-mapping"}]},"flow-mapping":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.mapping.begin.yaml"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.mapping.end.yaml"}},"name":"meta.flow-mapping.yaml","patterns":[{"include":"#prototype"},{"match":",","name":"punctuation.separator.mapping.yaml"},{"include":"#flow-pair"}]},"flow-node":{"patterns":[{"include":"#prototype"},{"include":"#flow-alias"},{"include":"#flow-collection"},{"include":"#flow-scalar"}]},"flow-pair":{"patterns":[{"begin":"\\\\?","beginCaptures":{"0":{"name":"punctuation.definition.key-value.begin.yaml"}},"end":"(?=[],}])","name":"meta.flow-pair.explicit.yaml","patterns":[{"include":"#prototype"},{"include":"#flow-pair"},{"include":"#flow-node"},{"begin":":(?=\\\\s|$|[],\\\\[{}])","beginCaptures":{"0":{"name":"punctuation.separator.key-value.mapping.yaml"}},"end":"(?=[],}])","patterns":[{"include":"#flow-value"}]}]},{"begin":"(?=(?:[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?][^],\\\\[{}\\\\s])([^],:\\\\[{}\\\\s]|:[^],\\\\[{}\\\\s]|\\\\s+(?![#\\\\s]))*\\\\s*:(\\\\s|$))","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])","name":"meta.flow-pair.key.yaml","patterns":[{"include":"#flow-scalar-plain-in-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?][^],\\\\[{}\\\\s]","beginCaptures":{"0":{"name":"entity.name.tag.yaml"}},"contentName":"entity.name.tag.yaml","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])","name":"string.unquoted.plain.in.yaml"}]},{"include":"#flow-node"},{"begin":":(?=\\\\s|$|[],\\\\[{}])","captures":{"0":{"name":"punctuation.separator.key-value.mapping.yaml"}},"end":"(?=[],}])","name":"meta.flow-pair.yaml","patterns":[{"include":"#flow-value"}]}]},"flow-scalar":{"patterns":[{"include":"#flow-scalar-double-quoted"},{"include":"#flow-scalar-single-quoted"},{"include":"#flow-scalar-plain-in"}]},"flow-scalar-double-quoted":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.yaml"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.yaml"}},"name":"string.quoted.double.yaml","patterns":[{"match":"\\\\\\\\([ \\"/0LN\\\\\\\\_abefnprtv]|x\\\\d\\\\d|u\\\\d{4}|U\\\\d{8})","name":"constant.character.escape.yaml"},{"match":"\\\\\\\\\\\\n","name":"constant.character.escape.double-quoted.newline.yaml"}]},"flow-scalar-plain-in":{"patterns":[{"include":"#flow-scalar-plain-in-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?][^],\\\\[{}\\\\s]","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])","name":"string.unquoted.plain.in.yaml"}]},"flow-scalar-plain-in-implicit-type":{"patterns":[{"captures":{"1":{"name":"constant.language.null.yaml"},"2":{"name":"constant.language.boolean.yaml"},"3":{"name":"constant.numeric.integer.yaml"},"4":{"name":"constant.numeric.float.yaml"},"5":{"name":"constant.other.timestamp.yaml"},"6":{"name":"constant.language.value.yaml"},"7":{"name":"constant.language.merge.yaml"}},"match":"(?:(null|Null|NULL|~)|([Yy]|yes|Yes|YES|[Nn]|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)|([-+]?0b[01_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*)|[-+]?0x[_\\\\h]+|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)|([-+]?(?:[0-9][0-9_]*)?\\\\.[.0-9]*(?:[Ee][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))|(\\\\d{4}-\\\\d{2}-\\\\d{2}|\\\\d{4}-\\\\d{1,2}-\\\\d{1,2}(?:[Tt]|[\\\\t ]+)\\\\d{1,2}:\\\\d{2}:\\\\d{2}(?:\\\\.\\\\d*)?(?:[\\\\t ]*Z|[-+]\\\\d{1,2}(?::\\\\d{1,2})?)?)|(=)|(<<))(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])"}]},"flow-scalar-plain-out":{"patterns":[{"include":"#flow-scalar-plain-out-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?]\\\\S","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))","name":"string.unquoted.plain.out.yaml"}]},"flow-scalar-plain-out-implicit-type":{"patterns":[{"captures":{"1":{"name":"constant.language.null.yaml"},"2":{"name":"constant.language.boolean.yaml"},"3":{"name":"constant.numeric.integer.yaml"},"4":{"name":"constant.numeric.float.yaml"},"5":{"name":"constant.other.timestamp.yaml"},"6":{"name":"constant.language.value.yaml"},"7":{"name":"constant.language.merge.yaml"}},"match":"(?:(null|Null|NULL|~)|([Yy]|yes|Yes|YES|[Nn]|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)|([-+]?0b[01_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*)|[-+]?0x[_\\\\h]+|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)|([-+]?(?:[0-9][0-9_]*)?\\\\.[.0-9]*(?:[Ee][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))|(\\\\d{4}-\\\\d{2}-\\\\d{2}|\\\\d{4}-\\\\d{1,2}-\\\\d{1,2}(?:[Tt]|[\\\\t ]+)\\\\d{1,2}:\\\\d{2}:\\\\d{2}(?:\\\\.\\\\d*)?(?:[\\\\t ]*Z|[-+]\\\\d{1,2}(?::\\\\d{1,2})?)?)|(=)|(<<))(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))"}]},"flow-scalar-single-quoted":{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.yaml"}},"end":"'(?!')","endCaptures":{"0":{"name":"punctuation.definition.string.end.yaml"}},"name":"string.quoted.single.yaml","patterns":[{"match":"''","name":"constant.character.escape.single-quoted.yaml"}]},"flow-sequence":{"begin":"\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.sequence.begin.yaml"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.sequence.end.yaml"}},"name":"meta.flow-sequence.yaml","patterns":[{"include":"#prototype"},{"match":",","name":"punctuation.separator.sequence.yaml"},{"include":"#flow-pair"},{"include":"#flow-node"}]},"flow-value":{"patterns":[{"begin":"\\\\G(?![],}])","end":"(?=[],}])","name":"meta.flow-pair.value.yaml","patterns":[{"include":"#flow-node"}]}]},"node":{"patterns":[{"include":"#block-node"}]},"property":{"begin":"(?=[!\\\\&])","end":"(?!\\\\G)","name":"meta.property.yaml","patterns":[{"captures":{"1":{"name":"keyword.control.property.anchor.yaml"},"2":{"name":"punctuation.definition.anchor.yaml"},"3":{"name":"entity.name.type.anchor.yaml"},"4":{"name":"invalid.illegal.character.anchor.yaml"}},"match":"\\\\G((&))([^],/\\\\[{}\\\\s]+)(\\\\S+)?"},{"match":"\\\\G!(?:<(?:%\\\\h{2}|[]!#$\\\\&-;=?-\\\\[_a-z~])+>|(?:[-0-9A-Za-z]*!)?(?:%\\\\h{2}|[#$\\\\&-+\\\\--;=?-Z_a-z~])+|)(?=[\\\\t ]|$)","name":"storage.type.tag-handle.yaml"},{"match":"\\\\S+","name":"invalid.illegal.tag-handle.yaml"}]},"prototype":{"patterns":[{"include":"#comment"},{"include":"#property"}]}},"scopeName":"source.yaml","aliases":["yml"]}`))];export{t as n,n as t};
@@ -14,8 +14,8 @@
14
14
  </script>
15
15
  <link rel="icon" type="image/svg+xml" href="./favicon.svg" />
16
16
  <title>diffle</title>
17
- <script type="module" crossorigin src="./assets/index-Dw_tHgT2.js"></script>
18
- <link rel="stylesheet" crossorigin href="./assets/index-C-uvIS11.css">
17
+ <script type="module" crossorigin src="./assets/index-Ds4Ef0WZ.js"></script>
18
+ <link rel="stylesheet" crossorigin href="./assets/index-Djt_eZkA.css">
19
19
  </head>
20
20
  <body>
21
21
  <div id="root"></div>
@@ -3952,7 +3952,7 @@ function generateCompletion(program, { shell, executable = program.name() }) {
3952
3952
  }
3953
3953
  //#endregion
3954
3954
  //#region package.json
3955
- var version$1 = "0.2.0";
3955
+ var version$1 = "0.2.2";
3956
3956
  //#endregion
3957
3957
  //#region src/server/comments/anchor.ts
3958
3958
  function splitLines(contents) {
@@ -12284,6 +12284,10 @@ const ModeRequestSchema = discriminatedUnion("kind", [
12284
12284
  from: number().int().positive(),
12285
12285
  to: number().int().positive()
12286
12286
  }),
12287
+ object({
12288
+ kind: literal("range-diff"),
12289
+ args: string().array()
12290
+ }),
12287
12291
  object({
12288
12292
  kind: literal("pair"),
12289
12293
  commit: string().nullable()
@@ -12361,13 +12365,25 @@ const RangePairSchema = object({
12361
12365
  status: PairStatusSchema
12362
12366
  });
12363
12367
  /**
12364
- * Two iterations of a range compared. The old side is `from`'s head replayed onto `to`'s base
12365
- * (a tree, not a commit), so a rebase in between does not show up as the upstream's changes;
12366
- * the new side is `to`'s head.
12368
+ * One range of a range-diff, `old..new`: the revisions that named it, so moved refs can be
12369
+ * resolved again, and the commits they resolved to. A recorded iteration of the enclosing
12370
+ * range carries its number; a range the reviewer named carries null.
12371
+ */
12372
+ const RangeSideSchema = object({
12373
+ old: string(),
12374
+ new: string(),
12375
+ oldSha: string(),
12376
+ newSha: string(),
12377
+ iteration: number().nullable()
12378
+ });
12379
+ /**
12380
+ * Two ranges compared: two iterations of one range, or any two the reviewer named. The old
12381
+ * side is `from`'s head replayed onto `to`'s base (a tree, not a commit), so a rebase in
12382
+ * between does not show up as the upstream's changes; the new side is `to`'s head.
12367
12383
  */
12368
12384
  const InterdiffSchema = object({
12369
- from: IterationSchema,
12370
- to: IterationSchema,
12385
+ from: RangeSideSchema,
12386
+ to: RangeSideSchema,
12371
12387
  /** Paths the replay could not merge; they carry conflict markers on the old side. */
12372
12388
  conflicts: string().array(),
12373
12389
  /** The two ranges' commits paired, in `git range-diff` order: the newer range's, dropped commits where they were. */
@@ -12383,7 +12399,10 @@ const PairSpecSchema = object({
12383
12399
  conflicts: string().array()
12384
12400
  });
12385
12401
  const ModeSpecSchema = ComparisonSchema.extend({
12386
- /** Set while one commit of a range is focused, or two of its iterations compared: the range, whose commits the snapshot keeps listing. */
12402
+ /**
12403
+ * Set while one commit of a range is focused or two ranges are compared: the range, whose commits the
12404
+ * snapshot keeps listing. For a range-diff it is the newer range, where the reviewer continues.
12405
+ */
12387
12406
  within: ComparisonSchema.optional(),
12388
12407
  interdiff: InterdiffSchema.optional(),
12389
12408
  /** Set with `interdiff` while one of its pairs is shown. */
@@ -12391,18 +12410,33 @@ const ModeSpecSchema = ComparisonSchema.extend({
12391
12410
  });
12392
12411
  /**
12393
12412
  * Display comparison endpoints with branch names instead of internal ref namespaces; a single commit as
12394
- * `<sha>^!`, as `<range> @ <sha>` when focused within a range, as `<range> #1→#2` for an interdiff and
12395
- * `<range> #1→#2 @ <sha>` for one of its pairs.
12413
+ * `<sha>^!`, as `<range> @ <sha>` when focused within a range, as `<range> #1→#2` for two of its
12414
+ * iterations, as `<a>..<b> → <c>..<d>` for two named ranges, and with ` @ <sha>` for one pair of either.
12396
12415
  */
12397
12416
  function comparisonLabel(mode) {
12398
12417
  if (mode.within && mode.interdiff) {
12399
- const label = `${comparisonLabel(mode.within)} #${mode.interdiff.from.n}→#${mode.interdiff.to.n}`;
12418
+ const { from, to } = mode.interdiff;
12419
+ const iterations = shownIterations(mode);
12420
+ const label = iterations ? `${comparisonLabel(mode.within)} #${iterations.from}→#${iterations.to}` : `${rangeLabel(from)} → ${rangeLabel(to)}`;
12400
12421
  return mode.pair ? `${label} @ ${mode.pair.new.slice(0, 7)}` : label;
12401
12422
  }
12402
12423
  if (mode.within) return `${comparisonLabel(mode.within)} @ ${mode.new.slice(0, 7)}`;
12403
12424
  if (mode.base === "parent") return `${mode.new.slice(0, 7)}^!`;
12404
12425
  return `${refName(mode.old)}${mode.base === "merge-base" ? "..." : ".."}${refName(mode.new)}`;
12405
12426
  }
12427
+ /** One side of a range-diff as the reviewer named it, `<old>..<new>`, with full hashes abbreviated. */
12428
+ function rangeLabel(side) {
12429
+ const short = (rev) => /^[0-9a-f]{40}$/.test(rev) ? rev.slice(0, 7) : refName(rev);
12430
+ return `${short(side.old)}..${short(side.new)}`;
12431
+ }
12432
+ /** The iteration numbers an interdiff compares, or null when it compares ranges the reviewer named. */
12433
+ function shownIterations(mode) {
12434
+ const inter = mode.interdiff;
12435
+ return inter && inter.from.iteration != null && inter.to.iteration != null ? {
12436
+ from: inter.from.iteration,
12437
+ to: inter.to.iteration
12438
+ } : null;
12439
+ }
12406
12440
  /** A comparison endpoint as the user named it: without diffle's PR namespace or `refs/heads/`. */
12407
12441
  function refName(rev) {
12408
12442
  return rev.replace(/^refs\/diffle\/[^/]+\/\d+\/(?:base|head)\//, "").replace(/^refs\/(?:heads|remotes)\//, "");
@@ -14533,6 +14567,53 @@ function parseRevspec(args) {
14533
14567
  base: "merge-base"
14534
14568
  };
14535
14569
  }
14570
+ /**
14571
+ * `git range-diff` style arguments, as two `old..new` ranges:
14572
+ * "a..b" "c..d" → a..b against c..d
14573
+ * "base" "b" "d" → base..b against base..d
14574
+ * "b...d" → d..b against b..d: each tip's commits since their divergence
14575
+ * A range also takes `<rev>^!`, the one commit. Empty sides default to HEAD; the worktree is
14576
+ * not a commit and has no place in a range.
14577
+ */
14578
+ function parseRangeDiff(args) {
14579
+ if (args.length === 3) {
14580
+ const [base, b, d] = args;
14581
+ for (const arg of args) if (arg.includes("..") || arg.endsWith("^!")) throw new RevspecError("expected <base> <rev1> <rev2> as three plain revisions");
14582
+ return [range(base, b), range(base, d)];
14583
+ }
14584
+ if (args.length === 2) {
14585
+ const [a, b] = args;
14586
+ return [parseRange(a), parseRange(b)];
14587
+ }
14588
+ if (args.length === 1) {
14589
+ const arg = args[0];
14590
+ const three = arg.indexOf("...");
14591
+ if (three === -1 || arg.endsWith("^!")) throw new RevspecError("expected <range1> <range2>, <rev1>...<rev2> or <base> <rev1> <rev2>");
14592
+ const b = arg.slice(0, three) || "HEAD";
14593
+ const d = arg.slice(three + 3) || "HEAD";
14594
+ if (b.includes("..") || d.includes("..")) throw new RevspecError("cannot combine \"...\" with \"..\"");
14595
+ return [range(d, b), range(b, d)];
14596
+ }
14597
+ throw new RevspecError("expected <range1> <range2>, <rev1>...<rev2> or <base> <rev1> <rev2>");
14598
+ }
14599
+ function parseRange(arg) {
14600
+ if (arg.endsWith("^!")) {
14601
+ const commit = arg.slice(0, -2) || "HEAD";
14602
+ if (commit.includes("..")) throw new RevspecError("cannot combine \"^!\" with \"..\"");
14603
+ return range(`${commit}^`, commit);
14604
+ }
14605
+ if (arg.includes("...")) throw new RevspecError(`a range of a range-diff is <old>..<new>, not ${arg}`);
14606
+ const two = arg.indexOf("..");
14607
+ if (two === -1) throw new RevspecError(`not a range: ${arg} (expected <old>..<new>)`);
14608
+ return range(arg.slice(0, two) || "HEAD", arg.slice(two + 2) || "HEAD");
14609
+ }
14610
+ function range(old, next) {
14611
+ for (const rev of [old, next]) if (rev === WORKTREE || rev === `${WORKTREE}^`) throw new RevspecError("the worktree is not a commit");
14612
+ return {
14613
+ old,
14614
+ new: next
14615
+ };
14616
+ }
14536
14617
  var RevspecError = class extends Error {};
14537
14618
  //#endregion
14538
14619
  //#region node_modules/@hono/node-server/dist/index.mjs
@@ -18867,6 +18948,67 @@ async function read(file) {
18867
18948
  }
18868
18949
  }
18869
18950
  //#endregion
18951
+ //#region src/server/rangediff.ts
18952
+ /**
18953
+ * The mode that compares `older` with `newer`: `older`'s head replayed onto `newer`'s base against
18954
+ * `newer`'s head, so only what the series itself changed in between shows, with the two ranges'
18955
+ * commits paired. `range` is where the reviewer continues afterwards; its refs keep being watched,
18956
+ * so the comparison is pinned under them. Comments are off in it: the old side is a tree no
18957
+ * revision names.
18958
+ */
18959
+ async function compareRanges(repo, range, older, newer) {
18960
+ const commentKey = older.iteration != null && newer.iteration != null ? `${range.commentKey}:interdiff:${older.iteration}-${newer.iteration}` : `range-diff:${older.oldSha}..${older.newSha}:${newer.oldSha}..${newer.newSha}`;
18961
+ const [{ tree, conflicts }, pairs] = await Promise.all([older.oldSha === newer.oldSha ? repo.tree(older.newSha).then((tree) => ({
18962
+ tree,
18963
+ conflicts: []
18964
+ })) : repo.replay(older.oldSha, newer.oldSha, older.newSha), pairRanges(repo, older, newer)]);
18965
+ return {
18966
+ old: tree,
18967
+ new: newer.newSha,
18968
+ base: "direct",
18969
+ live: range.live === "none" ? "none" : "refs",
18970
+ commentKey,
18971
+ within: range,
18972
+ interdiff: {
18973
+ from: older,
18974
+ to: newer,
18975
+ conflicts,
18976
+ pairs
18977
+ }
18978
+ };
18979
+ }
18980
+ /**
18981
+ * Pairs the two ranges' commits as `git range-diff` does and tells a pair whose patch is the
18982
+ * same (a reworded commit) from an amended one by patch id. range-diff compares every commit
18983
+ * with every other, so a range past MAX_RANGE_COMMITS is refused rather than left running.
18984
+ */
18985
+ async function pairRanges(repo, older, newer) {
18986
+ const oldRange = `${older.oldSha}..${older.newSha}`;
18987
+ const newRange = `${newer.oldSha}..${newer.newSha}`;
18988
+ const [oldCommits, newCommits] = await Promise.all([repo.rangeCommits(oldRange, 250), repo.rangeCommits(newRange, 250)]);
18989
+ for (const [side, commits] of [[older, oldCommits], [newer, newCommits]]) if (commits.total > 250) throw new RevspecError(`${comparisonLabel({
18990
+ ...side,
18991
+ base: "direct"
18992
+ })} spans ${commits.total} commits; a range-diff takes at most 250`);
18993
+ const rows = await repo.rangeDiff(oldRange, newRange);
18994
+ const find = async (list, abbrev) => {
18995
+ if (abbrev === null) return null;
18996
+ return list.find((c) => c.sha.startsWith(abbrev)) ?? (await repo.rangeCommits(`${abbrev}^!`, 1)).list[0] ?? null;
18997
+ };
18998
+ const paired = await Promise.all(rows.map(async (row) => ({
18999
+ old: await find(oldCommits.list, row.old),
19000
+ new: await find(newCommits.list, row.new),
19001
+ marker: row.marker
19002
+ })));
19003
+ const changed = paired.filter((p) => p.marker === "!" && p.old && p.new);
19004
+ const ids = await repo.patchIds(changed.flatMap((p) => [p.old.sha, p.new.sha]));
19005
+ return paired.map(({ old, new: next, marker }) => ({
19006
+ old,
19007
+ new: next,
19008
+ status: marker === "=" ? "identical" : marker === "<" ? "dropped" : marker === ">" ? "added" : old && next && ids.get(old.sha) !== void 0 && ids.get(old.sha) === ids.get(next.sha) ? "message" : "changed"
19009
+ }));
19010
+ }
19011
+ //#endregion
18870
19012
  //#region src/server/mode.ts
18871
19013
  /**
18872
19014
  * Resolves a comparison to Git endpoints for initial mode setup, PR setup after
@@ -18944,6 +19086,7 @@ async function namesBranch(repo, comparison) {
18944
19086
  /** Resolves an input command into a comparison and optional explicit PR identity. */
18945
19087
  async function resolveReview(req, repo, github) {
18946
19088
  if (req.kind === "pr") return resolvePr(req, repo, github);
19089
+ if (req.kind === "range-diff") return rangeDiffReview(repo, parseRangeDiff(req.args));
18947
19090
  const parsed = req.kind === "working" ? {
18948
19091
  old: "HEAD",
18949
19092
  new: "worktree",
@@ -18959,12 +19102,48 @@ async function resolveReview(req, repo, github) {
18959
19102
  commentKey: `commit:${sha}`
18960
19103
  } };
18961
19104
  }
19105
+ return { mode: await resolveRange(repo, parsed, req.kind === "working" ? "working" : void 0) };
19106
+ }
19107
+ /** A range as a comparison: resolved for its liveness and keyed for its comments, unless `key` names them. */
19108
+ async function resolveRange(repo, parsed, key) {
18962
19109
  const { oldSha, newSha, live } = await resolveComparison(repo, parsed);
18963
- return { mode: {
19110
+ return {
18964
19111
  ...parsed,
18965
19112
  live,
18966
- commentKey: req.kind === "working" ? "working" : await commentKey(repo, parsed, oldSha, newSha)
18967
- } };
19113
+ commentKey: key ?? await commentKey(repo, parsed, oldSha, newSha)
19114
+ };
19115
+ }
19116
+ /**
19117
+ * Two ranges the reviewer named, compared. Both resolve now and the comparison is pinned; the
19118
+ * newer range is where "All changes" leads and whose refs are watched. Resolving again, as a
19119
+ * reload does, follows the revisions either range was named by.
19120
+ */
19121
+ async function rangeDiffReview(repo, [older, newer], prUrl) {
19122
+ const resolveSide = async (parsed) => {
19123
+ const { oldSha, newSha } = await resolveComparison(repo, {
19124
+ ...parsed,
19125
+ base: "direct"
19126
+ });
19127
+ return {
19128
+ old: parsed.old,
19129
+ new: parsed.new,
19130
+ oldSha,
19131
+ newSha,
19132
+ iteration: null
19133
+ };
19134
+ };
19135
+ const [range, from, to] = await Promise.all([
19136
+ resolveRange(repo, {
19137
+ ...newer,
19138
+ base: "direct"
19139
+ }),
19140
+ resolveSide(older),
19141
+ resolveSide(newer)
19142
+ ]);
19143
+ return {
19144
+ prUrl,
19145
+ mode: await compareRanges(repo, range, from, to)
19146
+ };
18968
19147
  }
18969
19148
  /**
18970
19149
  * Branch identities keep review state stable across pushes and local branch aliases.
@@ -19472,9 +19651,9 @@ var Session = class {
19472
19651
  };
19473
19652
  }
19474
19653
  /**
19475
- * Compares two recorded iterations of the active range: `from`'s head replayed onto `to`'s base
19476
- * against `to`'s head, so only what the branch itself changed in between shows. The interdiff
19477
- * keeps its own comments and the range's PR identity; its refs keep being watched.
19654
+ * Compares two recorded iterations of the active range, so only what the branch itself changed
19655
+ * in between shows. The interdiff keeps its own comments and the range's PR identity; its refs
19656
+ * keep being watched.
19478
19657
  */
19479
19658
  async interdiff(from, to) {
19480
19659
  const a = this.require();
@@ -19484,58 +19663,19 @@ var Session = class {
19484
19663
  const store = new IterationStore(this.repo, range.commentKey);
19485
19664
  const [older, newer] = await Promise.all([store.get(from), store.get(to)]);
19486
19665
  if (!older || !newer) throw new RevspecError(`no iteration #${older ? to : from} of ${comparisonLabel(range)}`);
19487
- const [{ tree, conflicts }, pairs] = await Promise.all([older.oldSha === newer.oldSha ? this.repo.tree(older.newSha).then((tree) => ({
19488
- tree,
19489
- conflicts: []
19490
- })) : this.repo.replay(older.oldSha, newer.oldSha, older.newSha), this.pairs(older, newer)]);
19666
+ const side = (it) => ({
19667
+ old: it.oldSha,
19668
+ new: it.newSha,
19669
+ oldSha: it.oldSha,
19670
+ newSha: it.newSha,
19671
+ iteration: it.n
19672
+ });
19491
19673
  return {
19492
19674
  prUrl: a.prUrl,
19493
- mode: {
19494
- old: tree,
19495
- new: newer.newSha,
19496
- base: "direct",
19497
- live: range.live === "none" ? "none" : "refs",
19498
- commentKey: `${range.commentKey}:interdiff:${from}-${to}`,
19499
- within: range,
19500
- interdiff: {
19501
- from: older,
19502
- to: newer,
19503
- conflicts,
19504
- pairs
19505
- }
19506
- }
19675
+ mode: await compareRanges(this.repo, range, side(older), side(newer))
19507
19676
  };
19508
19677
  }
19509
19678
  /**
19510
- * Pairs the two iterations' commits as `git range-diff` does and tells a pair whose patch is
19511
- * the same (a reworded commit) from an amended one by patch id.
19512
- */
19513
- async pairs(older, newer) {
19514
- const oldRange = `${older.oldSha}..${older.newSha}`;
19515
- const newRange = `${newer.oldSha}..${newer.newSha}`;
19516
- const [rows, oldCommits, newCommits] = await Promise.all([
19517
- this.repo.rangeDiff(oldRange, newRange),
19518
- this.repo.rangeCommits(oldRange, 250),
19519
- this.repo.rangeCommits(newRange, 250)
19520
- ]);
19521
- const find = async (list, abbrev) => {
19522
- if (abbrev === null) return null;
19523
- return list.find((c) => c.sha.startsWith(abbrev)) ?? (await this.repo.rangeCommits(`${abbrev}^!`, 1)).list[0] ?? null;
19524
- };
19525
- const paired = await Promise.all(rows.map(async (row) => ({
19526
- old: await find(oldCommits.list, row.old),
19527
- new: await find(newCommits.list, row.new),
19528
- marker: row.marker
19529
- })));
19530
- const changed = paired.filter((p) => p.marker === "!" && p.old && p.new);
19531
- const ids = await this.repo.patchIds(changed.flatMap((p) => [p.old.sha, p.new.sha]));
19532
- return paired.map(({ old, new: next, marker }) => ({
19533
- old,
19534
- new: next,
19535
- status: marker === "=" ? "identical" : marker === "<" ? "dropped" : marker === ">" ? "added" : old && next && ids.get(old.sha) !== void 0 && ids.get(old.sha) === ids.get(next.sha) ? "message" : "changed"
19536
- }));
19537
- }
19538
- /**
19539
19679
  * Shows one pair of the active interdiff by its new-side commit: an added commit against its
19540
19680
  * parent, an amended or reworded one against its old self replayed onto its parent. With null,
19541
19681
  * the whole interdiff again. Identical pairs have nothing to show; dropped ones have no new side.
@@ -19544,10 +19684,13 @@ var Session = class {
19544
19684
  const a = this.require();
19545
19685
  const { interdiff, within: range } = a.mode;
19546
19686
  if (!interdiff || !range) throw new RevspecError("no interdiff to pick a pair from");
19547
- if (commit === null) return this.interdiff(interdiff.from.n, interdiff.to.n);
19687
+ if (commit === null) return {
19688
+ prUrl: a.prUrl,
19689
+ mode: await compareRanges(this.repo, range, interdiff.from, interdiff.to)
19690
+ };
19548
19691
  const found = interdiff.pairs.find((p) => p.new && (p.new.sha === commit || p.new.short === commit));
19549
19692
  if (!found?.new) throw new RevspecError(`not a commit of ${comparisonLabel(a.mode)}: ${commit}`);
19550
- if (found.status === "identical") throw new RevspecError(`${found.new.short} is identical in both iterations`);
19693
+ if (found.status === "identical") throw new RevspecError(`${found.new.short} is identical in both ranges`);
19551
19694
  const base = {
19552
19695
  live: range.live === "none" ? "none" : "refs",
19553
19696
  within: range,
@@ -19652,8 +19795,8 @@ var Session = class {
19652
19795
  reload() {
19653
19796
  return this.run(async () => {
19654
19797
  const a = this.require();
19655
- if (!a.mode.interdiff || !a.mode.within) return this.recompute();
19656
- return this.leaveInterdiff(a);
19798
+ if (a.mode.within && shownIterations(a.mode)) return this.leaveInterdiff(a);
19799
+ return this.recompute();
19657
19800
  });
19658
19801
  }
19659
19802
  /** Forgets the range's recorded iterations and unpins their commits; its current state is recorded anew as #1. */
@@ -19662,7 +19805,7 @@ var Session = class {
19662
19805
  const a = this.require();
19663
19806
  const range = a.mode.within ?? a.mode;
19664
19807
  await new IterationStore(this.repo, range.commentKey).clear();
19665
- return a.mode.interdiff ? this.leaveInterdiff(a) : this.recompute();
19808
+ return shownIterations(a.mode) ? this.leaveInterdiff(a) : this.recompute();
19666
19809
  });
19667
19810
  }
19668
19811
  /**
@@ -19678,23 +19821,34 @@ var Session = class {
19678
19821
  if (!list.some((it) => it.n === n)) throw new RevspecError(`no iteration #${n}`);
19679
19822
  if (list.at(-1).n === n) throw new RevspecError(`#${n} is the latest iteration, the range's current state`);
19680
19823
  await store.remove(n);
19681
- const inter = a.mode.interdiff;
19682
- return inter && (inter.from.n === n || inter.to.n === n) ? this.leaveInterdiff(a) : this.recompute();
19824
+ const shown = shownIterations(a.mode);
19825
+ return shown && (shown.from === n || shown.to === n) ? this.leaveInterdiff(a) : this.recompute();
19683
19826
  });
19684
19827
  }
19685
- async leaveInterdiff(a) {
19686
- const snap = await this.activate({
19828
+ leaveInterdiff(a) {
19829
+ return this.enter({
19687
19830
  mode: a.mode.within,
19688
19831
  prUrl: a.prUrl
19689
19832
  });
19833
+ }
19834
+ /** Activates a review in place of the current one, as a switch does, and tells clients. */
19835
+ async enter(review) {
19836
+ const snap = await this.activate(review);
19690
19837
  this.hub.broadcast({
19691
19838
  type: "snapshot",
19692
19839
  version: snap.version
19693
19840
  });
19694
19841
  return snap;
19695
19842
  }
19843
+ /**
19844
+ * Recomputes the active snapshot. A range-diff of two named ranges resolves them again
19845
+ * instead, since its sides are pinned trees: that is how it follows the refs it was named by.
19846
+ * From one of its pairs too, back to the whole range-diff: the pair may no longer exist.
19847
+ */
19696
19848
  recompute() {
19697
19849
  const a = this.require();
19850
+ const inter = a.mode.interdiff;
19851
+ if (inter && !shownIterations(a.mode)) return rangeDiffReview(this.repo, [inter.from, inter.to], a.prUrl).then((review) => this.enter(review));
19698
19852
  a.snapshotter.invalidate(++this.version);
19699
19853
  return this.publish(a);
19700
19854
  }
@@ -19802,7 +19956,7 @@ var Session = class {
19802
19956
  * review. Goes through `readSide`, so the allowlist applies.
19803
19957
  */
19804
19958
  anchorSource() {
19805
- if (this.mode.interdiff) throw new RevspecError("comments are off while comparing iterations");
19959
+ if (this.mode.interdiff) throw new RevspecError(shownIterations(this.mode) ? "comments are off while comparing iterations" : "comments are off in a range-diff");
19806
19960
  return {
19807
19961
  quote: async (path, side, startLine, endLine) => {
19808
19962
  const snap = await this.snapshotter.current();
@@ -23796,13 +23950,19 @@ const c = {
23796
23950
  };
23797
23951
  const program = new Command().exitOverride().name("diffle").description("Review a git diff in the browser and export line comments as an agent prompt.").version(version$1, "-v, --version", "print the version and exit").addOption(completionHint(new Option("-C <path>", "run as if started in <path> (any directory inside a git worktree)"), { kind: "directory" })).option("-p, --port <port>", `port to listen on (default: ${DEFAULT_PORT}, or the next free one; 0 = random)`, parsePort).option("-H, --host <host>", "address to bind; use 0.0.0.0 to expose on the network", "127.0.0.1").option("--allowed-origin <origin>", "trusted public HTTP(S) origin behind a reverse proxy (without a path)", parseAllowedOrigin).option("--no-open", "do not open a browser").option("--keep-alive", "keep the server running after all browser tabs close").option("--no-watch", "do not watch for changes").addOption(new Option("--auto-viewed <glob>", "mark matching files viewed for this session (repeatable)").argParser(collect).default([], "none")).option("-U, --context <n>", "context lines around changes for this session (default: config, 5)", parseContext).addOption(new Option("--lsp <language=command>", "language server command for one language, started for this run (repeatable); by default the diff's languages are served by whatever is on PATH").argParser(collectLspOverride).default(true, "the diff's languages, resolved on PATH")).option("--no-lsp", "do not start any language server").option("--timing", "print startup phase timings to stderr").option("--dev", "serve the client through Vite (development)", process.env.DIFFLE_DEV === "1" ? true : void 0).addArgument(completionHint(new Argument("[revs...]", "git-diff style revisions: <rev> | <a>..<b> | <a>...<b> | <a> <b>"), {
23798
23952
  kind: "choices",
23799
- values: ["working", "pr"]
23953
+ values: [
23954
+ "working",
23955
+ "pr",
23956
+ "range-diff"
23957
+ ]
23800
23958
  })).addHelpText("after", `
23801
23959
  Shorthands (in place of <revs>):
23802
23960
  working same as HEAD..worktree: uncommitted changes, staged and untracked included
23803
23961
  pr [number|url] a GitHub pull request: its base...head, fetched if needed
23804
23962
  (without an argument: the pull request for this branch)
23805
23963
  show [rev] same as <rev>^!: one commit against its first parent, pinned (default: HEAD)
23964
+ range-diff <ranges...> how one series of commits became another, like git range-diff:
23965
+ <a>..<b> <c>..<d> | <base> <b> <d> | <b>...<d>
23806
23966
 
23807
23967
  Revisions follow git diff, except that a lone one compares from the merge base:
23808
23968
  diffle main same as main...HEAD: what this branch added since it left main
@@ -23816,7 +23976,10 @@ Without revisions, diffle compares HEAD..worktree.
23816
23976
 
23817
23977
  Status goes to stderr, so stdout carries only the review: unless --keep-alive is set,
23818
23978
  closing the last auto-opened browser tab stops diffle and prints the open comments as a prompt for an agent.
23819
- Ctrl+C always stops it.`).action(async (revs, _o, cmd) => {
23979
+ Ctrl+C always stops it.
23980
+
23981
+ Docs: https://diffle.app
23982
+ Source and issues: https://github.com/moritzwilksch/diffle`).action(async (revs, _o, cmd) => {
23820
23983
  await run(revs.length === 0 ? { kind: "working" } : {
23821
23984
  kind: "revspec",
23822
23985
  args: revs
@@ -23831,6 +23994,10 @@ program.command("pr", { hidden: true }).argument("[pr]", "pull request number or
23831
23994
  kind: "pr",
23832
23995
  pr
23833
23996
  }, cmd.optsWithGlobals()));
23997
+ program.command("range-diff", { hidden: true }).argument("<ranges...>", "two ranges: <a>..<b> <c>..<d>, <base> <b> <d>, or <b>...<d>").summary("two series of commits").description("How one series of commits became another, as git range-diff shows it: the older range replayed onto the newer one’s base against the newer range, with the commits paired.").action(async (ranges, _o, cmd) => run({
23998
+ kind: "range-diff",
23999
+ args: ranges
24000
+ }, cmd.optsWithGlobals()));
23834
24001
  const config = program.command("config").description("show or edit the user config (same settings as the UI dialog)");
23835
24002
  config.command("show", { isDefault: true }).description("print the config file path and contents").action(async () => {
23836
24003
  const store = await UserConfigStore.open();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moritzwilksch/diffle",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "Local git diff reviewer in the browser with line comments exported as agent prompts",
5
5
  "keywords": [
6
6
  "agent",