@hona/openeval 0.3.2 → 0.4.0

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 (186) hide show
  1. package/JUDGING.md +57 -0
  2. package/README.md +13 -1
  3. package/package.json +1 -1
  4. package/src/app/input-fingerprints.ts +37 -7
  5. package/src/app/load-benchmark.ts +87 -7
  6. package/src/app/merge-runs.ts +1 -0
  7. package/src/app/read-results.ts +3 -1
  8. package/src/app/run-benchmark.ts +43 -4
  9. package/src/app/run-eval.ts +5 -1
  10. package/src/app/scores.ts +19 -2
  11. package/src/cli.ts +6 -0
  12. package/src/criterion-categories.ts +53 -0
  13. package/src/index.ts +5 -0
  14. package/src/infra/containers/catalog.ts +126 -0
  15. package/src/infra/judging/code-criteria.ts +112 -0
  16. package/src/infra/opencode/auth.ts +6 -2
  17. package/src/types.ts +16 -0
  18. package/src/view.ts +62 -0
  19. package/viewer/assets/{abnfDiagram-VCTEODGH-BD2a0nVg.js → abnfDiagram-VCTEODGH-D-idCGaW.js} +1 -1
  20. package/viewer/assets/{angular-html-DdVCwIK9.js → angular-html-B-7vkhmj.js} +1 -1
  21. package/viewer/assets/{angular-ts-CuqPbRgQ.js → angular-ts-CqJWLTIZ.js} +1 -1
  22. package/viewer/assets/{apl-CtDG5Cje.js → apl-DVTjqAhB.js} +1 -1
  23. package/viewer/assets/{arc-wyqSIjyo.js → arc-Bmz8zsvq.js} +1 -1
  24. package/viewer/assets/architecture-7GRP2DOG-D3Kw34KW.js +1 -0
  25. package/viewer/assets/{architectureDiagram-5GKGNRK7-BmPFNQC8.js → architectureDiagram-5GKGNRK7-CxqP2ijS.js} +1 -1
  26. package/viewer/assets/{astro-D6G6kLSd.js → astro-Ih6QH4I8.js} +1 -1
  27. package/viewer/assets/{blade-lg78flvd.js → blade-vzkWgA61.js} +1 -1
  28. package/viewer/assets/{blockDiagram-I7D4REHJ-uc_S4CYt.js → blockDiagram-I7D4REHJ-Dm35S95Q.js} +1 -1
  29. package/viewer/assets/{c-DnJ04u1N.js → c-092Q-y5e.js} +1 -1
  30. package/viewer/assets/{c4Diagram-7LVT6UL2-C6MKduOJ.js → c4Diagram-7LVT6UL2-DArgyJNC.js} +1 -1
  31. package/viewer/assets/channel-D2lVv6ST.js +1 -0
  32. package/viewer/assets/{chapel-BXrX4Xy8.js → chapel-DUOt2X3X.js} +1 -1
  33. package/viewer/assets/{chunk-4HAMMTFA-sUmS_B9_.js → chunk-4HAMMTFA-Bm3UCwQ6.js} +1 -1
  34. package/viewer/assets/{chunk-75Z2AOVW-C-WwWkXY.js → chunk-75Z2AOVW-CpmjsCJX.js} +1 -1
  35. package/viewer/assets/{chunk-DU6HZSFF-BMoyWhsq.js → chunk-DU6HZSFF-DYT2KEwe.js} +1 -1
  36. package/viewer/assets/{chunk-F27PBJKO-CP5YX4kg.js → chunk-F27PBJKO-BFGd2OPj.js} +1 -1
  37. package/viewer/assets/{chunk-GMAD6QVW-DD4A7Z3L.js → chunk-GMAD6QVW-D8gzxWqz.js} +1 -1
  38. package/viewer/assets/{chunk-GVQU2GXP-HCwJTvMX.js → chunk-GVQU2GXP-BZJsi-wS.js} +1 -1
  39. package/viewer/assets/{chunk-IMKFNOWR-B-IMCCL2.js → chunk-IMKFNOWR-BKbF8JvM.js} +1 -1
  40. package/viewer/assets/{chunk-L3NEJ4N5-DggkuyxL.js → chunk-L3NEJ4N5-SWKb6tCy.js} +1 -1
  41. package/viewer/assets/{chunk-OSK3NFVY-DVlD89z7.js → chunk-OSK3NFVY-BrqoFOmR.js} +1 -1
  42. package/viewer/assets/{chunk-P2QGCYS3-BxVX7Csy.js → chunk-P2QGCYS3-B10Cyxbx.js} +1 -1
  43. package/viewer/assets/{chunk-POPQ4Y6H-BAU1NKsx.js → chunk-POPQ4Y6H-DXpfBPGQ.js} +1 -1
  44. package/viewer/assets/{chunk-PWAF6VOD-DMn6Wi7h.js → chunk-PWAF6VOD-DZmaXnfr.js} +1 -1
  45. package/viewer/assets/{chunk-SHT3W25Y-CgZcCWnM.js → chunk-SHT3W25Y-1U6zFGxP.js} +1 -1
  46. package/viewer/assets/{chunk-SVP7TREG-Bkhb6FAV.js → chunk-SVP7TREG-CaW6KcpM.js} +1 -1
  47. package/viewer/assets/{chunk-TICWLB2K-D2tOhmdF.js → chunk-TICWLB2K-X4pj7G4S.js} +1 -1
  48. package/viewer/assets/{chunk-XXDRQBXY-fcL8PDvO.js → chunk-XXDRQBXY-0afAM3OP.js} +1 -1
  49. package/viewer/assets/classDiagram-ZZMXUADV-DqBNvABf.js +1 -0
  50. package/viewer/assets/classDiagram-v2-VYDZK3BY-DqBNvABf.js +1 -0
  51. package/viewer/assets/{cobol-CI6TrDxj.js → cobol-CtspwbZ4.js} +1 -1
  52. package/viewer/assets/{coffee-Ed3tsq0W.js → coffee-qbHB9gj8.js} +1 -1
  53. package/viewer/assets/{cose-bilkent-JH36ORCC-BLw4c4lj.js → cose-bilkent-JH36ORCC-7s0vcDw1.js} +1 -1
  54. package/viewer/assets/{cpp-NAHlcPQh.js → cpp-Dx37X5A_.js} +1 -1
  55. package/viewer/assets/{crystal-BXGK-sOE.js → crystal-CiWjJvk4.js} +1 -1
  56. package/viewer/assets/{css-BFp-qE9r.js → css-CLeuyJyb.js} +1 -1
  57. package/viewer/assets/{cynefin-OW5HDTMX-gzIP1VDo.js → cynefin-OW5HDTMX-B4XFGNNZ.js} +1 -1
  58. package/viewer/assets/{cynefinDiagram-5FMLGOSQ-Czu3f68h.js → cynefinDiagram-5FMLGOSQ-DdNMKbw6.js} +1 -1
  59. package/viewer/assets/{dagre-GXQ25YYZ-BAzeXsit.js → dagre-GXQ25YYZ-BkDo4A91.js} +1 -1
  60. package/viewer/assets/{diagram-S7CK7UJ4-CxrIUY6C.js → diagram-S7CK7UJ4-DU8cnnVy.js} +1 -1
  61. package/viewer/assets/{diagram-UQ7AKVKN-D_JFHKr_.js → diagram-UQ7AKVKN-Dg2emYKa.js} +1 -1
  62. package/viewer/assets/{diagram-VSXAHHWV-PWTXzum8.js → diagram-VSXAHHWV-C_-YSzcn.js} +1 -1
  63. package/viewer/assets/{diagram-VX7I27RA-C_daaExL.js → diagram-VX7I27RA-BLCEnxqe.js} +1 -1
  64. package/viewer/assets/{diagram-Z3DM3KII-B-fVF8bU.js → diagram-Z3DM3KII-62CpIiAg.js} +1 -1
  65. package/viewer/assets/{dist-BsTox645.js → dist-CQIgbdem.js} +1 -1
  66. package/viewer/assets/{ebnfDiagram-PWID7BFC-AvlNOJnV.js → ebnfDiagram-PWID7BFC-FkGGETgC.js} +1 -1
  67. package/viewer/assets/{edge-CJ-xiaut.js → edge-CzmGSXHr.js} +1 -1
  68. package/viewer/assets/{elixir-DwyPuR-j.js → elixir-DDfD_-oS.js} +1 -1
  69. package/viewer/assets/{elm-Dq236SU3.js → elm-l7aRfQIq.js} +1 -1
  70. package/viewer/assets/{erDiagram-RLTQ6QDP-CgD6jWsh.js → erDiagram-RLTQ6QDP-GlCpsS1v.js} +1 -1
  71. package/viewer/assets/{erb-Bp546jL9.js → erb-qVffN5xM.js} +1 -1
  72. package/viewer/assets/eventmodeling-NTZA5JFV-07UfGVCm.js +1 -0
  73. package/viewer/assets/flowDiagram-HODETNUW-CyIUf7TW.js +1 -0
  74. package/viewer/assets/{ganttDiagram-EL5Y4UJY-VPFwa9x1.js → ganttDiagram-EL5Y4UJY-CH_Tk4Ex.js} +1 -1
  75. package/viewer/assets/{git-rebase-D2PaLLH_.js → git-rebase-jEJ8nKk1.js} +1 -1
  76. package/viewer/assets/{gitGraph-4MIJSDKK-xi6qI7Z0.js → gitGraph-4MIJSDKK-Cc9o1l4Y.js} +1 -1
  77. package/viewer/assets/{gitGraphDiagram-WWUBYQGX-BlZkClbr.js → gitGraphDiagram-WWUBYQGX-UdfHBATc.js} +1 -1
  78. package/viewer/assets/{glimmer-js-yehmMKoY.js → glimmer-js-BMk2JCW8.js} +1 -1
  79. package/viewer/assets/{glimmer-ts-CcjA_qmM.js → glimmer-ts-BH7RwQxU.js} +1 -1
  80. package/viewer/assets/{glsl-Cp9eQ-AE.js → glsl-CAWrZoEq.js} +1 -1
  81. package/viewer/assets/{graphql-Cq1lEM8j.js → graphql-Bac_hecs.js} +1 -1
  82. package/viewer/assets/{hack-DPGfOK3S.js → hack-1OgpAtm-.js} +1 -1
  83. package/viewer/assets/{haml-DkQK82Gj.js → haml-CvwG3BzW.js} +1 -1
  84. package/viewer/assets/{handlebars-DTZJdhbW.js → handlebars-Cq4oEEp8.js} +1 -1
  85. package/viewer/assets/{html-DpTpgMiG.js → html-D5wZ_JR6.js} +1 -1
  86. package/viewer/assets/{html-derivative-uhUUy5oC.js → html-derivative-ZfzPj0aS.js} +1 -1
  87. package/viewer/assets/{http-B92AnJJ4.js → http-BDE2UDvO.js} +1 -1
  88. package/viewer/assets/{hurl-Dol2Yi-b.js → hurl-CQbXNLlk.js} +1 -1
  89. package/viewer/assets/index-BezQIu6a.js +795 -0
  90. package/viewer/assets/{index-DAuO1BM4.css → index-OL_rrWNy.css} +1 -1
  91. package/viewer/assets/{info-A6RAGUB7-B4V2dCg0.js → info-A6RAGUB7-YD13oMfx.js} +1 -1
  92. package/viewer/assets/{infoDiagram-27XIBGKW-DEVrKQCK.js → infoDiagram-27XIBGKW-jYKjA_l7.js} +1 -1
  93. package/viewer/assets/{ishikawaDiagram-5VMMS53U-BHff_Dap.js → ishikawaDiagram-5VMMS53U-BBPzHiVd.js} +1 -1
  94. package/viewer/assets/{java--cIN42Lc.js → java-Cbpu4oyT.js} +1 -1
  95. package/viewer/assets/{javascript-DyvSzR0T.js → javascript-UMuq64YD.js} +1 -1
  96. package/viewer/assets/{jinja-BGYQ1xJZ.js → jinja-DVvZtqgU.js} +1 -1
  97. package/viewer/assets/{jison-ClYldt1W.js → jison-CZCXBIV3.js} +1 -1
  98. package/viewer/assets/{journeyDiagram-3NMN7TZE-tlsIEFNa.js → journeyDiagram-3NMN7TZE-CMqG5ndb.js} +1 -1
  99. package/viewer/assets/{json-DEW4gudM.js → json-CzTvWngu.js} +1 -1
  100. package/viewer/assets/{jsx-lokPhZBE.js → jsx-CNJnEGR4.js} +1 -1
  101. package/viewer/assets/{julia-Bo9paQzm.js → julia-Bj0q4uoH.js} +1 -1
  102. package/viewer/assets/{just-DqqAsrxT.js → just-93-MRGUC.js} +1 -1
  103. package/viewer/assets/{kanban-definition-UXKFOSKX-CP8oZ9Q5.js → kanban-definition-UXKFOSKX-VyFYPq9b.js} +1 -1
  104. package/viewer/assets/{latex-CO3oZ8pK.js → latex-CXd1tMjA.js} +1 -1
  105. package/viewer/assets/{line-CWhya-77.js → line-D5nvVDHp.js} +1 -1
  106. package/viewer/assets/{linear-BJzBzMzU.js → linear-Cq-FJZ_z.js} +1 -1
  107. package/viewer/assets/{liquid-CUbRj59y.js → liquid-Cb-ALXSr.js} +1 -1
  108. package/viewer/assets/{lua-CXig6-_n.js → lua-BxTQiamn.js} +1 -1
  109. package/viewer/assets/{marko-DkQFFLti.js → marko-mFYyU5jn.js} +1 -1
  110. package/viewer/assets/{mdc-BFGAQDvL.js → mdc-Oryqox7_.js} +1 -1
  111. package/viewer/assets/{mermaid-parser.core-DqMtuveo.js → mermaid-parser.core-CCDsanlH.js} +3 -3
  112. package/viewer/assets/{mermaid.core-C6ANPM_a.js → mermaid.core-Crd1YMgi.js} +4 -4
  113. package/viewer/assets/{mindmap-definition-YA3MSWOX-CMZQVws2.js → mindmap-definition-YA3MSWOX-BKLrEFWt.js} +1 -1
  114. package/viewer/assets/{nginx-0b9CGIHO.js → nginx-C1PwWP7d.js} +1 -1
  115. package/viewer/assets/{nim-DplMSFX0.js → nim-PszXW-l4.js} +1 -1
  116. package/viewer/assets/{org-DqGSm_ke.js → org-DO0CuJlO.js} +1 -1
  117. package/viewer/assets/{packet-AYTQ26CC-DDCDKPAj.js → packet-AYTQ26CC-BNPwLE6g.js} +1 -1
  118. package/viewer/assets/{pegDiagram-XKGWAZYB-DjPb-guT.js → pegDiagram-XKGWAZYB-DjBg_iPh.js} +1 -1
  119. package/viewer/assets/{perl-D3nVgYGh.js → perl-CHhAgoDL.js} +1 -1
  120. package/viewer/assets/{php-CbHf38Cn.js → php-CA4H6qnu.js} +1 -1
  121. package/viewer/assets/{pie-WAS4IAKB-GN2C-_ew.js → pie-WAS4IAKB-BzNmHX-Y.js} +1 -1
  122. package/viewer/assets/{pieDiagram-E7YTZNPT-BCi2gkKC.js → pieDiagram-E7YTZNPT-cgMB-fBw.js} +1 -1
  123. package/viewer/assets/{pug-CZT1s20p.js → pug-DDuKTe7C.js} +1 -1
  124. package/viewer/assets/{qml-BkHbAs5e.js → qml-DSd2VypD.js} +1 -1
  125. package/viewer/assets/{quadrantDiagram-AXDQQJYC-BnQPKfTn.js → quadrantDiagram-AXDQQJYC-Crzhs7Np.js} +1 -1
  126. package/viewer/assets/{r-Bs6brPiR.js → r-qf-5qR5Q.js} +1 -1
  127. package/viewer/assets/{radar-RG4KPBEZ-DX0KNp6-.js → radar-RG4KPBEZ-B3oI70pB.js} +1 -1
  128. package/viewer/assets/{railroad-74A4TZTK-6asimRo7.js → railroad-74A4TZTK-DOM5Od17.js} +1 -1
  129. package/viewer/assets/railroad-abnf-HS5TGJTU-ScZ2h_5Q.js +1 -0
  130. package/viewer/assets/railroad-ebnf-LZEXJU2U-_Cl5zxJ-.js +1 -0
  131. package/viewer/assets/railroad-peg-WCYAUIDC-CRlGg7vV.js +1 -0
  132. package/viewer/assets/{railroadDiagram-O6MQD6OU-BMqn2tiZ.js → railroadDiagram-O6MQD6OU-M3SvSYf-.js} +1 -1
  133. package/viewer/assets/{razor-C2n7Xtyr.js → razor-B9n9DtIL.js} +1 -1
  134. package/viewer/assets/{regexp-Bo6Pl_fZ.js → regexp-DhGN0EOR.js} +1 -1
  135. package/viewer/assets/{requirementDiagram-BXWQKSXE-BUDP5axK.js → requirementDiagram-BXWQKSXE-CFisiZTo.js} +1 -1
  136. package/viewer/assets/{rst-xn9jHLsv.js → rst-D1SdhuXd.js} +1 -1
  137. package/viewer/assets/{ruby-uezBOJQA.js → ruby-BybsgZgf.js} +1 -1
  138. package/viewer/assets/{sankeyDiagram-P5KCCOFB-BqF__G69.js → sankeyDiagram-P5KCCOFB-BKf2TMWg.js} +1 -1
  139. package/viewer/assets/{sas-BFNcactC.js → sas-Io7QwCtD.js} +1 -1
  140. package/viewer/assets/{scss-DQctmtN5.js → scss-D6XY0yo3.js} +1 -1
  141. package/viewer/assets/{sequenceDiagram-WJ2MYXX4-COTwvRM0.js → sequenceDiagram-WJ2MYXX4-CHawNQZ9.js} +1 -1
  142. package/viewer/assets/{shellscript-b4scok3x.js → shellscript-DSk8kvCh.js} +1 -1
  143. package/viewer/assets/{shellsession-DhHx2Tve.js → shellsession-Be1CN8DO.js} +1 -1
  144. package/viewer/assets/{soy-CKEQyp4E.js → soy-CGkkqGyT.js} +1 -1
  145. package/viewer/assets/{sql-BJIx5HBg.js → sql-DIgb716V.js} +1 -1
  146. package/viewer/assets/{src-D9BxzP51.js → src-DP6Z6M4G.js} +1 -1
  147. package/viewer/assets/{stata-BxUsTnsL.js → stata-CS_2tb9p.js} +1 -1
  148. package/viewer/assets/{stateDiagram-D77RDMKH-CxPAUQG9.js → stateDiagram-D77RDMKH-Cx9Rf6fY.js} +1 -1
  149. package/viewer/assets/stateDiagram-v2-MP3YSRHH-DRb-6t_S.js +1 -0
  150. package/viewer/assets/{surrealql-Db9C_syE.js → surrealql-Do4o8w1B.js} +1 -1
  151. package/viewer/assets/{svelte-Bdum9H2e.js → svelte-3bKxeV6-.js} +1 -1
  152. package/viewer/assets/{swimlanes-42K2YHIH-DgVSbM2N.js → swimlanes-42K2YHIH-yL2oIw_D.js} +1 -1
  153. package/viewer/assets/swimlanesDiagram-VR7AAH4N-cDiCT6xi.js +8 -0
  154. package/viewer/assets/{templ-CPd8XvAU.js → templ-BgEYPNGP.js} +1 -1
  155. package/viewer/assets/{tex-ugtfHkTM.js → tex-D_p6whQw.js} +1 -1
  156. package/viewer/assets/{timeline-definition-24CTP7MA-C-uRF487.js → timeline-definition-24CTP7MA-BJeLq4a5.js} +1 -1
  157. package/viewer/assets/{treeView-Q6P3EWNA-BmAs0zGR.js → treeView-Q6P3EWNA-COcnImiE.js} +1 -1
  158. package/viewer/assets/{treemap-WGGIJYW6-BbMlmxPC.js → treemap-WGGIJYW6-DpbxWots.js} +1 -1
  159. package/viewer/assets/{ts-tags-CVfSxSrq.js → ts-tags-GBmMk7Oh.js} +1 -1
  160. package/viewer/assets/{tsx-DziBqK0e.js → tsx-BSD-yNhi.js} +1 -1
  161. package/viewer/assets/{twig-XWBVDqQT.js → twig-dwAG5SzX.js} +1 -1
  162. package/viewer/assets/{typescript-BQaQFWJj.js → typescript-B8YTPl9v.js} +1 -1
  163. package/viewer/assets/{typst-CKAqlUvq.js → typst-Dpzojbzo.js} +1 -1
  164. package/viewer/assets/{vennDiagram-4TSXK5OY-f5gjsolQ.js → vennDiagram-4TSXK5OY-nF34Gjtn.js} +1 -1
  165. package/viewer/assets/{vue-Bi21UrIJ.js → vue-Djbmk2DC.js} +1 -1
  166. package/viewer/assets/{vue-html-BXbrkthZ.js → vue-html-BXc5rfco.js} +1 -1
  167. package/viewer/assets/{vue-vine-BizJO_Ju.js → vue-vine-DHCfQh17.js} +1 -1
  168. package/viewer/assets/{wardley-WFR3VGLG-C1G-q39u.js → wardley-WFR3VGLG-C1qhMifc.js} +1 -1
  169. package/viewer/assets/{wardleyDiagram-VM6X3IG4-4Okmn6Ky.js → wardleyDiagram-VM6X3IG4-B0BfyYWQ.js} +1 -1
  170. package/viewer/assets/{xml-f1bGPKhD.js → xml-CdCEskcV.js} +1 -1
  171. package/viewer/assets/{xsl-BiaU5ESx.js → xsl-BbNukwXP.js} +1 -1
  172. package/viewer/assets/{xychartDiagram-S5SC5T6Z-B5TiTNm-.js → xychartDiagram-S5SC5T6Z-DJKYce1U.js} +1 -1
  173. package/viewer/assets/{yaml-ChWybZ9g.js → yaml-BYLDET4A.js} +1 -1
  174. package/viewer/index.html +3 -3
  175. package/viewer/assets/architecture-7GRP2DOG-BIR2L0CZ.js +0 -1
  176. package/viewer/assets/channel-BtIqrdXz.js +0 -1
  177. package/viewer/assets/classDiagram-ZZMXUADV-Fm1xUxjv.js +0 -1
  178. package/viewer/assets/classDiagram-v2-VYDZK3BY-Fm1xUxjv.js +0 -1
  179. package/viewer/assets/eventmodeling-NTZA5JFV-DjF7f3nw.js +0 -1
  180. package/viewer/assets/flowDiagram-HODETNUW-COsUd-GC.js +0 -1
  181. package/viewer/assets/index-tgc7CLl2.js +0 -795
  182. package/viewer/assets/railroad-abnf-HS5TGJTU-DYq0sKms.js +0 -1
  183. package/viewer/assets/railroad-ebnf-LZEXJU2U-Ua2mHJlY.js +0 -1
  184. package/viewer/assets/railroad-peg-WCYAUIDC-D39Fr79_.js +0 -1
  185. package/viewer/assets/stateDiagram-v2-MP3YSRHH-Cd1sSziE.js +0 -1
  186. package/viewer/assets/swimlanesDiagram-VR7AAH4N-D4gI-oVS.js +0 -8
@@ -0,0 +1,126 @@
1
+ import { mkdir, mkdtemp, rm } from "node:fs/promises";
2
+ import { tmpdir } from "node:os";
3
+ import { resolve } from "node:path";
4
+ import type {
5
+ BenchmarkDefinition,
6
+ ModelNames,
7
+ ModelRef,
8
+ ProviderDefinitions,
9
+ } from "../../types";
10
+ import { CandidateContainer } from "./oci";
11
+ import { createSessionDatabase } from "../opencode/host";
12
+ import { createCredentialSnapshot, integrationFor } from "../opencode/auth";
13
+ import { clientFor, parseModel } from "../opencode/session";
14
+ import { candidateProviders } from "../../app/input-fingerprints";
15
+
16
+ const CATALOG_TIMEOUT_MS = 60_000;
17
+
18
+ type CatalogDefinition = Pick<
19
+ BenchmarkDefinition,
20
+ "models" | "candidate" | "container"
21
+ >;
22
+
23
+ /** Display names from the candidates' OpenCode catalog, including declared provider overrides.
24
+ * Like candidates, each container receives only one integration's credentials and its models' provider configuration.
25
+ */
26
+ export async function readModelNames(
27
+ definition: CatalogDefinition,
28
+ imageId: string,
29
+ ): Promise<ModelNames> {
30
+ const names = await Promise.all(
31
+ catalogRequests(definition).map((request) =>
32
+ readIntegrationNames(definition.container, imageId, request).catch(
33
+ () => ({}),
34
+ ),
35
+ ),
36
+ );
37
+ return Object.assign({}, ...names);
38
+ }
39
+
40
+ export type CatalogRequest = {
41
+ integration: string;
42
+ models: readonly ModelRef[];
43
+ providers?: ProviderDefinitions;
44
+ };
45
+
46
+ /** One request per credential integration, scoped like the candidates it names. */
47
+ export const catalogRequests = (
48
+ definition: Pick<BenchmarkDefinition, "models" | "candidate">,
49
+ ): CatalogRequest[] =>
50
+ [...Map.groupBy(definition.models, integrationFor)].map(
51
+ ([integration, models]) => ({
52
+ integration,
53
+ models,
54
+ providers: scopedProviders(definition.candidate.providers, models),
55
+ }),
56
+ );
57
+
58
+ async function readIntegrationNames(
59
+ container: BenchmarkDefinition["container"],
60
+ imageId: string,
61
+ { integration, models, providers }: CatalogRequest,
62
+ ): Promise<ModelNames> {
63
+ const staging = await mkdtemp(
64
+ resolve(process.env.TMP ?? tmpdir(), "catalog-"),
65
+ );
66
+ try {
67
+ const workspace = resolve(staging, "workspace"),
68
+ database = resolve(staging, "opencode.db");
69
+ await mkdir(workspace);
70
+ await createSessionDatabase(
71
+ database,
72
+ createCredentialSnapshot(undefined, [integration]),
73
+ );
74
+ await using catalog = await CandidateContainer.create(container, imageId);
75
+ await catalog.prepare(workspace, database, false, [], staging, providers);
76
+ const client = clientFor(
77
+ await catalog.start(CATALOG_TIMEOUT_MS),
78
+ catalog.password,
79
+ );
80
+ const location = { directory: "/workspace" };
81
+ await client.plugin.awaitActivation({ location });
82
+ const listed = (await client.model.list({ location })).data;
83
+ return Object.fromEntries(
84
+ models.flatMap((model) => {
85
+ const selected = parseModel(model),
86
+ found = listed.find(
87
+ (item) =>
88
+ item.providerID === selected.providerID &&
89
+ item.id === selected.id,
90
+ );
91
+ return found?.name
92
+ ? [[`${selected.providerID}/${selected.id}`, found.name]]
93
+ : [];
94
+ }),
95
+ );
96
+ } finally {
97
+ await rm(staging, {
98
+ recursive: true,
99
+ force: true,
100
+ maxRetries: 5,
101
+ retryDelay: 100,
102
+ });
103
+ }
104
+ }
105
+
106
+ /** Union of what each listed candidate would receive, without other providers' entries. */
107
+ function scopedProviders(
108
+ providers: ProviderDefinitions | undefined,
109
+ models: readonly ModelRef[],
110
+ ): ProviderDefinitions | undefined {
111
+ let scoped: NonNullable<ProviderDefinitions> | undefined;
112
+ for (const model of models)
113
+ for (const [id, entry] of Object.entries(
114
+ candidateProviders(providers, model) ?? {},
115
+ )) {
116
+ scoped ??= {};
117
+ scoped[id] = {
118
+ ...scoped[id],
119
+ ...entry,
120
+ ...(scoped[id]?.models || entry.models
121
+ ? { models: { ...scoped[id]?.models, ...entry.models } }
122
+ : {}),
123
+ };
124
+ }
125
+ return scoped;
126
+ }
@@ -0,0 +1,112 @@
1
+ const EXPORT = /export\s+const\s+criteria\s*=\s*/;
2
+
3
+ /** Reads judge.ts's `export const criteria = { … }` as data, without executing the judge.
4
+ * Only object, array, string, number, and boolean literals are accepted.
5
+ */
6
+ export async function readCodeCriteria(file: string): Promise<unknown> {
7
+ const transpiler = new Bun.Transpiler({ loader: "ts" }),
8
+ source = transpiler.transformSync(await Bun.file(file).text()),
9
+ start = EXPORT.exec(source);
10
+ if (start)
11
+ return new LiteralParser(source, start.index + start[0].length).value();
12
+ if (transpiler.scan(source).exports.includes("criteria"))
13
+ throw new Error(
14
+ "Declare judge.ts criteria as `export const criteria = { … }`",
15
+ );
16
+ return undefined;
17
+ }
18
+
19
+ class LiteralParser {
20
+ constructor(
21
+ private source: string,
22
+ private index: number,
23
+ ) {}
24
+ private fail(): never {
25
+ throw new Error(
26
+ "judge.ts criteria must be a literal object of names and categories",
27
+ );
28
+ }
29
+ private space() {
30
+ for (;;) {
31
+ const rest = this.source.slice(this.index);
32
+ const skipped = /^(?:\s+|\/\/[^\n]*|\/\*[\s\S]*?\*\/)/.exec(rest);
33
+ if (!skipped) return;
34
+ this.index += skipped[0].length;
35
+ }
36
+ }
37
+ private peek() {
38
+ this.space();
39
+ return this.source[this.index];
40
+ }
41
+ private take(token: string) {
42
+ if (this.peek() !== token) this.fail();
43
+ this.index++;
44
+ }
45
+ value(): unknown {
46
+ const next = this.peek();
47
+ if (next === "{") return this.object();
48
+ if (next === "[") return this.array();
49
+ if (next === '"' || next === "'" || next === "`") return this.string();
50
+ const literal =
51
+ /^(?:true|false|-?\d+(?:\.\d+)?)(?![\w$])/.exec(
52
+ this.source.slice(this.index),
53
+ )?.[0];
54
+ if (!literal) this.fail();
55
+ this.index += literal.length;
56
+ return literal === "true" ? true : literal === "false" ? false : Number(literal);
57
+ }
58
+ private object() {
59
+ this.take("{");
60
+ const value: Record<string, unknown> = {};
61
+ while (this.peek() !== "}") {
62
+ const key =
63
+ this.peek() === '"' || this.peek() === "'"
64
+ ? this.string()
65
+ : this.identifier();
66
+ this.take(":");
67
+ value[key] = this.value();
68
+ if (this.peek() !== ",") break;
69
+ this.index++;
70
+ }
71
+ this.take("}");
72
+ return value;
73
+ }
74
+ private array() {
75
+ this.take("[");
76
+ const value: unknown[] = [];
77
+ while (this.peek() !== "]") {
78
+ value.push(this.value());
79
+ if (this.peek() !== ",") break;
80
+ this.index++;
81
+ }
82
+ this.take("]");
83
+ return value;
84
+ }
85
+ private identifier() {
86
+ const name = /^[A-Za-z_$][\w$]*/.exec(this.source.slice(this.index))?.[0];
87
+ if (!name) this.fail();
88
+ this.index += name.length;
89
+ return name;
90
+ }
91
+ private string() {
92
+ const quote = this.source[this.index]!;
93
+ let value = "";
94
+ for (this.index++; this.index < this.source.length; this.index++) {
95
+ const char = this.source[this.index]!;
96
+ if (char === quote) {
97
+ this.index++;
98
+ return value;
99
+ }
100
+ if (quote === "`" && char === "$" && this.source[this.index + 1] === "{")
101
+ this.fail();
102
+ if (char === "\\") {
103
+ const escaped = this.source[++this.index]!;
104
+ value +=
105
+ { n: "\n", t: "\t", r: "\r", "0": "\0" }[escaped] ?? escaped;
106
+ continue;
107
+ }
108
+ value += char;
109
+ }
110
+ this.fail();
111
+ }
112
+ }
@@ -55,9 +55,13 @@ export function createCredentialSnapshot(
55
55
  db.close(true);
56
56
  }
57
57
  }
58
- export const credentialsFor = (model: ModelRef, websearch: "exa" | false) => {
58
+ /** Console-routed providers authenticate through the OpenCode connection. */
59
+ export const integrationFor = (model: ModelRef) => {
59
60
  const provider = model.split("/")[0];
60
- const integration = provider.startsWith("console-") ? "opencode" : provider;
61
+ return provider.startsWith("console-") ? "opencode" : provider;
62
+ };
63
+ export const credentialsFor = (model: ModelRef, websearch: "exa" | false) => {
64
+ const integration = integrationFor(model);
61
65
  const required = [
62
66
  ...new Set([integration, ...(websearch ? ["opencode", "exa"] : [])]),
63
67
  ];
package/src/types.ts CHANGED
@@ -47,7 +47,13 @@ export type Benchmark = {
47
47
  cpus?: number;
48
48
  memoryMiB?: number;
49
49
  };
50
+ /** Compose the benchmark from criteria in any of these categories. Omit for every criterion. */
51
+ categories?: readonly string[];
50
52
  };
53
+ /** Optional `criteria` export from judge.ts: labels and categories for the scores it returns. */
54
+ export type CodeCriteria = Readonly<
55
+ Record<string, { name?: string; categories?: readonly string[] }>
56
+ >;
51
57
  export type PreparationStep = { cwd: string; argv: readonly string[] };
52
58
  export type MonitorPolicy = {
53
59
  minIntervalMs: number;
@@ -81,6 +87,10 @@ export type EvalDefinition = {
81
87
  judgeHash: string;
82
88
  /** Criteria declared in judge.md; code-defined IDs are discovered from results. */
83
89
  criteria: CriterionDefinition[];
90
+ /** Criteria labelled by judge.ts's `criteria` export. */
91
+ codeCriteria?: CriterionDefinition[];
92
+ /** Reporting categories by criterion ID; never part of judge input or fingerprints. */
93
+ categories?: Record<string, string[]>;
84
94
  /** A frozen, bundled code judge; never sent to the candidate. */
85
95
  code?: CodeJudgeDefinition;
86
96
  name: string;
@@ -98,6 +108,8 @@ export type BenchmarkDefinition = {
98
108
  providers?: ProviderDefinitions;
99
109
  };
100
110
  container: { engine: Engine; image: string; cpus: number; memoryMiB: number };
111
+ /** Selected categories; evals without a matching criterion are excluded. */
112
+ categories?: string[];
101
113
  evals: EvalDefinition[];
102
114
  };
103
115
  export type Cost = {
@@ -276,6 +288,8 @@ export type Slot = {
276
288
  judgeRunId: string | null;
277
289
  active: boolean;
278
290
  };
291
+ /** OpenCode catalog display names keyed by `provider/model`, without the variant. */
292
+ export type ModelNames = Record<string, string>;
279
293
  export type BenchmarkRun = {
280
294
  id: string;
281
295
  name: string;
@@ -288,6 +302,8 @@ export type BenchmarkRun = {
288
302
  scheduledSlotIds: readonly string[];
289
303
  definition: BenchmarkDefinition;
290
304
  runtime: { imageId: string; candidateHash: string; judgeHash: string };
305
+ /** Display metadata read from the candidate image's catalog; never part of input fingerprints. */
306
+ modelNames?: ModelNames;
291
307
  error?: string;
292
308
  mergedInto?: string;
293
309
  sources?: Array<{
package/src/view.ts CHANGED
@@ -12,11 +12,15 @@ import type {
12
12
  JudgeRun,
13
13
  CriterionDefinition,
14
14
  Judgment,
15
+ ModelNames,
15
16
  } from "./types";
16
17
  import type { RunMetrics } from "./judge-context";
17
18
  import { runtimeMs, type RuntimeInterval } from "./runtime";
19
+ import { categoryKey, inCategories } from "./criterion-categories";
18
20
  export { mergeRuntime, runtimeMs, runtimeClock } from "./runtime";
19
21
  export type { RuntimeInterval } from "./runtime";
22
+ export type { ModelNames } from "./types";
23
+ export { categoryKey, inCategories } from "./criterion-categories";
20
24
 
21
25
  export type ScoreBounds = { lower: number; upper: number; coverage: number };
22
26
  export type ModelScore = {
@@ -30,6 +34,7 @@ export type ModelScore = {
30
34
  eval: string;
31
35
  criterion: string;
32
36
  name: string;
37
+ categories?: string[];
33
38
  value: number | null;
34
39
  scored: number;
35
40
  expected: number;
@@ -82,6 +87,61 @@ export function modelScore(
82
87
  export const scoreBounds = (score: Pick<ModelScore, "bounds">): ScoreBounds =>
83
88
  score.bounds;
84
89
 
90
+ /** Rescore only criteria in the selected categories, keeping unresolved evals unresolved. */
91
+ export function selectCategories(
92
+ score: ModelScore,
93
+ keys: readonly string[],
94
+ ): ModelScore {
95
+ const components = score.components.filter((part) =>
96
+ inCategories(part, keys),
97
+ );
98
+ const evals = [...new Set(components.map((part) => part.eval))];
99
+ return modelScore(
100
+ score.model,
101
+ components,
102
+ evals,
103
+ score.unscoredEvals.filter((id) => evals.includes(id)),
104
+ );
105
+ }
106
+
107
+ export type CategorySummary = {
108
+ /** Case-insensitive identity used in URLs and filters. */
109
+ key: string;
110
+ /** First declared spelling. */
111
+ name: string;
112
+ criteria: number;
113
+ evals: number;
114
+ };
115
+ /** Categories in first-declared order, with how many criteria and evals measure each. */
116
+ export function categoryCatalog(
117
+ components: readonly Pick<
118
+ ModelScore["components"][number],
119
+ "eval" | "criterion" | "categories"
120
+ >[],
121
+ ): CategorySummary[] {
122
+ const catalog = new Map<
123
+ string,
124
+ { name: string; criteria: Set<string>; evals: Set<string> }
125
+ >();
126
+ for (const part of components)
127
+ for (const name of part.categories ?? []) {
128
+ const entry = catalog.get(categoryKey(name)) ?? {
129
+ name,
130
+ criteria: new Set<string>(),
131
+ evals: new Set<string>(),
132
+ };
133
+ entry.criteria.add(`${part.eval}/${part.criterion}`);
134
+ entry.evals.add(part.eval);
135
+ catalog.set(categoryKey(name), entry);
136
+ }
137
+ return [...catalog].map(([key, entry]) => ({
138
+ key,
139
+ name: entry.name,
140
+ criteria: entry.criteria.size,
141
+ evals: entry.evals.size,
142
+ }));
143
+ }
144
+
85
145
  function componentBounds(
86
146
  components: ModelScore["components"],
87
147
  evals: string[],
@@ -144,6 +204,8 @@ export type Overview = {
144
204
  scores: ModelScore[];
145
205
  evals: string[];
146
206
  evalNames: Record<string, string>;
207
+ modelNames: ModelNames;
208
+ categories: CategorySummary[];
147
209
  cost: Cost;
148
210
  evalCosts: Record<string, Cost>;
149
211
  runtime: RuntimeInterval[];
@@ -1 +1 @@
1
- import{m as e,t}from"./mermaid-parser.core-DqMtuveo.js";import{n}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import{m as r}from"./src-D9BxzP51.js";import"./chunk-DU6HZSFF-BMoyWhsq.js";import{n as i,r as a,t as o}from"./chunk-SVP7TREG-Bkhb6FAV.js";import{t as s}from"./chunk-JWPE2WC7-DVXcaiue.js";import"./mermaid.core-C6ANPM_a.js";var c=e().RailroadAbnf.parser.LangiumParser,l=n(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=n(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=n(e=>{if(e.includes(`*`)){let[t,n]=e.split(`*`);return{min:t?parseInt(t,10):0,max:n?parseInt(n,10):1/0}}let t=parseInt(e,10);return{min:t,max:t}},`parseRepeat`),f=n(e=>{let t=p(e.primary);if(!e.repeat)return t;let{min:n,max:r}=d(e.repeat);return n===0&&r===1?{type:`optional`,element:t}:{type:`repetition`,element:t,min:n,max:r}},`transformElement`),p=n(e=>{switch(e.$type){case`AbnfStringLiteral`:return{type:`terminal`,value:e.value};case`AbnfNumVal`:return{type:`terminal`,value:e.value};case`AbnfRuleName`:return{type:`nonterminal`,name:e.name};case`AbnfGroup`:return l(e.element);case`AbnfOptionalGroup`:return{type:`optional`,element:l(e.element)};default:throw Error(`Unsupported ABNF primary node: ${e.$type}`)}},`transformPrimary`),m=n(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=n(e=>{s(e,o),e.title&&o.setTitle(e.title),e.rules.map(e=>o.addRule(m(e)))},`populateDb`),g={parser:{parse:n(e=>{o.clear(),r.debug(`[ABNF Parser] Starting Langium parse`);let n=c.parse(e);if(n.lexerErrors.length>0||n.parserErrors.length>0)throw new t(n);let i=n.value;r.debug(`[ABNF Parser] Parsed rules:`,i.rules.length),h(i),r.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:o}},db:o,renderer:a,styles:i};export{g as diagram};
1
+ import{m as e,t}from"./mermaid-parser.core-CCDsanlH.js";import{n}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import{m as r}from"./src-DP6Z6M4G.js";import"./chunk-DU6HZSFF-DYT2KEwe.js";import{n as i,r as a,t as o}from"./chunk-SVP7TREG-CaW6KcpM.js";import{t as s}from"./chunk-JWPE2WC7-DVXcaiue.js";import"./mermaid.core-Crd1YMgi.js";var c=e().RailroadAbnf.parser.LangiumParser,l=n(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=n(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=n(e=>{if(e.includes(`*`)){let[t,n]=e.split(`*`);return{min:t?parseInt(t,10):0,max:n?parseInt(n,10):1/0}}let t=parseInt(e,10);return{min:t,max:t}},`parseRepeat`),f=n(e=>{let t=p(e.primary);if(!e.repeat)return t;let{min:n,max:r}=d(e.repeat);return n===0&&r===1?{type:`optional`,element:t}:{type:`repetition`,element:t,min:n,max:r}},`transformElement`),p=n(e=>{switch(e.$type){case`AbnfStringLiteral`:return{type:`terminal`,value:e.value};case`AbnfNumVal`:return{type:`terminal`,value:e.value};case`AbnfRuleName`:return{type:`nonterminal`,name:e.name};case`AbnfGroup`:return l(e.element);case`AbnfOptionalGroup`:return{type:`optional`,element:l(e.element)};default:throw Error(`Unsupported ABNF primary node: ${e.$type}`)}},`transformPrimary`),m=n(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=n(e=>{s(e,o),e.title&&o.setTitle(e.title),e.rules.map(e=>o.addRule(m(e)))},`populateDb`),g={parser:{parse:n(e=>{o.clear(),r.debug(`[ABNF Parser] Starting Langium parse`);let n=c.parse(e);if(n.lexerErrors.length>0||n.parserErrors.length>0)throw new t(n);let i=n.value;r.debug(`[ABNF Parser] Parsed rules:`,i.rules.length),h(i),r.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:o}},db:o,renderer:a,styles:i};export{g as diagram};
@@ -1 +1 @@
1
- import{r as e}from"./index-tgc7CLl2.js";import{t}from"./html-DpTpgMiG.js";var n=[Object.freeze(JSON.parse('{"injectionSelector":"L:text.html -comment","name":"angular-expression","patterns":[{"include":"#ngExpression"}],"repository":{"arrayLiteral":{"begin":"\\\\[","beginCaptures":{"0":{"name":"meta.brace.square.ts"}},"end":"]","endCaptures":{"0":{"name":"meta.brace.square.ts"}},"name":"meta.array.literal.ts","patterns":[{"include":"#ngExpression"},{"include":"#punctuationComma"}]},"booleanLiteral":{"patterns":[{"match":"(?<![$.])\\\\btrue\\\\b(?!\\\\$)","name":"constant.language.boolean.true.ts"},{"match":"(?<![$.])\\\\bfalse\\\\b(?!\\\\$)","name":"constant.language.boolean.false.ts"}]},"expressionOperator":{"patterns":[{"captures":{"1":{"name":"keyword.operator.logical.ts"},"2":{"name":"entity.name.function.pipe.ng"}},"match":"((?<!\\\\|)\\\\|(?!\\\\|))\\\\s?([-$0-9A-Z_a-z]*)"},{"match":"(?<![$.])\\\\b(let)\\\\b(?!\\\\$)","name":"storage.type.ts"},{"match":"(?<![$.])\\\\b(await)\\\\b(?!\\\\$)","name":"keyword.control.flow.ts"},{"match":"(?<![$.])\\\\bdelete\\\\b(?!\\\\$)","name":"keyword.operator.expression.delete.ts"},{"match":"(?<![$.])\\\\bin\\\\b(?!\\\\$)","name":"keyword.operator.expression.in.ts"},{"match":"(?<![$.])\\\\bof\\\\b(?!\\\\$)","name":"keyword.operator.expression.of.ts"},{"match":"(?<![$.])\\\\bif\\\\b(?!\\\\$)","name":"keyword.control.if.ts"},{"match":"(?<![$.])\\\\belse\\\\b(?!\\\\$)","name":"keyword.control.else.ts"},{"match":"(?<![$.])\\\\bthen\\\\b(?!\\\\$)","name":"keyword.control.then.ts"},{"match":"(?<![$.])\\\\binstanceof\\\\b(?!\\\\$)","name":"keyword.operator.expression.instanceof.ts"},{"match":"(?<![$.])\\\\bnew\\\\b(?!\\\\$)","name":"keyword.operator.new.ts"},{"match":"(?<![$.])\\\\bvoid\\\\b(?!\\\\$)","name":"keyword.operator.expression.void.ts"},{"begin":"(?<![$.])\\\\bas\\\\b(?!\\\\$)","beginCaptures":{"0":{"name":"storage.type.as.ts"}},"end":"(?=$|[]\\"\'),:;}])","patterns":[{"include":"#type"}]},{"match":"(?:\\\\*|(?<!\\\\()/|[-%+])=","name":"keyword.operator.assignment.compound.ts"},{"match":"(?:[\\\\&^]|<<|>>>??|\\\\|)=","name":"keyword.operator.assignment.compound.bitwise.ts"},{"match":"<<|>>>?","name":"keyword.operator.bitwise.shift.ts"},{"match":"[!=]==?","name":"keyword.operator.comparison.ts"},{"match":"<=|>=|<>|[<>]","name":"keyword.operator.relational.ts"},{"match":"!|&&|\\\\?\\\\?|\\\\|\\\\|","name":"keyword.operator.logical.ts"},{"match":"[\\\\&^|~]","name":"keyword.operator.bitwise.ts"},{"match":"=","name":"keyword.operator.assignment.ts"},{"match":"--","name":"keyword.operator.decrement.ts"},{"match":"\\\\+\\\\+","name":"keyword.operator.increment.ts"},{"match":"[-%*+/]","name":"keyword.operator.arithmetic.ts"},{"captures":{"1":{"name":"keyword.operator.arithmetic.ts"}},"match":"(?<=[$_[:alnum:]])\\\\s*(/)(?![*/])"},{"include":"#typeofOperator"}]},"functionCall":{"begin":"(?=(\\\\??\\\\.\\\\s*)?([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\()","end":"(?<=\\\\))(?!(\\\\??\\\\.\\\\s*)?([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\()","patterns":[{"match":"\\\\?","name":"punctuation.accessor.ts"},{"match":"\\\\.","name":"punctuation.accessor.ts"},{"match":"([$_[:alpha:]][$_[:alnum:]]*)","name":"entity.name.function.ts"},{"begin":"<","beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.ts"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.ts"}},"name":"meta.type.parameters.ts","patterns":[{"include":"#type"},{"include":"#punctuationComma"}]},{"include":"#parenExpression"}]},"functionParameters":{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.parameters.begin.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.end.ts"}},"name":"meta.parameters.ts","patterns":[{"include":"#decorator"},{"include":"#parameterName"},{"include":"#variableInitializer"},{"match":",","name":"punctuation.separator.parameter.ts"}]},"identifiers":{"patterns":[{"match":"([$_[:alpha:]][$_[:alnum:]]*)(?=\\\\s*\\\\.\\\\s*prototype\\\\b(?!\\\\$))","name":"support.class.ts"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"constant.other.object.property.ts"},"3":{"name":"variable.other.object.property.ts"}},"match":"([!?]?\\\\.)\\\\s*(?:(\\\\p{upper}[$_\\\\d[:upper:]]*)|([$_[:alpha:]][$_[:alnum:]]*))(?=\\\\s*\\\\.\\\\s*[$_[:alpha:]][$_[:alnum:]]*)"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"entity.name.function.ts"}},"match":"(?:([!?]?\\\\.)\\\\s*)?([$_[:alpha:]][$_[:alnum:]]*)(?=\\\\s*=\\\\s*((async\\\\s+)|(function\\\\s*[(<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)|((<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)(\\\\s*:\\\\s*(.)*)?\\\\s*=>)))"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"constant.other.property.ts"}},"match":"([!?]?\\\\.)\\\\s*(\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"variable.other.property.ts"}},"match":"([!?]?\\\\.)\\\\s*([$_[:alpha:]][$_[:alnum:]]*)"},{"captures":{"1":{"name":"constant.other.object.ts"},"2":{"name":"variable.other.object.ts"}},"match":"(?:(\\\\p{upper}[$_\\\\d[:upper:]]*)|([$_[:alpha:]][$_[:alnum:]]*))(?=\\\\s*\\\\.\\\\s*[$_[:alpha:]][$_[:alnum:]]*)"},{"match":"(\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])","name":"constant.character.other"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"variable.other.readwrite.ts"}]},"literal":{"name":"literal.ts","patterns":[{"include":"#numericLiteral"},{"include":"#booleanLiteral"},{"include":"#nullLiteral"},{"include":"#undefinedLiteral"},{"include":"#numericConstantLiteral"},{"include":"#arrayLiteral"},{"include":"#thisLiteral"}]},"ngExpression":{"name":"meta.expression.ng","patterns":[{"include":"#string"},{"include":"#literal"},{"include":"#ternaryExpression"},{"include":"#expressionOperator"},{"include":"#functionCall"},{"include":"#identifiers"},{"include":"#parenExpression"},{"include":"#punctuationComma"},{"include":"#punctuationSemicolon"},{"include":"#punctuationAccessor"}]},"nullLiteral":{"match":"(?<![$.])\\\\bnull\\\\b(?!\\\\$)","name":"constant.language.null.ts"},"numericConstantLiteral":{"patterns":[{"match":"(?<![$.])\\\\bNaN\\\\b(?!\\\\$)","name":"constant.language.nan.ts"},{"match":"(?<![$.])\\\\bInfinity\\\\b(?!\\\\$)","name":"constant.language.infinity.ts"}]},"numericLiteral":{"patterns":[{"match":"\\\\b(?<!\\\\$)0([Xx])\\\\h+\\\\b(?!\\\\$)","name":"constant.numeric.hex.ts"},{"match":"\\\\b(?<!\\\\$)0([Bb])[01]+\\\\b(?!\\\\$)","name":"constant.numeric.binary.ts"},{"match":"\\\\\\\\b(?<!\\\\$)0([Oo])?[0-7]+\\\\b(?!\\\\$)","name":"constant.numeric.octal.ts"},{"captures":{"0":{"name":"constant.numeric.decimal.ts"},"1":{"name":"meta.delimiter.decimal.period.ts"},"2":{"name":"meta.delimiter.decimal.period.ts"},"3":{"name":"meta.delimiter.decimal.period.ts"},"4":{"name":"meta.delimiter.decimal.period.ts"},"5":{"name":"meta.delimiter.decimal.period.ts"},"6":{"name":"meta.delimiter.decimal.period.ts"}},"match":"(?<!\\\\$)(?:\\\\b[0-9]+(\\\\.)[0-9]+[Ee][-+]?[0-9]+\\\\b|\\\\b[0-9]+(\\\\.)[Ee][-+]?[0-9]+\\\\b|\\\\B(\\\\.)[0-9]+[Ee][-+]?[0-9]+\\\\b|\\\\b[0-9]+[Ee][-+]?[0-9]+\\\\b|\\\\b[0-9]+(\\\\.)\\\\B|\\\\B(\\\\.)[0-9]+\\\\b|\\\\b[0-9]+\\\\b(?!\\\\.))(?!\\\\$)"}]},"parameterName":{"patterns":[{"captures":{"1":{"name":"storage.modifier.ts"},"2":{"name":"storage.modifier.ts"},"3":{"name":"keyword.operator.rest.ts"},"4":{"name":"entity.name.function.ts"},"5":{"name":"keyword.operator.optional.ts"}},"match":"(?:\\\\s*\\\\b(readonly)\\\\s+)?(?:\\\\s*\\\\b(p(?:ublic|rivate|rotected))\\\\s+)?(\\\\.\\\\.\\\\.)?\\\\s*(?<![:=])([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(\\\\??)(?=\\\\s*(=\\\\s*((async\\\\s+)|(function\\\\s*[(<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)|((<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)(\\\\s*:\\\\s*(.)*)?\\\\s*=>)))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>))))))))"},{"captures":{"1":{"name":"storage.modifier.ts"},"2":{"name":"storage.modifier.ts"},"3":{"name":"keyword.operator.rest.ts"},"4":{"name":"variable.parameter.ts"},"5":{"name":"keyword.operator.optional.ts"}},"match":"(?:\\\\s*\\\\b(readonly)\\\\s+)?(?:\\\\s*\\\\b(p(?:ublic|rivate|rotected))\\\\s+)?(\\\\.\\\\.\\\\.)?\\\\s*(?<![:=])([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(\\\\??)"}]},"parenExpression":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"patterns":[{"include":"#ngExpression"},{"include":"#punctuationComma"}]},"punctuationAccessor":{"match":"(?:\\\\?|!?)\\\\.","name":"punctuation.accessor.ts"},"punctuationComma":{"match":",","name":"punctuation.separator.comma.ts"},"punctuationSemicolon":{"match":";","name":"punctuation.terminator.statement.ts"},"qstringDouble":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ts"}},"end":"(\\")|([^\\\\n\\\\\\\\])$","endCaptures":{"1":{"name":"punctuation.definition.string.end.ts"},"2":{"name":"invalid.illegal.newline.ts"}},"name":"string.quoted.double.ts","patterns":[{"include":"#stringCharacterEscape"}]},"qstringSingle":{"begin":"\'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ts"}},"end":"(\')|([^\\\\n\\\\\\\\])$","endCaptures":{"1":{"name":"punctuation.definition.string.end.ts"},"2":{"name":"invalid.illegal.newline.ts"}},"name":"string.quoted.single.ts","patterns":[{"include":"#stringCharacterEscape"}]},"string":{"patterns":[{"include":"#qstringSingle"},{"include":"#qstringDouble"},{"include":"#templateLiteral"}]},"stringCharacterEscape":{"match":"\\\\\\\\(x\\\\h{2}|[012][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)","name":"constant.character.escape.ts"},"templateLiteral":{"patterns":[{"include":"#templateLiteralCall"},{"begin":"([$_[:alpha:]][$_[:alnum:]]*)?(`)","beginCaptures":{"1":{"name":"entity.name.function.tagged-template.ts"},"2":{"name":"string.template.ts punctuation.definition.string.template.begin.ts"}},"contentName":"string.template.ts","end":"`","endCaptures":{"0":{"name":"string.template.ts punctuation.definition.string.template.end.ts"}},"patterns":[{"include":"#templateLiteralSubstitutionElement"},{"include":"#stringCharacterEscape"}]}]},"templateLiteralCall":{"patterns":[{"begin":"(?=(([$_[:alpha:]][$_[:alnum:]]*\\\\s*\\\\??\\\\.\\\\s*)*|(\\\\??\\\\.\\\\s*)?)([$_[:alpha:]][$_[:alnum:]]*)(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?<!=)>))*(?<!=)>)*(?<!=)>\\\\s*)?`)","end":"(?=`)","patterns":[{"begin":"(?=(([$_[:alpha:]][$_[:alnum:]]*\\\\s*\\\\??\\\\.\\\\s*)*|(\\\\??\\\\.\\\\s*)?)([$_[:alpha:]][$_[:alnum:]]*))","end":"(?=(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?<!=)>))*(?<!=)>)*(?<!=)>\\\\s*)?`)","patterns":[{"include":"#support-function-call-identifiers"},{"match":"([$_[:alpha:]][$_[:alnum:]]*)","name":"entity.name.function.tagged-template.ts"}]},{"include":"#typeArguments"}]},{"begin":"([$_[:alpha:]][$_[:alnum:]]*)?\\\\s*(?=(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?<!=)>))*(?<!=)>)*(?<!=)>\\\\s*)`)","beginCaptures":{"1":{"name":"entity.name.function.tagged-template.ts"}},"end":"(?=`)","patterns":[{"include":"#typeArguments"}]}]},"templateLiteralSubstitutionElement":{"begin":"\\\\$\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.template-expression.begin.ts"}},"contentName":"meta.embedded.line.ts","end":"}","endCaptures":{"0":{"name":"punctuation.definition.template-expression.end.ts"}},"name":"meta.template.expression.ts","patterns":[{"include":"#ngExpression"}]},"ternaryExpression":{"begin":"(?!\\\\?\\\\.\\\\s*\\\\D)(\\\\?)(?!\\\\?)","beginCaptures":{"1":{"name":"keyword.operator.ternary.ts"}},"end":"\\\\s*(:)","endCaptures":{"1":{"name":"keyword.operator.ternary.ts"}},"patterns":[{"include":"#ngExpression"}]},"thisLiteral":{"match":"(?<![$.])\\\\bthis\\\\b(?!\\\\$)","name":"variable.language.this.ts"},"type":{"name":"meta.type.ts","patterns":[{"include":"#string"},{"include":"#numericLiteral"},{"include":"#typeBuiltinLiterals"},{"include":"#typeTuple"},{"include":"#typeObject"},{"include":"#typeOperators"},{"include":"#typeFnTypeParameters"},{"include":"#typeParenOrFunctionParameters"},{"include":"#typeName"}]},"typeAnnotation":{"begin":":","beginCaptures":{"0":{"name":"keyword.operator.type.annotation.ts"}},"end":"(?=$|[]),;}]|//|\\")|(?==[^>])|(?<=[]$)>_}[:alpha:]])\\\\s*(?=\\\\{)","name":"meta.type.annotation.ts","patterns":[{"include":"#type"}]},"typeArguments":{"begin":"<","beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.ts"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.ts"}},"name":"meta.type.parameters.ts","patterns":[{"include":"#typeArgumentsBody"}]},"typeArgumentsBody":{"patterns":[{"captures":{"0":{"name":"keyword.operator.type.ts"}},"match":"(?<![$_[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(_)(?![$_[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))"},{"include":"#type"},{"include":"#punctuationComma"}]},"typeBuiltinLiterals":{"match":"(?<![$.])\\\\b(this|true|false|undefined|null)\\\\b(?!\\\\$)","name":"support.type.builtin.ts"},"typeFnTypeParameters":{"patterns":[{"captures":{"1":{"name":"keyword.control.new.ts"}},"match":"(?<![$.])\\\\b(new)\\\\b(?=\\\\s*<)","name":"meta.type.constructor.ts"},{"begin":"(?<![$.])\\\\b(new)\\\\b\\\\s*(?=\\\\()","beginCaptures":{"1":{"name":"keyword.control.new.ts"}},"end":"(?<=\\\\))","name":"meta.type.constructor.ts","patterns":[{"include":"#functionParameters"}]},{"begin":"(?<=>)\\\\s*(?=\\\\()","end":"(?<=\\\\))","include":"#typeofOperator","name":"meta.type.function.ts","patterns":[{"include":"#functionParameters"}]},{"begin":"((?=\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>))))))","end":"(?<=\\\\))","name":"meta.type.function.ts","patterns":[{"include":"#functionParameters"}]}]},"typeName":{"patterns":[{"captures":{"1":{"name":"entity.name.type.module.ts"},"2":{"name":"punctuation.accessor.ts"}},"match":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*([!?]?\\\\.)"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"entity.name.type.ts"}]},"typeObject":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"name":"meta.object.type.ts","patterns":[{"include":"#typeObjectMembers"}]},"typeObjectMembers":{"patterns":[{"include":"#typeAnnotation"},{"include":"#punctuationComma"},{"include":"#punctuationSemicolon"}]},"typeOperators":{"patterns":[{"include":"#typeofOperator"},{"match":"[\\\\&|]","name":"keyword.operator.type.ts"},{"match":"(?<![$.])\\\\bkeyof\\\\b(?!\\\\$)","name":"keyword.operator.expression.keyof.ts"}]},"typeParenOrFunctionParameters":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"name":"meta.type.paren.cover.ts","patterns":[{"include":"#type"},{"include":"#functionParameters"}]},"typeTuple":{"begin":"\\\\[","beginCaptures":{"0":{"name":"meta.brace.square.ts"}},"end":"]","endCaptures":{"0":{"name":"meta.brace.square.ts"}},"name":"meta.type.tuple.ts","patterns":[{"include":"#type"},{"include":"#punctuationComma"}]},"typeofOperator":{"match":"(?<![$.])\\\\btypeof\\\\b(?!\\\\$)","name":"keyword.operator.expression.typeof.ts"},"undefinedLiteral":{"match":"(?<![$.])\\\\bundefined\\\\b(?!\\\\$)","name":"constant.language.undefined.ts"},"variableInitializer":{"begin":"(?<![!=])(=)(?!=)","beginCaptures":{"1":{"name":"keyword.operator.assignment.ts"}},"end":"(?=$|[]),;}])","patterns":[{"include":"#ngExpression"}]}},"scopeName":"expression.ng"}'))],r=Object.freeze(JSON.parse(`{"injectTo":["text.html.derivative","text.html.derivative.ng","source.ts.ng"],"injectionSelector":"L:text.html -comment -expression.ng -meta.tag -source.css -source.js","name":"angular-let-declaration","patterns":[{"include":"#letDeclaration"}],"repository":{"letDeclaration":{"begin":"(@let)\\\\s+([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(=)?","beginCaptures":{"1":{"name":"storage.type.ng"},"2":{"name":"variable.other.constant.ng"},"3":{"name":"keyword.operator.assignment.ng"}},"end":"(?<=;)","name":"meta.definition.variable.ng","patterns":[{"include":"#letInitializer"}]},"letInitializer":{"begin":"\\\\s*","beginCaptures":{"0":{"name":"keyword.operator.assignment.ng"}},"contentName":"meta.definition.variable.initializer.ng","end":";","endCaptures":{"0":{"name":"punctuation.terminator.statement.ng"}},"patterns":[{"include":"expression.ng"}]}},"scopeName":"template.let.ng","embeddedLangs":["angular-expression"]}`)),i=[...n,r],a=Object.freeze(JSON.parse(`{"injectTo":["text.html.derivative","text.html.derivative.ng","source.ts.ng"],"injectionSelector":"L:text.html -comment","name":"angular-template","patterns":[{"include":"#interpolation"}],"repository":{"interpolation":{"begin":"\\\\{\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"contentName":"expression.ng","end":"}}","endCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"patterns":[{"include":"expression.ng"}]}},"scopeName":"template.ng","embeddedLangs":["angular-expression"]}`)),o=[...n,a],s=Object.freeze(JSON.parse(`{"injectTo":["text.html.derivative","text.html.derivative.ng","source.ts.ng"],"injectionSelector":"L:text.html -comment -expression.ng -meta.tag -source.css -source.js","name":"angular-template-blocks","patterns":[{"include":"#block"}],"repository":{"block":{"begin":"(@)(if|else if|else|defer|placeholder|loading|error|switch|case|default|for|empty)\\\\s*","beginCaptures":{"1":{"patterns":[{"include":"#transition"}]},"2":{"name":"keyword.control.block.kind.ng"}},"end":"(?<=})","name":"control.block.ng","patterns":[{"include":"#blockExpression"},{"include":"#blockBody"}]},"blockBody":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"contentName":"control.block.body.ng","end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"patterns":[{"include":"text.html.derivative.ng"},{"include":"template.ng"}]},"blockExpression":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"contentName":"control.block.expression.ng","end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"patterns":[{"include":"#blockExpressionOfClause"},{"include":"#blockExpressionLetBinding"},{"include":"#blockExpressionTrackClause"},{"include":"expression.ng"}]},"blockExpressionLetBinding":{"begin":"\\\\blet\\\\b","beginCaptures":{"0":{"name":"storage.type.ng"}},"end":"(?=[$)])|(?<=;)","patterns":[{"include":"expression.ng"}]},"blockExpressionOfClause":{"begin":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s+(of)\\\\b","beginCaptures":{"1":{"name":"variable.other.constant.ng"},"2":{"name":"keyword.operator.expression.of.ng"}},"end":"(?=[$)])|(?<=;)","patterns":[{"include":"expression.ng"}]},"blockExpressionTrackClause":{"begin":"\\\\btrack\\\\b","beginCaptures":{"0":{"name":"keyword.control.track.ng"}},"end":"(?=[$)])|(?<=;)","patterns":[{"include":"expression.ng"}]},"transition":{"match":"@","name":"keyword.control.block.transition.ng"}},"scopeName":"template.blocks.ng","embeddedLangs":["angular-expression","angular-template"]}`)),c=[...n,...o,s],l=e({default:()=>d}),u=Object.freeze(JSON.parse(`{"displayName":"Angular HTML","injections":{"R:text.html - (comment.block, text.html meta.embedded, meta.tag.*.*.html, meta.tag.*.*.*.html, meta.tag.*.*.*.*.html)":{"patterns":[{"match":"<","name":"invalid.illegal.bad-angle-bracket.html"}]}},"name":"angular-html","patterns":[{"include":"text.html.basic#core-minus-invalid"},{"begin":"(</?)(\\\\w[^>\\\\s]*)(?<!/)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"}},"end":"((?: ?/)?>)","endCaptures":{"1":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.other.unrecognized.html.derivative","patterns":[{"include":"text.html.basic#attribute"}]}],"scopeName":"text.html.derivative.ng","embeddedLangs":["html","angular-expression","angular-let-declaration","angular-template","angular-template-blocks"]}`)),d=[...t,...n,...i,...o,...c,u];export{i as a,o as i,l as n,n as o,c as r,d as t};
1
+ import{r as e}from"./index-BezQIu6a.js";import{t}from"./html-D5wZ_JR6.js";var n=[Object.freeze(JSON.parse('{"injectionSelector":"L:text.html -comment","name":"angular-expression","patterns":[{"include":"#ngExpression"}],"repository":{"arrayLiteral":{"begin":"\\\\[","beginCaptures":{"0":{"name":"meta.brace.square.ts"}},"end":"]","endCaptures":{"0":{"name":"meta.brace.square.ts"}},"name":"meta.array.literal.ts","patterns":[{"include":"#ngExpression"},{"include":"#punctuationComma"}]},"booleanLiteral":{"patterns":[{"match":"(?<![$.])\\\\btrue\\\\b(?!\\\\$)","name":"constant.language.boolean.true.ts"},{"match":"(?<![$.])\\\\bfalse\\\\b(?!\\\\$)","name":"constant.language.boolean.false.ts"}]},"expressionOperator":{"patterns":[{"captures":{"1":{"name":"keyword.operator.logical.ts"},"2":{"name":"entity.name.function.pipe.ng"}},"match":"((?<!\\\\|)\\\\|(?!\\\\|))\\\\s?([-$0-9A-Z_a-z]*)"},{"match":"(?<![$.])\\\\b(let)\\\\b(?!\\\\$)","name":"storage.type.ts"},{"match":"(?<![$.])\\\\b(await)\\\\b(?!\\\\$)","name":"keyword.control.flow.ts"},{"match":"(?<![$.])\\\\bdelete\\\\b(?!\\\\$)","name":"keyword.operator.expression.delete.ts"},{"match":"(?<![$.])\\\\bin\\\\b(?!\\\\$)","name":"keyword.operator.expression.in.ts"},{"match":"(?<![$.])\\\\bof\\\\b(?!\\\\$)","name":"keyword.operator.expression.of.ts"},{"match":"(?<![$.])\\\\bif\\\\b(?!\\\\$)","name":"keyword.control.if.ts"},{"match":"(?<![$.])\\\\belse\\\\b(?!\\\\$)","name":"keyword.control.else.ts"},{"match":"(?<![$.])\\\\bthen\\\\b(?!\\\\$)","name":"keyword.control.then.ts"},{"match":"(?<![$.])\\\\binstanceof\\\\b(?!\\\\$)","name":"keyword.operator.expression.instanceof.ts"},{"match":"(?<![$.])\\\\bnew\\\\b(?!\\\\$)","name":"keyword.operator.new.ts"},{"match":"(?<![$.])\\\\bvoid\\\\b(?!\\\\$)","name":"keyword.operator.expression.void.ts"},{"begin":"(?<![$.])\\\\bas\\\\b(?!\\\\$)","beginCaptures":{"0":{"name":"storage.type.as.ts"}},"end":"(?=$|[]\\"\'),:;}])","patterns":[{"include":"#type"}]},{"match":"(?:\\\\*|(?<!\\\\()/|[-%+])=","name":"keyword.operator.assignment.compound.ts"},{"match":"(?:[\\\\&^]|<<|>>>??|\\\\|)=","name":"keyword.operator.assignment.compound.bitwise.ts"},{"match":"<<|>>>?","name":"keyword.operator.bitwise.shift.ts"},{"match":"[!=]==?","name":"keyword.operator.comparison.ts"},{"match":"<=|>=|<>|[<>]","name":"keyword.operator.relational.ts"},{"match":"!|&&|\\\\?\\\\?|\\\\|\\\\|","name":"keyword.operator.logical.ts"},{"match":"[\\\\&^|~]","name":"keyword.operator.bitwise.ts"},{"match":"=","name":"keyword.operator.assignment.ts"},{"match":"--","name":"keyword.operator.decrement.ts"},{"match":"\\\\+\\\\+","name":"keyword.operator.increment.ts"},{"match":"[-%*+/]","name":"keyword.operator.arithmetic.ts"},{"captures":{"1":{"name":"keyword.operator.arithmetic.ts"}},"match":"(?<=[$_[:alnum:]])\\\\s*(/)(?![*/])"},{"include":"#typeofOperator"}]},"functionCall":{"begin":"(?=(\\\\??\\\\.\\\\s*)?([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\()","end":"(?<=\\\\))(?!(\\\\??\\\\.\\\\s*)?([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\()","patterns":[{"match":"\\\\?","name":"punctuation.accessor.ts"},{"match":"\\\\.","name":"punctuation.accessor.ts"},{"match":"([$_[:alpha:]][$_[:alnum:]]*)","name":"entity.name.function.ts"},{"begin":"<","beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.ts"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.ts"}},"name":"meta.type.parameters.ts","patterns":[{"include":"#type"},{"include":"#punctuationComma"}]},{"include":"#parenExpression"}]},"functionParameters":{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.parameters.begin.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.end.ts"}},"name":"meta.parameters.ts","patterns":[{"include":"#decorator"},{"include":"#parameterName"},{"include":"#variableInitializer"},{"match":",","name":"punctuation.separator.parameter.ts"}]},"identifiers":{"patterns":[{"match":"([$_[:alpha:]][$_[:alnum:]]*)(?=\\\\s*\\\\.\\\\s*prototype\\\\b(?!\\\\$))","name":"support.class.ts"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"constant.other.object.property.ts"},"3":{"name":"variable.other.object.property.ts"}},"match":"([!?]?\\\\.)\\\\s*(?:(\\\\p{upper}[$_\\\\d[:upper:]]*)|([$_[:alpha:]][$_[:alnum:]]*))(?=\\\\s*\\\\.\\\\s*[$_[:alpha:]][$_[:alnum:]]*)"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"entity.name.function.ts"}},"match":"(?:([!?]?\\\\.)\\\\s*)?([$_[:alpha:]][$_[:alnum:]]*)(?=\\\\s*=\\\\s*((async\\\\s+)|(function\\\\s*[(<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)|((<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)(\\\\s*:\\\\s*(.)*)?\\\\s*=>)))"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"constant.other.property.ts"}},"match":"([!?]?\\\\.)\\\\s*(\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"variable.other.property.ts"}},"match":"([!?]?\\\\.)\\\\s*([$_[:alpha:]][$_[:alnum:]]*)"},{"captures":{"1":{"name":"constant.other.object.ts"},"2":{"name":"variable.other.object.ts"}},"match":"(?:(\\\\p{upper}[$_\\\\d[:upper:]]*)|([$_[:alpha:]][$_[:alnum:]]*))(?=\\\\s*\\\\.\\\\s*[$_[:alpha:]][$_[:alnum:]]*)"},{"match":"(\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])","name":"constant.character.other"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"variable.other.readwrite.ts"}]},"literal":{"name":"literal.ts","patterns":[{"include":"#numericLiteral"},{"include":"#booleanLiteral"},{"include":"#nullLiteral"},{"include":"#undefinedLiteral"},{"include":"#numericConstantLiteral"},{"include":"#arrayLiteral"},{"include":"#thisLiteral"}]},"ngExpression":{"name":"meta.expression.ng","patterns":[{"include":"#string"},{"include":"#literal"},{"include":"#ternaryExpression"},{"include":"#expressionOperator"},{"include":"#functionCall"},{"include":"#identifiers"},{"include":"#parenExpression"},{"include":"#punctuationComma"},{"include":"#punctuationSemicolon"},{"include":"#punctuationAccessor"}]},"nullLiteral":{"match":"(?<![$.])\\\\bnull\\\\b(?!\\\\$)","name":"constant.language.null.ts"},"numericConstantLiteral":{"patterns":[{"match":"(?<![$.])\\\\bNaN\\\\b(?!\\\\$)","name":"constant.language.nan.ts"},{"match":"(?<![$.])\\\\bInfinity\\\\b(?!\\\\$)","name":"constant.language.infinity.ts"}]},"numericLiteral":{"patterns":[{"match":"\\\\b(?<!\\\\$)0([Xx])\\\\h+\\\\b(?!\\\\$)","name":"constant.numeric.hex.ts"},{"match":"\\\\b(?<!\\\\$)0([Bb])[01]+\\\\b(?!\\\\$)","name":"constant.numeric.binary.ts"},{"match":"\\\\\\\\b(?<!\\\\$)0([Oo])?[0-7]+\\\\b(?!\\\\$)","name":"constant.numeric.octal.ts"},{"captures":{"0":{"name":"constant.numeric.decimal.ts"},"1":{"name":"meta.delimiter.decimal.period.ts"},"2":{"name":"meta.delimiter.decimal.period.ts"},"3":{"name":"meta.delimiter.decimal.period.ts"},"4":{"name":"meta.delimiter.decimal.period.ts"},"5":{"name":"meta.delimiter.decimal.period.ts"},"6":{"name":"meta.delimiter.decimal.period.ts"}},"match":"(?<!\\\\$)(?:\\\\b[0-9]+(\\\\.)[0-9]+[Ee][-+]?[0-9]+\\\\b|\\\\b[0-9]+(\\\\.)[Ee][-+]?[0-9]+\\\\b|\\\\B(\\\\.)[0-9]+[Ee][-+]?[0-9]+\\\\b|\\\\b[0-9]+[Ee][-+]?[0-9]+\\\\b|\\\\b[0-9]+(\\\\.)\\\\B|\\\\B(\\\\.)[0-9]+\\\\b|\\\\b[0-9]+\\\\b(?!\\\\.))(?!\\\\$)"}]},"parameterName":{"patterns":[{"captures":{"1":{"name":"storage.modifier.ts"},"2":{"name":"storage.modifier.ts"},"3":{"name":"keyword.operator.rest.ts"},"4":{"name":"entity.name.function.ts"},"5":{"name":"keyword.operator.optional.ts"}},"match":"(?:\\\\s*\\\\b(readonly)\\\\s+)?(?:\\\\s*\\\\b(p(?:ublic|rivate|rotected))\\\\s+)?(\\\\.\\\\.\\\\.)?\\\\s*(?<![:=])([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(\\\\??)(?=\\\\s*(=\\\\s*((async\\\\s+)|(function\\\\s*[(<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)|((<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)(\\\\s*:\\\\s*(.)*)?\\\\s*=>)))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>))))))))"},{"captures":{"1":{"name":"storage.modifier.ts"},"2":{"name":"storage.modifier.ts"},"3":{"name":"keyword.operator.rest.ts"},"4":{"name":"variable.parameter.ts"},"5":{"name":"keyword.operator.optional.ts"}},"match":"(?:\\\\s*\\\\b(readonly)\\\\s+)?(?:\\\\s*\\\\b(p(?:ublic|rivate|rotected))\\\\s+)?(\\\\.\\\\.\\\\.)?\\\\s*(?<![:=])([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(\\\\??)"}]},"parenExpression":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"patterns":[{"include":"#ngExpression"},{"include":"#punctuationComma"}]},"punctuationAccessor":{"match":"(?:\\\\?|!?)\\\\.","name":"punctuation.accessor.ts"},"punctuationComma":{"match":",","name":"punctuation.separator.comma.ts"},"punctuationSemicolon":{"match":";","name":"punctuation.terminator.statement.ts"},"qstringDouble":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ts"}},"end":"(\\")|([^\\\\n\\\\\\\\])$","endCaptures":{"1":{"name":"punctuation.definition.string.end.ts"},"2":{"name":"invalid.illegal.newline.ts"}},"name":"string.quoted.double.ts","patterns":[{"include":"#stringCharacterEscape"}]},"qstringSingle":{"begin":"\'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ts"}},"end":"(\')|([^\\\\n\\\\\\\\])$","endCaptures":{"1":{"name":"punctuation.definition.string.end.ts"},"2":{"name":"invalid.illegal.newline.ts"}},"name":"string.quoted.single.ts","patterns":[{"include":"#stringCharacterEscape"}]},"string":{"patterns":[{"include":"#qstringSingle"},{"include":"#qstringDouble"},{"include":"#templateLiteral"}]},"stringCharacterEscape":{"match":"\\\\\\\\(x\\\\h{2}|[012][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)","name":"constant.character.escape.ts"},"templateLiteral":{"patterns":[{"include":"#templateLiteralCall"},{"begin":"([$_[:alpha:]][$_[:alnum:]]*)?(`)","beginCaptures":{"1":{"name":"entity.name.function.tagged-template.ts"},"2":{"name":"string.template.ts punctuation.definition.string.template.begin.ts"}},"contentName":"string.template.ts","end":"`","endCaptures":{"0":{"name":"string.template.ts punctuation.definition.string.template.end.ts"}},"patterns":[{"include":"#templateLiteralSubstitutionElement"},{"include":"#stringCharacterEscape"}]}]},"templateLiteralCall":{"patterns":[{"begin":"(?=(([$_[:alpha:]][$_[:alnum:]]*\\\\s*\\\\??\\\\.\\\\s*)*|(\\\\??\\\\.\\\\s*)?)([$_[:alpha:]][$_[:alnum:]]*)(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?<!=)>))*(?<!=)>)*(?<!=)>\\\\s*)?`)","end":"(?=`)","patterns":[{"begin":"(?=(([$_[:alpha:]][$_[:alnum:]]*\\\\s*\\\\??\\\\.\\\\s*)*|(\\\\??\\\\.\\\\s*)?)([$_[:alpha:]][$_[:alnum:]]*))","end":"(?=(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?<!=)>))*(?<!=)>)*(?<!=)>\\\\s*)?`)","patterns":[{"include":"#support-function-call-identifiers"},{"match":"([$_[:alpha:]][$_[:alnum:]]*)","name":"entity.name.function.tagged-template.ts"}]},{"include":"#typeArguments"}]},{"begin":"([$_[:alpha:]][$_[:alnum:]]*)?\\\\s*(?=(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?<!=)>))*(?<!=)>)*(?<!=)>\\\\s*)`)","beginCaptures":{"1":{"name":"entity.name.function.tagged-template.ts"}},"end":"(?=`)","patterns":[{"include":"#typeArguments"}]}]},"templateLiteralSubstitutionElement":{"begin":"\\\\$\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.template-expression.begin.ts"}},"contentName":"meta.embedded.line.ts","end":"}","endCaptures":{"0":{"name":"punctuation.definition.template-expression.end.ts"}},"name":"meta.template.expression.ts","patterns":[{"include":"#ngExpression"}]},"ternaryExpression":{"begin":"(?!\\\\?\\\\.\\\\s*\\\\D)(\\\\?)(?!\\\\?)","beginCaptures":{"1":{"name":"keyword.operator.ternary.ts"}},"end":"\\\\s*(:)","endCaptures":{"1":{"name":"keyword.operator.ternary.ts"}},"patterns":[{"include":"#ngExpression"}]},"thisLiteral":{"match":"(?<![$.])\\\\bthis\\\\b(?!\\\\$)","name":"variable.language.this.ts"},"type":{"name":"meta.type.ts","patterns":[{"include":"#string"},{"include":"#numericLiteral"},{"include":"#typeBuiltinLiterals"},{"include":"#typeTuple"},{"include":"#typeObject"},{"include":"#typeOperators"},{"include":"#typeFnTypeParameters"},{"include":"#typeParenOrFunctionParameters"},{"include":"#typeName"}]},"typeAnnotation":{"begin":":","beginCaptures":{"0":{"name":"keyword.operator.type.annotation.ts"}},"end":"(?=$|[]),;}]|//|\\")|(?==[^>])|(?<=[]$)>_}[:alpha:]])\\\\s*(?=\\\\{)","name":"meta.type.annotation.ts","patterns":[{"include":"#type"}]},"typeArguments":{"begin":"<","beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.ts"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.ts"}},"name":"meta.type.parameters.ts","patterns":[{"include":"#typeArgumentsBody"}]},"typeArgumentsBody":{"patterns":[{"captures":{"0":{"name":"keyword.operator.type.ts"}},"match":"(?<![$_[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(_)(?![$_[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))"},{"include":"#type"},{"include":"#punctuationComma"}]},"typeBuiltinLiterals":{"match":"(?<![$.])\\\\b(this|true|false|undefined|null)\\\\b(?!\\\\$)","name":"support.type.builtin.ts"},"typeFnTypeParameters":{"patterns":[{"captures":{"1":{"name":"keyword.control.new.ts"}},"match":"(?<![$.])\\\\b(new)\\\\b(?=\\\\s*<)","name":"meta.type.constructor.ts"},{"begin":"(?<![$.])\\\\b(new)\\\\b\\\\s*(?=\\\\()","beginCaptures":{"1":{"name":"keyword.control.new.ts"}},"end":"(?<=\\\\))","name":"meta.type.constructor.ts","patterns":[{"include":"#functionParameters"}]},{"begin":"(?<=>)\\\\s*(?=\\\\()","end":"(?<=\\\\))","include":"#typeofOperator","name":"meta.type.function.ts","patterns":[{"include":"#functionParameters"}]},{"begin":"((?=\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>))))))","end":"(?<=\\\\))","name":"meta.type.function.ts","patterns":[{"include":"#functionParameters"}]}]},"typeName":{"patterns":[{"captures":{"1":{"name":"entity.name.type.module.ts"},"2":{"name":"punctuation.accessor.ts"}},"match":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*([!?]?\\\\.)"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"entity.name.type.ts"}]},"typeObject":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"name":"meta.object.type.ts","patterns":[{"include":"#typeObjectMembers"}]},"typeObjectMembers":{"patterns":[{"include":"#typeAnnotation"},{"include":"#punctuationComma"},{"include":"#punctuationSemicolon"}]},"typeOperators":{"patterns":[{"include":"#typeofOperator"},{"match":"[\\\\&|]","name":"keyword.operator.type.ts"},{"match":"(?<![$.])\\\\bkeyof\\\\b(?!\\\\$)","name":"keyword.operator.expression.keyof.ts"}]},"typeParenOrFunctionParameters":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"name":"meta.type.paren.cover.ts","patterns":[{"include":"#type"},{"include":"#functionParameters"}]},"typeTuple":{"begin":"\\\\[","beginCaptures":{"0":{"name":"meta.brace.square.ts"}},"end":"]","endCaptures":{"0":{"name":"meta.brace.square.ts"}},"name":"meta.type.tuple.ts","patterns":[{"include":"#type"},{"include":"#punctuationComma"}]},"typeofOperator":{"match":"(?<![$.])\\\\btypeof\\\\b(?!\\\\$)","name":"keyword.operator.expression.typeof.ts"},"undefinedLiteral":{"match":"(?<![$.])\\\\bundefined\\\\b(?!\\\\$)","name":"constant.language.undefined.ts"},"variableInitializer":{"begin":"(?<![!=])(=)(?!=)","beginCaptures":{"1":{"name":"keyword.operator.assignment.ts"}},"end":"(?=$|[]),;}])","patterns":[{"include":"#ngExpression"}]}},"scopeName":"expression.ng"}'))],r=Object.freeze(JSON.parse(`{"injectTo":["text.html.derivative","text.html.derivative.ng","source.ts.ng"],"injectionSelector":"L:text.html -comment -expression.ng -meta.tag -source.css -source.js","name":"angular-let-declaration","patterns":[{"include":"#letDeclaration"}],"repository":{"letDeclaration":{"begin":"(@let)\\\\s+([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(=)?","beginCaptures":{"1":{"name":"storage.type.ng"},"2":{"name":"variable.other.constant.ng"},"3":{"name":"keyword.operator.assignment.ng"}},"end":"(?<=;)","name":"meta.definition.variable.ng","patterns":[{"include":"#letInitializer"}]},"letInitializer":{"begin":"\\\\s*","beginCaptures":{"0":{"name":"keyword.operator.assignment.ng"}},"contentName":"meta.definition.variable.initializer.ng","end":";","endCaptures":{"0":{"name":"punctuation.terminator.statement.ng"}},"patterns":[{"include":"expression.ng"}]}},"scopeName":"template.let.ng","embeddedLangs":["angular-expression"]}`)),i=[...n,r],a=Object.freeze(JSON.parse(`{"injectTo":["text.html.derivative","text.html.derivative.ng","source.ts.ng"],"injectionSelector":"L:text.html -comment","name":"angular-template","patterns":[{"include":"#interpolation"}],"repository":{"interpolation":{"begin":"\\\\{\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"contentName":"expression.ng","end":"}}","endCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"patterns":[{"include":"expression.ng"}]}},"scopeName":"template.ng","embeddedLangs":["angular-expression"]}`)),o=[...n,a],s=Object.freeze(JSON.parse(`{"injectTo":["text.html.derivative","text.html.derivative.ng","source.ts.ng"],"injectionSelector":"L:text.html -comment -expression.ng -meta.tag -source.css -source.js","name":"angular-template-blocks","patterns":[{"include":"#block"}],"repository":{"block":{"begin":"(@)(if|else if|else|defer|placeholder|loading|error|switch|case|default|for|empty)\\\\s*","beginCaptures":{"1":{"patterns":[{"include":"#transition"}]},"2":{"name":"keyword.control.block.kind.ng"}},"end":"(?<=})","name":"control.block.ng","patterns":[{"include":"#blockExpression"},{"include":"#blockBody"}]},"blockBody":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"contentName":"control.block.body.ng","end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"patterns":[{"include":"text.html.derivative.ng"},{"include":"template.ng"}]},"blockExpression":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"contentName":"control.block.expression.ng","end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"patterns":[{"include":"#blockExpressionOfClause"},{"include":"#blockExpressionLetBinding"},{"include":"#blockExpressionTrackClause"},{"include":"expression.ng"}]},"blockExpressionLetBinding":{"begin":"\\\\blet\\\\b","beginCaptures":{"0":{"name":"storage.type.ng"}},"end":"(?=[$)])|(?<=;)","patterns":[{"include":"expression.ng"}]},"blockExpressionOfClause":{"begin":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s+(of)\\\\b","beginCaptures":{"1":{"name":"variable.other.constant.ng"},"2":{"name":"keyword.operator.expression.of.ng"}},"end":"(?=[$)])|(?<=;)","patterns":[{"include":"expression.ng"}]},"blockExpressionTrackClause":{"begin":"\\\\btrack\\\\b","beginCaptures":{"0":{"name":"keyword.control.track.ng"}},"end":"(?=[$)])|(?<=;)","patterns":[{"include":"expression.ng"}]},"transition":{"match":"@","name":"keyword.control.block.transition.ng"}},"scopeName":"template.blocks.ng","embeddedLangs":["angular-expression","angular-template"]}`)),c=[...n,...o,s],l=e({default:()=>d}),u=Object.freeze(JSON.parse(`{"displayName":"Angular HTML","injections":{"R:text.html - (comment.block, text.html meta.embedded, meta.tag.*.*.html, meta.tag.*.*.*.html, meta.tag.*.*.*.*.html)":{"patterns":[{"match":"<","name":"invalid.illegal.bad-angle-bracket.html"}]}},"name":"angular-html","patterns":[{"include":"text.html.basic#core-minus-invalid"},{"begin":"(</?)(\\\\w[^>\\\\s]*)(?<!/)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"}},"end":"((?: ?/)?>)","endCaptures":{"1":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.other.unrecognized.html.derivative","patterns":[{"include":"text.html.basic#attribute"}]}],"scopeName":"text.html.derivative.ng","embeddedLangs":["html","angular-expression","angular-let-declaration","angular-template","angular-template-blocks"]}`)),d=[...t,...n,...i,...o,...c,u];export{i as a,o as i,l as n,n as o,c as r,d as t};