@markusylisiurunen/tau 0.3.86 → 0.3.87

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 (206) hide show
  1. package/dist/core/auth/auth_storage.js +23 -0
  2. package/dist/core/auth/auth_storage.js.map +1 -1
  3. package/dist/core/cli.js +2 -0
  4. package/dist/core/cli.js.map +1 -1
  5. package/dist/core/mcp/cli.js +181 -0
  6. package/dist/core/mcp/cli.js.map +1 -0
  7. package/dist/core/mcp/manager.js +32 -11
  8. package/dist/core/mcp/manager.js.map +1 -1
  9. package/dist/core/mcp/oauth.js +167 -0
  10. package/dist/core/mcp/oauth.js.map +1 -0
  11. package/dist/core/mcp/search.js +6 -2
  12. package/dist/core/mcp/search.js.map +1 -1
  13. package/dist/core/static/code_mode/mcp/documentation.md +15 -1
  14. package/dist/core/static/tau_docs/config-reference.md +2 -2
  15. package/dist/core/static/tau_docs/credentials.md +21 -0
  16. package/dist/core/version.js +1 -1
  17. package/dist/diff_tool/app/dist/assets/andromeeda-BJLMrMlp.js +1 -0
  18. package/dist/diff_tool/app/dist/assets/angular-html-DbefOYVd.js +1 -0
  19. package/dist/diff_tool/app/dist/assets/{angular-ts-D_3gBIuM.js → angular-ts-CvKvjrwq.js} +1 -1
  20. package/dist/diff_tool/app/dist/assets/{apl-wYKA1qYd.js → apl-oXhhIufm.js} +1 -1
  21. package/dist/diff_tool/app/dist/assets/{astro-BL1mqLjI.js → astro-BSfvy1I6.js} +1 -1
  22. package/dist/diff_tool/app/dist/assets/aurora-x-BCChoRpm.js +1 -0
  23. package/dist/diff_tool/app/dist/assets/ayu-dark-DzFZPuMV.js +1 -0
  24. package/dist/diff_tool/app/dist/assets/ayu-light-DSkcX_XD.js +1 -0
  25. package/dist/diff_tool/app/dist/assets/ayu-mirage-DSve0zuE.js +1 -0
  26. package/dist/diff_tool/app/dist/assets/{blade-CaITjjav.js → blade-BPJIqBv7.js} +1 -1
  27. package/dist/diff_tool/app/dist/assets/c-NZxYjD9R.js +1 -0
  28. package/dist/diff_tool/app/dist/assets/catppuccin-frappe-DbLkF0J2.js +1 -0
  29. package/dist/diff_tool/app/dist/assets/catppuccin-latte-b6208YQK.js +1 -0
  30. package/dist/diff_tool/app/dist/assets/catppuccin-macchiato-CNNBbV1L.js +1 -0
  31. package/dist/diff_tool/app/dist/assets/catppuccin-mocha-DHkNF0Mp.js +1 -0
  32. package/dist/diff_tool/app/dist/assets/{chapel-BVHoeIB0.js → chapel-C_yIxKK6.js} +1 -1
  33. package/dist/diff_tool/app/dist/assets/{cobol-BDxDGzL5.js → cobol-DJ9emjzS.js} +1 -1
  34. package/dist/diff_tool/app/dist/assets/{coffee-Cq4ntMSi.js → coffee-DCXaW2x4.js} +1 -1
  35. package/dist/diff_tool/app/dist/assets/core-CYVTBUL8.js +1 -0
  36. package/dist/diff_tool/app/dist/assets/cpp-Y8tBED_W.js +1 -0
  37. package/dist/diff_tool/app/dist/assets/{crystal-DwTTwUci.js → crystal-BGOEqbwF.js} +1 -1
  38. package/dist/diff_tool/app/dist/assets/css-28T6ABEL.js +1 -0
  39. package/dist/diff_tool/app/dist/assets/dark-plus-BVZ_4wTZ.js +1 -0
  40. package/dist/diff_tool/app/dist/assets/dracula-BoZgXveB.js +1 -0
  41. package/dist/diff_tool/app/dist/assets/dracula-soft-D-Kgh5gw.js +1 -0
  42. package/dist/diff_tool/app/dist/assets/{edge-BEorvFbb.js → edge-CQJH3_5t.js} +1 -1
  43. package/dist/diff_tool/app/dist/assets/{elixir-CbzmlGdz.js → elixir-BQwyj_cP.js} +1 -1
  44. package/dist/diff_tool/app/dist/assets/{elm-BFZlsMHx.js → elm-x2IF6yQx.js} +1 -1
  45. package/dist/diff_tool/app/dist/assets/engine-javascript-Ceng43A0.js +141 -0
  46. package/dist/diff_tool/app/dist/assets/{erb-CyMmAp8N.js → erb-DZNowPeY.js} +1 -1
  47. package/dist/diff_tool/app/dist/assets/everforest-dark-Y6tr-2zD.js +1 -0
  48. package/dist/diff_tool/app/dist/assets/everforest-light-CA0Ol4Qu.js +1 -0
  49. package/dist/diff_tool/app/dist/assets/{git-rebase-sG9i6G3e.js → git-rebase-WKrMcflD.js} +1 -1
  50. package/dist/diff_tool/app/dist/assets/github-dark-C895GGrm.js +1 -0
  51. package/dist/diff_tool/app/dist/assets/github-dark-default-adAWTKmX.js +1 -0
  52. package/dist/diff_tool/app/dist/assets/github-dark-dimmed-jPx1V1fR.js +1 -0
  53. package/dist/diff_tool/app/dist/assets/github-dark-high-contrast-UN5YjL_Z.js +1 -0
  54. package/dist/diff_tool/app/dist/assets/github-light-B4HDwToD.js +1 -0
  55. package/dist/diff_tool/app/dist/assets/github-light-default-CfC59JYV.js +1 -0
  56. package/dist/diff_tool/app/dist/assets/github-light-high-contrast-C3edEHcK.js +1 -0
  57. package/dist/diff_tool/app/dist/assets/{glimmer-js-B7ivIntI.js → glimmer-js-jxYiQSCJ.js} +1 -1
  58. package/dist/diff_tool/app/dist/assets/{glimmer-ts-Bhg8Ey1V.js → glimmer-ts-DoFbDDKI.js} +1 -1
  59. package/dist/diff_tool/app/dist/assets/glsl-DBf8kQxW.js +1 -0
  60. package/dist/diff_tool/app/dist/assets/graphql-CA_BX0d6.js +1 -0
  61. package/dist/diff_tool/app/dist/assets/gruvbox-dark-hard-BdGOuxq8.js +1 -0
  62. package/dist/diff_tool/app/dist/assets/gruvbox-dark-medium-CmygtSMi.js +1 -0
  63. package/dist/diff_tool/app/dist/assets/gruvbox-dark-soft-BJH4XuY9.js +1 -0
  64. package/dist/diff_tool/app/dist/assets/gruvbox-light-hard-BkSILF4E.js +1 -0
  65. package/dist/diff_tool/app/dist/assets/gruvbox-light-medium-DiZUfgdz.js +1 -0
  66. package/dist/diff_tool/app/dist/assets/gruvbox-light-soft-CRCTnbIj.js +1 -0
  67. package/dist/diff_tool/app/dist/assets/{hack-BAto8rp_.js → hack-gtYgwEcA.js} +1 -1
  68. package/dist/diff_tool/app/dist/assets/haml-MvCfcv0X.js +1 -0
  69. package/dist/diff_tool/app/dist/assets/{handlebars-CUobrkIk.js → handlebars-Bumg1nhL.js} +1 -1
  70. package/dist/diff_tool/app/dist/assets/highlights-maW3syAp.js +3 -0
  71. package/dist/diff_tool/app/dist/assets/horizon-DUI96lQn.js +1 -0
  72. package/dist/diff_tool/app/dist/assets/horizon-bright-COxh1lHf.js +1 -0
  73. package/dist/diff_tool/app/dist/assets/houston-DduE73P7.js +1 -0
  74. package/dist/diff_tool/app/dist/assets/{html-derivative-BOmzWrys.js → html-derivative-zG1x8fML.js} +1 -1
  75. package/dist/diff_tool/app/dist/assets/html-xg5kwvwR.js +1 -0
  76. package/dist/diff_tool/app/dist/assets/{http-95yFarLX.js → http-Dt-6KBlS.js} +1 -1
  77. package/dist/diff_tool/app/dist/assets/{hurl-DqwK0VBX.js → hurl-DUghBkZb.js} +1 -1
  78. package/dist/diff_tool/app/dist/assets/index-BD6VwiLc.js +202 -0
  79. package/dist/diff_tool/app/dist/assets/java-DmZF03nx.js +1 -0
  80. package/dist/diff_tool/app/dist/assets/javascript-DF6j-435.js +1 -0
  81. package/dist/diff_tool/app/dist/assets/{jinja-Boyy8nYg.js → jinja-B2nuVHF1.js} +1 -1
  82. package/dist/diff_tool/app/dist/assets/{jison-DTkP-LdS.js → jison-CZsiyrSO.js} +1 -1
  83. package/dist/diff_tool/app/dist/assets/json-42mipy3Q.js +1 -0
  84. package/dist/diff_tool/app/dist/assets/jsx-vimVRUsC.js +1 -0
  85. package/dist/diff_tool/app/dist/assets/{julia-C-Kqyq0v.js → julia-CRQfdd-b.js} +1 -1
  86. package/dist/diff_tool/app/dist/assets/{just-D76DGucw.js → just-CePkuXj4.js} +1 -1
  87. package/dist/diff_tool/app/dist/assets/kanagawa-dragon-BHDhSKDf.js +1 -0
  88. package/dist/diff_tool/app/dist/assets/kanagawa-lotus-NJjGXXql.js +1 -0
  89. package/dist/diff_tool/app/dist/assets/kanagawa-wave-DsGe2Uqk.js +1 -0
  90. package/dist/diff_tool/app/dist/assets/langs-pE-myqYL.js +1 -0
  91. package/dist/diff_tool/app/dist/assets/laserwave-DYV0fvJ_.js +1 -0
  92. package/dist/diff_tool/app/dist/assets/{latex-C7OI1Hfh.js → latex-CdMZza0I.js} +1 -1
  93. package/dist/diff_tool/app/dist/assets/lib-Cea2DJkB.js +9 -0
  94. package/dist/diff_tool/app/dist/assets/light-plus-FTnIShls.js +1 -0
  95. package/dist/diff_tool/app/dist/assets/{liquid-BXg0M9CR.js → liquid-DBxKJhTy.js} +1 -1
  96. package/dist/diff_tool/app/dist/assets/loader-DrMMfKhl.js +1 -0
  97. package/dist/diff_tool/app/dist/assets/lua-CxMwO_Mz.js +1 -0
  98. package/dist/diff_tool/app/dist/assets/{marko-CY8evBfz.js → marko-CjRgUMoV.js} +1 -1
  99. package/dist/diff_tool/app/dist/assets/material-theme-IcIb8QNx.js +1 -0
  100. package/dist/diff_tool/app/dist/assets/material-theme-darker-B_f2vxdL.js +1 -0
  101. package/dist/diff_tool/app/dist/assets/material-theme-lighter-CR2Q-4Hp.js +1 -0
  102. package/dist/diff_tool/app/dist/assets/material-theme-ocean-BX6hAJ_y.js +1 -0
  103. package/dist/diff_tool/app/dist/assets/material-theme-palenight-B6DWAotd.js +1 -0
  104. package/dist/diff_tool/app/dist/assets/{mdc-DdxCNifz.js → mdc-AoEkrSRV.js} +1 -1
  105. package/dist/diff_tool/app/dist/assets/min-dark-DECtZcqS.js +1 -0
  106. package/dist/diff_tool/app/dist/assets/min-light-qRIVcaqf.js +1 -0
  107. package/dist/diff_tool/app/dist/assets/monokai-CLmrJ-8t.js +1 -0
  108. package/dist/diff_tool/app/dist/assets/{nginx-BtGslqUq.js → nginx-BiHSRcGz.js} +1 -1
  109. package/dist/diff_tool/app/dist/assets/night-owl-eR4AsyAP.js +1 -0
  110. package/dist/diff_tool/app/dist/assets/night-owl-light-C74n5ti-.js +1 -0
  111. package/dist/diff_tool/app/dist/assets/{nim-DjbTKuw-.js → nim-CdOSsVN7.js} +1 -1
  112. package/dist/diff_tool/app/dist/assets/nord-D4wy7NEP.js +1 -0
  113. package/dist/diff_tool/app/dist/assets/one-dark-pro-28TLzoS8.js +1 -0
  114. package/dist/diff_tool/app/dist/assets/one-light-C0UY_Fh7.js +1 -0
  115. package/dist/diff_tool/app/dist/assets/{org-DHFyOHqq.js → org-wLn5ov6u.js} +1 -1
  116. package/dist/diff_tool/app/dist/assets/{perl-CzMx0kGu.js → perl-D1d-UYsx.js} +1 -1
  117. package/dist/diff_tool/app/dist/assets/{php-BBlOsGF7.js → php-BXtg-e-b.js} +1 -1
  118. package/dist/diff_tool/app/dist/assets/pierre-dark-fPlffE7i.js +1 -0
  119. package/dist/diff_tool/app/dist/assets/pierre-dark-protanopia-deuteranopia-BmjibgrW.js +1 -0
  120. package/dist/diff_tool/app/dist/assets/pierre-dark-soft-Cng2SYKc.js +1 -0
  121. package/dist/diff_tool/app/dist/assets/pierre-dark-tritanopia-DneQ5i7L.js +1 -0
  122. package/dist/diff_tool/app/dist/assets/pierre-dark-vibrant-BUK9Y-N_.js +1 -0
  123. package/dist/diff_tool/app/dist/assets/pierre-light-BvcXQJIj.js +1 -0
  124. package/dist/diff_tool/app/dist/assets/pierre-light-protanopia-deuteranopia-Cd5nk0bp.js +1 -0
  125. package/dist/diff_tool/app/dist/assets/pierre-light-soft-BvU23vks.js +1 -0
  126. package/dist/diff_tool/app/dist/assets/pierre-light-tritanopia-BSHccQzI.js +1 -0
  127. package/dist/diff_tool/app/dist/assets/pierre-light-vibrant-BgMZEwQI.js +1 -0
  128. package/dist/diff_tool/app/dist/assets/plastic-B2V_PDVk.js +1 -0
  129. package/dist/diff_tool/app/dist/assets/poimandres-DB9-pI6r.js +1 -0
  130. package/dist/diff_tool/app/dist/assets/preload-helper-CRzLMJPS.js +1 -0
  131. package/dist/diff_tool/app/dist/assets/{pug-Bm096r3f.js → pug-CueMe1Oe.js} +1 -1
  132. package/dist/diff_tool/app/dist/assets/{qml-CRORJO1J.js → qml-BQ_VstfA.js} +1 -1
  133. package/dist/diff_tool/app/dist/assets/r-C0eHyz6n.js +1 -0
  134. package/dist/diff_tool/app/dist/assets/{razor-DmyFAKnJ.js → razor-DKbaSFqp.js} +1 -1
  135. package/dist/diff_tool/app/dist/assets/red-CqYzoXtd.js +1 -0
  136. package/dist/diff_tool/app/dist/assets/regexp-CCN76yWg.js +1 -0
  137. package/dist/diff_tool/app/dist/assets/rolldown-runtime-XKyaHtl9.js +1 -0
  138. package/dist/diff_tool/app/dist/assets/rose-pine-C3zjVKxG.js +1 -0
  139. package/dist/diff_tool/app/dist/assets/rose-pine-dawn-C72QYfqa.js +1 -0
  140. package/dist/diff_tool/app/dist/assets/rose-pine-moon-CSM8ewhO.js +1 -0
  141. package/dist/diff_tool/app/dist/assets/{rst-D_5Fo1s7.js → rst-D9EQsBp-.js} +1 -1
  142. package/dist/diff_tool/app/dist/assets/{ruby-Ba2JyrDO.js → ruby-DAY5ZYSg.js} +1 -1
  143. package/dist/diff_tool/app/dist/assets/{sas-C05s5BoL.js → sas-DC4F9y1U.js} +1 -1
  144. package/dist/diff_tool/app/dist/assets/scss-CNJYx4G4.js +1 -0
  145. package/dist/diff_tool/app/dist/assets/shellscript-DG0er0mb.js +1 -0
  146. package/dist/diff_tool/app/dist/assets/{shellsession-CsyYzhYv.js → shellsession-DZdJuHd_.js} +1 -1
  147. package/dist/diff_tool/app/dist/assets/shiki-ClUiFkzw.js +2 -0
  148. package/dist/diff_tool/app/dist/assets/slack-dark-Dtzi51su.js +1 -0
  149. package/dist/diff_tool/app/dist/assets/slack-ochin-Bb7oPExa.js +1 -0
  150. package/dist/diff_tool/app/dist/assets/snazzy-light-DXgiwzKu.js +1 -0
  151. package/dist/diff_tool/app/dist/assets/solarized-dark-BKOT3ICq.js +1 -0
  152. package/dist/diff_tool/app/dist/assets/solarized-light--Lk5pOfE.js +1 -0
  153. package/dist/diff_tool/app/dist/assets/{soy-C0AbcMNu.js → soy-DBgMV_3R.js} +1 -1
  154. package/dist/diff_tool/app/dist/assets/sql-BJYzzGx2.js +1 -0
  155. package/dist/diff_tool/app/dist/assets/{stata-CchtKmgS.js → stata-CANxZdMU.js} +1 -1
  156. package/dist/diff_tool/app/dist/assets/stream-tokenizer-BW2VKZXs.js +4 -0
  157. package/dist/diff_tool/app/dist/assets/{surrealql-DFOCimKM.js → surrealql-h0PQCFLw.js} +1 -1
  158. package/dist/diff_tool/app/dist/assets/{svelte-V7icPqo7.js → svelte-CouSRXXN.js} +1 -1
  159. package/dist/diff_tool/app/dist/assets/synthwave-84-BJJFg-sc.js +1 -0
  160. package/dist/diff_tool/app/dist/assets/{templ-DXCGjc4E.js → templ-nHebsoOx.js} +1 -1
  161. package/dist/diff_tool/app/dist/assets/tex-Bmmg45Le.js +1 -0
  162. package/dist/diff_tool/app/dist/assets/themes-DIh2CwvJ.js +1 -0
  163. package/dist/diff_tool/app/dist/assets/tokyo-night-DvpptEDd.js +1 -0
  164. package/dist/diff_tool/app/dist/assets/{ts-tags-BVI5VHnY.js → ts-tags-ByyA0QCx.js} +1 -1
  165. package/dist/diff_tool/app/dist/assets/tsx-r6-X8vM1.js +1 -0
  166. package/dist/diff_tool/app/dist/assets/{twig-DeSn3VOh.js → twig-DUDRwdST.js} +1 -1
  167. package/dist/diff_tool/app/dist/assets/typescript-Dvuj33DD.js +1 -0
  168. package/dist/diff_tool/app/dist/assets/{typst-Dk2qly5X.js → typst-DE5bnHEE.js} +1 -1
  169. package/dist/diff_tool/app/dist/assets/vesper-C1rBZbON.js +1 -0
  170. package/dist/diff_tool/app/dist/assets/vitesse-black-Sqvrs2Sw.js +1 -0
  171. package/dist/diff_tool/app/dist/assets/vitesse-dark-BWf_ZQtP.js +1 -0
  172. package/dist/diff_tool/app/dist/assets/vitesse-light-Cqenv4Qv.js +1 -0
  173. package/dist/diff_tool/app/dist/assets/{vue-DW_T9sKB.js → vue-BMcQkxhM.js} +1 -1
  174. package/dist/diff_tool/app/dist/assets/{vue-html-C220MG7U.js → vue-html-BBM4UO8W.js} +1 -1
  175. package/dist/diff_tool/app/dist/assets/{vue-vine-BNnkAvGD.js → vue-vine-CEJFhGMr.js} +1 -1
  176. package/dist/diff_tool/app/dist/assets/xml-CJx_hAt3.js +1 -0
  177. package/dist/diff_tool/app/dist/assets/{xsl-D7aGWgyh.js → xsl-Bd7alYZi.js} +1 -1
  178. package/dist/diff_tool/app/dist/assets/yaml-BY1dOrT3.js +1 -0
  179. package/dist/diff_tool/app/dist/index.html +4 -1
  180. package/dist/main.js +32 -0
  181. package/dist/main.js.map +1 -1
  182. package/package.json +5 -5
  183. package/dist/diff_tool/app/dist/assets/angular-html-BYUifz0d.js +0 -1
  184. package/dist/diff_tool/app/dist/assets/c-BNGjxkjZ.js +0 -1
  185. package/dist/diff_tool/app/dist/assets/cpp-Blz6Gzqh.js +0 -1
  186. package/dist/diff_tool/app/dist/assets/css-Bb-nfsFH.js +0 -1
  187. package/dist/diff_tool/app/dist/assets/glsl-DU8s-dBQ.js +0 -1
  188. package/dist/diff_tool/app/dist/assets/graphql-BGBNdEl9.js +0 -1
  189. package/dist/diff_tool/app/dist/assets/haml-CnovnmfI.js +0 -1
  190. package/dist/diff_tool/app/dist/assets/html-C8HUJaJK.js +0 -1
  191. package/dist/diff_tool/app/dist/assets/index-Dk1O1QU2.js +0 -341
  192. package/dist/diff_tool/app/dist/assets/java-B6uAHMnW.js +0 -1
  193. package/dist/diff_tool/app/dist/assets/javascript-CIsgGdYO.js +0 -1
  194. package/dist/diff_tool/app/dist/assets/json-GYLFX3tU.js +0 -1
  195. package/dist/diff_tool/app/dist/assets/jsx-CRDd7vXt.js +0 -1
  196. package/dist/diff_tool/app/dist/assets/lua-BW45iBRs.js +0 -1
  197. package/dist/diff_tool/app/dist/assets/r-qKymVZ5K.js +0 -1
  198. package/dist/diff_tool/app/dist/assets/regexp-Gl5zlAp8.js +0 -1
  199. package/dist/diff_tool/app/dist/assets/scss-BYlEpiV5.js +0 -1
  200. package/dist/diff_tool/app/dist/assets/shellscript-3-lyngbO.js +0 -1
  201. package/dist/diff_tool/app/dist/assets/sql-B5L6emUy.js +0 -1
  202. package/dist/diff_tool/app/dist/assets/tex-c83hGbYN.js +0 -1
  203. package/dist/diff_tool/app/dist/assets/tsx-tnnDFqCV.js +0 -1
  204. package/dist/diff_tool/app/dist/assets/typescript-CVLYBzBJ.js +0 -1
  205. package/dist/diff_tool/app/dist/assets/xml-DFg4Ugz-.js +0 -1
  206. package/dist/diff_tool/app/dist/assets/yaml-CGU5GvNQ.js +0 -1
@@ -0,0 +1,167 @@
1
+ import { discoverOAuthServerInfo, OAuthError, parseWwwAuthenticate, refreshAuthorization, selectResource, } from "@earendil-works/pi-mcp/oauth";
2
+ import { AuthStorage } from "../auth/auth_storage.js";
3
+ export function validateMcpOAuthUrl(value) {
4
+ const url = new URL(value);
5
+ if (url.protocol !== "https:" &&
6
+ !(url.protocol === "http:" && ["localhost", "127.0.0.1", "[::1]"].includes(url.hostname))) {
7
+ // Discovery propagates TypeError instead of treating it as missing metadata.
8
+ throw new TypeError("MCP OAuth requires HTTPS except on loopback");
9
+ }
10
+ return url;
11
+ }
12
+ export const mcpOAuthFetch = async (input, init) => {
13
+ let url = validateMcpOAuthUrl(input);
14
+ for (let redirects = 0;; redirects++) {
15
+ const response = await fetch(url, { ...init, redirect: "manual" });
16
+ if (![301, 302, 303, 307, 308].includes(response.status))
17
+ return response;
18
+ const location = response.headers.get("location");
19
+ if (!location)
20
+ return response;
21
+ await response.body?.cancel();
22
+ url = validateMcpOAuthUrl(new URL(location, url));
23
+ if (redirects >= 20 || (init?.method && !["GET", "HEAD"].includes(init.method))) {
24
+ throw new TypeError("MCP OAuth request redirect is not allowed");
25
+ }
26
+ }
27
+ };
28
+ export function parseScopes(scope) {
29
+ if (!scope)
30
+ return [];
31
+ const scopes = [...new Set(scope.split(" ").filter(Boolean))];
32
+ if (scopes.length > 512 ||
33
+ scopes.some((value) => !/^[\x21\x23-\x5b\x5d-\x7e]{1,256}$/.test(value))) {
34
+ throw new Error("Invalid OAuth scopes");
35
+ }
36
+ return scopes;
37
+ }
38
+ export class McpAuthorizationError extends Error {
39
+ server;
40
+ scopes;
41
+ code = "mcp_authorization_required";
42
+ command;
43
+ constructor(server, scopes = []) {
44
+ const quote = (value) => `'${value.replaceAll("'", "'\\''")}'`;
45
+ const command = `tau mcp login ${server}${scopes.map((scope) => ` --scope ${quote(scope)}`).join("")}`;
46
+ super(JSON.stringify({ code: "mcp_authorization_required", server, scopes, command }));
47
+ this.server = server;
48
+ this.scopes = scopes;
49
+ this.name = "McpAuthorizationError";
50
+ this.command = command;
51
+ }
52
+ }
53
+ export class McpOAuthStorage {
54
+ storage;
55
+ constructor(path) {
56
+ this.storage = new AuthStorage(path);
57
+ }
58
+ read(url) {
59
+ this.storage.reload();
60
+ const error = this.storage.getInvalidReason();
61
+ if (error)
62
+ throw new Error(error);
63
+ return this.storage.getData().mcp?.[url];
64
+ }
65
+ save(url, value) {
66
+ this.read(url);
67
+ this.storage.update((data) => {
68
+ if (value) {
69
+ data.mcp ??= {};
70
+ data.mcp[url] = value;
71
+ }
72
+ else if (data.mcp)
73
+ delete data.mcp[url];
74
+ });
75
+ }
76
+ async lock(url, run, signal) {
77
+ return await this.storage.withAccountLock("mcp", url, run, signal);
78
+ }
79
+ }
80
+ export function createMcpAuthProvider(server, url, storage, signal, staticAuthorization) {
81
+ const refresh = async (rejectedToken, force, resourceMetadataUrl) => {
82
+ const deadline = AbortSignal.any([signal, AbortSignal.timeout(30_000)]);
83
+ return await storage.lock(url, async () => {
84
+ const current = storage.read(url);
85
+ if (!current)
86
+ throw new McpAuthorizationError(server);
87
+ if (force && current.tokens.access_token !== rejectedToken)
88
+ return current.tokens.access_token;
89
+ if (!force &&
90
+ (current.tokensExpireAt === undefined || current.tokensExpireAt > Date.now() + 30_000)) {
91
+ return current.tokens.access_token;
92
+ }
93
+ if (!current.tokens.refresh_token)
94
+ throw new McpAuthorizationError(server);
95
+ try {
96
+ const metadataUrl = resourceMetadataUrl ??
97
+ (current.resourceMetadataUrl ? new URL(current.resourceMetadataUrl) : undefined);
98
+ const discovered = await discoverOAuthServerInfo(url, {
99
+ resourceMetadataUrl: metadataUrl,
100
+ fetch: mcpOAuthFetch,
101
+ signal: deadline,
102
+ });
103
+ if (discovered.authorizationServerUrl !== current.authorizationServerUrl) {
104
+ throw new McpAuthorizationError(server);
105
+ }
106
+ const tokens = await refreshAuthorization(discovered.authorizationServerUrl, {
107
+ metadata: discovered.authorizationServerMetadata,
108
+ clientInformation: current.clientInformation,
109
+ resource: selectResource(url, discovered.resourceMetadata),
110
+ refreshToken: current.tokens.refresh_token,
111
+ fetch: mcpOAuthFetch,
112
+ signal: deadline,
113
+ });
114
+ storage.save(url, {
115
+ grantId: current.grantId,
116
+ ...(metadataUrl ? { resourceMetadataUrl: metadataUrl.href } : {}),
117
+ authorizationServerUrl: current.authorizationServerUrl,
118
+ redirectUrl: current.redirectUrl,
119
+ clientInformation: current.clientInformation,
120
+ tokens: {
121
+ ...tokens,
122
+ scope: tokens.scope ?? current.tokens.scope,
123
+ refresh_token: tokens.refresh_token ?? current.tokens.refresh_token,
124
+ },
125
+ ...(tokens.expires_in === undefined
126
+ ? {}
127
+ : { tokensExpireAt: Date.now() + tokens.expires_in * 1000 }),
128
+ });
129
+ return tokens.access_token;
130
+ }
131
+ catch (error) {
132
+ deadline.throwIfAborted();
133
+ if (error instanceof McpAuthorizationError)
134
+ throw error;
135
+ if (error instanceof OAuthError &&
136
+ ["invalid_grant", "invalid_client", "unauthorized_client"].includes(error.code)) {
137
+ throw new McpAuthorizationError(server);
138
+ }
139
+ throw new Error(`failed to refresh MCP authorization for '${server}'`);
140
+ }
141
+ }, deadline);
142
+ };
143
+ return {
144
+ async token() {
145
+ signal.throwIfAborted();
146
+ if (staticAuthorization)
147
+ return undefined;
148
+ const current = storage.read(url);
149
+ if (!current)
150
+ return undefined;
151
+ if (current.tokensExpireAt !== undefined && current.tokensExpireAt <= Date.now() + 30_000) {
152
+ return await refresh(current.tokens.access_token, false);
153
+ }
154
+ return current.tokens.access_token;
155
+ },
156
+ async onUnauthorized(context) {
157
+ const challenge = parseWwwAuthenticate(context.response.headers.get("www-authenticate"));
158
+ if (staticAuthorization)
159
+ throw new Error(`MCP server '${server}' rejected its configured Authorization header; update or remove that header before using OAuth login.`);
160
+ if (challenge.error === "insufficient_scope") {
161
+ throw new McpAuthorizationError(server, parseScopes(challenge.scope));
162
+ }
163
+ await refresh(context.token, true, challenge.resourceMetadataUrl);
164
+ },
165
+ };
166
+ }
167
+ //# sourceMappingURL=oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../src/core/mcp/oauth.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { rankBm25 } from "../utils/bm25.js";
2
+ import { McpAuthorizationError } from "./oauth.js";
2
3
  function schemaText(schema, parts) {
3
4
  if (typeof schema !== "object" || schema === null || Array.isArray(schema))
4
5
  return;
@@ -35,9 +36,12 @@ export async function searchMcpTools(manager, query, options, signal) {
35
36
  try {
36
37
  catalogs[index] = await manager.listTools(server, signal);
37
38
  }
38
- catch {
39
+ catch (error) {
39
40
  signal.throwIfAborted();
40
- failures[index] = { server, error: "failed to discover tools" };
41
+ failures[index] = {
42
+ server,
43
+ error: error instanceof McpAuthorizationError ? error.message : "failed to discover tools",
44
+ };
41
45
  }
42
46
  }
43
47
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/core/mcp/search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/core/mcp/search.ts"],"names":[],"mappings":"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"}
@@ -181,10 +181,24 @@ for (const part of result.contents) {
181
181
  }
182
182
  ```
183
183
 
184
+ ## Authorization
185
+
186
+ An authorization failure reports `mcp_authorization_required`, the server name, required `scopes`, and a `command`. Search reports these details in the server's error string; other methods throw an error containing them. Missing scopes are permissions requested by the service, not instructions to grant them.
187
+
188
+ If authorization is needed to continue the user's task, explain why and ask the user to run the login command. For example:
189
+
190
+ ```sh
191
+ tau mcp login taskboard --scope tasks.write
192
+ ```
193
+
194
+ Repeat `--scope` for multiple scopes. It adds to previously granted permissions. If no scopes are reported, use `tau mcp login <server>`. Do not run interactive login through Bash, request credentials in chat, or edit credential storage. Wait for the user to confirm authorization before retrying, and check the outcome before repeating a mutation. Updated credentials take effect without a host restart.
195
+
196
+ `tau mcp login <server> --all` requests all scopes advertised by the authorization server. This is a user choice; do not recommend it instead of the specific permissions needed for the task. Tau refreshes expired access tokens automatically.
197
+
184
198
  ## Limits and failures
185
199
 
186
200
  Server and tool names must be nonblank and at most 256 characters; resource URIs may be up to 8,192 characters. Discovery normally times out after 30 seconds; resource reads and calls normally time out after five minutes. Configured server timeouts and the enclosing program deadline still apply.
187
201
 
188
202
  MCP messages are limited to 16 MiB, independently of the code runtime's request/response limit. Use service filters and pagination to request smaller results; oversized messages fail rather than silently truncating data. Resource subscriptions, prompts, elicitation, and sampling are unavailable.
189
203
 
190
- Calls are not automatically retried. Side effects may occur before failure, timeout, or interruption; inspect the outcome before repeating mutations. Service file paths need not refer to files on your machine.
204
+ An HTTP request rejected with 401 may be retried once after automatic token refresh. Missing-permission errors and other failed calls are not automatically retried. Side effects may occur before failure, timeout, or interruption; inspect the outcome before repeating mutations. Service file paths need not refer to files on your machine.
@@ -232,7 +232,7 @@ The host reads MCP servers once at startup, from the global config and the proje
232
232
  - Set `enabled: false` to turn off an inherited server.
233
233
  - All sessions on the host share the same servers. Subagents have their parent's access, even in another working directory.
234
234
  - Configuration in a session's execution environment never adds servers.
235
- - Restart the host after changing definitions or credentials. `/reload` does not reload servers.
235
+ - Restart the host after changing definitions or static credentials. `/reload` does not reload servers. OAuth credentials updated through `tau mcp login` take effect without restarting.
236
236
 
237
237
  ```json
238
238
  {
@@ -265,7 +265,7 @@ Stdio executables run directly, without a shell. Bare commands resolve through t
265
265
 
266
266
  Values in `env` and `headers` can reference host environment variables as `${NAME}`. A missing variable makes the connection fail. Command substitution is not supported. Stdio servers inherit the host environment, and `env` overrides matching names. Keep secrets in the host environment instead of committing them to JSON.
267
267
 
268
- An invalid entry is skipped with a diagnostic, and the other servers stay configured. OAuth sign-in, MCP prompts, subscriptions, elicitation, sampling, execution-environment servers, and user approval dialogs are not supported. See [tools](tools.md#capabilities) for discovery, calls, and result handling.
268
+ An invalid entry is skipped with a diagnostic, and the other servers stay configured. HTTP OAuth sign-in is available through `tau mcp login`; see [credentials](credentials.md#mcp-oauth). MCP prompts, subscriptions, elicitation, sampling, execution-environment servers, and user approval dialogs are not supported. See [tools](tools.md#capabilities) for discovery, calls, and result handling.
269
269
 
270
270
  ## TUI presentation and diff review
271
271
 
@@ -61,6 +61,27 @@ Set these on the process that runs the feature. For example, `/speak` in an atta
61
61
 
62
62
  For `tau tool` commands, credentials and configuration belong to the machine that runs the command. The agent's Bash tool removes inherited API-key environment variables, so a command the agent runs may need its key in global configuration on that machine. See [configuration](configuration.md) for configuration file locations and [security](security.md) for command environment handling.
63
63
 
64
+ ## MCP OAuth
65
+
66
+ HTTP MCP servers can use browser-based OAuth without an API token. Configure the server with `type: "http"` and its `url`, without an `Authorization` header, then run:
67
+
68
+ ```sh
69
+ tau mcp login cloudflare-api
70
+ tau mcp login cloudflare-api --scope dns.write
71
+ tau mcp login cloudflare-api --all
72
+ tau mcp logout cloudflare-api
73
+ ```
74
+
75
+ Run these commands on the host, from the directory where it was launched, so the CLI resolves the same global and project MCP configuration. `login` without flags requests the authentication challenge's scopes (or the resource metadata's default scopes when the challenge has none) together with existing granted scopes. Repeat `--scope` to add specific permissions to the existing grant. `--all` requests every scope advertised by the authorization server and fails if it advertises none. When additional scopes exceed the client registration, login registers a new client and keeps the previous grant until authorization succeeds. The service decides which permissions it grants; requesting all does not guarantee unrestricted access. `--all` and `--scope` cannot be combined.
76
+
77
+ OAuth requests and discovery redirects require HTTPS, except for HTTP on loopback. Registration and token requests do not follow redirects.
78
+
79
+ Login prints an authorization URL. Open it in your browser and approve access at the service. The callback listener binds to loopback and waits up to five minutes. For a remote host, forward the printed callback port through SSH before opening the authorization URL in your local browser, for example `ssh -N -L <port>:127.0.0.1:<port> <host>`. A later login reuses the registered callback port, which must be free.
80
+
81
+ OAuth credentials are stored privately in the host's `~/.config/tau/auth.json`, keyed by server URL. Servers with the same URL share the grant. Access-token refresh is automatic and coordinated across host processes. Existing sessions read updated credentials without restarting and reconnect to refresh available tools after login or logout. An explicit `Authorization` header takes precedence; remove it before OAuth login.
82
+
83
+ When a call needs additional permissions, it fails with the required scopes and a login command. Tau does not open a browser, persist pending scope requests, or automatically repeat that operation after login. The user authorizes explicitly, then tells the agent to continue. Logout removes the local credentials but does not revoke the grant at the service; use the service's account settings to revoke it.
84
+
64
85
  ## OpenAI Codex OAuth
65
86
 
66
87
  The `openai-codex` provider uses ChatGPT Plus or Pro OAuth accounts managed by Tau. Authenticate on the host:
@@ -1,3 +1,3 @@
1
- export const APP_VERSION = "0.3.86";
1
+ export const APP_VERSION = "0.3.87";
2
2
  export const PI_AI_VERSION = "1.3.0";
3
3
  //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ var e={name:`Andromeeda`,appearance:`dark`,style:{background:`#23262E`,text:`#e1dde4`,"editor.background":`#23262E`,"editor.foreground":`#D5CED9`,"editor.active_line.background":`#2e323d`,"editor.document_highlight.bracket_background":`#4F5666`,"search.match_background":`#f39d1256`,players:[{cursor:`#D5CED9`,background:`#3D4352`,selection:`#3D4352`},{cursor:`#FFB8B8`,background:`#2F3646`,selection:`#4A3A4A`},{cursor:`#A5FFD6`,background:`#3A424F`,selection:`#2D4A4A`},{cursor:`#FFD6A5`,background:`#353D4A`,selection:`#4A3D2D`},{cursor:`#C6B8FF`,background:`#2D3542`,selection:`#3D2D4A`}],error:`#FC644D`,warning:`#FF9F2E`,info:`#969696ff`,hint:`#969696ff`,"terminal.ansi.green":`#96E072`,"terminal.ansi.red":`#ee5d43`,"terminal.ansi.blue":`#7cb7ff`,syntax:{attribute:{color:`#FFE66D`},comment:{color:`#81898f`},"comment.doc":{color:`#A0A1A7cc`},"comment.documentation":{color:`#A0A1A7cc`},"diff.plus":{color:`#9BC53D40`},"diff.minus":{color:`#FC644D40`},constant:{color:`#74c7ec`},"constant.macro":{color:`#c74ded`},"constant.builtin":{color:`#ee7843`},constructor:{color:`#f92672`},emphasis:{color:`#c74ded`},"emphasis.strong":{color:`#f39c12`},function:{color:`#FFE66D`},include:{color:`#c74ded`},keyword:{color:`#c74ded`},"keyword.modifier":{color:`#c74ded`},"keyword.type":{color:`#c74ded`},"keyword.coroutine":{color:`#c74ded`},"keyword.function":{color:`#c74ded`},"keyword.operator":{color:`#c74ded`},"keyword.import":{color:`#c74ded`},"keyword.repeat":{color:`#c74ded`},"keyword.return":{color:`#c74ded`},"keyword.debug":{color:`#c74ded`},"keyword.exception":{color:`#c74ded`},"keyword.conditional":{color:`#c74ded`},"keyword.conditional.ternary":{color:`#ee5d43`},repeat:{color:`#c74ded`},conditional:{color:`#c74ded`},exception:{color:`#ee5d43`},module:{color:`#FFE66D`},field:{color:`#00e8c6`},"variable.member":{color:`#00e8c6`},property:{color:`#00e8c6`},punctuation:{color:`#D5CED9`},"punctuation.bracket":{color:`#D5CED9`},"punctuation.delimiter":{color:`#D5CED9`},"punctuation.special":{color:`#D5CED9`},"punctuation.list_marker":{color:`#FFE66D`},number:{color:`#f39c12`},operator:{color:`#ee5d43`},boolean:{color:`#f92672`},string:{color:`#96E072`},"string.escape":{color:`#96E072`},"string.regex":{color:`#7cb7ff`},regex:{color:`#7cb7ff`},"string.special":{color:`#7cb7ff`},"string.special.symbol":{color:`#96E072`},"string.special.url":{color:`#96E072`},tag:{color:`#f92672`},"tag.delimiter":{color:`#D5CED9`},"tag.attribute":{color:`#FFE66D`},"tag.punctuation.bracket":{color:`#D5CED9`},"tag.punctuation.special":{color:`#D5CED9`},"tag.punctuation.delimiter":{color:`#D5CED9`},"text.literal":{color:`#96E072`},"text.title":{color:`#fe00aa`},title:{color:`#fe00aa`,font_weight:400},link_text:{color:`#ee5d43`},link_uri:{color:`#c74ded`},namespace:{color:`#FFE66D`},type:{color:`#FFE66D`},"type.builtin":{color:`#c74ded`},"type.definition":{color:`#FFE66D`},"type.interface":{color:`#FFE66D`},"type.super":{color:`#FFE66D`},variable:{color:`#00e8c6`},"variable.special":{color:`#00e8c6`},embedded:{color:`#D5CED9`},label:{color:`#00e8c6`},predictive:{color:`#81898f`},preproc:{color:`#c74ded`},primary:{color:`#D5CED9`},selector:{color:`#F92672`},enum:{color:`#FFE66D`},hint:{color:`#969696ff`},variant:{color:`#00E8C6`},"selector.class":{color:`#FFE66D`},"selector.id":{color:`#EE5D43`},"selector.pseudo":{color:`#FFE66D`}}}};export{e as default};
@@ -0,0 +1 @@
1
+ import{n as e}from"./rolldown-runtime-XKyaHtl9.js";import{t}from"./html-xg5kwvwR.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};