@spikonado/sprocket 0.4.1 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/README.md +4 -11
  2. package/THIRD_PARTY_NOTICES.md +14 -0
  3. package/lib/launcher.js +96 -46
  4. package/lib/native.js +57 -0
  5. package/lib/update.js +40 -15
  6. package/package.json +6 -6
  7. package/web/_app/immutable/{angular-html-4GjfXERL.js → angular-html-C20omHsE.js} +1 -1
  8. package/web/_app/immutable/{angular-ts-CMIe06P5.js → angular-ts-DzF16VU8.js} +1 -1
  9. package/web/_app/immutable/{apl-C_n2qsRM.js → apl-Bopwo-P_.js} +1 -1
  10. package/web/_app/immutable/apl-gfMMiTNf.js +1 -0
  11. package/web/_app/immutable/asciiarmor-C_eisQCp.js +1 -0
  12. package/web/_app/immutable/asn1-DCl_8MCW.js +1 -0
  13. package/web/_app/immutable/asterisk-BEn0Cwpx.js +1 -0
  14. package/web/_app/immutable/{astro-DVbyChwj.js → astro-CYomU0N_.js} +1 -1
  15. package/web/_app/immutable/{blade-fXxNj9V7.js → blade-CHAXU93U.js} +1 -1
  16. package/web/_app/immutable/brainfuck-D5EjA2JK.js +1 -0
  17. package/web/_app/immutable/{c-BN2Efy0k.js → c-Vn6ejSG8.js} +1 -1
  18. package/web/_app/immutable/{chapel-BRkNuByD.js → chapel-DmTJmwJp.js} +1 -1
  19. package/web/_app/immutable/clike-xvONpD0Z.js +1 -0
  20. package/web/_app/immutable/clojure-BflJGmDX.js +1 -0
  21. package/web/_app/immutable/cmake-84nbDH0I.js +1 -0
  22. package/web/_app/immutable/cobol-DHLQUbN7.js +1 -0
  23. package/web/_app/immutable/{cobol-C5lGhzFi.js → cobol-twYq0nKG.js} +1 -1
  24. package/web/_app/immutable/{code-highlighting-client-Kw4BuD-0.js → code-highlighting-client-CFnhHok6.js} +1 -1
  25. package/web/_app/immutable/{code-highlighting-worker-DggeS8YA.js → code-highlighting-worker-CrdU_PI0.js} +4 -4
  26. package/web/_app/immutable/{coffee-B6MzRpQ_.js → coffee-CM7N7KyB.js} +1 -1
  27. package/web/_app/immutable/coffeescript-De_zI4J0.js +1 -0
  28. package/web/_app/immutable/commonlisp-DgAKBe0r.js +1 -0
  29. package/web/_app/immutable/{cpp-DEVtvotx.js → cpp-Di9GpqBY.js} +1 -1
  30. package/web/_app/immutable/{crystal-DY2QsCJ5.js → crystal-8NOnHfUA.js} +1 -1
  31. package/web/_app/immutable/crystal-Bsdphhtm.js +1 -0
  32. package/web/_app/immutable/css-CnaYoQib.js +1 -0
  33. package/web/_app/immutable/{css-ButQfvJ9.js → css-ndguaaOL.js} +1 -1
  34. package/web/_app/immutable/cypher-p9eYesGn.js +1 -0
  35. package/web/_app/immutable/d-DWkQyNnU.js +1 -0
  36. package/web/_app/immutable/diff-ChtP43wD.js +1 -0
  37. package/web/_app/immutable/dist-9Huo6_io.js +1 -0
  38. package/web/_app/immutable/dist-BLfNihLx.js +9 -0
  39. package/web/_app/immutable/dist-BW-uqzJI.js +1 -0
  40. package/web/_app/immutable/dist-BZT89qLB.js +1 -0
  41. package/web/_app/immutable/dist-BZdq_joy.js +6 -0
  42. package/web/_app/immutable/dist-BbYNxbL_.js +1 -0
  43. package/web/_app/immutable/dist-BfBCUuTm.js +1 -0
  44. package/web/_app/immutable/dist-Bh0ebl-W.js +23 -0
  45. package/web/_app/immutable/dist-BlBqfmmv.js +1 -0
  46. package/web/_app/immutable/dist-BwGKucqO.js +1 -0
  47. package/web/_app/immutable/dist-C7DbTQb-.js +1 -0
  48. package/web/_app/immutable/dist-CC7L_HKl.js +11 -0
  49. package/web/_app/immutable/dist-CU3sfboa.js +1 -0
  50. package/web/_app/immutable/dist-CW1k1yYz.js +1 -0
  51. package/web/_app/immutable/dist-CyRevOBs.js +1 -0
  52. package/web/_app/immutable/dist-D2IDjEGT.js +1 -0
  53. package/web/_app/immutable/dist-DRen8gOr.js +2 -0
  54. package/web/_app/immutable/dist-DXvgx-fv.js +1 -0
  55. package/web/_app/immutable/dist-DoyuFT6b.js +1 -0
  56. package/web/_app/immutable/dist-Dxj34LDO.js +1 -0
  57. package/web/_app/immutable/dist-DyD8ayXh.js +1 -0
  58. package/web/_app/immutable/dist-wMY6Z_yW.js +1 -0
  59. package/web/_app/immutable/dockerfile-DJkHQgkl.js +1 -0
  60. package/web/_app/immutable/dtd-DTF72YNO.js +1 -0
  61. package/web/_app/immutable/dylan-S7ucR4pR.js +1 -0
  62. package/web/_app/immutable/ebnf-D4c0_ac3.js +1 -0
  63. package/web/_app/immutable/ecl-BVIeWmwY.js +1 -0
  64. package/web/_app/immutable/{edge-CUJd9T1a.js → edge-CZbv_n-U.js} +1 -1
  65. package/web/_app/immutable/eiffel-BEjRio4Q.js +1 -0
  66. package/web/_app/immutable/{elixir-DIdSb3yA.js → elixir-Cefx1i8D.js} +1 -1
  67. package/web/_app/immutable/{elm-M8_LX84X.js → elm-CNDuIlIO.js} +1 -1
  68. package/web/_app/immutable/elm-Cshzl8qu.js +1 -0
  69. package/web/_app/immutable/{erb-zGFWLWtt.js → erb-Cscw6dKF.js} +1 -1
  70. package/web/_app/immutable/erlang-BV0c4Hdn.js +1 -0
  71. package/web/_app/immutable/factor-LKH5gN8L.js +1 -0
  72. package/web/_app/immutable/fcl-ClOhbFR7.js +1 -0
  73. package/web/_app/immutable/forth-D6RzAl64.js +1 -0
  74. package/web/_app/immutable/fortran-Bt6PBEDR.js +1 -0
  75. package/web/_app/immutable/gas-BHEdbvp9.js +1 -0
  76. package/web/_app/immutable/gherkin-oBAE_ms0.js +1 -0
  77. package/web/_app/immutable/{git-rebase-CC2D0L3b.js → git-rebase-pzmKr7TV.js} +1 -1
  78. package/web/_app/immutable/{glimmer-js-BcY5kv6g.js → glimmer-js-D70IowcQ.js} +1 -1
  79. package/web/_app/immutable/{glimmer-ts-Di8deFFz.js → glimmer-ts-DB1_b6V0.js} +1 -1
  80. package/web/_app/immutable/{glsl-BRJcCqLP.js → glsl-Dnd6Jfn4.js} +1 -1
  81. package/web/_app/immutable/{graphql-C_JO00Ae.js → graphql-Bh8CEOJ1.js} +1 -1
  82. package/web/_app/immutable/groovy-CUpZ7dEl.js +1 -0
  83. package/web/_app/immutable/{hack-G3VVQMXb.js → hack-CDyPjqmy.js} +1 -1
  84. package/web/_app/immutable/{haml-D2MeFmBN.js → haml-DgPyDh2c.js} +1 -1
  85. package/web/_app/immutable/{handlebars-D90wEzz2.js → handlebars-DY59w9Zt.js} +1 -1
  86. package/web/_app/immutable/haskell-BRsoo5mP.js +1 -0
  87. package/web/_app/immutable/haxe-DjVOVvNP.js +1 -0
  88. package/web/_app/immutable/{html-Bh1WMhz0.js → html-D9VLXeeS.js} +1 -1
  89. package/web/_app/immutable/{html-derivative-PuQZwSU6.js → html-derivative-CoBDi6W1.js} +1 -1
  90. package/web/_app/immutable/{http-Ca96onGD.js → http-Bcrx42oV.js} +1 -1
  91. package/web/_app/immutable/http-CLVgA2GD.js +1 -0
  92. package/web/_app/immutable/{hurl-B6pjbC8I.js → hurl-CoCTOBkn.js} +1 -1
  93. package/web/_app/immutable/idl-BUZw3wgd.js +1 -0
  94. package/web/_app/immutable/index-CoMB7Dmc.css +1 -0
  95. package/web/_app/immutable/index-DSbp_RPr.js +1832 -0
  96. package/web/_app/immutable/{java-arvjb7dT.js → java-DOksgUAN.js} +1 -1
  97. package/web/_app/immutable/{javascript-BZ1jt5sy.js → javascript-B4fHYqKG.js} +1 -1
  98. package/web/_app/immutable/javascript-Bu8mWwtz.js +1 -0
  99. package/web/_app/immutable/{jinja-CpnHkcj3.js → jinja-DlPpy45a.js} +1 -1
  100. package/web/_app/immutable/{jison-BPHKadT3.js → jison-B6gNEleR.js} +1 -1
  101. package/web/_app/immutable/{json-DSjaFVfj.js → json-CYwPJhCu.js} +1 -1
  102. package/web/_app/immutable/{jsx-BUqYaOvu.js → jsx-DQ1GitDu.js} +1 -1
  103. package/web/_app/immutable/julia-CQfgDRfP.js +1 -0
  104. package/web/_app/immutable/{julia-BcfWwmw0.js → julia-Cj2ISyOE.js} +1 -1
  105. package/web/_app/immutable/{just-BXyEegjy.js → just-CXuOImRn.js} +1 -1
  106. package/web/_app/immutable/{latex-CU7LUjt5.js → latex-C9zWpp_6.js} +1 -1
  107. package/web/_app/immutable/{liquid-CRzX7bbg.js → liquid-CJws5Urp.js} +1 -1
  108. package/web/_app/immutable/livescript-BXxG0Yva.js +1 -0
  109. package/web/_app/immutable/lua-DPCEkfD_.js +1 -0
  110. package/web/_app/immutable/{lua-BSDiLMEb.js → lua-DzECmq2B.js} +1 -1
  111. package/web/_app/immutable/{marko-DnR7eH34.js → marko-DY53VURG.js} +1 -1
  112. package/web/_app/immutable/mathematica-u8YMmbU0.js +1 -0
  113. package/web/_app/immutable/mbox-BEMVcqjs.js +1 -0
  114. package/web/_app/immutable/{mdc-CcZh7-T1.js → mdc-B1BZSQO7.js} +1 -1
  115. package/web/_app/immutable/mirc-C9zpzAZU.js +1 -0
  116. package/web/_app/immutable/mllike-B45xgp2S.js +1 -0
  117. package/web/_app/immutable/modelica-CqHI_q-D.js +1 -0
  118. package/web/_app/immutable/mscgen-qgSLujhx.js +1 -0
  119. package/web/_app/immutable/mumps-BSzj6Xyz.js +1 -0
  120. package/web/_app/immutable/nginx-8H7HVH4w.js +1 -0
  121. package/web/_app/immutable/{nginx-BwbdCB4h.js → nginx-JNdgK5R6.js} +1 -1
  122. package/web/_app/immutable/{nim-xocOj6ZV.js → nim-DxIQj5-c.js} +1 -1
  123. package/web/_app/immutable/nsis-viPvXFiq.js +1 -0
  124. package/web/_app/immutable/ntriples-CzMBulkp.js +1 -0
  125. package/web/_app/immutable/octave-D2Q8cUp1.js +1 -0
  126. package/web/_app/immutable/{org-0-F7ov1Z.js → org-C_axAQFp.js} +1 -1
  127. package/web/_app/immutable/oz-BwTct_5T.js +1 -0
  128. package/web/_app/immutable/pascal-Dp_KdFgX.js +1 -0
  129. package/web/_app/immutable/perl-BkSkiI9m.js +1 -0
  130. package/web/_app/immutable/{perl-DeAhIPOw.js → perl-CmH3S23F.js} +1 -1
  131. package/web/_app/immutable/{php-kXpePHVd.js → php-CX5ZySYs.js} +1 -1
  132. package/web/_app/immutable/pig-AF4Hwhju.js +1 -0
  133. package/web/_app/immutable/powershell-D8WpQPaX.js +1 -0
  134. package/web/_app/immutable/properties-C357ku5U.js +1 -0
  135. package/web/_app/immutable/protobuf-D1ij_kNL.js +1 -0
  136. package/web/_app/immutable/{pug-BYrzANIX.js → pug-Do87ZXFS.js} +1 -1
  137. package/web/_app/immutable/pug-Dwd_FmgJ.js +1 -0
  138. package/web/_app/immutable/puppet-BZyAS7I4.js +1 -0
  139. package/web/_app/immutable/python-B_1Jd8HM.js +1 -0
  140. package/web/_app/immutable/q-B9NhS7L_.js +1 -0
  141. package/web/_app/immutable/{qml-CX-IPlpg.js → qml-PO_mFEPK.js} +1 -1
  142. package/web/_app/immutable/{r-B6Ii5NsL.js → r-BgEOZNPk.js} +1 -1
  143. package/web/_app/immutable/r-CxDmU1I4.js +1 -0
  144. package/web/_app/immutable/{razor-B-rT9_rK.js → razor-RqmQ3ngM.js} +1 -1
  145. package/web/_app/immutable/{regexp-DTgu7pRI.js → regexp-BmtAp960.js} +1 -1
  146. package/web/_app/immutable/rpm-gpDK5sbt.js +1 -0
  147. package/web/_app/immutable/{rst-9klPfdbW.js → rst-D8oMEcXw.js} +1 -1
  148. package/web/_app/immutable/ruby-ChfNwlCY.js +1 -0
  149. package/web/_app/immutable/{ruby-VdW5O0lU.js → ruby-OoN__8XM.js} +1 -1
  150. package/web/_app/immutable/{sas-BcoVW2jh.js → sas-Bvlb0Bob.js} +1 -1
  151. package/web/_app/immutable/sas-C2OyD2Y6.js +1 -0
  152. package/web/_app/immutable/scheme-D9qYN0V5.js +1 -0
  153. package/web/_app/immutable/{scss-CThZiyk2.js → scss-CVcKVU_v.js} +1 -1
  154. package/web/_app/immutable/shell-DwuoZtxw.js +1 -0
  155. package/web/_app/immutable/{shellscript-kDqMi17D.js → shellscript-CweRfVvC.js} +1 -1
  156. package/web/_app/immutable/{shellsession-DhVMa4wd.js → shellsession-B6dlQfc8.js} +1 -1
  157. package/web/_app/immutable/sieve-tLWDfEkZ.js +1 -0
  158. package/web/_app/immutable/simple-mode-DXiLM1-G.js +1 -0
  159. package/web/_app/immutable/smalltalk-BLp5-jwC.js +1 -0
  160. package/web/_app/immutable/solr-B78wSQJQ.js +1 -0
  161. package/web/_app/immutable/{soy-BRlK1riv.js → soy-BXoHw2KB.js} +1 -1
  162. package/web/_app/immutable/sparql-Dz-mlCAC.js +1 -0
  163. package/web/_app/immutable/spreadsheet-CTIncYxj.js +1 -0
  164. package/web/_app/immutable/sql-DuQMFDvy.js +1 -0
  165. package/web/_app/immutable/{sql-9_1rLYi9.js → sql-ze9wVaXg.js} +1 -1
  166. package/web/_app/immutable/{stata-CvZbhBNs.js → stata-BoFbKY4D.js} +1 -1
  167. package/web/_app/immutable/stex-DNzd62Q_.js +1 -0
  168. package/web/_app/immutable/stylus-BOVgKnng.js +1 -0
  169. package/web/_app/immutable/{surrealql-BLPIhFjZ.js → surrealql-dM__PJgH.js} +1 -1
  170. package/web/_app/immutable/{svelte-CXRnxaHV.js → svelte-ClSxXkyL.js} +1 -1
  171. package/web/_app/immutable/swift-DKB6_1j6.js +1 -0
  172. package/web/_app/immutable/tcl-BGfruO1u.js +1 -0
  173. package/web/_app/immutable/{templ-BIXbEjSv.js → templ-CqzzE9WX.js} +1 -1
  174. package/web/_app/immutable/{tex-CTC47p_4.js → tex-ClJ30QU-.js} +1 -1
  175. package/web/_app/immutable/textile-C4jVoHG1.js +1 -0
  176. package/web/_app/immutable/tiddlywiki-VlUiK86J.js +1 -0
  177. package/web/_app/immutable/tiki-DTszW0OQ.js +1 -0
  178. package/web/_app/immutable/toml-BPTmHmyx.js +1 -0
  179. package/web/_app/immutable/troff-C2dAgh7P.js +1 -0
  180. package/web/_app/immutable/{ts-tags-q6t1QP-k.js → ts-tags-MI0_89c8.js} +1 -1
  181. package/web/_app/immutable/{tsx-BACYK5_7.js → tsx-D-xUy4Xs.js} +1 -1
  182. package/web/_app/immutable/ttcn-PPSTk1ow.js +1 -0
  183. package/web/_app/immutable/ttcn-cfg-2b4Gb5sE.js +1 -0
  184. package/web/_app/immutable/turtle-Cx3rYX2g.js +1 -0
  185. package/web/_app/immutable/{twig-du-FAu_S.js → twig-C1N-sXjS.js} +1 -1
  186. package/web/_app/immutable/{typescript-UdazT59i.js → typescript-BPzkPzWf.js} +1 -1
  187. package/web/_app/immutable/{typst-CwQmdlPz.js → typst-BLmdxzG5.js} +1 -1
  188. package/web/_app/immutable/vb-BthdM_4N.js +1 -0
  189. package/web/_app/immutable/vbscript-D9f6rSsU.js +1 -0
  190. package/web/_app/immutable/velocity-CqftRsjg.js +1 -0
  191. package/web/_app/immutable/verilog-CjI9Y6RI.js +1 -0
  192. package/web/_app/immutable/vhdl-kS471soi.js +1 -0
  193. package/web/_app/immutable/{vue-Bl_ifCwv.js → vue-Cb-Oh7gL.js} +1 -1
  194. package/web/_app/immutable/{vue-html-Jt0TggoH.js → vue-html-CokEUcEZ.js} +1 -1
  195. package/web/_app/immutable/{vue-vine-BCOElGNY.js → vue-vine-C9qhSF4z.js} +1 -1
  196. package/web/_app/immutable/webidl-D5jiJvOU.js +1 -0
  197. package/web/_app/immutable/{xml-CwHcdUOz.js → xml-xaPpMw_l.js} +1 -1
  198. package/web/_app/immutable/xquery-BKJx4mf9.js +1 -0
  199. package/web/_app/immutable/{xsl-CR7B95n6.js → xsl-C_0yvEBX.js} +1 -1
  200. package/web/_app/immutable/yacas-CXXgtw0p.js +1 -0
  201. package/web/_app/immutable/{yaml-1d7XLDFm.js → yaml-Dccr9MS0.js} +1 -1
  202. package/web/_app/immutable/z80-Co3PbHdE.js +1 -0
  203. package/web/index.html +3 -3
  204. package/web/logo.svg +1 -0
  205. package/web/_app/immutable/index-D6bVq7o9.css +0 -1
  206. package/web/_app/immutable/index-Dn3e-0Et.js +0 -488
  207. package/web/favicon.png +0 -0
  208. package/web/logo.png +0 -0
package/README.md CHANGED
@@ -1,17 +1,10 @@
1
1
  # Sprocket
2
2
 
3
- **Goal**: To make the world's best platform for developing hardware and software.
3
+ The best AI agent for hardware and software.
4
4
 
5
- Here's what makes Sprocket special:
5
+ Sprocket designs electronics, tests code end-to-end, and buys parts or subscriptions for your project when asked.
6
6
 
7
- - The only AI agent that can work on both <ins>hardware</ins> and <ins>software</ins>.
8
- - Retrieves best-in-class <ins>context from the web</ins> for everything it does, so it stays <ins>incredibly reliable</ins>.
9
- - <ins>Buys anything from any website</ins> when you ask, from hardware parts to SaaS subscriptions.
10
- - Makes <ins>beautifully detailed schematics</ins>, creates your <ins>BOM</ins>, and writes <ins>assembly instructions</ins>.
11
-
12
- [Sprocket Demo](https://www.youtube.com/watch?v=E8KWO3Vh9YU)
13
-
14
- [![Sprocket](./assets/sprocket.png)](https://www.youtube.com/watch?v=E8KWO3Vh9YU)
7
+ [![Sprocket](./assets/sprocket.webp)](https://spikonado.com/sprocket)
15
8
 
16
9
  ## Using Sprocket
17
10
 
@@ -55,7 +48,7 @@ Update your CLI installation with `sprocket update`. Run `sprocket --help` for m
55
48
  ## Troubleshooting
56
49
 
57
50
  - If `17731` is already occupied, set `SPROCKET_PORT` before launching.
58
- - If sign-in cannot save or restore your session, check that your operating system credential service is available, or use `sprocket login --credential-store file`.
51
+ - Sprocket uses your operating system credential service when available, and automatically falls back to an unencrypted private file when it is unavailable. Use `sprocket login --credential-store keyring` to require keyring storage, or `sprocket login --credential-store file` to require file storage.
59
52
  - If `sprocket` opens the browser instead of the desktop app, install `sprocket-desktop` from [GitHub Releases](https://github.com/spikonado/sprocket/releases) onto `PATH`, or set `SPROCKET_DESKTOP_EXECUTABLE`.
60
53
  - Unsigned macOS and Windows desktop builds may need a Gatekeeper / SmartScreen override the first time you open them.
61
54
  - Contact [aarav@spikonado.com](mailto:aarav@spikonado.com) for help.
@@ -1 +1,15 @@
1
1
  # Third-party notices
2
+
3
+ ## Managed browser tools
4
+
5
+ Sprocket downloads unmodified native releases of
6
+ [agent-browser](https://github.com/vercel-labs/agent-browser) on demand. It is
7
+ copyright Vercel, Inc., and licensed under
8
+ [Apache-2.0](https://github.com/vercel-labs/agent-browser/blob/v0.39.1/LICENSE).
9
+ When serving agent-browser's dashboard, Sprocket changes its web assets to
10
+ offer only Chrome and hide AI chat, as listed in
11
+ `tools/agent-browser/dashboard-patches.json`.
12
+
13
+ Versions, release asset sizes, and SHA256 checksums are recorded in
14
+ `tools/agent-browser/releases.json`. Chromium downloaded by the
15
+ upstream installer retains its own third-party licenses and notices.
package/lib/launcher.js CHANGED
@@ -1,50 +1,33 @@
1
- import { spawnSync } from 'node:child_process';
2
- import { accessSync, chmodSync, constants, readFileSync } from 'node:fs';
3
- import { createRequire } from 'node:module';
1
+ import { spawn } from 'node:child_process';
2
+ import { randomUUID } from 'node:crypto';
3
+ import { accessSync, chmodSync, constants, readFileSync, rmSync } from 'node:fs';
4
+ import { tmpdir } from 'node:os';
4
5
  import path from 'node:path';
5
6
 
6
- import { createHost, parseUpdateArgs, runUpdateCli, UPDATE_API_FILENAME } from './update.js';
7
+ import { resolveNativePackage } from './native.js';
8
+ import {
9
+ createHost,
10
+ PACKAGE_ROOT,
11
+ parseUpdateArgs,
12
+ runUpdateCli,
13
+ UPDATE_API_FILENAME
14
+ } from './update.js';
7
15
 
8
- const require = createRequire(import.meta.url);
16
+ // Must match crates/sprocket-cli/src/main.rs.
17
+ export const RESTART_EXIT_CODE = 75;
9
18
 
10
- const TARGETS = JSON.parse(readFileSync(path.join(import.meta.dirname, '../targets.json'), 'utf8'));
11
-
12
- const PLATFORM_PACKAGES = new Map(
13
- TARGETS.map((target) => [`${target.os}:${target.cpu}`, [target.packageName, target.executable]])
14
- );
15
-
16
- export function nativePackage(platform = process.platform, arch = process.arch) {
17
- return PLATFORM_PACKAGES.get(`${platform}:${arch}`);
18
- }
19
-
20
- export function resolveNativeBinary(platform = process.platform, arch = process.arch) {
21
- const target = nativePackage(platform, arch);
22
-
23
- if (!target) {
24
- throw new Error(
25
- `Sprocket does not provide a binary for ${platform}/${arch}. ` +
26
- 'Supported targets are Linux x64/arm64, macOS x64/arm64, and Windows x64.'
27
- );
28
- }
29
-
30
- const [packageName, executable] = target;
31
- let packageJson;
32
-
33
- try {
34
- packageJson = require.resolve(`${packageName}/package.json`);
35
- } catch (error) {
36
- if (error?.code !== 'MODULE_NOT_FOUND') {
37
- throw error;
38
- }
19
+ export function resolveNativeBinary() {
20
+ const native = resolveNativePackage();
21
+ const version = JSON.parse(readFileSync(path.join(PACKAGE_ROOT, 'package.json'), 'utf8')).version;
39
22
 
23
+ if (native.version !== version) {
40
24
  throw new Error(
41
- `The native package ${packageName} is missing. Reinstall @spikonado/sprocket ` +
42
- 'without omitting optional dependencies.',
43
- { cause: error }
25
+ `Sprocket ${version} needs ${native.packageName}@${version}, but ${native.version} is ` +
26
+ 'installed. Run `sprocket update` to repair the install.'
44
27
  );
45
28
  }
46
29
 
47
- return path.join(path.dirname(packageJson), 'bin', executable);
30
+ return native.binary;
48
31
  }
49
32
 
50
33
  export function ensureExecutable(binary) {
@@ -63,18 +46,49 @@ export function ensureExecutable(binary) {
63
46
  }
64
47
  }
65
48
 
66
- export function run(binary, args, options = {}) {
67
- const result = (options.spawn ?? spawnSync)(binary, args, {
49
+ export async function run(binary, args, options = {}) {
50
+ const child = (options.spawn ?? spawn)(binary, args, {
68
51
  stdio: 'inherit',
69
52
  env: options.env ?? process.env
70
53
  });
71
54
 
72
- if (result.error) {
73
- throw result.error;
55
+ let interrupted;
56
+
57
+ const handlers = new Map(
58
+ ['SIGINT', 'SIGTERM'].map((signal) => [
59
+ signal,
60
+ () => {
61
+ interrupted ??= signal;
62
+
63
+ // Windows already sends Ctrl+C to both processes; child.kill would force termination.
64
+ if (process.platform !== 'win32' || signal !== 'SIGINT') {
65
+ child.kill(signal);
66
+ }
67
+ }
68
+ ])
69
+ );
70
+
71
+ for (const [signal, handler] of handlers) {
72
+ process.on(signal, handler);
74
73
  }
75
74
 
76
- if (result.signal) {
77
- process.kill(process.pid, result.signal);
75
+ let result;
76
+
77
+ try {
78
+ result = await new Promise((resolve, reject) => {
79
+ child.once('error', reject);
80
+ child.once('close', (status, signal) => resolve({ status, signal }));
81
+ });
82
+ } finally {
83
+ for (const [signal, handler] of handlers) {
84
+ process.off(signal, handler);
85
+ }
86
+ }
87
+
88
+ const signal = result.signal ?? interrupted;
89
+
90
+ if (signal) {
91
+ process.kill(process.pid, signal);
78
92
 
79
93
  return undefined;
80
94
  }
@@ -95,6 +109,16 @@ export function nativeChildEnvironment(env, staticDir, updateNode, updateScript)
95
109
  return next;
96
110
  }
97
111
 
112
+ function readRestartLauncher(restartFile) {
113
+ try {
114
+ return readFileSync(restartFile, 'utf8');
115
+ } catch {
116
+ return null;
117
+ } finally {
118
+ rmSync(restartFile, { force: true });
119
+ }
120
+ }
121
+
98
122
  export async function launch(args, options = {}) {
99
123
  const env = { ...(options.env ?? process.env) };
100
124
  delete env.SPROCKET_UPDATE_MANAGED;
@@ -112,16 +136,42 @@ export async function launch(args, options = {}) {
112
136
  const staticDir = path.resolve(libDir, '../web');
113
137
  const binary = (options.resolveBinary ?? resolveNativeBinary)();
114
138
  (options.ensureExecutable ?? ensureExecutable)(binary);
115
- process.exitCode = run(binary, args, {
139
+ const execPath = options.execPath ?? process.execPath;
140
+ // The native server clears SPROCKET_RESTARTED, so only a launcher started by a restarting
141
+ // launcher sees it and leaves the next restart to that parent.
142
+ const ownsRestart = !env.SPROCKET_RESTARTED;
143
+
144
+ if (ownsRestart) {
145
+ env.SPROCKET_RESTART_FILE = path.join(
146
+ options.tmpdir ?? tmpdir(),
147
+ `sprocket-restart-${randomUUID()}`
148
+ );
149
+ }
150
+
151
+ let code = await run(binary, args, {
116
152
  env: nativeChildEnvironment(
117
153
  env,
118
154
  staticDir,
119
- options.execPath ?? process.execPath,
155
+ execPath,
120
156
  path.resolve(libDir, UPDATE_API_FILENAME)
121
157
  ),
122
158
  spawn: options.spawn
123
159
  });
124
160
 
161
+ if (ownsRestart) {
162
+ while (code === RESTART_EXIT_CODE) {
163
+ const launcher = readRestartLauncher(env.SPROCKET_RESTART_FILE);
164
+
165
+ if (!launcher) break;
166
+ code = await run(execPath, [launcher, ...args], {
167
+ env: { ...env, SPROCKET_RESTARTED: '1' },
168
+ spawn: options.spawn
169
+ });
170
+ }
171
+ }
172
+
173
+ process.exitCode = code;
174
+
125
175
  return process.exitCode;
126
176
  } catch (error) {
127
177
  console.error(`sprocket: ${error.message}`);
package/lib/native.js ADDED
@@ -0,0 +1,57 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { createRequire } from 'node:module';
3
+ import path from 'node:path';
4
+
5
+ const require = createRequire(import.meta.url);
6
+
7
+ const TARGETS = JSON.parse(readFileSync(path.join(import.meta.dirname, '../targets.json'), 'utf8'));
8
+
9
+ const PLATFORM_PACKAGES = new Map(
10
+ TARGETS.map((target) => [`${target.os}:${target.cpu}`, [target.packageName, target.executable]])
11
+ );
12
+
13
+ export function nativePackage(platform = process.platform, arch = process.arch) {
14
+ return PLATFORM_PACKAGES.get(`${platform}:${arch}`);
15
+ }
16
+
17
+ export function resolveNativePackage(platform = process.platform, arch = process.arch) {
18
+ const target = nativePackage(platform, arch);
19
+
20
+ if (!target) {
21
+ throw new Error(
22
+ `Sprocket does not provide a binary for ${platform}/${arch}. ` +
23
+ 'Supported targets are Linux x64/arm64, macOS x64/arm64, and Windows x64.'
24
+ );
25
+ }
26
+
27
+ const [packageName, executable] = target;
28
+ let packageJson;
29
+
30
+ try {
31
+ packageJson = require.resolve(`${packageName}/package.json`);
32
+ } catch (error) {
33
+ if (error?.code !== 'MODULE_NOT_FOUND') {
34
+ throw error;
35
+ }
36
+
37
+ throw new Error(
38
+ `The native package ${packageName} is missing. Reinstall @spikonado/sprocket ` +
39
+ 'without omitting optional dependencies.',
40
+ { cause: error }
41
+ );
42
+ }
43
+
44
+ return {
45
+ packageName,
46
+ version: JSON.parse(readFileSync(packageJson, 'utf8')).version,
47
+ binary: path.join(path.dirname(packageJson), 'bin', executable)
48
+ };
49
+ }
50
+
51
+ export function installedNativeVersion() {
52
+ try {
53
+ return resolveNativePackage().version;
54
+ } catch {
55
+ return '';
56
+ }
57
+ }
package/lib/update.js CHANGED
@@ -4,14 +4,15 @@ import { promises as fsPromises, readFileSync, realpathSync, statSync } from 'no
4
4
  import os from 'node:os';
5
5
  import path from 'node:path';
6
6
 
7
+ import { installedNativeVersion } from './native.js';
8
+
7
9
  export const PACKAGE_NAME = '@spikonado/sprocket';
8
10
 
9
11
  export const UPDATE_API_FILENAME = 'update-api.js';
10
12
 
11
13
  export const DEFAULT_REGISTRY = 'https://registry.npmjs.org';
12
14
 
13
- export const RELAUNCH_MESSAGE =
14
- 'Wait for active agents to finish, then stop Sprocket and launch it again.';
15
+ export const RELAUNCH_MESSAGE = 'Update installed. Restart Sprocket to use it.';
15
16
 
16
17
  export const UNSUPPORTED_MESSAGE =
17
18
  'This copy of Sprocket was not installed globally with npm, bun, pnpm, or yarn, so it cannot be updated in place.';
@@ -476,6 +477,7 @@ export function createHost(overrides = {}) {
476
477
  pid: overrides.pid ?? process.pid,
477
478
  packageRoot,
478
479
  currentVersion: overrides.currentVersion,
480
+ nativeVersion: overrides.nativeVersion ?? installedNativeVersion,
479
481
  tmpdir: overrides.tmpdir ?? (() => os.tmpdir()),
480
482
  homedir: overrides.homedir ?? (() => os.homedir()),
481
483
  fetch: overrides.fetch ?? globalThis.fetch.bind(globalThis),
@@ -561,15 +563,15 @@ export async function checkForUpdate(host) {
561
563
  const registryVersion = await fetchChannelVersion(host, channel, currentVersion);
562
564
  const decision = channelUpdate(currentVersion, registryVersion);
563
565
 
564
- if (decision.status === 'idle') {
565
- return makePayload({ status: 'idle', currentVersion });
566
+ if (decision.status === 'available') {
567
+ return makePayload({ status: 'available', currentVersion, version: decision.version });
566
568
  }
567
569
 
568
- return makePayload({
569
- status: 'available',
570
- currentVersion,
571
- version: decision.version
572
- });
570
+ if (host.nativeVersion() !== currentVersion) {
571
+ return makePayload({ status: 'available', currentVersion, version: currentVersion });
572
+ }
573
+
574
+ return makePayload({ status: 'idle', currentVersion });
573
575
  }
574
576
 
575
577
  export async function installUpdate(host) {
@@ -621,6 +623,8 @@ export async function installUpdate(host) {
621
623
  throw new Error('The installation location changed during the update check. Try again.');
622
624
  }
623
625
 
626
+ const restartLauncher = path.resolve(globalPackageDir(install.globalRoot), 'bin/sprocket.js');
627
+
624
628
  const result = await host.runCommand(
625
629
  install.command,
626
630
  [...install.argsPrefix, ...install.installArgs(checked.version)],
@@ -658,13 +662,34 @@ export async function installUpdate(host) {
658
662
  };
659
663
  }
660
664
 
665
+ const launcherCheck = await host.runCommand(host.execPath, [restartLauncher, '--version'], {
666
+ cwd: host.homedir(),
667
+ env: host.env,
668
+ platform: host.platform,
669
+ timeout: QUERY_TIMEOUT_MS
670
+ });
671
+
672
+ if (launcherCheck.timedOut || (launcherCheck.status ?? 1) !== 0) {
673
+ return {
674
+ payload: makePayload({
675
+ status: 'error',
676
+ currentVersion,
677
+ version: checked.version,
678
+ error: `Sprocket ${checked.version} was installed but cannot start: ${sanitize(launcherCheck.stderr) || 'the launcher check failed'}`
679
+ })
680
+ };
681
+ }
682
+
661
683
  return {
662
- payload: makePayload({
663
- status: 'installed',
664
- currentVersion,
665
- version: checked.version,
666
- message: RELAUNCH_MESSAGE
667
- })
684
+ payload: {
685
+ ...makePayload({
686
+ status: 'installed',
687
+ currentVersion,
688
+ version: checked.version,
689
+ message: RELAUNCH_MESSAGE
690
+ }),
691
+ restartLauncher
692
+ }
668
693
  };
669
694
  });
670
695
  } catch (error) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spikonado/sprocket",
3
- "version": "0.4.1",
3
+ "version": "0.4.2",
4
4
  "description": "Agentic platform for streamlining hardware and software development",
5
5
  "license": "FSL-1.1-ALv2",
6
6
  "type": "module",
@@ -30,10 +30,10 @@
30
30
  "access": "public"
31
31
  },
32
32
  "optionalDependencies": {
33
- "@spikonado/sprocket-linux-x64-gnu": "0.4.1",
34
- "@spikonado/sprocket-linux-arm64-gnu": "0.4.1",
35
- "@spikonado/sprocket-darwin-x64": "0.4.1",
36
- "@spikonado/sprocket-darwin-arm64": "0.4.1",
37
- "@spikonado/sprocket-win32-x64-msvc": "0.4.1"
33
+ "@spikonado/sprocket-linux-x64-gnu": "0.4.2",
34
+ "@spikonado/sprocket-linux-arm64-gnu": "0.4.2",
35
+ "@spikonado/sprocket-darwin-x64": "0.4.2",
36
+ "@spikonado/sprocket-darwin-arm64": "0.4.2",
37
+ "@spikonado/sprocket-win32-x64-msvc": "0.4.2"
38
38
  }
39
39
  }
@@ -1 +1 @@
1
- import{t as e}from"./code-highlighting-worker-DggeS8YA.js";import{t}from"./html-Bh1WMhz0.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"}'))];const 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"]}`));var i=[...n,r];const 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"]}`));var o=[...n,a];const 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"]}`));var c=[...n,...o,s],l=/* @__PURE__ */ e({default:()=>d});const 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"]}`));var 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{t as e}from"./code-highlighting-worker-CrdU_PI0.js";import{t}from"./html-D9VLXeeS.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"}'))];const 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"]}`));var i=[...n,r];const 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"]}`));var o=[...n,a];const 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"]}`));var c=[...n,...o,s],l=/* @__PURE__ */ e({default:()=>d});const 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"]}`));var 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};