yanki 2.0.3 → 2.0.5

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 (717) hide show
  1. package/dist/bin/angular-html-BMgm7jKv.js +1 -0
  2. package/dist/bin/{angular-html-qzs4hSq7.js → angular-html-DaLgCdY4.js} +1 -1
  3. package/dist/bin/{angular-ts-CugMBDjk.js → angular-ts-_FOddbkN.js} +1 -1
  4. package/dist/{standalone/apl-B3nAIz3U.js → bin/apl-Ct_wGLTZ.js} +1 -1
  5. package/dist/bin/{astro-Cm_dHcy3.js → astro-ZcVfwsPl.js} +1 -1
  6. package/dist/bin/bird2-CFa4jX8R.js +1 -0
  7. package/dist/bin/{blade-U1S3oe2k.js → blade-CxETtqpr.js} +1 -1
  8. package/dist/bin/{bsl-0ORkkYmh.js → bsl-C-_RJCQ1.js} +1 -1
  9. package/dist/bin/c-24YQ-N5y.js +1 -0
  10. package/dist/bin/{cairo-kiUMtAsX.js → cairo-Cud9ep5K.js} +1 -1
  11. package/dist/bin/cli.js +941 -103
  12. package/dist/bin/cmake-CmanohFH.js +1 -0
  13. package/dist/bin/cobol-D6VccPzE.js +1 -0
  14. package/dist/{standalone/coffee-CWthmHqg.js → bin/coffee-C_ytDHuo.js} +1 -1
  15. package/dist/bin/{cpp-5C3nn41J.js → cpp-BGpKj3Ti.js} +1 -1
  16. package/dist/bin/cpp-BuOb9E77.js +1 -0
  17. package/dist/{standalone/crystal-BP8Y_JHu.js → bin/crystal-D7hCMRTO.js} +1 -1
  18. package/dist/bin/csharp-iOHJHJRL.js +1 -0
  19. package/dist/bin/css-CLlsZvz0.js +1 -0
  20. package/dist/bin/{css-C-sfFA03.js → css-OMa7meLh.js} +1 -1
  21. package/dist/bin/csv-BPqpBVRL.js +1 -0
  22. package/dist/bin/dart-DIQ3D60A.js +1 -0
  23. package/dist/bin/diff-B1zQwqWC.js +1 -0
  24. package/dist/bin/{edge-DetFnTa9.js → edge-BJ5yEaU_.js} +1 -1
  25. package/dist/{standalone/elixir-DaqZx2n-.js → bin/elixir-DQ_HZ35Z.js} +1 -1
  26. package/dist/bin/{elm-CD-7RX5d.js → elm-BPdX9LvI.js} +1 -1
  27. package/dist/bin/emacs-lisp-OLcd4D2Y.js +1 -0
  28. package/dist/bin/{erb-KO-P0SR0.js → erb-DTravkov.js} +1 -1
  29. package/dist/bin/{erlang-BFKCgnPw.js → erlang-CkFToG4V.js} +1 -1
  30. package/dist/bin/{fortran-fixed-form-t-oisds5.js → fortran-fixed-form-CIezU5eM.js} +1 -1
  31. package/dist/bin/fortran-free-form-C04P-dlU.js +1 -0
  32. package/dist/bin/{fsharp-Dq5iPDb2.js → fsharp-Dm-_SWJW.js} +1 -1
  33. package/dist/bin/{gdresource-BNzPbQHR.js → gdresource-fnofKreT.js} +1 -1
  34. package/dist/bin/gdscript-BtzCMxvf.js +1 -0
  35. package/dist/bin/gdshader-1gA3GZ5B.js +1 -0
  36. package/dist/bin/{git-commit-Bkc1RnxN.js → git-commit-_8RqjgP7.js} +1 -1
  37. package/dist/bin/{git-rebase-BfAeU5XI.js → git-rebase-Z73Q-A3B.js} +1 -1
  38. package/dist/bin/{glimmer-js-BZd4ZfVU.js → glimmer-js-DIMbe603.js} +1 -1
  39. package/dist/bin/{glimmer-ts-UFNn11p7.js → glimmer-ts-B2T7GOhV.js} +1 -1
  40. package/dist/bin/glsl-CGmNjIir.js +1 -0
  41. package/dist/bin/{glsl-r9XJn22U.js → glsl-DEYttXt8.js} +1 -1
  42. package/dist/bin/{go-b5i9ZOwA.js → go-Ci0dAgBY.js} +1 -1
  43. package/dist/bin/go-DN89cYst.js +1 -0
  44. package/dist/bin/{graphql-J1xs8wG6.js → graphql-CCYPSk-D.js} +1 -1
  45. package/dist/bin/graphql-DOCOrfKm.js +1 -0
  46. package/dist/bin/{hack-DTChbFem.js → hack-DZ-_iRCj.js} +1 -1
  47. package/dist/bin/{haml-lACpmly2.js → haml-DfH0AzHT.js} +1 -1
  48. package/dist/bin/haml-DvXbkT9I.js +1 -0
  49. package/dist/bin/{handlebars-B7ppocUa.js → handlebars-CF9TGn7D.js} +1 -1
  50. package/dist/bin/haxe-DTUNnskd.js +1 -0
  51. package/dist/bin/hlsl-BJTcBv8Y.js +1 -0
  52. package/dist/bin/{horizon-bright-yXhu6egb.js → horizon-bright-B9AmrisQ.js} +1 -1
  53. package/dist/bin/html-Cuf7VAVg.js +1 -0
  54. package/dist/bin/{html-JSn89dCS.js → html-RMei9Tro.js} +1 -1
  55. package/dist/bin/{html-derivative-DhivRM2V.js → html-derivative-BTT60mrv.js} +1 -1
  56. package/dist/bin/html-derivative-D-Zlk8m5.js +1 -0
  57. package/dist/bin/{http-CfCri10f.js → http-bTeAg4ti.js} +1 -1
  58. package/dist/{standalone/hurl-DLBSghyU.js → bin/hurl-DNDYXzGk.js} +1 -1
  59. package/dist/bin/{hxml-BY0JJAFc.js → hxml-DRC8Rsp0.js} +1 -1
  60. package/dist/bin/java-CQDUhPYw.js +1 -0
  61. package/dist/bin/javascript-DPhXM0a6.js +1 -0
  62. package/dist/bin/{jinja-D4pZPcl3.js → jinja-B64tWnuH.js} +1 -1
  63. package/dist/bin/{jison-CU_JndNM.js → jison-DzJXWpYr.js} +1 -1
  64. package/dist/bin/json-CJDJkUtd.js +1 -0
  65. package/dist/bin/jsx-nttEtUui.js +1 -0
  66. package/dist/bin/{julia-DjiOTm9M.js → julia-CdOV4Bps.js} +1 -1
  67. package/dist/bin/{just-oDTZGZbN.js → just--5xSNTPr.js} +1 -1
  68. package/dist/{standalone/kusto-SD8_YGH-.js → bin/kusto-CrSJ-cBg.js} +1 -1
  69. package/dist/bin/{latex-B8d5LcJ8.js → latex-BAAvcuYp.js} +1 -1
  70. package/dist/bin/less-EIhUe2O9.js +1 -0
  71. package/dist/bin/{liquid-DuGPT5mZ.js → liquid-Bqh7lbg7.js} +1 -1
  72. package/dist/bin/lua-BMcOOLRU.js +1 -0
  73. package/dist/bin/{lua-mUj-7rV8.js → lua-yurtT0y-.js} +1 -1
  74. package/dist/bin/markdown-DVKCeKaE.js +1 -0
  75. package/dist/bin/{marko-CEM61Zib.js → marko-R0Qz5H3f.js} +1 -1
  76. package/dist/bin/{mdc-Dya9Bdmr.js → mdc-K4Wa14qY.js} +1 -1
  77. package/dist/bin/{nextflow-hLaJXrFj.js → nextflow-BFCLGvvZ.js} +1 -1
  78. package/dist/bin/nextflow-groovy-BXH4qERK.js +1 -0
  79. package/dist/bin/nextflow-groovy-CkcyVHVG.js +1 -0
  80. package/dist/bin/{nginx-CR6uKwZy.js → nginx-Dbalglmi.js} +1 -1
  81. package/dist/bin/{nim-DceKa9Nn.js → nim-z_s042OS.js} +1 -1
  82. package/dist/bin/perl-2YKQo-0l.js +1 -0
  83. package/dist/bin/{perl-B6GAvvHF.js → perl-Fl9SoTWs.js} +1 -1
  84. package/dist/bin/php-Bo9TDZJt.js +1 -0
  85. package/dist/bin/php-C0eWpkIO.js +1 -0
  86. package/dist/bin/postcss-CCUr_tF-.js +1 -0
  87. package/dist/{standalone/pug-DJ5mt9QE.js → bin/pug-DUGDf_q9.js} +1 -1
  88. package/dist/bin/python-Db-ndmZZ.js +1 -0
  89. package/dist/{standalone/qml-BxVojlB6.js → bin/qml-CPQoc4lh.js} +1 -1
  90. package/dist/bin/r-fQq-2_SC.js +1 -0
  91. package/dist/{standalone/razor-Dp2BNdgE.js → bin/razor-DNawYG-W.js} +1 -1
  92. package/dist/bin/regexp-YxswBMQR.js +1 -0
  93. package/dist/bin/{rst-BHI_EFqA.js → rst-DYfDFbA3.js} +1 -1
  94. package/dist/bin/ruby-DucPskDY.js +1 -0
  95. package/dist/bin/ruby-WBenXl3j.js +1 -0
  96. package/dist/bin/{sas-Dx90SbnG.js → sas-CAA8PJ6W.js} +1 -1
  97. package/dist/bin/scss-DsPnGUE-.js +1 -0
  98. package/dist/bin/{scss-ByAjeRJP.js → scss-gssODMF6.js} +1 -1
  99. package/dist/bin/sdbl-xOqMdGXn.js +1 -0
  100. package/dist/bin/{shaderlab-8CiQ7btM.js → shaderlab-DgQHun4U.js} +1 -1
  101. package/dist/bin/shellscript-CE_I727X.js +1 -0
  102. package/dist/bin/{shellsession-xr72W2pP.js → shellsession-lr0Ayolf.js} +1 -1
  103. package/dist/{standalone/soy-BExHEi9F.js → bin/soy-CvtaBVSX.js} +1 -1
  104. package/dist/bin/{sparql-Bq74Yvwh.js → sparql-C2NKB4nB.js} +1 -1
  105. package/dist/bin/sql-k-FO79OG.js +1 -0
  106. package/dist/{standalone/stata-XyxwKkW7.js → bin/stata-CxUtssUq.js} +1 -1
  107. package/dist/bin/stylus-BjHmFbLS.js +1 -0
  108. package/dist/{standalone/surrealql-DeE9iwmm.js → bin/surrealql-UeEcHssQ.js} +1 -1
  109. package/dist/bin/{svelte-CHomAVJT.js → svelte-biVT5zcD.js} +1 -1
  110. package/dist/bin/{templ-BRBP2pJf.js → templ-BYYVc90I.js} +1 -1
  111. package/dist/bin/tex-C2t_GUxi.js +1 -0
  112. package/dist/bin/{tex-5doNg0Ig.js → tex-bdKBkGZu.js} +1 -1
  113. package/dist/bin/ts-tags-BfYDhMLE.js +1 -0
  114. package/dist/bin/tsx-BVj7RLM1.js +1 -0
  115. package/dist/bin/turtle-D8pw025F.js +1 -0
  116. package/dist/bin/{twig-D5Nfm9La.js → twig-CwzAgcmH.js} +1 -1
  117. package/dist/bin/typescript-DNgWo8f4.js +1 -0
  118. package/dist/bin/typespec-Cl5YolbG.js +1 -0
  119. package/dist/bin/{vue-zYUVH6uJ.js → vue-DRO7KWbH.js} +1 -1
  120. package/dist/bin/{vue-html-D7v7uXO6.js → vue-html-BpQ6tiBD.js} +1 -1
  121. package/dist/bin/{vue-vine-lH9fGYq_.js → vue-vine-BoHGuuLM.js} +1 -1
  122. package/dist/bin/xml-CfpLAPLz.js +1 -0
  123. package/dist/bin/{xml-CGrMwkeu.js → xml-DDPMLAMm.js} +1 -1
  124. package/dist/bin/{xsl-C-lr_lSi.js → xsl-BEetQfvy.js} +1 -1
  125. package/dist/bin/yaml-OQyYPsei.js +1 -0
  126. package/dist/lib/index.d.ts +44 -12
  127. package/dist/lib/index.js +324 -277
  128. package/dist/standalone/{angular-html-BDfh9ICS.js → angular-html-WQX9Y2mw.js} +1 -1
  129. package/dist/standalone/{angular-ts-WiBasIpj.js → angular-ts-Bnj08IE9.js} +1 -1
  130. package/dist/{bin/apl-BOFh_hoE.js → standalone/apl-Dqn1qSR2.js} +1 -1
  131. package/dist/standalone/{astro-C0A5Ee0R.js → astro-CQ8up1JW.js} +1 -1
  132. package/dist/standalone/bird2-DqiG7xuw.js +1 -0
  133. package/dist/standalone/{blade-Bh52-e5e.js → blade-CygzwZSe.js} +1 -1
  134. package/dist/standalone/{bsl-DrHuh5kR.js → bsl-BpGgGeZC.js} +1 -1
  135. package/dist/standalone/{cairo-D055eoAu.js → cairo-r1f5WYPg.js} +1 -1
  136. package/dist/standalone/cobol-B8Vke0Of.js +1 -0
  137. package/dist/{bin/coffee-7hoZPzSj.js → standalone/coffee-Cc6XxMHI.js} +1 -1
  138. package/dist/standalone/{cpp-BP_mYM2q.js → cpp-COjeSwn8.js} +1 -1
  139. package/dist/{bin/crystal-Cc66vuxC.js → standalone/crystal-14bSZvxG.js} +1 -1
  140. package/dist/standalone/{css-DZpGhzjZ.js → css-0fme0D-h.js} +1 -1
  141. package/dist/standalone/dart-WAvmL6i0.js +1 -0
  142. package/dist/standalone/{edge-C7ZV1b67.js → edge-C4RY6CZu.js} +1 -1
  143. package/dist/{bin/elixir-CrM98V7h.js → standalone/elixir-BpoXFRn8.js} +1 -1
  144. package/dist/standalone/{elm-Dop4RWjQ.js → elm-B6bFr4e_.js} +1 -1
  145. package/dist/standalone/emacs-lisp-BYwwOo2e.js +1 -0
  146. package/dist/standalone/{erb-CYhomfpC.js → erb-CJHKFDY_.js} +1 -1
  147. package/dist/standalone/{erlang-DX8GMz3W.js → erlang-CI6aeixR.js} +1 -1
  148. package/dist/standalone/{fortran-fixed-form-Q6JIc71r.js → fortran-fixed-form-uKGwTJjf.js} +1 -1
  149. package/dist/standalone/{fsharp-BNMUC2iW.js → fsharp-CASMX8mg.js} +1 -1
  150. package/dist/standalone/{gdresource-BlhCtIAh.js → gdresource-CJ9IjTdR.js} +1 -1
  151. package/dist/standalone/{git-commit-BmPljjxo.js → git-commit-CzSqi32T.js} +1 -1
  152. package/dist/standalone/{git-rebase-DVpnhtFe.js → git-rebase-8fT5ziFE.js} +1 -1
  153. package/dist/standalone/{glimmer-js-BxvF_2QK.js → glimmer-js-DWfa8dIU.js} +1 -1
  154. package/dist/standalone/{glimmer-ts-AM8hgR0M.js → glimmer-ts-DnQuWFQ4.js} +1 -1
  155. package/dist/standalone/{glsl-CeERM8Pu.js → glsl-BL_YD74S.js} +1 -1
  156. package/dist/standalone/{go-s39PxAzr.js → go-ChiWKuTz.js} +1 -1
  157. package/dist/standalone/{graphql-B_NxG4GM.js → graphql-Clgp8jU8.js} +1 -1
  158. package/dist/standalone/{hack-DOi7Q-_3.js → hack-C9FDVZ3F.js} +1 -1
  159. package/dist/standalone/{haml-DqnJGs3l.js → haml-Bzme-jHN.js} +1 -1
  160. package/dist/standalone/{handlebars-BD-GTNyX.js → handlebars-CBJ4eJ41.js} +1 -1
  161. package/dist/standalone/{horizon-bright-CHsP19AA.js → horizon-bright-DI78Rvup.js} +1 -1
  162. package/dist/standalone/{html-Dg4T4CWG.js → html-CdYAzs3O.js} +1 -1
  163. package/dist/standalone/{html-derivative-Dy01fcFN.js → html-derivative-CTfvg-k9.js} +1 -1
  164. package/dist/standalone/{http-Dcg4Y0LN.js → http-DtJ6xqmi.js} +1 -1
  165. package/dist/{bin/hurl-C4sIrBP8.js → standalone/hurl-DVOcDWDo.js} +1 -1
  166. package/dist/standalone/{hxml-CkY94ZZG.js → hxml-CUgBPRa1.js} +1 -1
  167. package/dist/standalone/index.d.ts +103 -36
  168. package/dist/standalone/index.js +865 -90
  169. package/dist/standalone/{jinja-rn3l-epj.js → jinja-SiVN3EPo.js} +1 -1
  170. package/dist/standalone/{jison-Bb1qcUQw.js → jison-Cxwzm23V.js} +1 -1
  171. package/dist/standalone/{julia-Bf0YFlEW.js → julia-BOYqvvvj.js} +1 -1
  172. package/dist/standalone/{just-CgnMO4TC.js → just-IvSacbqb.js} +1 -1
  173. package/dist/{bin/kusto-D9rJ_wbq.js → standalone/kusto-DD1r27tX.js} +1 -1
  174. package/dist/standalone/{latex-CHYOx8yi.js → latex-DGWWRHT_.js} +1 -1
  175. package/dist/standalone/{liquid-BTKRZY_L.js → liquid-LYfo5SDA.js} +1 -1
  176. package/dist/standalone/{lua-RcKjZiH7.js → lua-2gNjm8zw.js} +1 -1
  177. package/dist/standalone/{marko-CLH1Sh4A.js → marko-U21Fnozx.js} +1 -1
  178. package/dist/standalone/{mdc-C1ZFsTbz.js → mdc-C13-zRpl.js} +1 -1
  179. package/dist/standalone/{nextflow-CE20fCoX.js → nextflow-ClSSDbXV.js} +1 -1
  180. package/dist/standalone/nextflow-groovy-BmdTtAtJ.js +1 -0
  181. package/dist/standalone/{nginx-CJQ7hxI6.js → nginx-DphzlDyZ.js} +1 -1
  182. package/dist/standalone/{nim-Czafvbe4.js → nim-D01gBmZb.js} +1 -1
  183. package/dist/standalone/{perl-CChoGwxr.js → perl-CuZPLwLm.js} +1 -1
  184. package/dist/standalone/php-c2mqHOa5.js +1 -0
  185. package/dist/{bin/pug-F80Qp1DF.js → standalone/pug-C3IdK9Vd.js} +1 -1
  186. package/dist/{bin/qml-Brw1WH4u.js → standalone/qml-CGE-rgGq.js} +1 -1
  187. package/dist/{bin/razor-DKKN_syA.js → standalone/razor-DjuaA8CM.js} +1 -1
  188. package/dist/standalone/{rst-DL5K0SsC.js → rst-CYE4T0LV.js} +1 -1
  189. package/dist/standalone/ruby-Cs80OLeO.js +1 -0
  190. package/dist/standalone/{sas-CgrIRNnH.js → sas-CrQDddD2.js} +1 -1
  191. package/dist/standalone/{scss-B5Q0dl0C.js → scss-C9pn4GwM.js} +1 -1
  192. package/dist/standalone/{shaderlab-B3x1KxeX.js → shaderlab-DhVgk0F4.js} +1 -1
  193. package/dist/standalone/{shellsession-iw5paaXf.js → shellsession-B3JdqBVn.js} +1 -1
  194. package/dist/{bin/soy-Cy2jSWuh.js → standalone/soy-BezrirVf.js} +1 -1
  195. package/dist/standalone/{sparql-38UvPuKm.js → sparql-BVgWJlnd.js} +1 -1
  196. package/dist/{bin/stata-DawaFFYJ.js → standalone/stata-H0pnFm1o.js} +1 -1
  197. package/dist/{bin/surrealql-B1iahgCh.js → standalone/surrealql-DIXH8vKD.js} +1 -1
  198. package/dist/standalone/{svelte-DbSBwS6o.js → svelte-BTt1OQ0v.js} +1 -1
  199. package/dist/standalone/{templ-hC3Z5CVs.js → templ-BSHIRmzI.js} +1 -1
  200. package/dist/standalone/{tex-CpSHM71U.js → tex-BjwG_oxA.js} +1 -1
  201. package/dist/standalone/ts-tags-Cp9pA_As.js +1 -0
  202. package/dist/standalone/{twig-BGs9c0m6.js → twig-BX08EwMF.js} +1 -1
  203. package/dist/standalone/typespec-BM547vOZ.js +1 -0
  204. package/dist/standalone/{vue-HXXkW9Ol.js → vue-BRMpKK6E.js} +1 -1
  205. package/dist/standalone/{vue-html-DMGAGeUM.js → vue-html-BZjQbgy2.js} +1 -1
  206. package/dist/standalone/{vue-vine-CumWe8dY.js → vue-vine-G3wsxe4j.js} +1 -1
  207. package/dist/standalone/{xml-OYKGlsbQ.js → xml-D0UfBFEi.js} +1 -1
  208. package/dist/standalone/{xsl-B9zh_nzP.js → xsl-DB3rrNcL.js} +1 -1
  209. package/package.json +23 -22
  210. package/readme.md +12 -7
  211. package/dist/bin/angular-html-CAOiQ-Sh.js +0 -1
  212. package/dist/bin/bird2-_hZ3FStw.js +0 -1
  213. package/dist/bin/c-CdETmdiZ.js +0 -1
  214. package/dist/bin/cmake-D8YNkuR-.js +0 -1
  215. package/dist/bin/cobol-0fKuGiZv.js +0 -1
  216. package/dist/bin/cpp-gdwUInvu.js +0 -1
  217. package/dist/bin/csharp-CIll8D6u.js +0 -1
  218. package/dist/bin/css-CWs_acR3.js +0 -1
  219. package/dist/bin/csv-DxS-HYUf.js +0 -1
  220. package/dist/bin/dart-C2ROqx0Z.js +0 -1
  221. package/dist/bin/diff-DP2jXnqp.js +0 -1
  222. package/dist/bin/emacs-lisp-Cj_Ixk9i.js +0 -1
  223. package/dist/bin/fortran-free-form-C3X_sfp9.js +0 -1
  224. package/dist/bin/gdscript-bYJURCOy.js +0 -1
  225. package/dist/bin/gdshader-KOuf2xVk.js +0 -1
  226. package/dist/bin/glsl-DFAnV4bR.js +0 -1
  227. package/dist/bin/go-GcrXPybz.js +0 -1
  228. package/dist/bin/graphql-AasBDd3n.js +0 -1
  229. package/dist/bin/haml-Dz37fDMr.js +0 -1
  230. package/dist/bin/haxe-B4EsxHyL.js +0 -1
  231. package/dist/bin/hlsl-CxhYg9sd.js +0 -1
  232. package/dist/bin/html-Crjq5rc3.js +0 -1
  233. package/dist/bin/html-derivative-CsguVNJC.js +0 -1
  234. package/dist/bin/java-BGzTmoXK.js +0 -1
  235. package/dist/bin/javascript-DTXNtrg0.js +0 -1
  236. package/dist/bin/json-BadQRMks.js +0 -1
  237. package/dist/bin/jsx-CoE327E5.js +0 -1
  238. package/dist/bin/less-BrjQyxTC.js +0 -1
  239. package/dist/bin/lua-BTFYnP6K.js +0 -1
  240. package/dist/bin/markdown-dl1m7YAL.js +0 -1
  241. package/dist/bin/nextflow-groovy-COoKx28o.js +0 -1
  242. package/dist/bin/nextflow-groovy-CpiNfI-c.js +0 -1
  243. package/dist/bin/perl-B-LgtJc7.js +0 -1
  244. package/dist/bin/php-BAXKJjQn.js +0 -1
  245. package/dist/bin/php-D9zsHNF7.js +0 -1
  246. package/dist/bin/postcss-D_yqFB4d.js +0 -1
  247. package/dist/bin/python-BLuJ3b5I.js +0 -1
  248. package/dist/bin/r-1QWtk6BQ.js +0 -1
  249. package/dist/bin/regexp-WPJh6EdZ.js +0 -1
  250. package/dist/bin/ruby-DME9-fO-.js +0 -1
  251. package/dist/bin/ruby-Go_q6-3o.js +0 -1
  252. package/dist/bin/scss-D8wnyi0z.js +0 -1
  253. package/dist/bin/sdbl-CSGqAXn4.js +0 -1
  254. package/dist/bin/shellscript-DhB4mnQ-.js +0 -1
  255. package/dist/bin/sql-BfsqdN68.js +0 -1
  256. package/dist/bin/stylus-CtR9dQIO.js +0 -1
  257. package/dist/bin/tex-BLh5zE4g.js +0 -1
  258. package/dist/bin/ts-tags-C0IwWXwE.js +0 -1
  259. package/dist/bin/tsx-BMmbqG-q.js +0 -1
  260. package/dist/bin/turtle-BFrhIdAM.js +0 -1
  261. package/dist/bin/typescript-CPs8nV3S.js +0 -1
  262. package/dist/bin/typespec-CJG5em1O.js +0 -1
  263. package/dist/bin/xml-CCj7o04Q.js +0 -1
  264. package/dist/bin/yaml-Dg2Msz_B.js +0 -1
  265. package/dist/standalone/bird2-B05GFxQw.js +0 -1
  266. package/dist/standalone/cobol-C9xdim3W.js +0 -1
  267. package/dist/standalone/dart-CcoouBGm.js +0 -1
  268. package/dist/standalone/emacs-lisp-C1K9lKmb.js +0 -1
  269. package/dist/standalone/nextflow-groovy-Brjjw2F-.js +0 -1
  270. package/dist/standalone/php-BW6t2_Q8.js +0 -1
  271. package/dist/standalone/ruby-DuNhMjQX.js +0 -1
  272. package/dist/standalone/ts-tags-BiWG72vW.js +0 -1
  273. package/dist/standalone/typespec-oIccER07.js +0 -1
  274. /package/dist/bin/{actionscript-3-WtXz7Nc9.js → actionscript-3-BaFy4IUl.js} +0 -0
  275. /package/dist/bin/{ada-CxieIYPC.js → ada-HceTT-Hk.js} +0 -0
  276. /package/dist/bin/{andromeeda-CEVX-4Db.js → andromeeda-DSb5DuLX.js} +0 -0
  277. /package/dist/bin/{apache-zgaAodRu.js → apache-MxcCclyI.js} +0 -0
  278. /package/dist/bin/{apex-BNA6bSzI.js → apex-Dt1yk6kE.js} +0 -0
  279. /package/dist/bin/{applescript-D9ApUiQg.js → applescript-CByslqpM.js} +0 -0
  280. /package/dist/bin/{ara-Xn981wPy.js → ara-BM6jOAfW.js} +0 -0
  281. /package/dist/bin/{asciidoc-C90J3qhX.js → asciidoc-BlA3UgbV.js} +0 -0
  282. /package/dist/bin/{asm-Cvg1-8xg.js → asm-VlQVLZc1.js} +0 -0
  283. /package/dist/bin/{aurora-x-BLDZZUdf.js → aurora-x-CeJL9O0f.js} +0 -0
  284. /package/dist/bin/{awk-BjDw91sP.js → awk-UE5FuWyB.js} +0 -0
  285. /package/dist/bin/{ayu-dark-CV3szcXN.js → ayu-dark-BZ1fKSke.js} +0 -0
  286. /package/dist/bin/{ayu-light-VFwhcb7b.js → ayu-light-Ck_aK9Yx.js} +0 -0
  287. /package/dist/bin/{ayu-mirage-jd_AuG1F.js → ayu-mirage-BbZPk566.js} +0 -0
  288. /package/dist/bin/{ballerina-vBN0WIlg.js → ballerina-Bd4N5CqQ.js} +0 -0
  289. /package/dist/bin/{bat-C7p6Ubpb.js → bat-nOz1h7iR.js} +0 -0
  290. /package/dist/bin/{beancount-zb-3xb6T.js → beancount-DYpPd8NJ.js} +0 -0
  291. /package/dist/bin/{berry-B_fAwMGD.js → berry-D6DSNBWg.js} +0 -0
  292. /package/dist/bin/{bibtex-AJFrnpSy.js → bibtex-8WxC_vKc.js} +0 -0
  293. /package/dist/bin/{bicep-ZTMcEuYT.js → bicep-Dr_R0619.js} +0 -0
  294. /package/dist/bin/{c-DIXYfOSP.js → c-DZllpasP.js} +0 -0
  295. /package/dist/bin/{c3-CF_7Rl_o.js → c3-BzjQIVCp.js} +0 -0
  296. /package/dist/bin/{cadence-BoKQX0Lv.js → cadence-QJ1AGP7V.js} +0 -0
  297. /package/dist/bin/{catppuccin-frappe-CHSjY7K5.js → catppuccin-frappe-C74znM78.js} +0 -0
  298. /package/dist/bin/{catppuccin-latte-BIei23jc.js → catppuccin-latte-yc8K1O2M.js} +0 -0
  299. /package/dist/bin/{catppuccin-macchiato-stEzqrNw.js → catppuccin-macchiato-DfzJUoQE.js} +0 -0
  300. /package/dist/bin/{catppuccin-mocha-Csibodaz.js → catppuccin-mocha-CV-OB_YP.js} +0 -0
  301. /package/dist/bin/{clarity-CF2X0I3d.js → clarity-CP8m4qdU.js} +0 -0
  302. /package/dist/bin/{clojure-D4EmLgj3.js → clojure-Du7V1e4x.js} +0 -0
  303. /package/dist/bin/{cmake-BADnWbaq.js → cmake-DirU205C.js} +0 -0
  304. /package/dist/bin/{codeowners-CKcVmpS-.js → codeowners-C-jlmeHU.js} +0 -0
  305. /package/dist/bin/{codeql-aBgygx2C.js → codeql-DQHv5NBs.js} +0 -0
  306. /package/dist/bin/{common-lisp-C0AzPNil.js → common-lisp-BsVO-SvL.js} +0 -0
  307. /package/dist/bin/{coq-FNCdvNHe.js → coq-Bl0U720i.js} +0 -0
  308. /package/dist/bin/{csharp-2Bjq_Rxi.js → csharp-DJUgEWNf.js} +0 -0
  309. /package/dist/bin/{csv-BU_TMxAS.js → csv-naVBPhrS.js} +0 -0
  310. /package/dist/bin/{cue-DV_1hEYT.js → cue-C3D0yAYi.js} +0 -0
  311. /package/dist/bin/{cypher-DrvyYDIr.js → cypher-CeWowZt9.js} +0 -0
  312. /package/dist/bin/{d-Dly9ufdX.js → d-DYrc22cP.js} +0 -0
  313. /package/dist/bin/{dark-plus-B42qAV4C.js → dark-plus-Comjg6US.js} +0 -0
  314. /package/dist/bin/{dax-vDoOL-fx.js → dax-B0jXJO6E.js} +0 -0
  315. /package/dist/bin/{desktop-DoZVZZ4h.js → desktop-DW6_MitS.js} +0 -0
  316. /package/dist/bin/{diff-By4RszRJ.js → diff-swkNtDFu.js} +0 -0
  317. /package/dist/bin/{docker-Bp8c7Dqi.js → docker-otzKDcRB.js} +0 -0
  318. /package/dist/bin/{dotenv-CEJeNbhS.js → dotenv-DK8FyOTY.js} +0 -0
  319. /package/dist/bin/{dracula-soft-CMTkd8vI.js → dracula-soft-srQhJYut.js} +0 -0
  320. /package/dist/bin/{dracula-DmN2zRHi.js → dracula-tZpPjTpX.js} +0 -0
  321. /package/dist/bin/{dream-maker-D3zsoW7J.js → dream-maker-CNbVmTq1.js} +0 -0
  322. /package/dist/bin/{everforest-dark-C1ZUi0Ki.js → everforest-dark-Bu3gFA-8.js} +0 -0
  323. /package/dist/bin/{everforest-light-BiIEIFyN.js → everforest-light-Cf0fR5Ti.js} +0 -0
  324. /package/dist/bin/{fennel-DAD8VWfy.js → fennel-Bbo-EUQE.js} +0 -0
  325. /package/dist/bin/{fish-G6fwZxok.js → fish-DrrKatD-.js} +0 -0
  326. /package/dist/bin/{fluent-BOBTNP2g.js → fluent-BWbo2JQ_.js} +0 -0
  327. /package/dist/bin/{fortran-free-form-By4p5LLA.js → fortran-free-form-BqeOewcz.js} +0 -0
  328. /package/dist/bin/{gdscript-DF4DHgCD.js → gdscript-CQy5Em6X.js} +0 -0
  329. /package/dist/bin/{gdshader-BPirqxsQ.js → gdshader-DuGt6i2A.js} +0 -0
  330. /package/dist/bin/{genie-DHT45pJu.js → genie-BtQYZNKR.js} +0 -0
  331. /package/dist/bin/{gherkin-BOftJ3Qu.js → gherkin-CIadD1ZT.js} +0 -0
  332. /package/dist/bin/{github-dark-Dhlw38v_.js → github-dark-9m5hPMlo.js} +0 -0
  333. /package/dist/bin/{github-dark-default-ChurEZVr.js → github-dark-default-DlN5M7CE.js} +0 -0
  334. /package/dist/bin/{github-dark-dimmed-Bg8moaOR.js → github-dark-dimmed-nV3axXTC.js} +0 -0
  335. /package/dist/bin/{github-dark-high-contrast-BuMAw1v5.js → github-dark-high-contrast-MfTMaKuJ.js} +0 -0
  336. /package/dist/bin/{github-light-DUFhx0nQ.js → github-light-C9MFANg3.js} +0 -0
  337. /package/dist/bin/{github-light-default-DhNuYLfL.js → github-light-default-Cfefjxfr.js} +0 -0
  338. /package/dist/bin/{github-light-high-contrast-VDpphmUr.js → github-light-high-contrast-BW7U_oJF.js} +0 -0
  339. /package/dist/bin/{gleam-BQORp6Ww.js → gleam-Bnawsb2X.js} +0 -0
  340. /package/dist/bin/{gn-BUvkHyO2.js → gn-Bc2dAhdc.js} +0 -0
  341. /package/dist/bin/{gnuplot-BiNqzIdJ.js → gnuplot-X12GawsY.js} +0 -0
  342. /package/dist/bin/{groovy-DZM0Oins.js → groovy-eavxb_aL.js} +0 -0
  343. /package/dist/bin/{gruvbox-dark-hard-B0-6V_Sa.js → gruvbox-dark-hard-Ckkb-ckr.js} +0 -0
  344. /package/dist/bin/{gruvbox-dark-medium-B2kDYkf7.js → gruvbox-dark-medium-DveV0NZQ.js} +0 -0
  345. /package/dist/bin/{gruvbox-dark-soft-D80qdOIx.js → gruvbox-dark-soft-BnCoejWh.js} +0 -0
  346. /package/dist/bin/{gruvbox-light-hard-np83Fhw4.js → gruvbox-light-hard-alFf9nMB.js} +0 -0
  347. /package/dist/bin/{gruvbox-light-medium--BtU_nk6.js → gruvbox-light-medium-DXv1IAoL.js} +0 -0
  348. /package/dist/bin/{gruvbox-light-soft-BQQJZmHA.js → gruvbox-light-soft-DE2R_dXV.js} +0 -0
  349. /package/dist/bin/{haskell-ChFomDou.js → haskell-D52N8aee.js} +0 -0
  350. /package/dist/bin/{haxe-Bgb4tX8C.js → haxe-lcHdXErF.js} +0 -0
  351. /package/dist/bin/{hcl-B_oQREVc.js → hcl-CohGLpsg.js} +0 -0
  352. /package/dist/bin/{hjson-B6rsoOCm.js → hjson-kJZd-7Uv.js} +0 -0
  353. /package/dist/bin/{hlsl-Dzk9GcSJ.js → hlsl-Bed0H4CN.js} +0 -0
  354. /package/dist/bin/{horizon-DC2iZgoY.js → horizon-BjlQhBS5.js} +0 -0
  355. /package/dist/bin/{houston-CAkU4Xzv.js → houston-BRgUYlu1.js} +0 -0
  356. /package/dist/bin/{hy-BzSjeCAF.js → hy-ClHGi00q.js} +0 -0
  357. /package/dist/bin/{imba-BCVM_gFu.js → imba-BwxhzLVj.js} +0 -0
  358. /package/dist/bin/{ini-CK7-QP3O.js → ini-BF8qU-L3.js} +0 -0
  359. /package/dist/bin/{java-Dgsz0B-P.js → java-DGXJx_7v.js} +0 -0
  360. /package/dist/bin/{javascript-BNwJ9fBE.js → javascript-DRicMqJx.js} +0 -0
  361. /package/dist/bin/{json-Dttibclf.js → json-ci7zycrx.js} +0 -0
  362. /package/dist/bin/{json5-D-uNcxgL.js → json5-5ueAesZq.js} +0 -0
  363. /package/dist/bin/{jsonc-Mhn2hM5D.js → jsonc-DLUxDCmI.js} +0 -0
  364. /package/dist/bin/{jsonl-DEwECwXy.js → jsonl-CcfJT6c3.js} +0 -0
  365. /package/dist/bin/{jsonnet-aP9lctbz.js → jsonnet-BfXfyZk_.js} +0 -0
  366. /package/dist/bin/{jssm-Bzk9BSR5.js → jssm-CG0kgLyz.js} +0 -0
  367. /package/dist/bin/{jsx-YopGa7XH.js → jsx-BVfyPJhl.js} +0 -0
  368. /package/dist/bin/{kanagawa-dragon-DRuqSBxu.js → kanagawa-dragon-CbwGXU96.js} +0 -0
  369. /package/dist/bin/{kanagawa-lotus-DFk8eUao.js → kanagawa-lotus-DvItD0v_.js} +0 -0
  370. /package/dist/bin/{kanagawa-wave-wqQYYPW0.js → kanagawa-wave-7BIcQNHD.js} +0 -0
  371. /package/dist/bin/{kdl-BBdrnnFN.js → kdl-CGCQY1-0.js} +0 -0
  372. /package/dist/bin/{kotlin-BOAeJ3Zn.js → kotlin-Babw_olw.js} +0 -0
  373. /package/dist/bin/{laserwave-po4bDaOp.js → laserwave-D7dCmej9.js} +0 -0
  374. /package/dist/bin/{lean--6SzPv5H.js → lean-BHhNV2FE.js} +0 -0
  375. /package/dist/bin/{less-DRwZNTsh.js → less-CwsIRTz2.js} +0 -0
  376. /package/dist/bin/{light-plus-B1SMNL2F.js → light-plus-DY08IP0P.js} +0 -0
  377. /package/dist/bin/{llvm-7RtiJHjj.js → llvm-CnTFl-xP.js} +0 -0
  378. /package/dist/bin/{log-KNtIq3vN.js → log-DWm71oiG.js} +0 -0
  379. /package/dist/bin/{logo-BhWYf_9m.js → logo-CSNcrIVD.js} +0 -0
  380. /package/dist/bin/{luau-CmcVV_DK.js → luau-D1AKCLXr.js} +0 -0
  381. /package/dist/bin/{make-Df5gTOt9.js → make-BcNpqY4E.js} +0 -0
  382. /package/dist/bin/{markdown-BtUDO16i.js → markdown-BWnBsa8n.js} +0 -0
  383. /package/dist/bin/{material-theme-BhPjDEOe.js → material-theme-CE5_eJON.js} +0 -0
  384. /package/dist/bin/{material-theme-darker-LB0WiHs5.js → material-theme-darker-D9dePcxU.js} +0 -0
  385. /package/dist/bin/{material-theme-lighter-b9Tsrc9R.js → material-theme-lighter-mNHXfMW6.js} +0 -0
  386. /package/dist/bin/{material-theme-ocean-B1e0t2_i.js → material-theme-ocean-FUMkFnrk.js} +0 -0
  387. /package/dist/bin/{material-theme-palenight-1CdY1ykl.js → material-theme-palenight-Byjl0ziV.js} +0 -0
  388. /package/dist/bin/{matlab-Qa9-GHKp.js → matlab-DLY1DdfV.js} +0 -0
  389. /package/dist/bin/{mdx-DrGeQtwF.js → mdx-C15-rtcb.js} +0 -0
  390. /package/dist/bin/{mermaid-CcPTwP9f.js → mermaid-BjiOJq8q.js} +0 -0
  391. /package/dist/bin/{min-dark-Dujx5q9i.js → min-dark-DmJdERaK.js} +0 -0
  392. /package/dist/bin/{min-light-wZS1kyfV.js → min-light-QnTJyXug.js} +0 -0
  393. /package/dist/bin/{mipsasm-BfvsshAY.js → mipsasm-CKHxalY6.js} +0 -0
  394. /package/dist/bin/{mojo-C2BYzC14.js → mojo-C2AiLnrb.js} +0 -0
  395. /package/dist/bin/{monokai-w9z2AnJS.js → monokai-BlWWERvb.js} +0 -0
  396. /package/dist/bin/{moonbit-DjpzDFB5.js → moonbit-CyDpODU8.js} +0 -0
  397. /package/dist/bin/{move-Bxr9ef96.js → move-DCXtz79I.js} +0 -0
  398. /package/dist/bin/{narrat-DcRshums.js → narrat-BEsur76A.js} +0 -0
  399. /package/dist/bin/{night-owl-CplppJJB.js → night-owl-CQ_y355d.js} +0 -0
  400. /package/dist/bin/{night-owl-light-BpOQXyuL.js → night-owl-light-9on5aClC.js} +0 -0
  401. /package/dist/bin/{nix-CtTYb1HK.js → nix-BlkifsNW.js} +0 -0
  402. /package/dist/bin/{nord-hoPJ5Dy3.js → nord-CHhLQxrx.js} +0 -0
  403. /package/dist/bin/{nushell-Cn3fXdgH.js → nushell-CGbyWjqd.js} +0 -0
  404. /package/dist/bin/{objective-c-BkduaOlQ.js → objective-c-DnEgp4sH.js} +0 -0
  405. /package/dist/bin/{objective-cpp-Cn2j-b6G.js → objective-cpp-DA1zjGUh.js} +0 -0
  406. /package/dist/bin/{ocaml-DqvuWcoq.js → ocaml-XKrHblGZ.js} +0 -0
  407. /package/dist/bin/{odin-D7ha6-Ni.js → odin-CUQeabzv.js} +0 -0
  408. /package/dist/bin/{one-dark-pro-eMAAhFAk.js → one-dark-pro-CPor5xCJ.js} +0 -0
  409. /package/dist/bin/{one-light-CSbFTW4a.js → one-light-Cs4MmHBp.js} +0 -0
  410. /package/dist/bin/{open-8AenGr4K.js → open-B4GJGp_X.js} +0 -0
  411. /package/dist/bin/{openscad-Dy0BqjE1.js → openscad-C-pyoaHZ.js} +0 -0
  412. /package/dist/bin/{pascal-HLRSlJ2v.js → pascal-DTg8yr2K.js} +0 -0
  413. /package/dist/bin/{pkl-D0LsOQD5.js → pkl-Dmk952a-.js} +0 -0
  414. /package/dist/bin/{plastic-DH0ROn14.js → plastic-CKy4gKei.js} +0 -0
  415. /package/dist/bin/{plsql-Ckotkn8G.js → plsql-DlmRLiy4.js} +0 -0
  416. /package/dist/bin/{po-Qix2N2fA.js → po-nqc2dSM7.js} +0 -0
  417. /package/dist/bin/{poimandres-HErFvNSF.js → poimandres-BcnQgoA4.js} +0 -0
  418. /package/dist/bin/{polar-DHAM8Rqb.js → polar-CUas3-Ed.js} +0 -0
  419. /package/dist/bin/{postcss-hgbxLNuF.js → postcss-DsLOvYd_.js} +0 -0
  420. /package/dist/bin/{powerquery-sXjCytsm.js → powerquery-o8pQIha0.js} +0 -0
  421. /package/dist/bin/{powershell-Br9y9LlC.js → powershell-DnB_d8z7.js} +0 -0
  422. /package/dist/bin/{prisma-COBUUaqE.js → prisma-BhG3Ia_M.js} +0 -0
  423. /package/dist/bin/{prolog-BbJTvtA-.js → prolog-CxNOQvhU.js} +0 -0
  424. /package/dist/bin/{proto-DiR3FLO1.js → proto-CxYQsozc.js} +0 -0
  425. /package/dist/bin/{puppet-CNdK406T.js → puppet-CYAa5kR2.js} +0 -0
  426. /package/dist/bin/{purescript-Cgw06S43.js → purescript-CN27zoMM.js} +0 -0
  427. /package/dist/bin/{python-DRu0B6X_.js → python-DAHUwdu1.js} +0 -0
  428. /package/dist/bin/{qmldir-tOWyMniz.js → qmldir-DK51keAu.js} +0 -0
  429. /package/dist/bin/{qss-CQ_tB_vx.js → qss-Dz7u-rR1.js} +0 -0
  430. /package/dist/bin/{r-CeXuGenk.js → r-CqHWlSSM.js} +0 -0
  431. /package/dist/bin/{racket-xM_JlWdJ.js → racket-COiCIaTN.js} +0 -0
  432. /package/dist/bin/{raku-CsjbV0q-.js → raku-0kOHw_dw.js} +0 -0
  433. /package/dist/bin/{red-2s42RJtx.js → red-m6Euu7mt.js} +0 -0
  434. /package/dist/bin/{reg-CDO-JwKW.js → reg-qVlCOoBm.js} +0 -0
  435. /package/dist/bin/{regexp-Aby82bH7.js → regexp-D7f8yhPZ.js} +0 -0
  436. /package/dist/bin/{rel-Lnk3efq_.js → rel-CWou97ke.js} +0 -0
  437. /package/dist/bin/{riscv-B6rT4cSG.js → riscv-DsFkdmj1.js} +0 -0
  438. /package/dist/bin/{ron-BiBOkEWn.js → ron-BiFFIB8X.js} +0 -0
  439. /package/dist/bin/{rose-pine-CxwcSun-.js → rose-pine-P4OLTmk8.js} +0 -0
  440. /package/dist/bin/{rose-pine-dawn-DkCSMZNl.js → rose-pine-dawn-Bjp9OAsX.js} +0 -0
  441. /package/dist/bin/{rose-pine-moon-CRcpU7ID.js → rose-pine-moon-BDOjeUMF.js} +0 -0
  442. /package/dist/bin/{rosmsg-_EpaFX4E.js → rosmsg-C8-G6Zy3.js} +0 -0
  443. /package/dist/bin/{rust-Dzeg0wAa.js → rust-8VLxkvbI.js} +0 -0
  444. /package/dist/bin/{sass-CfSmloHa.js → sass-CAZlzDYO.js} +0 -0
  445. /package/dist/bin/{scala-BzM4CFnq.js → scala-CNeLcgeU.js} +0 -0
  446. /package/dist/bin/{scheme-BqJLyHNb.js → scheme-DM0dV7X-.js} +0 -0
  447. /package/dist/bin/{sdbl-CVVKgb7O.js → sdbl-D91Q0-P-.js} +0 -0
  448. /package/dist/bin/{shellscript-CED9H1ao.js → shellscript-C3cZBHq3.js} +0 -0
  449. /package/dist/bin/{slack-dark-BLjlSbC0.js → slack-dark-D3icvwba.js} +0 -0
  450. /package/dist/bin/{slack-ochin-BeSJq7AY.js → slack-ochin-HRbhvypv.js} +0 -0
  451. /package/dist/bin/{smalltalk-DrKePzpE.js → smalltalk-CaV7xkpe.js} +0 -0
  452. /package/dist/bin/{snazzy-light-hGizAcbG.js → snazzy-light-DH6eOZ8E.js} +0 -0
  453. /package/dist/bin/{solarized-dark-B47oUJnZ.js → solarized-dark-CyUppETu.js} +0 -0
  454. /package/dist/bin/{solarized-light-COfgMzjY.js → solarized-light-CUG32Y3B.js} +0 -0
  455. /package/dist/bin/{solidity-93cGmCAT.js → solidity-CUUGhfh7.js} +0 -0
  456. /package/dist/bin/{splunk-C1Hlgf0c.js → splunk-D3BNLPbA.js} +0 -0
  457. /package/dist/bin/{sql-CWYhyc-w.js → sql-BBjVgCWI.js} +0 -0
  458. /package/dist/bin/{ssh-config-mSCJO_Nw.js → ssh-config-DSA-oRqW.js} +0 -0
  459. /package/dist/bin/{stylus-Dxd5rS5f.js → stylus-B8GmhT3T.js} +0 -0
  460. /package/dist/bin/{swift-CmhdkGbJ.js → swift-B3Og23RF.js} +0 -0
  461. /package/dist/bin/{synthwave-84-C8lHUQgz.js → synthwave-84-BQqBrmUY.js} +0 -0
  462. /package/dist/bin/{system-verilog-C5NPuZ4w.js → system-verilog-lZv4orfV.js} +0 -0
  463. /package/dist/bin/{systemd-DWf13jtC.js → systemd-C_lHKyyv.js} +0 -0
  464. /package/dist/bin/{talonscript-BHUwvink.js → talonscript-BgSK8iKj.js} +0 -0
  465. /package/dist/bin/{tasl-BqepUa6R.js → tasl-CfJEvNyg.js} +0 -0
  466. /package/dist/bin/{tcl-Cq_3s_LD.js → tcl-_6WfXxa8.js} +0 -0
  467. /package/dist/bin/{terraform-CJUb39F2.js → terraform-CvaKdwhe.js} +0 -0
  468. /package/dist/bin/{tokyo-night-DToTZO1M.js → tokyo-night-Dxn9nxCt.js} +0 -0
  469. /package/dist/bin/{toml-CcAy-xez.js → toml-C2IeULXW.js} +0 -0
  470. /package/dist/bin/{tsv-2LD76W9Y.js → tsv-upWrMxDX.js} +0 -0
  471. /package/dist/bin/{tsx-BTd5Sf56.js → tsx-CqFEeXnl.js} +0 -0
  472. /package/dist/bin/{turtle-D-xcuGf_.js → turtle-OfMAFnDU.js} +0 -0
  473. /package/dist/bin/{typescript-DcBfMx29.js → typescript-QhLgbiI3.js} +0 -0
  474. /package/dist/bin/{typst-CdguKrlh.js → typst-B0bxD-3R.js} +0 -0
  475. /package/dist/bin/{v-VnqxfSIy.js → v-DgtEGhmc.js} +0 -0
  476. /package/dist/bin/{vala-CPlxddOG.js → vala-X9RAnsG9.js} +0 -0
  477. /package/dist/bin/{vb-Do7lrS7D.js → vb-B8fi0ef3.js} +0 -0
  478. /package/dist/bin/{verilog-OGZUphCy.js → verilog-9KNl_vs0.js} +0 -0
  479. /package/dist/bin/{vesper-D6bcMq-9.js → vesper-BUDildQy.js} +0 -0
  480. /package/dist/bin/{vhdl-vQqxP3uc.js → vhdl-Ex4Tk_Q4.js} +0 -0
  481. /package/dist/bin/{viml-CRzBk174.js → viml-9TyT6AIR.js} +0 -0
  482. /package/dist/bin/{vitesse-black-DZPzP4WR.js → vitesse-black-BLDFwo2e.js} +0 -0
  483. /package/dist/bin/{vitesse-dark-Dn_i46a6.js → vitesse-dark-B7cKn6BQ.js} +0 -0
  484. /package/dist/bin/{vitesse-light-BYktrL59.js → vitesse-light-Cxpku45l.js} +0 -0
  485. /package/dist/bin/{vyper-CxG5w_hf.js → vyper-DlDvdFHA.js} +0 -0
  486. /package/dist/bin/{wasm-DfcgBtd_.js → wasm-BJM1CVhc.js} +0 -0
  487. /package/dist/bin/{wasm-C2OXzu0D.js → wasm-CgH-dZ_Q.js} +0 -0
  488. /package/dist/bin/{wenyan-CeYhWKkN.js → wenyan-cHQHBRol.js} +0 -0
  489. /package/dist/bin/{wgsl-gGAb2oSq.js → wgsl-BGXNRVfe.js} +0 -0
  490. /package/dist/bin/{wikitext-BNkXva03.js → wikitext-B_NAdate.js} +0 -0
  491. /package/dist/bin/{wit-snpmR1aT.js → wit-DpEeRzSj.js} +0 -0
  492. /package/dist/bin/{wolfram-BUWAXgpt.js → wolfram-FezxoFHC.js} +0 -0
  493. /package/dist/bin/{yaml-Brl8JesV.js → yaml-IgZurznZ.js} +0 -0
  494. /package/dist/bin/{zenscript-DAB1FI6O.js → zenscript-BSSNIKM2.js} +0 -0
  495. /package/dist/bin/{zig-DZTxXyCC.js → zig-DO_pxwRi.js} +0 -0
  496. /package/dist/standalone/{actionscript-3-WtXz7Nc9.js → actionscript-3-BaFy4IUl.js} +0 -0
  497. /package/dist/standalone/{ada-CxieIYPC.js → ada-HceTT-Hk.js} +0 -0
  498. /package/dist/standalone/{andromeeda-BylpTWnC.js → andromeeda-Drn3I52d.js} +0 -0
  499. /package/dist/standalone/{apache-zgaAodRu.js → apache-UvT67k7r.js} +0 -0
  500. /package/dist/standalone/{apex-BNA6bSzI.js → apex-C-zVKAtI.js} +0 -0
  501. /package/dist/standalone/{applescript-D9ApUiQg.js → applescript-CUUTxpqG.js} +0 -0
  502. /package/dist/standalone/{ara-Xn981wPy.js → ara-DXe565Eb.js} +0 -0
  503. /package/dist/standalone/{asciidoc-C90J3qhX.js → asciidoc-y8iYfg5t.js} +0 -0
  504. /package/dist/standalone/{asm-Cvg1-8xg.js → asm-FONT_MzT.js} +0 -0
  505. /package/dist/standalone/{aurora-x-z2QLMo08.js → aurora-x-CbSRhEG_.js} +0 -0
  506. /package/dist/standalone/{awk-L1WqJyjl.js → awk-C1Xf3NCS.js} +0 -0
  507. /package/dist/standalone/{ayu-dark-DFAYKmY8.js → ayu-dark-DUKhGG9M.js} +0 -0
  508. /package/dist/standalone/{ayu-light-ChPCIrww.js → ayu-light-zq1IImlB.js} +0 -0
  509. /package/dist/standalone/{ayu-mirage-Be8UDvXu.js → ayu-mirage-C0t0AhQz.js} +0 -0
  510. /package/dist/standalone/{ballerina-DOw61Yuq.js → ballerina-CtqZ90g_.js} +0 -0
  511. /package/dist/standalone/{bat-BJGaXoOz.js → bat-u_XFPZwF.js} +0 -0
  512. /package/dist/standalone/{beancount-Cu6FxzuA.js → beancount-gCaRbBDP.js} +0 -0
  513. /package/dist/standalone/{berry-DiPZpURY.js → berry-v4FqJ4ET.js} +0 -0
  514. /package/dist/standalone/{bibtex-Dp74FGRo.js → bibtex-6NwGpUZD.js} +0 -0
  515. /package/dist/standalone/{bicep-BwSAodHP.js → bicep-CA2puXK8.js} +0 -0
  516. /package/dist/standalone/{c-C-hboKX2.js → c-CUtwC4Mj.js} +0 -0
  517. /package/dist/standalone/{c3-BS3NJrFe.js → c3-Ce3JALMQ.js} +0 -0
  518. /package/dist/standalone/{cadence-DKUaB06W.js → cadence-bRc3mSPd.js} +0 -0
  519. /package/dist/standalone/{catppuccin-frappe-Dq9QR7eZ.js → catppuccin-frappe-Ck2c3Ir7.js} +0 -0
  520. /package/dist/standalone/{catppuccin-latte-yUwHFQst.js → catppuccin-latte-vbplB5Zo.js} +0 -0
  521. /package/dist/standalone/{catppuccin-macchiato-KYmbHQyq.js → catppuccin-macchiato-Bl8WMzwO.js} +0 -0
  522. /package/dist/standalone/{catppuccin-mocha-DFrUhns1.js → catppuccin-mocha-kN0Ta6g1.js} +0 -0
  523. /package/dist/standalone/{clarity-DKB_EYUy.js → clarity-BFCwqYZP.js} +0 -0
  524. /package/dist/standalone/{clojure-D7D2Zxsu.js → clojure-VpUVxvc9.js} +0 -0
  525. /package/dist/standalone/{cmake-Bju7ahwU.js → cmake-C9OlSQmP.js} +0 -0
  526. /package/dist/standalone/{codeowners-Di1OvpcW.js → codeowners-BRS2WD7U.js} +0 -0
  527. /package/dist/standalone/{codeql-KhL_IfCA.js → codeql-Bbt3c-53.js} +0 -0
  528. /package/dist/standalone/{common-lisp-DL0ShAR3.js → common-lisp-BvU0WGaz.js} +0 -0
  529. /package/dist/standalone/{coq-YuXzTVD8.js → coq-CYNX735i.js} +0 -0
  530. /package/dist/standalone/{csharp-X4m7dqIW.js → csharp-DEz-wF3L.js} +0 -0
  531. /package/dist/standalone/{csv-D_FJD-_L.js → csv-CwVLIGRx.js} +0 -0
  532. /package/dist/standalone/{cue-Brrvnugl.js → cue-BAFnez9U.js} +0 -0
  533. /package/dist/standalone/{cypher-CieA2-Ow.js → cypher-ByMDbfJE.js} +0 -0
  534. /package/dist/standalone/{d-BeWU-E1F.js → d-Bj_XxJbi.js} +0 -0
  535. /package/dist/standalone/{dark-plus-t8phC8vs.js → dark-plus-BxwPW2PO.js} +0 -0
  536. /package/dist/standalone/{dax-DZs9015r.js → dax-CN15Ir6v.js} +0 -0
  537. /package/dist/standalone/{desktop-Bmf3DIqD.js → desktop-Blw5nWNd.js} +0 -0
  538. /package/dist/standalone/{diff-M4XuV4o4.js → diff-DnSAa7YV.js} +0 -0
  539. /package/dist/standalone/{docker-Bf7rtiym.js → docker-CrBT4uQ5.js} +0 -0
  540. /package/dist/standalone/{dotenv-BwfGDw9z.js → dotenv-B3TKMiE2.js} +0 -0
  541. /package/dist/standalone/{dracula-__iKjS5Q.js → dracula-DDAawnm1.js} +0 -0
  542. /package/dist/standalone/{dracula-soft-Cn3YGlZ1.js → dracula-soft-B6l93y6r.js} +0 -0
  543. /package/dist/standalone/{dream-maker-BOxs3X-U.js → dream-maker-0xoAwu9F.js} +0 -0
  544. /package/dist/standalone/{everforest-dark-CG-xS58q.js → everforest-dark-uqvKxCLa.js} +0 -0
  545. /package/dist/standalone/{everforest-light-VnlgGH1r.js → everforest-light-Bgi4okNs.js} +0 -0
  546. /package/dist/standalone/{fennel-Bkp2zi6e.js → fennel-CDz99RXZ.js} +0 -0
  547. /package/dist/standalone/{fish-BSydEoPu.js → fish-BWVO9Ijr.js} +0 -0
  548. /package/dist/standalone/{fluent-CdeSNonp.js → fluent-SYyPuB0x.js} +0 -0
  549. /package/dist/standalone/{fortran-free-form-uMmrusbk.js → fortran-free-form-Cvm5N8AW.js} +0 -0
  550. /package/dist/standalone/{gdscript-CjXE_VF4.js → gdscript-DVPR-jwA.js} +0 -0
  551. /package/dist/standalone/{gdshader-D3GnIQMO.js → gdshader-DKg6VZob.js} +0 -0
  552. /package/dist/standalone/{genie-DjRp0HIF.js → genie-CnxW4Aei.js} +0 -0
  553. /package/dist/standalone/{gherkin-CO-9Xf3O.js → gherkin-Ba85ScdA.js} +0 -0
  554. /package/dist/standalone/{github-dark-DW2tvKKC.js → github-dark-CUBA-q-0.js} +0 -0
  555. /package/dist/standalone/{github-dark-default-ChsP8enW.js → github-dark-default-C6xZFMUm.js} +0 -0
  556. /package/dist/standalone/{github-dark-dimmed-DbObBUjn.js → github-dark-dimmed-BrWMwSTm.js} +0 -0
  557. /package/dist/standalone/{github-dark-high-contrast-DGQlFkmA.js → github-dark-high-contrast-BwsS_67p.js} +0 -0
  558. /package/dist/standalone/{github-light-JgN_--pJ.js → github-light-C3_GirKd.js} +0 -0
  559. /package/dist/standalone/{github-light-default-Dyse0wyU.js → github-light-default-DSvSOSFj.js} +0 -0
  560. /package/dist/standalone/{github-light-high-contrast-CeZ5HGZn.js → github-light-high-contrast-D-cuyaxK.js} +0 -0
  561. /package/dist/standalone/{gleam-BIhdqQ3b.js → gleam-BK_CIoct.js} +0 -0
  562. /package/dist/standalone/{gn--jXLY5_N.js → gn-C_iz9Wbo.js} +0 -0
  563. /package/dist/standalone/{gnuplot-Bxet1c3v.js → gnuplot-DXHAMx9j.js} +0 -0
  564. /package/dist/standalone/{groovy-CzT_Iae7.js → groovy-CPhve-3q.js} +0 -0
  565. /package/dist/standalone/{gruvbox-dark-hard-C1uR-pvB.js → gruvbox-dark-hard-DwraziE-.js} +0 -0
  566. /package/dist/standalone/{gruvbox-dark-medium-C_NCtEMg.js → gruvbox-dark-medium-tN06WFx5.js} +0 -0
  567. /package/dist/standalone/{gruvbox-dark-soft-DbASFM7u.js → gruvbox-dark-soft-BRDrk-Jk.js} +0 -0
  568. /package/dist/standalone/{gruvbox-light-hard-BisBk_cZ.js → gruvbox-light-hard-BUtBEr5w.js} +0 -0
  569. /package/dist/standalone/{gruvbox-light-medium-Cqf5GdYM.js → gruvbox-light-medium-BDydPOJI.js} +0 -0
  570. /package/dist/standalone/{gruvbox-light-soft-R3xWeYua.js → gruvbox-light-soft-B6sZTVCC.js} +0 -0
  571. /package/dist/standalone/{haskell-BU_KScmc.js → haskell-BZidAwBv.js} +0 -0
  572. /package/dist/standalone/{haxe-Dq20ysgQ.js → haxe-7LrSSm24.js} +0 -0
  573. /package/dist/standalone/{hcl-C-NSNXCz.js → hcl-B89HlRT6.js} +0 -0
  574. /package/dist/standalone/{hjson-C1slXyS7.js → hjson--1iec2mk.js} +0 -0
  575. /package/dist/standalone/{hlsl-nviGPNKF.js → hlsl-ys6eD8k3.js} +0 -0
  576. /package/dist/standalone/{horizon-pIEktodb.js → horizon-DHDEy49h.js} +0 -0
  577. /package/dist/standalone/{houston-DM-vL-Qy.js → houston-C2UUgkcj.js} +0 -0
  578. /package/dist/standalone/{hy-CNbyPkG-.js → hy-DfDp0LOu.js} +0 -0
  579. /package/dist/standalone/{imba-C3JgZFAu.js → imba-5rlinXsS.js} +0 -0
  580. /package/dist/standalone/{ini-CnSxfbfK.js → ini-Dvl7p4fh.js} +0 -0
  581. /package/dist/standalone/{java-CzlXKE3t.js → java-De0U3342.js} +0 -0
  582. /package/dist/standalone/{javascript-FKiEkpOl.js → javascript-CnBrVnUh.js} +0 -0
  583. /package/dist/standalone/{json-E5qb7BD2.js → json-DW5QMcCj.js} +0 -0
  584. /package/dist/standalone/{json5-BlfBFW_Y.js → json5-B92atw3l.js} +0 -0
  585. /package/dist/standalone/{jsonc-BRJexVfP.js → jsonc-BQ8btgHR.js} +0 -0
  586. /package/dist/standalone/{jsonl-D859SsoH.js → jsonl-Sr_oGeX-.js} +0 -0
  587. /package/dist/standalone/{jsonnet-sFIVPoTa.js → jsonnet-CLmJlxUC.js} +0 -0
  588. /package/dist/standalone/{jssm-BKvxMEP9.js → jssm-DnM8i8ut.js} +0 -0
  589. /package/dist/standalone/{jsx-D6UqkuWx.js → jsx-BLpri0NB.js} +0 -0
  590. /package/dist/standalone/{kanagawa-dragon-BVeOdnTJ.js → kanagawa-dragon-Rl17Vq_C.js} +0 -0
  591. /package/dist/standalone/{kanagawa-lotus-BPxif4UL.js → kanagawa-lotus-CEfzoMAY.js} +0 -0
  592. /package/dist/standalone/{kanagawa-wave-yTBcVIG8.js → kanagawa-wave-Dl5jL6TY.js} +0 -0
  593. /package/dist/standalone/{kdl-DHueRo8f.js → kdl-ByebaTOR.js} +0 -0
  594. /package/dist/standalone/{kotlin-Dq1wwHQP.js → kotlin-CO_7ebqK.js} +0 -0
  595. /package/dist/standalone/{laserwave-x5LKCxGn.js → laserwave-BymGJYS7.js} +0 -0
  596. /package/dist/standalone/{lean-xWP4NbYS.js → lean-D7q_Kpgv.js} +0 -0
  597. /package/dist/standalone/{less-To8q_Luw.js → less-DfGpr34i.js} +0 -0
  598. /package/dist/standalone/{light-plus-B9N5DQI_.js → light-plus-rCHX6NNy.js} +0 -0
  599. /package/dist/standalone/{llvm-DSlzjbDz.js → llvm-DI83sH5G.js} +0 -0
  600. /package/dist/standalone/{log-BUZNzUKc.js → log-GjieA_Fi.js} +0 -0
  601. /package/dist/standalone/{logo-Cdvy4UIe.js → logo-Z-Po9cqr.js} +0 -0
  602. /package/dist/standalone/{luau-ChD5_OIQ.js → luau-CHFvY7vV.js} +0 -0
  603. /package/dist/standalone/{make-PTqunrmv.js → make-pEFeZerG.js} +0 -0
  604. /package/dist/standalone/{markdown-tUO1dt9m.js → markdown-BLxfK9DH.js} +0 -0
  605. /package/dist/standalone/{material-theme-CZJ_pRWf.js → material-theme-_mO8dGF4.js} +0 -0
  606. /package/dist/standalone/{material-theme-darker-NnzT0yiw.js → material-theme-darker-CW8WbBMR.js} +0 -0
  607. /package/dist/standalone/{material-theme-lighter-B-3DgVxS.js → material-theme-lighter-DWGtW3Sj.js} +0 -0
  608. /package/dist/standalone/{material-theme-ocean-BZZHghfO.js → material-theme-ocean-VhkfqVVF.js} +0 -0
  609. /package/dist/standalone/{material-theme-palenight-B9O9JO4H.js → material-theme-palenight-cApQ4-KF.js} +0 -0
  610. /package/dist/standalone/{matlab-Co_sDlVB.js → matlab-L7fpDsTl.js} +0 -0
  611. /package/dist/standalone/{mdx-B4AGJXox.js → mdx-G_CG82jO.js} +0 -0
  612. /package/dist/standalone/{mermaid-4pySd3sl.js → mermaid-QCKf3Ptj.js} +0 -0
  613. /package/dist/standalone/{min-dark-DSigFwoh.js → min-dark-C7ciBb2i.js} +0 -0
  614. /package/dist/standalone/{min-light-b8nqGai7.js → min-light-DC6qyE0O.js} +0 -0
  615. /package/dist/standalone/{mipsasm-DbZprEQm.js → mipsasm-Ch_J_goG.js} +0 -0
  616. /package/dist/standalone/{mojo-4kIBaoam.js → mojo-BUTjyOde.js} +0 -0
  617. /package/dist/standalone/{monokai-BKSWoNnW.js → monokai-D99JixW5.js} +0 -0
  618. /package/dist/standalone/{moonbit-ZcSH7VpN.js → moonbit-v_Wmuq4r.js} +0 -0
  619. /package/dist/standalone/{move-BAMKTWoZ.js → move-CujRAOrk.js} +0 -0
  620. /package/dist/standalone/{narrat-DYLRa4xG.js → narrat-BUFChaaW.js} +0 -0
  621. /package/dist/standalone/{night-owl-light-fbFrWwTF.js → night-owl-light-ZvY_o4AV.js} +0 -0
  622. /package/dist/standalone/{night-owl-BtS72I6-.js → night-owl-zFbR0iUq.js} +0 -0
  623. /package/dist/standalone/{nix-DlQjHQ1N.js → nix-DVHO39rw.js} +0 -0
  624. /package/dist/standalone/{nord-Kzx5CafP.js → nord-CSYW7zq7.js} +0 -0
  625. /package/dist/standalone/{nushell-B04C_1w9.js → nushell-wvafmaI1.js} +0 -0
  626. /package/dist/standalone/{objective-c-DO0dC44X.js → objective-c-BJMjPSKt.js} +0 -0
  627. /package/dist/standalone/{objective-cpp-C6jZz_vb.js → objective-cpp-COwkzZNW.js} +0 -0
  628. /package/dist/standalone/{ocaml-D9wp3EJd.js → ocaml-BugjlZwQ.js} +0 -0
  629. /package/dist/standalone/{odin-u5wG6Qd6.js → odin-BbI_ip3y.js} +0 -0
  630. /package/dist/standalone/{one-dark-pro-x1jnl7Dq.js → one-dark-pro-O7XwserV.js} +0 -0
  631. /package/dist/standalone/{one-light-CHHJSb-V.js → one-light-Bv2B3pGW.js} +0 -0
  632. /package/dist/standalone/{open-CGQvvIUq.js → open-BpEGCZtV.js} +0 -0
  633. /package/dist/standalone/{openscad-H5hW1BA6.js → openscad-CYP3kDCW.js} +0 -0
  634. /package/dist/standalone/{pascal-h7T9h7AG.js → pascal-DzRWzYc7.js} +0 -0
  635. /package/dist/standalone/{pkl-Bs_8OmWM.js → pkl-Csk3Pz3F.js} +0 -0
  636. /package/dist/standalone/{plastic-MRrPKBd1.js → plastic-B8sPQcwq.js} +0 -0
  637. /package/dist/standalone/{plsql-BrbZPaQW.js → plsql-DHpuTJ3X.js} +0 -0
  638. /package/dist/standalone/{po-Diz0LmjW.js → po-BlTn26iX.js} +0 -0
  639. /package/dist/standalone/{poimandres-D3Al1iQC.js → poimandres-Nn-UO8qp.js} +0 -0
  640. /package/dist/standalone/{polar-BCwHILUV.js → polar-DEMP0iHG.js} +0 -0
  641. /package/dist/standalone/{postcss-D6Lmyt9A.js → postcss-B3SVlKZw.js} +0 -0
  642. /package/dist/standalone/{powerquery-CQr4BVoo.js → powerquery-DuUdfu4q.js} +0 -0
  643. /package/dist/standalone/{powershell-B6zzL9QO.js → powershell-CB3_ElnE.js} +0 -0
  644. /package/dist/standalone/{prisma-yySgczME.js → prisma-BxeT-Y5M.js} +0 -0
  645. /package/dist/standalone/{prolog-CZTkGNiW.js → prolog-BxrMgyN9.js} +0 -0
  646. /package/dist/standalone/{proto-Bu_Nhf7u.js → proto-Dek-exro.js} +0 -0
  647. /package/dist/standalone/{puppet-CJffH6Q6.js → puppet-C16HFbnX.js} +0 -0
  648. /package/dist/standalone/{purescript-CC7chrMM.js → purescript-C73JvxLF.js} +0 -0
  649. /package/dist/standalone/{python-C0zrVFze.js → python-DFvGjTfU.js} +0 -0
  650. /package/dist/standalone/{qmldir-C14XBFWV.js → qmldir-D2UzrXvk.js} +0 -0
  651. /package/dist/standalone/{qss-B5Hlft_e.js → qss-CyPgAzDy.js} +0 -0
  652. /package/dist/standalone/{r-BJ2VNcvN.js → r-BTPLa6iH.js} +0 -0
  653. /package/dist/standalone/{racket-BhgskJzI.js → racket-BaoaiPkO.js} +0 -0
  654. /package/dist/standalone/{raku-DsquHgLn.js → raku-BsUkgPqO.js} +0 -0
  655. /package/dist/standalone/{red-B7RxoP7i.js → red-CCJAPkdg.js} +0 -0
  656. /package/dist/standalone/{reg-Bax0jtzQ.js → reg-DOi1ALwl.js} +0 -0
  657. /package/dist/standalone/{regexp-BTh6yLg7.js → regexp-cogjKOiz.js} +0 -0
  658. /package/dist/standalone/{rel-BJ9pN2G2.js → rel-Y9vyrCmO.js} +0 -0
  659. /package/dist/standalone/{riscv-C3I2jhjQ.js → riscv-C9NE9rlt.js} +0 -0
  660. /package/dist/standalone/{ron-B4yZ2p1h.js → ron-uMa_rbSR.js} +0 -0
  661. /package/dist/standalone/{rose-pine-CesGHTut.js → rose-pine-B6wSIDAC.js} +0 -0
  662. /package/dist/standalone/{rose-pine-dawn-H7rm9o-e.js → rose-pine-dawn-CalFuemK.js} +0 -0
  663. /package/dist/standalone/{rose-pine-moon-BLFdnJwM.js → rose-pine-moon-BS44sctL.js} +0 -0
  664. /package/dist/standalone/{rosmsg-xA4_Syxo.js → rosmsg-ncCRrAah.js} +0 -0
  665. /package/dist/standalone/{rust-BwguOFUq.js → rust-D__ScB18.js} +0 -0
  666. /package/dist/standalone/{sass-BZyNoloZ.js → sass-Dcwwxgkc.js} +0 -0
  667. /package/dist/standalone/{scala-CekfPUXd.js → scala-qMGqTQGj.js} +0 -0
  668. /package/dist/standalone/{scheme-B2vB2nlX.js → scheme-BUvagZbg.js} +0 -0
  669. /package/dist/standalone/{sdbl-B-nwTmgB.js → sdbl-CdI9Io2f.js} +0 -0
  670. /package/dist/standalone/{shellscript-BUzexP2h.js → shellscript-CLNzcEEH.js} +0 -0
  671. /package/dist/standalone/{slack-dark-DCR6M5dd.js → slack-dark-CZWNFbAj.js} +0 -0
  672. /package/dist/standalone/{slack-ochin-BxQ3FsyT.js → slack-ochin-CcsRSPGb.js} +0 -0
  673. /package/dist/standalone/{smalltalk-Cy1j24XO.js → smalltalk-CkHsb-ck.js} +0 -0
  674. /package/dist/standalone/{snazzy-light-CjEw4xHM.js → snazzy-light-Cm_pY2Ne.js} +0 -0
  675. /package/dist/standalone/{solarized-dark-XlQ9gXgZ.js → solarized-dark-EVcpLOPz.js} +0 -0
  676. /package/dist/standalone/{solarized-light-isNaysOv.js → solarized-light-BGmOwKbi.js} +0 -0
  677. /package/dist/standalone/{solidity-C1mh1SRB.js → solidity-DcmwFsmZ.js} +0 -0
  678. /package/dist/standalone/{splunk-oM69IznW.js → splunk-BAf42Kh3.js} +0 -0
  679. /package/dist/standalone/{sql-CqT9Lw7j.js → sql-OpUJ1H7b.js} +0 -0
  680. /package/dist/standalone/{ssh-config-B0ZrS7Sv.js → ssh-config-DTZY5LJQ.js} +0 -0
  681. /package/dist/standalone/{stylus-B9JQrvWs.js → stylus-CHp-rBJx.js} +0 -0
  682. /package/dist/standalone/{swift-CaafmPxt.js → swift-DjfAKDlq.js} +0 -0
  683. /package/dist/standalone/{synthwave-84-BX-qCxDD.js → synthwave-84-B5y6dw6I.js} +0 -0
  684. /package/dist/standalone/{system-verilog-J8T_iWHG.js → system-verilog-CstGBDHm.js} +0 -0
  685. /package/dist/standalone/{systemd-DVL5CBpd.js → systemd-CV0H8W0r.js} +0 -0
  686. /package/dist/standalone/{talonscript-JJfmMcGp.js → talonscript-BfJo0mzd.js} +0 -0
  687. /package/dist/standalone/{tasl-B1QiBRw2.js → tasl-CbFmChTU.js} +0 -0
  688. /package/dist/standalone/{tcl-CqllcB5H.js → tcl-DNn0b4Xi.js} +0 -0
  689. /package/dist/standalone/{terraform-wW0EQRMO.js → terraform-C-5xJLZK.js} +0 -0
  690. /package/dist/standalone/{tokyo-night-D6xJgjfK.js → tokyo-night-DwP487HJ.js} +0 -0
  691. /package/dist/standalone/{toml-BHrgvSPm.js → toml-BUQbhfId.js} +0 -0
  692. /package/dist/standalone/{tsv-D73M_gRj.js → tsv-DboMNYlp.js} +0 -0
  693. /package/dist/standalone/{tsx-D6awiul2.js → tsx-D_ZL21a1.js} +0 -0
  694. /package/dist/standalone/{turtle-C6QRqIYF.js → turtle-ep-yDHHJ.js} +0 -0
  695. /package/dist/standalone/{typescript-CWgyaUtY.js → typescript-DLmRjE2H.js} +0 -0
  696. /package/dist/standalone/{typst-63_R-dcN.js → typst-OK3ZsbAS.js} +0 -0
  697. /package/dist/standalone/{v-DNh9rpzt.js → v-BRzbo0xa.js} +0 -0
  698. /package/dist/standalone/{vala-yZrEMgbl.js → vala-DajMRXrp.js} +0 -0
  699. /package/dist/standalone/{vb-CWiXLMNc.js → vb-Cp5p1BHA.js} +0 -0
  700. /package/dist/standalone/{verilog-D_YgnmVW.js → verilog-Karwuy7m.js} +0 -0
  701. /package/dist/standalone/{vesper-BoY7BUOC.js → vesper-D8EI4h-P.js} +0 -0
  702. /package/dist/standalone/{vhdl-CIOMuzRr.js → vhdl-BWVkbJap.js} +0 -0
  703. /package/dist/standalone/{viml-KvIzNj-z.js → viml-D006eITo.js} +0 -0
  704. /package/dist/standalone/{vitesse-black-BC5aDvua.js → vitesse-black-CiyuYPYv.js} +0 -0
  705. /package/dist/standalone/{vitesse-dark-C_RcLVAX.js → vitesse-dark-DF1BoauX.js} +0 -0
  706. /package/dist/standalone/{vitesse-light-CbYhMxH_.js → vitesse-light-BkWBILrw.js} +0 -0
  707. /package/dist/standalone/{vyper-DQ6Iue0m.js → vyper-pqGBEKo6.js} +0 -0
  708. /package/dist/standalone/{wasm-BVujMf4j.js → wasm-BNcVSub7.js} +0 -0
  709. /package/dist/standalone/{wasm-CttxofWT.js → wasm-BoWtZ2Hg.js} +0 -0
  710. /package/dist/standalone/{wenyan-sFr85_Wa.js → wenyan-B1aPQ0e8.js} +0 -0
  711. /package/dist/standalone/{wgsl-C8sJ4ScM.js → wgsl-MFrJo5Av.js} +0 -0
  712. /package/dist/standalone/{wikitext-BHbI4LrJ.js → wikitext-Bam7iWkE.js} +0 -0
  713. /package/dist/standalone/{wit-BrulQYCT.js → wit-RYUlqdwx.js} +0 -0
  714. /package/dist/standalone/{wolfram-CkTHL-YU.js → wolfram-BAx02ysC.js} +0 -0
  715. /package/dist/standalone/{yaml-C2UdUGt-.js → yaml-BipAacI9.js} +0 -0
  716. /package/dist/standalone/{zenscript-CvnF8pfB.js → zenscript-BidEsPSr.js} +0 -0
  717. /package/dist/standalone/{zig-DrTOhqiK.js → zig-DRQ1gulu.js} +0 -0
package/dist/lib/index.js CHANGED
@@ -31,7 +31,6 @@ import remarkMath from "remark-math";
31
31
  import remarkParse from "remark-parse";
32
32
  import { parse, stringify } from "yaml";
33
33
  import { sanitizeUri } from "micromark-util-sanitize-uri";
34
-
35
34
  //#region src/lib/utilities/string.ts
36
35
  function getHash(text, length) {
37
36
  return fnv1a(text, { size: length === 8 ? 32 : 64 }).toString(16).padStart(length, "0");
@@ -43,10 +42,13 @@ function capitalize(text) {
43
42
  * Truncates on word boundary and adds ellipsis. Does not give special treatment
44
43
  * to file extensions. If there are no spaces in the text, it will truncate at
45
44
  * `maxLength` without respect for word boundaries.
45
+ *
46
46
  * @param text Text to truncate
47
47
  * @param maxLength Maximum length excluding ellipsis
48
48
  * @param truncationString String to append to truncated text. Defaults to '...'
49
- * @param wordBoundary Character to consider a word boundary. Defaults to a space.
49
+ * @param wordBoundary Character to consider a word boundary. Defaults to a
50
+ * space.
51
+ *
50
52
  * @returns Truncated string
51
53
  */
52
54
  function truncateOnWordBoundary(text, maxLength, truncationString = "...", wordBoundary = " ") {
@@ -64,15 +66,19 @@ function emptyIsUndefined(text) {
64
66
  return text.trim() === "" ? void 0 : text;
65
67
  }
66
68
  /**
67
- * Mainly for nice formatting with prettier. But the line wrapping means we have to strip surplus whitespace.
69
+ * Mainly for nice formatting with prettier. But the line wrapping means we have
70
+ * to strip surplus whitespace.
71
+ *
68
72
  * @public
69
73
  */
70
74
  function css(strings, ...values) {
71
75
  return trimLeadingIndentation(strings, ...values);
72
76
  }
77
+ const NEWLINE_REGEX$1 = /\r?\n/;
78
+ const LEADING_WHITESPACE_REGEX = /^(\s+)/;
73
79
  function trimLeadingIndentation(strings, ...values) {
74
- const lines = strings.reduce((result, text, i) => `${result}${text}${String(values[i] ?? "")}`, "").split(/\r?\n/).filter((line) => line.trim() !== "");
75
- const leadingSpace = /^(\s+)/.exec(lines[0])?.[0] ?? "";
80
+ const lines = strings.reduce((result, text, i) => `${result}${text}${String(values[i] ?? "")}`, "").split(NEWLINE_REGEX$1).filter((line) => line.trim() !== "");
81
+ const leadingSpace = LEADING_WHITESPACE_REGEX.exec(lines[0])?.[0] ?? "";
76
82
  const leadingSpaceRegex = new RegExp(`^${leadingSpace}`);
77
83
  return lines.map((line) => line.replace(leadingSpaceRegex, "").trimEnd()).join("\n");
78
84
  }
@@ -82,54 +88,43 @@ function splitAtFirstMatch(text, regex) {
82
88
  const { index } = match;
83
89
  return [text.slice(0, index), text.slice(index)];
84
90
  }
85
-
86
91
  //#endregion
87
92
  //#region src/lib/shared/constants.ts
88
93
  /**
89
- * The default CSS to use for cards. This matches Anki's default. Stored in the Yanki card models and shared across all Yanki-managed notes regardless of namespace.
94
+ * The default CSS to use for cards. This matches Anki's default. Stored in the
95
+ * Yanki card models and shared across all Yanki-managed notes regardless of
96
+ * namespace. It does change occasionally, see
97
+ * https://github.com/ankitects/anki/blob/main/rslib/src/notetype/styling.css
90
98
  */
91
99
  const CSS_DEFAULT_STYLE = css`
92
100
  .card {
93
101
  font-family: arial;
94
102
  font-size: 20px;
103
+ line-height: 1.5;
95
104
  text-align: center;
96
105
  color: black;
97
106
  background-color: white;
98
107
  }
99
108
  `;
100
109
  /**
101
- * CSS class to always include in a top-level div wrapper in the card template to allow for custom styling.
110
+ * CSS class to always include in a top-level div wrapper in the card template
111
+ * to allow for custom styling.
102
112
  */
103
113
  const CSS_DEFAULT_CLASS_NAME = "yanki";
104
114
  /**
105
- * Whether to require changes to notes, models, or decks before invoking an
106
- * AnkiWeb sync. Seems like a good idea, but this is tricky... because if you
107
- * change the AnkiWeb flag after doing a sync, and haven't changed any files,
108
- * you won't end up pushing changes to AnkiWeb, which seems to contradict
109
- * expectations even though it would be more performant in the typical case.
110
- *
111
- * Only applies if the `ankiWeb` flag is true.
112
- */
113
- const SYNC_TO_ANKI_WEB_EVEN_IF_UNCHANGED = true;
114
- /**
115
- * The maximum length of a namespace. This is used to ensure that the namespace
116
- * is easy to type in CLI commands and doesn't hog too much semantic space in
117
- * Media filenames.
118
- */
119
- const NOTE_NAMESPACE_MAX_LENGTH = 60;
120
- /**
121
115
  * The default deck to put a card in if the deck deck can not be inferred from
122
116
  * the file path, e.g. when the `sync` command is used directly instead of
123
117
  * `syncFiles`.
124
118
  */
125
119
  const NOTE_DEFAULT_DECK_NAME = "Yanki";
126
120
  /**
127
- * Text to show if a note 'Front' field is empty, and content is required for a semantically valid card.
121
+ * Text to show if a note 'Front' field is empty, and content is required for a
122
+ * semantically valid card.
128
123
  */
129
124
  const NOTE_DEFAULT_EMPTY_TEXT = "(Empty)";
130
125
  /**
131
- * HTML element to use to present `NOTE_DEFAULT_EMPTY_TEXT`.
132
- * TODO consider hidden span?
126
+ * HTML element to use to present `NOTE_DEFAULT_EMPTY_TEXT`. TODO consider
127
+ * hidden span?
133
128
  */
134
129
  const NOTE_DEFAULT_EMPTY_HAST = u("element", {
135
130
  properties: {},
@@ -140,29 +135,27 @@ const NOTE_DEFAULT_EMPTY_HAST = u("element", {
140
135
  }, [u("text", NOTE_DEFAULT_EMPTY_TEXT)])]);
141
136
  const MEDIA_DEFAULT_HASH_MODE_FILE = "metadata";
142
137
  const MEDIA_DEFAULT_HASH_MODE_URL = "metadata";
143
- const MEDIA_INCLUDE_LEGIBLE_FILENAME = false;
144
138
  /**
145
139
  * How to first attempt to infer the asset type behind a URL.
146
140
  *
147
141
  * - `metadata`: Fetch the head and hope for a `Content-Type` header.
148
- * - `name`: Infer the extension from the URL alone, won't work if there's nothing extension-like in the `pathname`.
142
+ * - `name`: Infer the extension from the URL alone, won't work if there's nothing
143
+ * extension-like in the `pathname`.
149
144
  */
150
145
  const MEDIA_URL_CONTENT_TYPE_MODE = "metadata";
151
146
  /**
152
- * Anki enforces limits on media asset filenames. Older versions allowed up to 255, but it will be 120 moving forward.
153
- * https://github.com/ankitects/anki/blob/e41c4573d789afe8b020fab5d9d1eede50c3fa3d/rslib/src/sync/media/mod.rs#L20
154
- */
155
- const MEDIA_FILENAME_MAX_LENGTH = 120;
156
- /**
157
- * Filename to use when a media asset has no name. Will be appended with counter parenthetical as needed.
147
+ * Filename to use when a media asset has no name. Will be appended with counter
148
+ * parenthetical as needed.
158
149
  */
159
150
  const MEDIA_DEFAULT_EMPTY_FILENAME = "Untitled";
160
151
  /**
161
152
  * Supported image extensions for Anki media assets.
162
153
  *
163
- * Note that while officially "supported", some of these are not universally compatible across Anki platforms.
154
+ * Note that while officially "supported", some of these are not universally
155
+ * compatible across Anki platforms.
164
156
  *
165
- * Via https://github.com/ankitects/anki/blob/e41c4573d789afe8b020fab5d9d1eede50c3fa3d/qt/aqt/editor.py#L62
157
+ * Via
158
+ * https://github.com/ankitects/anki/blob/e41c4573d789afe8b020fab5d9d1eede50c3fa3d/qt/aqt/editor.py#L62
166
159
  */
167
160
  const MEDIA_SUPPORTED_IMAGE_EXTENSIONS = [
168
161
  "avif",
@@ -219,12 +212,10 @@ const MEDIA_SUPPORTED_EXTENSIONS = [
219
212
  ...MEDIA_SUPPORTED_IMAGE_EXTENSIONS,
220
213
  ...MEDIA_SUPPORTED_FILE_EXTENSIONS
221
214
  ];
222
-
223
215
  //#endregion
224
216
  //#region src/lib/utilities/platform.ts
225
217
  const ENVIRONMENT = typeof window === "undefined" ? typeof process === "undefined" ? "other" : "node" : "browser";
226
- const PLATFORM = ENVIRONMENT === "browser" ? /windows/i.test(navigator.userAgent) ? "windows" : /mac/i.test(navigator.userAgent) ? "mac" : /linux/i.test(navigator.userAgent) || /ubuntu/i.test(navigator.userAgent) ? "linux" : "other" : ENVIRONMENT === "node" ? process.platform === "win32" ? "windows" : process.platform === "darwin" ? "mac" : process.platform === "linux" ? "linux" : "other" : "other";
227
-
218
+ ENVIRONMENT === "browser" ? /windows/i.test(navigator.userAgent) || /mac/i.test(navigator.userAgent) || /linux/i.test(navigator.userAgent) || /ubuntu/i.test(navigator.userAgent) : ENVIRONMENT === "node" && (process.platform === "win32" || process.platform === "darwin" || process.platform);
228
219
  //#endregion
229
220
  //#region src/lib/shared/types.ts
230
221
  const defaultGlobalOptions = {
@@ -273,7 +264,6 @@ async function getDefaultFileAdapter() {
273
264
  function getDefaultFetchAdapter() {
274
265
  return fetch.bind(globalThis);
275
266
  }
276
-
277
267
  //#endregion
278
268
  //#region src/lib/utilities/file.ts
279
269
  async function fileExists(absoluteFilePath, fileAdapter) {
@@ -296,12 +286,95 @@ async function getFileContentHash(absoluteFilePath, fileAdapter, mode = MEDIA_DE
296
286
  case "name": return getHash(absoluteFilePath, 16);
297
287
  }
298
288
  }
299
-
300
289
  //#endregion
301
290
  //#region src/lib/utilities/namespace.ts
291
+ const CONSECUTIVE_HYPHENS_REGEX = /-+/g;
292
+ const ASTERISK_REGEX = /\*/;
293
+ const FORBIDDEN_CHARACTERS = [
294
+ [/:/, "Colon"],
295
+ [/\u0000/, "Null"],
296
+ [/\u0001/, "Start of Heading"],
297
+ [/\u0002/, "Start of Text"],
298
+ [/\u0003/, "End of Text"],
299
+ [/\u0004/, "End of Transmission"],
300
+ [/\u0005/, "Enquiry"],
301
+ [/\u0006/, "Acknowledge"],
302
+ [/\u0007/, "Bell"],
303
+ [/\u0008/, "Backspace"],
304
+ [/\u0009/, "Horizontal Tab"],
305
+ [/\u000A/, "Line Feed"],
306
+ [/\u000B/, "Vertical Tab"],
307
+ [/\u000C/, "Form Feed"],
308
+ [/\u000D/, "Carriage Return"],
309
+ [/\u000E/, "Shift Out"],
310
+ [/\u000F/, "Shift In"],
311
+ [/\u0010/, "Data Link Escape"],
312
+ [/\u0011/, "Device Control 1"],
313
+ [/\u0012/, "Device Control 2"],
314
+ [/\u0013/, "Device Control 3"],
315
+ [/\u0014/, "Device Control 4"],
316
+ [/\u0015/, "Negative Acknowledge"],
317
+ [/\u0016/, "Synchronous Idle"],
318
+ [/\u0017/, "End of Transmission Block"],
319
+ [/\u0018/, "Cancel"],
320
+ [/\u0019/, "End of Medium"],
321
+ [/\u001A/, "Substitute"],
322
+ [/\u001B/, "Escape"],
323
+ [/\u001C/, "File Separator"],
324
+ [/\u001D/, "Group Separator"],
325
+ [/\u001E/, "Record Separator"],
326
+ [/\u001F/, "Unit Separator"],
327
+ [/\u007F/, "Delete"],
328
+ [/\u0080/, "Padding Character"],
329
+ [/\u0081/, "High Octet Preset"],
330
+ [/\u0082/, "Break Permitted Here"],
331
+ [/\u0083/, "No Break Here"],
332
+ [/\u0084/, "Index"],
333
+ [/\u0085/, "Next Line"],
334
+ [/\u0086/, "Start of Selected Area"],
335
+ [/\u0087/, "End of Selected Area"],
336
+ [/\u0088/, "Character Tabulation Set"],
337
+ [/\u0089/, "Character Tabulation with Justification"],
338
+ [/\u008A/, "Line Tabulation Set"],
339
+ [/\u008B/, "Partial Line Forward"],
340
+ [/\u008C/, "Partial Line Backward"],
341
+ [/\u008D/, "Reverse Line Feed"],
342
+ [/\u008E/, "Single Shift Two"],
343
+ [/\u008F/, "Single Shift Three"],
344
+ [/\u0090/, "Device Control String"],
345
+ [/\u0091/, "Private Use One"],
346
+ [/\u0092/, "Private Use Two"],
347
+ [/\u0093/, "Set Transmit State"],
348
+ [/\u0094/, "Cancel Character"],
349
+ [/\u0095/, "Message Waiting"],
350
+ [/\u0096/, "Start of Protected Area"],
351
+ [/\u0097/, "End of Protected Area"],
352
+ [/\u0098/, "Start of String"],
353
+ [/\u0099/, "Single Graphic Character Introducer"],
354
+ [/\u009A/, "Single Character Introducer"],
355
+ [/\u009B/, "Control Sequence Introducer"],
356
+ [/\u009C/, "String Terminator"],
357
+ [/\u009D/, "Operating System Command"],
358
+ [/\u009E/, "Privacy Message"],
359
+ [/\u009F/, "Application Program Command"],
360
+ [/\u00A0/, "Non-breaking Space"],
361
+ [/\u00AD/, "Soft Hyphen"],
362
+ [/\u200B/, "Zero-width Space"],
363
+ [/\u200C/, "Zero-width Non-joiner"],
364
+ [/\u200D/, "Zero-width Joiner"],
365
+ [/\u200E/, "Left-to-right Mark"],
366
+ [/\u200F/, "Right-to-left Mark"],
367
+ [/\u202A/, "Left-to-right Embedding"],
368
+ [/\u202B/, "Right-to-left Embedding"],
369
+ [/\u202C/, "Pop Directional Formatting"],
370
+ [/\u202D/, "Left-to-right Override"],
371
+ [/\u202E/, "Right-to-left Override"],
372
+ [/\uFEFF/, "Byte Order Mark (BOM)"]
373
+ ];
302
374
  /**
303
375
  * Convenience
304
- * @returns sanitized valid namespace
376
+ *
377
+ * @returns Sanitized valid namespace
305
378
  * @throws {Error} If namespace is invalid
306
379
  */
307
380
  function validateAndSanitizeNamespace(namespace, allowAsterisk = false) {
@@ -310,7 +383,8 @@ function validateAndSanitizeNamespace(namespace, allowAsterisk = false) {
310
383
  }
311
384
  /**
312
385
  * Used internally before storing and searching
313
- * @returns sanitized namespace
386
+ *
387
+ * @returns Sanitized namespace
314
388
  */
315
389
  function sanitizeNamespace(namespace) {
316
390
  return namespace.normalize("NFC").trim();
@@ -324,99 +398,20 @@ function sanitizeNamespace(namespace) {
324
398
  * about the letter of the namespace, otherwise there's a risk of data loss. For
325
399
  * this reason, validation is strict and throws errors, so that the user can
326
400
  * understand and correct their input so that they know the proper form for
327
- * subsequent uses of the namespace string — especially if they're using the CLI.
401
+ * subsequent uses of the namespace string — especially if they're using the
402
+ * CLI.
328
403
  *
329
404
  * Silently correcting the namespace would be a bad idea, because the user might
330
405
  * not realize that the namespace has been changed, and then they might not be
331
406
  * able to find their notes.
407
+ *
332
408
  * @throws {Error}
333
409
  */
334
410
  function validateNamespace(namespace, allowAsterisk = false) {
335
411
  const errorMessages = [];
336
412
  if (namespace.trim().length === 0) errorMessages.push("Cannot be empty");
337
- if (namespace.trim().length > NOTE_NAMESPACE_MAX_LENGTH) errorMessages.push(`Cannot be longer than ${NOTE_NAMESPACE_MAX_LENGTH} characters`);
338
- const forbiddenCharacters = [
339
- [/:/, "Colon"],
340
- [/\u0000/, "Null"],
341
- [/\u0001/, "Start of Heading"],
342
- [/\u0002/, "Start of Text"],
343
- [/\u0003/, "End of Text"],
344
- [/\u0004/, "End of Transmission"],
345
- [/\u0005/, "Enquiry"],
346
- [/\u0006/, "Acknowledge"],
347
- [/\u0007/, "Bell"],
348
- [/\u0008/, "Backspace"],
349
- [/\u0009/, "Horizontal Tab"],
350
- [/\u000A/, "Line Feed"],
351
- [/\u000B/, "Vertical Tab"],
352
- [/\u000C/, "Form Feed"],
353
- [/\u000D/, "Carriage Return"],
354
- [/\u000E/, "Shift Out"],
355
- [/\u000F/, "Shift In"],
356
- [/\u0010/, "Data Link Escape"],
357
- [/\u0011/, "Device Control 1"],
358
- [/\u0012/, "Device Control 2"],
359
- [/\u0013/, "Device Control 3"],
360
- [/\u0014/, "Device Control 4"],
361
- [/\u0015/, "Negative Acknowledge"],
362
- [/\u0016/, "Synchronous Idle"],
363
- [/\u0017/, "End of Transmission Block"],
364
- [/\u0018/, "Cancel"],
365
- [/\u0019/, "End of Medium"],
366
- [/\u001A/, "Substitute"],
367
- [/\u001B/, "Escape"],
368
- [/\u001C/, "File Separator"],
369
- [/\u001D/, "Group Separator"],
370
- [/\u001E/, "Record Separator"],
371
- [/\u001F/, "Unit Separator"],
372
- [/\u007F/, "Delete"],
373
- [/\u0080/, "Padding Character"],
374
- [/\u0081/, "High Octet Preset"],
375
- [/\u0082/, "Break Permitted Here"],
376
- [/\u0083/, "No Break Here"],
377
- [/\u0084/, "Index"],
378
- [/\u0085/, "Next Line"],
379
- [/\u0086/, "Start of Selected Area"],
380
- [/\u0087/, "End of Selected Area"],
381
- [/\u0088/, "Character Tabulation Set"],
382
- [/\u0089/, "Character Tabulation with Justification"],
383
- [/\u008A/, "Line Tabulation Set"],
384
- [/\u008B/, "Partial Line Forward"],
385
- [/\u008C/, "Partial Line Backward"],
386
- [/\u008D/, "Reverse Line Feed"],
387
- [/\u008E/, "Single Shift Two"],
388
- [/\u008F/, "Single Shift Three"],
389
- [/\u0090/, "Device Control String"],
390
- [/\u0091/, "Private Use One"],
391
- [/\u0092/, "Private Use Two"],
392
- [/\u0093/, "Set Transmit State"],
393
- [/\u0094/, "Cancel Character"],
394
- [/\u0095/, "Message Waiting"],
395
- [/\u0096/, "Start of Protected Area"],
396
- [/\u0097/, "End of Protected Area"],
397
- [/\u0098/, "Start of String"],
398
- [/\u0099/, "Single Graphic Character Introducer"],
399
- [/\u009A/, "Single Character Introducer"],
400
- [/\u009B/, "Control Sequence Introducer"],
401
- [/\u009C/, "String Terminator"],
402
- [/\u009D/, "Operating System Command"],
403
- [/\u009E/, "Privacy Message"],
404
- [/\u009F/, "Application Program Command"],
405
- [/\u00A0/, "Non-breaking Space"],
406
- [/\u00AD/, "Soft Hyphen"],
407
- [/\u200B/, "Zero-width Space"],
408
- [/\u200C/, "Zero-width Non-joiner"],
409
- [/\u200D/, "Zero-width Joiner"],
410
- [/\u200E/, "Left-to-right Mark"],
411
- [/\u200F/, "Right-to-left Mark"],
412
- [/\u202A/, "Left-to-right Embedding"],
413
- [/\u202B/, "Right-to-left Embedding"],
414
- [/\u202C/, "Pop Directional Formatting"],
415
- [/\u202D/, "Left-to-right Override"],
416
- [/\u202E/, "Right-to-left Override"],
417
- [/\uFEFF/, "Byte Order Mark (BOM)"]
418
- ];
419
- if (!allowAsterisk) forbiddenCharacters.push([/\*/, "Asterisk"]);
413
+ if (namespace.trim().length > 60) errorMessages.push(`Cannot be longer than 60 characters`);
414
+ const forbiddenCharacters = allowAsterisk ? FORBIDDEN_CHARACTERS : [...FORBIDDEN_CHARACTERS, [ASTERISK_REGEX, "Asterisk"]];
420
415
  for (const [regex, description] of forbiddenCharacters) {
421
416
  const match = namespace.match(regex);
422
417
  if (match) {
@@ -430,9 +425,8 @@ function validateNamespace(namespace, allowAsterisk = false) {
430
425
  * Get sanitized namespace with yanki-media- prefix (for ease of searching)
431
426
  */
432
427
  function getSlugifiedNamespace(namespace) {
433
- return `yanki-media-${slugify(sanitizeNamespace(namespace)).replaceAll(/-+/g, "-")}`;
428
+ return `yanki-media-${slugify(sanitizeNamespace(namespace)).replaceAll(CONSECUTIVE_HYPHENS_REGEX, "-")}`;
434
429
  }
435
-
436
430
  //#endregion
437
431
  //#region src/lib/utilities/mime.ts
438
432
  /**
@@ -479,12 +473,15 @@ function getFileExtensionForMimeType(mimeType) {
479
473
  if (result === void 0) return;
480
474
  return result;
481
475
  }
482
-
483
476
  //#endregion
484
477
  //#region src/lib/utilities/path.ts
478
+ const WINDOWS_DRIVE_LETTER_REGEX = /^[A-Z]:/i;
479
+ const QUERY_FRAGMENT_START_REGEX = /[#?^]/;
485
480
  /**
486
481
  * The browserify polyfill doesn't implement win32 absolute path detection...
482
+ *
487
483
  * @param filePath Normalized path
484
+ *
488
485
  * @returns Whether the path is absolute
489
486
  */
490
487
  function isAbsolute(filePath) {
@@ -494,8 +491,10 @@ const RE_WINDOWS_EXTENDED_LENGTH_PATH = /^\\\\\?\\.+/;
494
491
  /**
495
492
  * Converts all paths to cross-platform 'mixed' style with forward slashes.
496
493
  * Warns on unsupported Windows extended length paths.
494
+ *
497
495
  * @param filePath Path to normalize
498
- * @returns normalized path
496
+ *
497
+ * @returns Normalized path
499
498
  */
500
499
  function normalize(filePath) {
501
500
  if (RE_WINDOWS_EXTENDED_LENGTH_PATH.test(filePath)) {
@@ -508,14 +507,15 @@ function normalize(filePath) {
508
507
  return normalizedPath;
509
508
  }
510
509
  /**
511
- * Special handling for `/absolute-path.md` style links in Obsidian
512
- * and static site generators, where absolute paths are relative to a base path
513
- * instead of the volume root.
510
+ * Special handling for `/absolute-path.md` style links in Obsidian and static
511
+ * site generators, where absolute paths are relative to a base path instead of
512
+ * the volume root.
514
513
  *
515
-
514
+ * Paths starting with Windows drive letters, while technically absolute, are
515
+ * _not_ prepended with the base:
516
516
  *
517
- * Paths starting with Windows drive letters, while technically absolute, are _not_ prepended with the base:
518
- * - If no base path is provided, paths are resolved relative to the the provided CWD.
517
+ * - If no base path is provided, paths are resolved relative to the the provided
518
+ * CWD.
519
519
  * - If paths are relative, the base paths are ignored and the CWD is used.
520
520
  *
521
521
  * All path values are normalized and in 'mixed' platform style.
@@ -528,7 +528,7 @@ function resolveWithBasePath(filePath, options) {
528
528
  }
529
529
  if (!isAbsolute(cwd)) console.warn(`CWD "${cwd}" is not absolute`);
530
530
  if (isAbsolute(filePath)) {
531
- if (basePath === void 0 || /^[A-Z]:/i.test(filePath) || !compoundBase && filePath.startsWith(basePath)) return filePath;
531
+ if (basePath === void 0 || WINDOWS_DRIVE_LETTER_REGEX.test(filePath) || !compoundBase && filePath.startsWith(basePath)) return filePath;
532
532
  return path.join(basePath, filePath);
533
533
  }
534
534
  return path.join(cwd, filePath);
@@ -539,7 +539,7 @@ function stripBasePath(filePath, basePath) {
539
539
  }
540
540
  function getBaseAndQueryParts(filePath) {
541
541
  const directoryPath = path.dirname(filePath);
542
- const [base, query] = splitAtFirstMatch(path.basename(filePath), /[#?^]/);
542
+ const [base, query] = splitAtFirstMatch(path.basename(filePath), QUERY_FRAGMENT_START_REGEX);
543
543
  return [path.join(directoryPath, base), query];
544
544
  }
545
545
  function getBase(filePath) {
@@ -562,9 +562,10 @@ function addExtension(filePath, extension) {
562
562
  const [base, query] = getBaseAndQueryParts(filePath);
563
563
  return `${base}.${extension}${query ?? ""}`;
564
564
  }
565
-
566
565
  //#endregion
567
566
  //#region src/lib/utilities/url.ts
567
+ const DRIVE_LETTER_REGEX = /^[a-z]:/i;
568
+ const FILE_PREFIX_REGEX = /^file:/i;
568
569
  function safeDecodeURI(text) {
569
570
  try {
570
571
  return decodeURI(text);
@@ -581,9 +582,7 @@ function safeDecodeURI(text) {
581
582
  function safeParseUrl(text) {
582
583
  try {
583
584
  const url = new URL(text);
584
- const driveLetterPattern = /^[a-z]:/i;
585
- const filePrefixPattern = /^file:/i;
586
- if ((filePrefixPattern.test(url.protocol) || driveLetterPattern.test(url.protocol)) && !filePrefixPattern.test(text)) return;
585
+ if ((FILE_PREFIX_REGEX.test(url.protocol) || DRIVE_LETTER_REGEX.test(url.protocol)) && !FILE_PREFIX_REGEX.test(text)) return;
587
586
  return url;
588
587
  } catch {
589
588
  return;
@@ -593,8 +592,9 @@ function isUrl(text) {
593
592
  return safeParseUrl(text) !== void 0;
594
593
  }
595
594
  /**
596
- * Helper to "filter" file URLs into path strings so they're treated
597
- * correctly in mdastToHtml
595
+ * Helper to "filter" file URLs into path strings so they're treated correctly
596
+ * in mdastToHtml
597
+ *
598
598
  * @todo Need stuff from node's implementation, fileURLToPath?
599
599
  */
600
600
  function fileUrlToPath(url) {
@@ -616,9 +616,12 @@ function getSrcType(filePathOrUrl) {
616
616
  }
617
617
  /**
618
618
  * Supports both Header type and Record<string, string> type
619
+ *
619
620
  * @param headers Headers object or record from a fetch response
620
621
  * @param headerKeys Headers to include in the string
621
- * @returns a concatenated string of the header contents, suitable for hashing, or undefined if no matching headers are present
622
+ *
623
+ * @returns A concatenated string of the header contents, suitable for hashing,
624
+ * or undefined if no matching headers are present
622
625
  */
623
626
  function getHeadersString(headers, headerKeys) {
624
627
  if (headers === void 0) return;
@@ -671,11 +674,11 @@ async function getFileExtensionFromUrl(url, fetchAdapter, mode = MEDIA_URL_CONTE
671
674
  *
672
675
  * - `filename`: Use the filename of the media asset, no network required.
673
676
  * - `metadata`: Use the metadata of the media asset, either fstat stuff for
674
- * files, or reading the headers for URLs... requires a network request for
675
- * remote urls. Falls through to `filename` if not available.
676
- * - `content`: Actually read the content of the media asset, requires reading
677
- * the file or fetching the URL. Not yet implemented. Falls through to
678
- * `metadata` if not available.
677
+ * files, or reading the headers for URLs... requires a network request for
678
+ * remote urls. Falls through to `filename` if not available.
679
+ * - `content`: Actually read the content of the media asset, requires reading the
680
+ * file or fetching the URL. Not yet implemented. Falls through to `metadata`
681
+ * if not available.
679
682
  */
680
683
  async function getUrlContentHash(url, fetchAdapter, mode = MEDIA_DEFAULT_HASH_MODE_URL) {
681
684
  switch (mode) {
@@ -706,13 +709,15 @@ function urlToHostAndPort(url) {
706
709
  function hostAndPortToUrl(host, port) {
707
710
  return `${host}:${port}`;
708
711
  }
709
-
710
712
  //#endregion
711
713
  //#region src/lib/utilities/media.ts
712
714
  /**
713
715
  * Get the extension of a media file, if it's supported
714
- * @returns Extension without the `.`, possibly an extra string if no extension is found
716
+ *
717
+ * @returns Extension without the `.`, possibly an extra string if no extension
718
+ * is found
715
719
  * @todo Check for how it handles query strings
720
+ *
716
721
  * @todo Clean up type casting
717
722
  */
718
723
  async function getAnkiMediaFilenameExtension(pathOrUrl, fetchAdapter) {
@@ -720,16 +725,6 @@ async function getAnkiMediaFilenameExtension(pathOrUrl, fetchAdapter) {
720
725
  if (extensionCandidate === void 0 || !MEDIA_SUPPORTED_EXTENSIONS.includes(extensionCandidate)) return;
721
726
  return extensionCandidate;
722
727
  }
723
- function getLegibleFilename(pathOrUrl, maxLength) {
724
- let legibleFilename;
725
- const parsedUrl = safeParseUrl(pathOrUrl);
726
- if (parsedUrl === void 0) {
727
- const filePath = pathOrUrl;
728
- legibleFilename = path.basename(filePath, path.extname(filePath));
729
- } else legibleFilename = path.basename(parsedUrl.pathname, path.extname(parsedUrl.pathname));
730
- if (legibleFilename === void 0) throw new Error(`Could not create a legible file name for: ${pathOrUrl}`);
731
- return truncateOnWordBoundary(slugify(legibleFilename.trim()).replaceAll(/-+/g, "-"), maxLength, "...", "-");
732
- }
733
728
  /**
734
729
  * Check if a media asset exists
735
730
  */
@@ -738,8 +733,8 @@ async function mediaAssetExists(absolutePathOrUrl, fileAdapter, fetchAdapter) {
738
733
  return fileExists(absolutePathOrUrl, fileAdapter);
739
734
  }
740
735
  /**
741
- * Get a safe filename for an Anki media asset
742
- * Anki truncates long file names... so we crush the complete path down to a hash
736
+ * Get a safe filename for an Anki media asset Anki truncates long file names...
737
+ * so we crush the complete path down to a hash
743
738
  */
744
739
  async function getSafeAnkiMediaFilename(absolutePathOrUrl, namespace, fileExtension, fileAdapter, fetchAdapter) {
745
740
  if (!await mediaAssetExists(absolutePathOrUrl, fileAdapter, fetchAdapter)) return;
@@ -747,17 +742,19 @@ async function getSafeAnkiMediaFilename(absolutePathOrUrl, namespace, fileExtens
747
742
  const assetHash = await getContentHash(absolutePathOrUrl, fileAdapter, fetchAdapter);
748
743
  const resolvedFileExtension = fileExtension === void 0 ? "" : `.${fileExtension}`;
749
744
  let safeFilename;
750
- if (MEDIA_INCLUDE_LEGIBLE_FILENAME) safeFilename = `${safeNamespace}-${assetHash}-${getLegibleFilename(absolutePathOrUrl, MEDIA_FILENAME_MAX_LENGTH - (safeNamespace.length + 1 + assetHash.length + 1 + resolvedFileExtension.length))}${resolvedFileExtension}`;
751
- else safeFilename = `${safeNamespace}-${assetHash}${resolvedFileExtension}`;
752
- if (safeFilename.length > MEDIA_FILENAME_MAX_LENGTH) throw new Error(`Filename too long: ${safeFilename}`);
745
+ safeFilename = `${safeNamespace}-${assetHash}${resolvedFileExtension}`;
746
+ if (safeFilename.length > 120) throw new Error(`Filename too long: ${safeFilename}`);
753
747
  return safeFilename;
754
748
  }
755
749
  async function getContentHash(absolutePathOrUrl, fileAdapter, fetchAdapter) {
756
750
  return isUrl(absolutePathOrUrl) ? getUrlContentHash(absolutePathOrUrl, fetchAdapter) : getFileContentHash(absolutePathOrUrl, fileAdapter);
757
751
  }
758
-
759
752
  //#endregion
760
753
  //#region src/lib/parse/rehype-mathjax-anki.ts
754
+ const CONSECUTIVE_BRACES_REGEX = /([{}])(?=[{}])/g;
755
+ function sanitizeBraces(value) {
756
+ return value.replaceAll(CONSECUTIVE_BRACES_REGEX, "$1 ");
757
+ }
761
758
  /**
762
759
  * Non-rendering replacement for the `rehype-mathjax` plugin, which takes output
763
760
  * from `remark-math` and wraps it in Anki-specific syntax.
@@ -776,6 +773,7 @@ const plugin$3 = function() {
776
773
  if (node.tagName === "code" && Array.isArray(node.properties.className) && node.properties.className.includes("language-math")) {
777
774
  const isBlock = node.properties.className.includes("math-display") || fenced;
778
775
  fenced = false;
776
+ for (const child of node.children) if (child.type === "text") child.value = sanitizeBraces(child.value);
779
777
  node.tagName = isBlock ? "div" : "span";
780
778
  node.children = [
781
779
  {
@@ -792,7 +790,6 @@ const plugin$3 = function() {
792
790
  });
793
791
  };
794
792
  };
795
-
796
793
  //#endregion
797
794
  //#region src/lib/parse/remark-conditional-breaks.ts
798
795
  const plugin$2 = function() {
@@ -804,9 +801,9 @@ const plugin$2 = function() {
804
801
  return tree;
805
802
  };
806
803
  };
807
-
808
804
  //#endregion
809
805
  //#region src/lib/parse/rehype-utilities.ts
806
+ const DIMENSION_CHARS_REGEX = /^[\dx]+$/;
810
807
  const processor = unified().use(plugin$2).use(remarkRehype, { allowDangerousHtml: true }).use(rehypeRaw).use(plugin$3).use(rehypeShiki, {
811
808
  defaultLanguage: "plaintext",
812
809
  fallbackLanguage: "plaintext",
@@ -957,7 +954,7 @@ function parseDimensionsFromAltText(alt) {
957
954
  };
958
955
  }
959
956
  function parseDimensions(dimensions) {
960
- if (!/^[\dx]+$/.test(dimensions)) return {
957
+ if (!DIMENSION_CHARS_REGEX.test(dimensions)) return {
961
958
  width: void 0,
962
959
  height: void 0
963
960
  };
@@ -976,7 +973,9 @@ function parseDimensions(dimensions) {
976
973
  }
977
974
  /**
978
975
  * Determine if a HAST tree is visually empty.
976
+ *
979
977
  * @param tree - The HAST tree to check.
978
+ *
980
979
  * @returns - True if the tree is visually empty, otherwise false.
981
980
  */
982
981
  function isVisuallyEmpty(tree) {
@@ -1013,10 +1012,12 @@ function isVisuallyEmpty(tree) {
1013
1012
  return !hasVisualContent;
1014
1013
  }
1015
1014
  /**
1016
- * Add a first child to the first div element in a HAST tree.
1017
- * Intended for use with the "div-wrapped" HAST tree generated early in `mdastToHtml`.
1015
+ * Add a first child to the first div element in a HAST tree. Intended for use
1016
+ * with the "div-wrapped" HAST tree generated early in `mdastToHtml`.
1017
+ *
1018
1018
  * @param tree - The HAST tree to modify in place.
1019
1019
  * @param newChild - The new child node to add.
1020
+ *
1020
1021
  * @returns - The modified-in-place HAST tree.
1021
1022
  */
1022
1023
  function addFirstChildToFirstDiv(tree, newChild) {
@@ -1028,7 +1029,6 @@ function addFirstChildToFirstDiv(tree, newChild) {
1028
1029
  });
1029
1030
  return tree;
1030
1031
  }
1031
-
1032
1032
  //#endregion
1033
1033
  //#region src/lib/model/model.ts
1034
1034
  const yankiModels = [
@@ -1093,7 +1093,6 @@ const yankiModels = [
1093
1093
  ];
1094
1094
  const yankiModelNames = yankiModels.map((model) => model.modelName);
1095
1095
  const legacyYankiModelNames = ["Yanki - Basic (and reversed card)"];
1096
-
1097
1096
  //#endregion
1098
1097
  //#region src/lib/utilities/anki-connect.ts
1099
1098
  async function deleteNotes(client, notes, dryRun = false) {
@@ -1108,9 +1107,12 @@ async function deleteNotes(client, notes, dryRun = false) {
1108
1107
  *
1109
1108
  * Duplicates will be created if present in the source. It's up to the user to
1110
1109
  * manage their Markdown files as they like.
1110
+ *
1111
1111
  * @param client An instance of YankiConnect
1112
1112
  * @param note The note to add
1113
- * @param dryRun If true, the note will not be created and an ID of 0 will be returned
1113
+ * @param dryRun If true, the note will not be created and an ID of 0 will be
1114
+ * returned
1115
+ *
1114
1116
  * @returns The ID of the newly created note in Anki
1115
1117
  * @throws {Error}
1116
1118
  */
@@ -1142,11 +1144,14 @@ async function addNote(client, note, dryRun, fileAdapter) {
1142
1144
  }
1143
1145
  /**
1144
1146
  * Updates a note in Anki.
1147
+ *
1145
1148
  * @param client An instance of YankiConnect
1146
1149
  * @param localNote A note read from a markdown file
1147
1150
  * @param remoteNote A note loaded from Anki
1151
+ *
1148
1152
  * @returns True if the note was updated, false otherwise.
1149
- * @throws {Error} If the local note ID or remote note cards are undefined, or if model/deck errors occur.
1153
+ * @throws {Error} If the local note ID or remote note cards are undefined, or
1154
+ * if model/deck errors occur.
1150
1155
  */
1151
1156
  async function updateNote(client, localNote, remoteNote, dryRun, fileAdapter) {
1152
1157
  if (localNote.noteId === void 0) throw new Error("Local note ID is undefined");
@@ -1185,6 +1190,7 @@ async function updateNote(client, localNote, remoteNote, dryRun, fileAdapter) {
1185
1190
  }
1186
1191
  /**
1187
1192
  * Helper to compare local and remote field contents.
1193
+ *
1188
1194
  * @returns True if the fields are equal, false otherwise.
1189
1195
  */
1190
1196
  function areFieldsEqual(localFields, remoteFields) {
@@ -1206,14 +1212,14 @@ function areNotesEqual(noteA, noteB, includeId = true) {
1206
1212
  return true;
1207
1213
  }
1208
1214
  /**
1209
- * Helper function to compare two arrays of tags.
1210
- * Note some nuances around case insensitivity as discussed here:
1211
- * https://github.com/kitschpatrol/yanki-obsidian/issues/44
1212
- * Anki will alphabetically sort tags, so we sort as well.
1213
- * Duplicate tags are ignored in Anki, so we ignore them here:
1214
- * ['yes', 'yes'] is considered equal to ['yes'].
1215
- * Tags in different orders are considered equal:
1216
- * ['yes', 'no'] is considered equal to ['no', 'yes'].
1215
+ * Helper function to compare two arrays of tags. Note some nuances around case
1216
+ * insensitivity as discussed here:
1217
+ * https://github.com/kitschpatrol/yanki-obsidian/issues/44 Anki will
1218
+ * alphabetically sort tags, so we sort as well. Duplicate tags are ignored in
1219
+ * Anki, so we ignore them here: ['yes', 'yes'] is considered equal to ['yes'].
1220
+ * Tags in different orders are considered equal: ['yes', 'no'] is considered
1221
+ * equal to ['no', 'yes'].
1222
+ *
1217
1223
  * @returns True if the tags are equal, false otherwise.
1218
1224
  */
1219
1225
  function areTagsEqual(localTags, remoteTags) {
@@ -1223,8 +1229,11 @@ function areTagsEqual(localTags, remoteTags) {
1223
1229
  }
1224
1230
  /**
1225
1231
  * Get all notes from Anki that match the model prefix.
1232
+ *
1226
1233
  * @param client An instance of YankiConnect
1227
- * @param namespace The value of the YankiNamespace field, or search with '*' to get all notes. Defaults to the global default namespace.
1234
+ * @param namespace The value of the YankiNamespace field, or search with '*' to
1235
+ * get all notes. Defaults to the global default namespace.
1236
+ *
1228
1237
  * @returns An array of YankiNote objects
1229
1238
  * @throws {Error}
1230
1239
  */
@@ -1235,14 +1244,19 @@ async function getRemoteNotes(client, namespace = defaultGlobalOptions.namespace
1235
1244
  * Get all data from Anki required to populate the YankiNote type.
1236
1245
  *
1237
1246
  * Handles some extra footwork to identify the deck name and validate the model
1238
- * name. There's no way to get everything we need in one shot from Anki-Connect.
1247
+ * name. There's no way to get everything we need in one shot from
1248
+ * Anki-Connect.
1239
1249
  *
1240
1250
  * Undefined elements in the returned array are subsequently used to identify
1241
1251
  * notes that need to be created.
1252
+ *
1242
1253
  * @param client An instance of YankiConnect
1243
1254
  * @param noteIds An array of local note IDs to (attempt) to fetch
1244
- * @returns Array of YankiNote objects, with undefined for notes that could not be found.
1245
- * @throws {Error} If an unknown model name or multiple decks are found for a note, or if no deck is found.
1255
+ *
1256
+ * @returns Array of YankiNote objects, with undefined for notes that could not
1257
+ * be found.
1258
+ * @throws {Error} If an unknown model name or multiple decks are found for a
1259
+ * note, or if no deck is found.
1246
1260
  */
1247
1261
  async function getRemoteNotesById(client, noteIds) {
1248
1262
  const ankiNotes = await client.note.notesInfo({ notes: noteIds });
@@ -1350,7 +1364,8 @@ async function deleteOrphanedDecks(client, activeNotes, originalNotes, dryRun) {
1350
1364
  return decksToDelete;
1351
1365
  }
1352
1366
  /**
1353
- * Global! Does not respect namespace. You can write namespace checks into your css if you want.
1367
+ * Global! Does not respect namespace. You can write namespace checks into your
1368
+ * css if you want.
1354
1369
  */
1355
1370
  async function updateModelStyle(client, modelName, css, dryRun) {
1356
1371
  let currentCss;
@@ -1382,6 +1397,7 @@ async function getModelStyle(client, modelName = yankiModelNames[0]) {
1382
1397
  }
1383
1398
  /**
1384
1399
  * Upload all media files for a note to Anki.
1400
+ *
1385
1401
  * @returns Original source name of media files uploaded
1386
1402
  */
1387
1403
  async function uploadMediaForNote(client, note, dryRun, fileAdapter) {
@@ -1455,7 +1471,9 @@ async function reconcileMedia(client, liveNotes, namespace, dryRun, fileAdapter)
1455
1471
  }
1456
1472
  /**
1457
1473
  * Request permission to access Anki through Anki-Connect.
1458
- * @returns 'ankiUnreachable' if Anki is not open, or 'granted' if everything is copacetic
1474
+ *
1475
+ * @returns 'ankiUnreachable' if Anki is not open, or 'granted' if everything is
1476
+ * copacetic
1459
1477
  * @throws {Error} If access is denied
1460
1478
  */
1461
1479
  async function requestPermission(client) {
@@ -1475,7 +1493,6 @@ async function syncToAnkiWeb(client) {
1475
1493
  console.warn("Could not sync to AnkiWeb.");
1476
1494
  }
1477
1495
  }
1478
-
1479
1496
  //#endregion
1480
1497
  //#region src/lib/actions/clean.ts
1481
1498
  const defaultCleanOptions = { ...defaultGlobalOptions };
@@ -1483,8 +1500,10 @@ const defaultCleanOptions = { ...defaultGlobalOptions };
1483
1500
  * Deletes all remote notes in Anki associated with the given namespace.
1484
1501
  *
1485
1502
  * Use with significant caution. Mostly useful for testing.
1503
+ *
1486
1504
  * @returns The IDs of the notes that were deleted
1487
- * @throws {Error} If Anki is unreachable or another error occurs during deletion.
1505
+ * @throws {Error} If Anki is unreachable or another error occurs during
1506
+ * deletion.
1488
1507
  */
1489
1508
  async function cleanNotes(options) {
1490
1509
  const startTime = performance.now();
@@ -1497,7 +1516,7 @@ async function cleanNotes(options) {
1497
1516
  const deletedDecks = await deleteOrphanedDecks(client, [], remoteNotes, dryRun);
1498
1517
  const { deleted: deletedMedia } = await reconcileMedia(client, [], sanitizedNamespace, dryRun);
1499
1518
  const isChanged = remoteNotes.length > 0 || deletedDecks.length > 0;
1500
- if (!dryRun && ankiWeb && (isChanged || SYNC_TO_ANKI_WEB_EVEN_IF_UNCHANGED)) await syncToAnkiWeb(client);
1519
+ if (!dryRun && ankiWeb && (isChanged || true)) await syncToAnkiWeb(client);
1501
1520
  return {
1502
1521
  ankiWeb,
1503
1522
  deletedDecks,
@@ -1533,7 +1552,6 @@ function formatCleanResult(result, verbose = false) {
1533
1552
  }
1534
1553
  return lines.join("\n");
1535
1554
  }
1536
-
1537
1555
  //#endregion
1538
1556
  //#region src/lib/actions/list.ts
1539
1557
  const defaultListOptions = { ...defaultGlobalOptions };
@@ -1562,9 +1580,10 @@ function formatListResult(result) {
1562
1580
  }
1563
1581
  return lines.join("\n");
1564
1582
  }
1565
-
1566
1583
  //#endregion
1567
1584
  //#region src/lib/utilities/filenames.ts
1585
+ const CLOZE_CONTENT_REGEX = /\{\{\w\d*\s?:{0,2}([^:}]+)/;
1586
+ const FILENAME_INCREMENT_SUFFIX_REGEX = /\s\(\d+\)$/;
1568
1587
  function getSafeTitleForNote(note, manageFilenames, maxLength) {
1569
1588
  if (manageFilenames === "off") throw new Error("manageFilenames must not be off");
1570
1589
  switch (note.modelName) {
@@ -1581,7 +1600,7 @@ function getSafeTitleForNote(note, manageFilenames, maxLength) {
1581
1600
  case "Yanki - Cloze": {
1582
1601
  const cleanFront = getAllLinesOfHtmlAsPlainText(note.fields.Front);
1583
1602
  const textBeforeCloze = emptyIsUndefined(cleanFront.split("{{").at(0) ?? "");
1584
- const firstClozeText = emptyIsUndefined(/\{\{\w\d*\s?:{0,2}([^:}]+)/.exec(cleanFront)?.at(1));
1603
+ const firstClozeText = emptyIsUndefined(CLOZE_CONTENT_REGEX.exec(cleanFront)?.at(1));
1585
1604
  const textAfterCloze = emptyIsUndefined(cleanFront.split("}}").at(1)?.split("{{").at(0) ?? "");
1586
1605
  switch (manageFilenames) {
1587
1606
  case "prompt": return getSafeFilename(textBeforeCloze ?? textAfterCloze ?? firstClozeText ?? "", maxLength);
@@ -1592,8 +1611,11 @@ function getSafeTitleForNote(note, manageFilenames, maxLength) {
1592
1611
  }
1593
1612
  /**
1594
1613
  * Get a safe filename for a media asset
1614
+ *
1595
1615
  * @param text Text to be converted to a safe filename
1596
- * @param maxLength If undefined, no truncation will take place. If defined, a maximum maximum length of the filename will be enforced.
1616
+ * @param maxLength If undefined, no truncation will take place. If defined, a
1617
+ * maximum maximum length of the filename will be enforced.
1618
+ *
1597
1619
  * @returns A safe filename
1598
1620
  */
1599
1621
  function getSafeFilename(text, maxLength) {
@@ -1604,8 +1626,7 @@ function getSafeFilename(text, maxLength) {
1604
1626
  if (basicSafeFilename.length === 0) basicSafeFilename = MEDIA_DEFAULT_EMPTY_FILENAME;
1605
1627
  basicSafeFilename = basicSafeFilename.normalize("NFC");
1606
1628
  if (maxLength === void 0) return basicSafeFilename;
1607
- const safeMaxLength = Math.min(maxLength, MEDIA_FILENAME_MAX_LENGTH - 12);
1608
- return truncateOnWordBoundary(basicSafeFilename, safeMaxLength);
1629
+ return truncateOnWordBoundary(basicSafeFilename, Math.min(maxLength, 108));
1609
1630
  }
1610
1631
  function getUniqueFilePath(filePath, existingFilenames) {
1611
1632
  let newFilePath = appendFilenameIncrement(filePath, 1);
@@ -1623,12 +1644,15 @@ function auditUniqueFilePath(filePath, existingFilenames) {
1623
1644
  }
1624
1645
  /**
1625
1646
  * Strip the trailing increment from a filename
1626
- * @param filename File name with or without an extension, and possibly with a (1)
1627
- * @returns filename without the increment
1647
+ *
1648
+ * @param filename File name with or without an extension, and possibly with a
1649
+ * (1)
1650
+ *
1651
+ * @returns Filename without the increment
1628
1652
  */
1629
1653
  function stripFilenameIncrement(filename) {
1630
1654
  const validExtension = filename.endsWith(".") || filename.endsWith(")") ? void 0 : path.extname(filename);
1631
- const strippedBaseNameWithoutExtension = path.basename(filename, validExtension).replace(/\s\(\d+\)$/, "");
1655
+ const strippedBaseNameWithoutExtension = path.basename(filename, validExtension).replace(FILENAME_INCREMENT_SUFFIX_REGEX, "");
1632
1656
  return path.join(path.dirname(filename), `${strippedBaseNameWithoutExtension}${validExtension ?? ""}`);
1633
1657
  }
1634
1658
  function appendFilenameIncrement(filename, value) {
@@ -1639,9 +1663,9 @@ function appendFilenameIncrement(filename, value) {
1639
1663
  function getTemporarilyUniqueFilePath(filePath) {
1640
1664
  return `${filePath}-${nanoid(8)}`;
1641
1665
  }
1642
-
1643
1666
  //#endregion
1644
1667
  //#region src/lib/utilities/resolve-link.ts
1668
+ const MD_EXTENSION_REGEX = /\.md$/;
1645
1669
  const defaultResolveLinkOptions = {
1646
1670
  allFilePaths: [],
1647
1671
  basePath: void 0,
@@ -1651,27 +1675,31 @@ const defaultResolveLinkOptions = {
1651
1675
  /**
1652
1676
  * Resolve a file path, URL, or wiki-style named links to an absolute path.
1653
1677
  *
1654
- * Warning:
1655
- * Wiki name link resolution is CASE INSENSITIVE, like in Obsidian, though
1656
- * the case of the matching file will be preserved in the returned path.
1678
+ * Warning: Wiki name link resolution is CASE INSENSITIVE, like in Obsidian,
1679
+ * though the case of the matching file will be preserved in the returned path.
1680
+ *
1657
1681
  * @param filePathOrUrl May be one of:
1658
- * - Wiki named link
1659
- * - Relative file path
1660
- * - Bare file path
1661
- * - Absolute file path
1662
- * - HTTP protocol URL string
1663
- * - File protocol URL string
1664
- * - Obsidian protocol URL string
1665
- * (All file paths can be Windows or POSIX, with or without URI encoding, with
1666
- * or without funky Obsidian-style post-extension block and heading anchor
1667
- * additions.)
1682
+ *
1683
+ * - Wiki named link
1684
+ * - Relative file path
1685
+ * - Bare file path
1686
+ * - Absolute file path
1687
+ * - HTTP protocol URL string
1688
+ * - File protocol URL string
1689
+ * - Obsidian protocol URL string (All file paths can be Windows or POSIX, with or
1690
+ * without URI encoding, with or without funky Obsidian-style
1691
+ * post-extension block and heading anchor additions.)
1692
+ *
1693
+ *
1668
1694
  * @returns Resolved absolute path or URL One of:
1669
- * - Resolved absolute POSIX-style paths
1695
+ *
1696
+ * - Resolved absolute POSIX-style paths
1670
1697
  * - Removes any file path query parameters
1671
1698
  * - Not URI-encoded
1672
1699
  * - Retains original case
1673
- * - HTTP protocol URL
1674
- * - Obsidian protocol vault URL (Optionally, this will include file query parameters)
1700
+ * - HTTP protocol URL
1701
+ * - Obsidian protocol vault URL (Optionally, this will include file query
1702
+ * parameters)
1675
1703
  */
1676
1704
  function resolveLink(filePathOrUrl, options) {
1677
1705
  const { allFilePaths, basePath, convertFilePathsToProtocol, cwd, obsidianVaultName, type } = deepmerge(defaultResolveLinkOptions, options ?? {});
@@ -1736,27 +1764,30 @@ function resolveLink(filePathOrUrl, options) {
1736
1764
  *
1737
1765
  * See Obsidian's `getFirstLinkpathDest()` for a roughly equivalent algorithm.
1738
1766
  *
1739
- * Obsidian seems to treat note links slightly differently from image / asset links.
1767
+ * Obsidian seems to treat note links slightly differently from image / asset
1768
+ * links.
1769
+ *
1740
1770
  * @param name Non-URI-encoded name of the file, may have file extension, if no
1741
- * match with a non-.md extension is found, a match will be attempted with .md
1742
- * regardless. (POSIX-style paths.)
1771
+ * match with a non-.md extension is found, a match will be attempted with .md
1772
+ * regardless. (POSIX-style paths.)
1743
1773
  * @param cwd Absolute path to the current working directory of the file from
1744
- * which we're resolving the link. (POSIX-style paths)
1774
+ * which we're resolving the link. (POSIX-style paths)
1745
1775
  * @param allFilePaths Array of absolute paths to all other files in the paths
1746
- * to be considered. (POSIX-style paths.)
1776
+ * to be considered. (POSIX-style paths.)
1777
+ *
1747
1778
  * @returns Absolute path to the best matching file with the name provided, or
1748
- * undefined if there's no valid match. (POSIX-style paths.)
1779
+ * undefined if there's no valid match. (POSIX-style paths.)
1749
1780
  */
1750
1781
  function resolveNameLink(name, cwd, allFilePaths) {
1751
1782
  if (allFilePaths.length === 0) return;
1752
1783
  const [base, query] = getBaseAndQueryParts(name);
1753
- const baseWithoutMd = base.replace(/\.md$/, "").toLowerCase();
1784
+ const baseWithoutMd = base.replace(MD_EXTENSION_REGEX, "").toLowerCase();
1754
1785
  const pathsToName = allFilePaths.filter((filePath) => {
1755
- return filePath.replace(/\.md$/, "").toLowerCase().endsWith(baseWithoutMd);
1786
+ return filePath.replace(MD_EXTENSION_REGEX, "").toLowerCase().endsWith(baseWithoutMd);
1756
1787
  });
1757
1788
  if (pathsToName.length === 0) return;
1758
1789
  if (pathsToName.length === 1) return `${pathsToName[0]}${query ?? ""}`;
1759
- return `${[...pathsToName].sort((a, b) => {
1790
+ return `${pathsToName.toSorted((a, b) => {
1760
1791
  if (!base.endsWith(".md") || base.includes(path.sep)) {
1761
1792
  const aHasCwd = a.startsWith(cwd);
1762
1793
  if (aHasCwd !== b.startsWith(cwd)) return aHasCwd ? -1 : 1;
@@ -1770,10 +1801,13 @@ function resolveNameLink(name, cwd, allFilePaths) {
1770
1801
  /**
1771
1802
  * Check for presence of a path in a list in a case- and query- agnostic manner.
1772
1803
  * Ignores .md extensions to simplify matching files
1804
+ *
1773
1805
  * @param filePath File path with file extension. (POSIX-style path.)
1774
- * @param allFilePaths Array of absolute file paths to check. (POSIX-style paths.)
1806
+ * @param allFilePaths Array of absolute file paths to check. (POSIX-style
1807
+ * paths.)
1808
+ *
1775
1809
  * @returns The file path if it is present in the list of all file paths, or
1776
- * undefined if it is not.
1810
+ * undefined if it is not.
1777
1811
  */
1778
1812
  function pathExistsInAllFiles(filePath, allFilePaths) {
1779
1813
  const base = getBase(filePath);
@@ -1786,7 +1820,6 @@ function createObsidianVaultLink(absolutePath, basePath, obsidianVault) {
1786
1820
  const relativePath = stripBasePath(absolutePath, basePath);
1787
1821
  return `obsidian://open?vault=${encodeURIComponent(obsidianVault)}&file=${encodeURIComponent(relativePath)}`;
1788
1822
  }
1789
-
1790
1823
  //#endregion
1791
1824
  //#region src/lib/parse/remark-resolve-links.ts
1792
1825
  const plugin$1 = function(options) {
@@ -1827,7 +1860,6 @@ const plugin$1 = function(options) {
1827
1860
  });
1828
1861
  };
1829
1862
  };
1830
-
1831
1863
  //#endregion
1832
1864
  //#region src/lib/parse/wiki-basic/mdast-util-wiki-basic.ts
1833
1865
  function wikiBasicFromMarkdown() {
@@ -1893,7 +1925,6 @@ function wikiBasicFromMarkdown() {
1893
1925
  this.exit(token);
1894
1926
  }
1895
1927
  }
1896
-
1897
1928
  //#endregion
1898
1929
  //#region src/lib/parse/wiki-basic/micromark-extension-wiki-basic.ts
1899
1930
  function wikiBasic() {
@@ -1985,9 +2016,9 @@ function wikiBasic() {
1985
2016
  return insideLabel;
1986
2017
  }
1987
2018
  /**
1988
- * When encountering a right square bracket, we must look ahead at the next character
1989
- * to determine whether it indicates the end of the [[wikilink]] or is
1990
- * simply part of the label text.
2019
+ * When encountering a right square bracket, we must look ahead at the next
2020
+ * character to determine whether it indicates the end of the [[wikilink]]
2021
+ * or is simply part of the label text.
1991
2022
  */
1992
2023
  function lookaheadClosingMarker(code) {
1993
2024
  if (code !== 93) return nok(code);
@@ -2095,7 +2126,6 @@ function wikiBasic() {
2095
2126
  }
2096
2127
  }
2097
2128
  }
2098
-
2099
2129
  //#endregion
2100
2130
  //#region src/lib/parse/wiki-basic/remark-wiki-basic.ts
2101
2131
  /**
@@ -2106,12 +2136,12 @@ function wikiBasic() {
2106
2136
  *
2107
2137
  * Obsidian also supports wiki links in Markdown-style image and link syntax, so
2108
2138
  * handling resolution here would miss those cases, so:
2139
+ *
2109
2140
  * - Resolution of wiki link into absolute paths happens later in
2110
2141
  * remark-resolve-links.ts
2111
2142
  * - Parsing of Obsidian-style image size from alias / alt text happens later in
2112
2143
  * rehype-utilities.ts
2113
2144
  *
2114
- *
2115
2145
  * Note that only wiki links support spaces in the src, regular markdown links
2116
2146
  * MUST be URI-encoded in the Markdown source Here, we URI-encode for
2117
2147
  * consistency with the regular image syntax in the resulting HAST `<>` escaped
@@ -2124,9 +2154,9 @@ const plugin = function() {
2124
2154
  data.micromarkExtensions = [...data.micromarkExtensions ?? [], wikiBasic()];
2125
2155
  data.fromMarkdownExtensions = [...data.fromMarkdownExtensions ?? [], wikiBasicFromMarkdown()];
2126
2156
  };
2127
-
2128
2157
  //#endregion
2129
2158
  //#region src/lib/parse/remark-utilities.ts
2159
+ const CLOZE_NUMBER_PREFIX_REGEX = /^[(|]?(\d{1,2})(?:[\s).|]|$)(.*)$/;
2130
2160
  const defaultAstFromMarkdownOptions = { ...defaultGlobalOptions };
2131
2161
  async function getAstFromMarkdown(markdown, options) {
2132
2162
  const { allFilePaths, basePath, cwd, obsidianVault, resolveUrls } = deepmerge(defaultAstFromMarkdownOptions, options ?? {});
@@ -2156,13 +2186,16 @@ function deleteFirstNodeOfType(tree, nodeType) {
2156
2186
  return tree;
2157
2187
  }
2158
2188
  /**
2159
- * Trims all leading spaces from the first text node and all trailing spaces from
2160
- * the last text node in an array of phrasing content nodes.
2189
+ * Trims all leading spaces from the first text node and all trailing spaces
2190
+ * from the last text node in an array of phrasing content nodes.
2161
2191
  *
2162
2192
  * This is useful in cases where surrounding white space in text nodes is not
2163
2193
  * necessary and should be removed to clean up the content.
2194
+ *
2164
2195
  * @param nodes - An array of phrasing content nodes.
2165
- * @returns The modified array of nodes with leading and trailing spaces trimmed.
2196
+ *
2197
+ * @returns The modified array of nodes with leading and trailing spaces
2198
+ * trimmed.
2166
2199
  */
2167
2200
  function trimLeadingAndTrailingSpaces(nodes) {
2168
2201
  const firstNode = nodes.at(0);
@@ -2182,7 +2215,7 @@ function replaceDeleteNodesWithClozeMarkup(ast) {
2182
2215
  visit(ast, "delete", (node, index, parent) => {
2183
2216
  if (parent === void 0 || index === void 0 || !("children" in node) || node.children.length === 0) return CONTINUE;
2184
2217
  if (node.children.length > 0 && isText(node.children[0])) {
2185
- const result = /^[(|]?(\d{1,2})(?:[\s).|]|$)(.*)$/.exec(node.children[0].value);
2218
+ const result = CLOZE_NUMBER_PREFIX_REGEX.exec(node.children[0].value);
2186
2219
  if (result !== null && (node.children.length > 1 || (result.at(2) ?? "").length > 0)) {
2187
2220
  const possibleClozeIndex = Number.parseInt(result.at(1) ?? "", 10);
2188
2221
  if (!Number.isNaN(possibleClozeIndex)) {
@@ -2304,7 +2337,6 @@ function removeLastEmphasis(ast) {
2304
2337
  return lastEmphasisNode;
2305
2338
  }
2306
2339
  }
2307
-
2308
2340
  //#endregion
2309
2341
  //#region src/lib/parse/parse.ts
2310
2342
  const defaultGetNoteFromMarkdownOptions = {
@@ -2463,10 +2495,24 @@ async function getNoteFromMarkdown(markdown, options) {
2463
2495
  tags: obsidianTagsToAnkiTags(frontmatter.tags)
2464
2496
  };
2465
2497
  }
2498
+ /**
2499
+ * Obsidian delimits nested tags with a `/`
2500
+ *
2501
+ * Anki delimits nested tags with `::`
2502
+ *
2503
+ * '' and `:` are not permitted in Obsidian tags
2504
+ *
2505
+ * Curiously, Obsidian allows just `/` and `this//////that` as valid tags,
2506
+ * though `/` tags are broken. Fixes
2507
+ * https://github.com/kitschpatrol/yanki-obsidian/issues/20
2508
+ *
2509
+ * We also force coercion to an array of strings (even though non-string tag
2510
+ * values shouldn't really be allowed in the first place) to handle edge cases
2511
+ * like https://github.com/kitschpatrol/yanki/issues/12
2512
+ */
2466
2513
  function obsidianTagsToAnkiTags(tags) {
2467
- return (typeof tags === "string" ? [tags] : tags ?? []).map((tag) => tag.replaceAll("/", "::"));
2514
+ return (Array.isArray(tags) ? tags : tags === void 0 ? [] : [tags]).map((tag) => String(tag).replaceAll("/", "::"));
2468
2515
  }
2469
-
2470
2516
  //#endregion
2471
2517
  //#region src/lib/actions/load-local-notes.ts
2472
2518
  const defaultLoadOptions = { ...defaultGlobalOptions };
@@ -2500,29 +2546,29 @@ async function loadLocalNotes(allLocalFilePaths, options) {
2500
2546
  }
2501
2547
  const defaultDeckNamesFromFilePathsOptions = { mode: "common-root" };
2502
2548
  /**
2503
- * Helper function to infer deck names from file paths if `deckName` not defined in the note's frontmatter.
2549
+ * Helper function to infer deck names from file paths if `deckName` not defined
2550
+ * in the note's frontmatter.
2504
2551
  *
2505
2552
  * `deckName` will always override the inferred deck name.
2506
2553
  *
2507
2554
  * Depends on the context of _all_ file paths passed to `syncNoteFiles`.
2508
2555
  *
2509
- * Example of paths -> deck names with `common-root`:
2510
- * /base/foo/note.md -> foo
2556
+ * Example of paths -> deck names with `common-root`: /base/foo/note.md -> foo
2511
2557
  * /base/foo/baz/note.md -> foo::baz
2512
2558
  *
2513
- * Example of paths -> deck names with `common-root`:
2514
- * /base/foo/note.md -> foo
2559
+ * Example of paths -> deck names with `common-root`: /base/foo/note.md -> foo
2515
2560
  * /base/foo/note.md -> foo
2516
2561
  *
2517
- * Example of paths -> deck names with `common-parent`:
2518
- * /base/foo/note.md -> base::foo
2519
- * /base/foo/baz/note.md -> base::foo::baz
2562
+ * Example of paths -> deck names with `common-parent`: /base/foo/note.md ->
2563
+ * base::foo /base/foo/baz/note.md -> base::foo::baz
2520
2564
  *
2521
- * Example of paths -> deck names with `common-parent`:
2565
+ * Example of paths -> deck names with `common-parent`: /base/foo/note.md -> foo
2522
2566
  * /base/foo/note.md -> foo
2523
- * /base/foo/note.md -> foo
2524
- * @param absoluteFilePaths Absolute paths to all markdown Anki note files. (Ensures proper resolution if path module is polyfilled.)
2525
- * @returns array of ::-delimited deck paths
2567
+ *
2568
+ * @param absoluteFilePaths Absolute paths to all markdown Anki note files.
2569
+ * (Ensures proper resolution if path module is polyfilled.)
2570
+ *
2571
+ * @returns Array of ::-delimited deck paths
2526
2572
  */
2527
2573
  function getDeckNamesFromFilePaths(absoluteFilePaths, options) {
2528
2574
  const { mode } = deepmerge(defaultDeckNamesFromFilePathsOptions, options ?? {});
@@ -2535,7 +2581,6 @@ function getDeckNamesFromFilePaths(absoluteFilePaths, options) {
2535
2581
  const offset = mode === "common-parent" ? lastSegmentHasFile ? 1 : 1 : lastSegmentHasFile ? 1 : 0;
2536
2582
  return filePathSegments.map((pathSegments) => pathSegments.slice(commonPathSegments.length - offset).join("::"));
2537
2583
  }
2538
-
2539
2584
  //#endregion
2540
2585
  //#region src/lib/actions/rename.ts
2541
2586
  const defaultRenameNotesOptions = { ...defaultGlobalOptions };
@@ -2601,7 +2646,6 @@ async function renameFiles(allLocalFilePaths, options) {
2601
2646
  })
2602
2647
  };
2603
2648
  }
2604
-
2605
2649
  //#endregion
2606
2650
  //#region src/lib/actions/style.ts
2607
2651
  const defaultSetStyleOptions = {
@@ -2636,7 +2680,7 @@ async function setStyle(options) {
2636
2680
  });
2637
2681
  }
2638
2682
  const isChanged = modelsReport.some((model) => model.action !== "unchanged");
2639
- if (!dryRun && ankiWeb && (isChanged || SYNC_TO_ANKI_WEB_EVEN_IF_UNCHANGED)) await syncToAnkiWeb(client);
2683
+ if (!dryRun && ankiWeb && (isChanged || true)) await syncToAnkiWeb(client);
2640
2684
  return {
2641
2685
  ankiWeb,
2642
2686
  dryRun,
@@ -2661,26 +2705,27 @@ function formatSetStyleResult(result, verbose = false) {
2661
2705
  }
2662
2706
  return lines.join("\n");
2663
2707
  }
2664
-
2665
2708
  //#endregion
2666
2709
  //#region src/lib/model/frontmatter.ts
2710
+ const NEWLINE_REGEX = /\r?\n/;
2667
2711
  /**
2668
2712
  * Update the noteId in the frontmatter of a markdown string.
2669
2713
  *
2670
2714
  * Used when a noteId is received from Anki after creating a note.
2671
2715
  *
2672
- *
2673
2716
  * String manipulation is ugly, but it ensures that the markdown format is
2674
2717
  * preserved verbatim. Running it through the unified AST and then
2675
2718
  * remarkStringify would possibly change the format.
2719
+ *
2676
2720
  * @param markdown Raw markdown string with frontmatter.
2677
- * @param noteId The value to set the noteId to. If undefined, the noteId will
2678
- * be removed from the frontmatter. (Useful for testing.)
2721
+ * @param noteId The value to set the noteId to. If undefined, the noteId will
2722
+ * be removed from the frontmatter. (Useful for testing.)
2723
+ *
2679
2724
  * @returns Raw markdown string with updated frontmatter.
2680
2725
  */
2681
2726
  async function setNoteIdInFrontmatter(markdown, noteId) {
2682
2727
  const [frontmatterStart, frontmatterEnd] = getFrontmatterRange(markdown);
2683
- const lines = markdown.split(/\r?\n/);
2728
+ const lines = markdown.split(NEWLINE_REGEX);
2684
2729
  if (frontmatterStart === void 0 || frontmatterEnd === void 0) {
2685
2730
  if (noteId === void 0) return markdown;
2686
2731
  return [
@@ -2707,22 +2752,23 @@ async function setNoteIdInFrontmatter(markdown, noteId) {
2707
2752
  ].join("\n");
2708
2753
  }
2709
2754
  function getFrontmatterRange(markdown) {
2710
- const lines = markdown.split(/\r?\n/);
2755
+ const lines = markdown.split(NEWLINE_REGEX);
2711
2756
  if (!lines.join("").trim().startsWith("---")) return [void 0, void 0];
2712
2757
  const frontmatterStart = lines.findIndex((line) => line.startsWith("---"));
2713
2758
  const frontmatterEnd = lines.findIndex((line, index) => index > frontmatterStart && line.startsWith("---"));
2714
2759
  if (frontmatterStart === -1 || frontmatterEnd === -1) return [void 0, void 0];
2715
2760
  return [frontmatterStart, frontmatterEnd];
2716
2761
  }
2717
-
2718
2762
  //#endregion
2719
2763
  //#region src/lib/actions/sync-notes.ts
2720
2764
  const defaultSyncNotesOptions = { ...defaultGlobalOptions };
2721
2765
  /**
2722
2766
  * Syncs local notes to Anki.
2767
+ *
2723
2768
  * @param allLocalNotes All the YankiNotes to sync
2769
+ *
2724
2770
  * @returns The synced notes (with new IDs where applicable), plus some stats
2725
- * about the sync
2771
+ * about the sync
2726
2772
  * @throws {Error} For various reasons...
2727
2773
  */
2728
2774
  async function syncNotes(allLocalNotes, options) {
@@ -2810,12 +2856,13 @@ async function syncNotes(allLocalNotes, options) {
2810
2856
  } catch {
2811
2857
  fixedDatabase = true;
2812
2858
  await client.graphical.guiCheckDatabase();
2859
+ await client.miscellaneous.reloadCollection();
2813
2860
  }
2814
2861
  }
2815
2862
  }
2816
2863
  const { deleted: deletedMedia, reuploaded: reuploadedMedia } = await reconcileMedia(client, liveNotes, sanitizedNamespace, dryRun, fileAdapter ?? void 0);
2817
2864
  const isChanged = deletedDecks.length > 0 || synced.some((note) => note.action !== "unchanged");
2818
- if (!dryRun && ankiWeb && (isChanged || SYNC_TO_ANKI_WEB_EVEN_IF_UNCHANGED)) await syncToAnkiWeb(client);
2865
+ if (!dryRun && ankiWeb && (isChanged || true)) await syncToAnkiWeb(client);
2819
2866
  return {
2820
2867
  ankiWeb,
2821
2868
  deletedDecks,
@@ -2837,7 +2884,6 @@ function selectNoteToKeep(duplicates, remoteNote) {
2837
2884
  function findRemoteContentMatchId(localNote, remoteNotes, matchedIds) {
2838
2885
  return remoteNotes.find((remoteNote) => remoteNote.noteId !== void 0 && !matchedIds.has(remoteNote.noteId) && areNotesEqual(localNote, remoteNote, false))?.noteId ?? void 0;
2839
2886
  }
2840
-
2841
2887
  //#endregion
2842
2888
  //#region src/lib/actions/sync-files.ts
2843
2889
  const defaultSyncFilesOptions = {
@@ -2851,9 +2897,11 @@ const defaultSyncFilesOptions = {
2851
2897
  *
2852
2898
  * Most importantly, it updates the note IDs in the frontmatter of the local
2853
2899
  * files.
2900
+ *
2854
2901
  * @param allLocalFilePaths Array of paths to the local markdown files
2902
+ *
2855
2903
  * @returns The synced files (with new IDs where applicable), plus some stats
2856
- * about the sync
2904
+ * about the sync
2857
2905
  * @throws {Error} If syncing fails or file operations encounter an error.
2858
2906
  */
2859
2907
  async function syncFiles(allLocalFilePaths, options) {
@@ -2958,6 +3006,5 @@ function formatSyncFilesResult(result, verbose = false) {
2958
3006
  }
2959
3007
  return lines.join("\n");
2960
3008
  }
2961
-
2962
3009
  //#endregion
2963
- export { cleanNotes, defaultCleanOptions, defaultGetNoteFromMarkdownOptions, defaultGetStyleOptions, defaultListOptions, defaultRenameFilesOptions, defaultSetStyleOptions, defaultSyncFilesOptions, defaultSyncNotesOptions, formatCleanResult, formatListResult, formatSetStyleResult, formatSyncFilesResult, getNoteFromMarkdown, getStyle, hostAndPortToUrl, listNotes, renameFiles, setStyle, syncFiles, syncNotes, urlToHostAndPort };
3010
+ export { cleanNotes, defaultCleanOptions, defaultGetNoteFromMarkdownOptions, defaultGetStyleOptions, defaultListOptions, defaultRenameFilesOptions, defaultSetStyleOptions, defaultSyncFilesOptions, defaultSyncNotesOptions, formatCleanResult, formatListResult, formatSetStyleResult, formatSyncFilesResult, getNoteFromMarkdown, getStyle, hostAndPortToUrl, listNotes, renameFiles, setStyle, syncFiles, syncNotes, urlToHostAndPort };