@waniwani/sdk 0.1.20-beta.9 → 0.2.1
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.
- package/README.md +101 -52
- package/dist/abap-KGVIZMDC.js +3 -0
- package/dist/abap-KGVIZMDC.js.map +1 -0
- package/dist/actionscript-3-2UHK5QYP.js +3 -0
- package/dist/actionscript-3-2UHK5QYP.js.map +1 -0
- package/dist/ada-JKTWR5BV.js +3 -0
- package/dist/ada-JKTWR5BV.js.map +1 -0
- package/dist/andromeeda-HAPOYWX3.js +3 -0
- package/dist/andromeeda-HAPOYWX3.js.map +1 -0
- package/dist/angular-html-EOIKHM3D.js +3 -0
- package/dist/angular-html-EOIKHM3D.js.map +1 -0
- package/dist/angular-ts-A7ZNTSV6.js +3 -0
- package/dist/angular-ts-A7ZNTSV6.js.map +1 -0
- package/dist/apache-MPGFGQFB.js +3 -0
- package/dist/apache-MPGFGQFB.js.map +1 -0
- package/dist/apex-BOAZL66Z.js +3 -0
- package/dist/apex-BOAZL66Z.js.map +1 -0
- package/dist/apl-QBN4KIYA.js +3 -0
- package/dist/apl-QBN4KIYA.js.map +1 -0
- package/dist/applescript-C4CJ3STL.js +3 -0
- package/dist/applescript-C4CJ3STL.js.map +1 -0
- package/dist/ara-FSFFBRSD.js +3 -0
- package/dist/ara-FSFFBRSD.js.map +1 -0
- package/dist/asciidoc-QQK2LANG.js +3 -0
- package/dist/asciidoc-QQK2LANG.js.map +1 -0
- package/dist/asm-X43A2VYW.js +3 -0
- package/dist/asm-X43A2VYW.js.map +1 -0
- package/dist/astro-OQUOYMBE.js +3 -0
- package/dist/astro-OQUOYMBE.js.map +1 -0
- package/dist/aurora-x-R6WAWEBC.js +3 -0
- package/dist/aurora-x-R6WAWEBC.js.map +1 -0
- package/dist/awk-4Z3PRTF7.js +3 -0
- package/dist/awk-4Z3PRTF7.js.map +1 -0
- package/dist/ayu-dark-KMD4YO7F.js +3 -0
- package/dist/ayu-dark-KMD4YO7F.js.map +1 -0
- package/dist/ayu-light-2ATPDILG.js +3 -0
- package/dist/ayu-light-2ATPDILG.js.map +1 -0
- package/dist/ayu-mirage-LJ7PG5AM.js +3 -0
- package/dist/ayu-mirage-LJ7PG5AM.js.map +1 -0
- package/dist/ballerina-JCXSJ2QD.js +3 -0
- package/dist/ballerina-JCXSJ2QD.js.map +1 -0
- package/dist/bat-XFWR7RMZ.js +3 -0
- package/dist/bat-XFWR7RMZ.js.map +1 -0
- package/dist/beancount-7BBDB4BH.js +3 -0
- package/dist/beancount-7BBDB4BH.js.map +1 -0
- package/dist/berry-PQ2BEJIZ.js +3 -0
- package/dist/berry-PQ2BEJIZ.js.map +1 -0
- package/dist/bibtex-J2PAB23I.js +3 -0
- package/dist/bibtex-J2PAB23I.js.map +1 -0
- package/dist/bicep-TNKT6R3W.js +3 -0
- package/dist/bicep-TNKT6R3W.js.map +1 -0
- package/dist/blade-QBDEYXMB.js +3 -0
- package/dist/blade-QBDEYXMB.js.map +1 -0
- package/dist/bsl-PQW6E45S.js +3 -0
- package/dist/bsl-PQW6E45S.js.map +1 -0
- package/dist/c-PZBJFNXE.js +3 -0
- package/dist/c-PZBJFNXE.js.map +1 -0
- package/dist/c3-GP7XYHE6.js +3 -0
- package/dist/c3-GP7XYHE6.js.map +1 -0
- package/dist/cadence-NABGDHKY.js +3 -0
- package/dist/cadence-NABGDHKY.js.map +1 -0
- package/dist/cairo-WQSC2GLN.js +3 -0
- package/dist/cairo-WQSC2GLN.js.map +1 -0
- package/dist/catppuccin-frappe-Z4Y2POK6.js +3 -0
- package/dist/catppuccin-frappe-Z4Y2POK6.js.map +1 -0
- package/dist/catppuccin-latte-4TQUIKX4.js +3 -0
- package/dist/catppuccin-latte-4TQUIKX4.js.map +1 -0
- package/dist/catppuccin-macchiato-B7YYPERT.js +3 -0
- package/dist/catppuccin-macchiato-B7YYPERT.js.map +1 -0
- package/dist/catppuccin-mocha-KX33VXKA.js +3 -0
- package/dist/catppuccin-mocha-KX33VXKA.js.map +1 -0
- package/dist/chat/index.d.ts +14 -3
- package/dist/chat/index.js +49 -1
- package/dist/chat/index.js.map +1 -1
- package/dist/chat/next-js/index.d.ts +148 -40
- package/dist/chat/next-js/index.js +1 -1
- package/dist/chat/next-js/index.js.map +1 -1
- package/dist/chat/server/index.d.ts +5 -0
- package/dist/chunk-2RR26LLP.js +3 -0
- package/dist/chunk-2RR26LLP.js.map +1 -0
- package/dist/chunk-3MXGGSWX.js +3 -0
- package/dist/chunk-3MXGGSWX.js.map +1 -0
- package/dist/chunk-4LBJUPWV.js +3 -0
- package/dist/chunk-4LBJUPWV.js.map +1 -0
- package/dist/chunk-4VTSQZWF.js +3 -0
- package/dist/chunk-4VTSQZWF.js.map +1 -0
- package/dist/chunk-7JLJRE2N.js +3 -0
- package/dist/chunk-7JLJRE2N.js.map +1 -0
- package/dist/chunk-7PHUBJVC.js +3 -0
- package/dist/chunk-7PHUBJVC.js.map +1 -0
- package/dist/chunk-AGWJ4LUC.js +3 -0
- package/dist/chunk-AGWJ4LUC.js.map +1 -0
- package/dist/chunk-ASVQBXNX.js +3 -0
- package/dist/chunk-ASVQBXNX.js.map +1 -0
- package/dist/chunk-ATLIFHJQ.js +3 -0
- package/dist/chunk-ATLIFHJQ.js.map +1 -0
- package/dist/chunk-BWAU264B.js +3 -0
- package/dist/chunk-BWAU264B.js.map +1 -0
- package/dist/chunk-C2XW4T23.js +3 -0
- package/dist/chunk-C2XW4T23.js.map +1 -0
- package/dist/chunk-C3DWQQH3.js +3 -0
- package/dist/chunk-C3DWQQH3.js.map +1 -0
- package/dist/chunk-CIEDXAJY.js +3 -0
- package/dist/chunk-CIEDXAJY.js.map +1 -0
- package/dist/chunk-CNY3RWNZ.js +3 -0
- package/dist/chunk-CNY3RWNZ.js.map +1 -0
- package/dist/chunk-ED2SBPIQ.js +3 -0
- package/dist/chunk-ED2SBPIQ.js.map +1 -0
- package/dist/chunk-F3QSOBPN.js +3 -0
- package/dist/chunk-F3QSOBPN.js.map +1 -0
- package/dist/chunk-FHRHXPXN.js +3 -0
- package/dist/chunk-FHRHXPXN.js.map +1 -0
- package/dist/chunk-FWHINPYE.js +3 -0
- package/dist/chunk-FWHINPYE.js.map +1 -0
- package/dist/chunk-HMEGK7JX.js +3 -0
- package/dist/chunk-HMEGK7JX.js.map +1 -0
- package/dist/chunk-HU77EH3T.js +3 -0
- package/dist/chunk-HU77EH3T.js.map +1 -0
- package/dist/chunk-HVAT4SNH.js +116 -0
- package/dist/chunk-HVAT4SNH.js.map +1 -0
- package/dist/chunk-IXROC4D6.js +3 -0
- package/dist/chunk-IXROC4D6.js.map +1 -0
- package/dist/chunk-JVRIR5KA.js +3 -0
- package/dist/chunk-JVRIR5KA.js.map +1 -0
- package/dist/chunk-JXSURY23.js +3 -0
- package/dist/chunk-JXSURY23.js.map +1 -0
- package/dist/chunk-JZBW5KEX.js +3 -0
- package/dist/chunk-JZBW5KEX.js.map +1 -0
- package/dist/chunk-M4CKEROZ.js +3 -0
- package/dist/chunk-M4CKEROZ.js.map +1 -0
- package/dist/chunk-NWMKWKIF.js +3 -0
- package/dist/chunk-NWMKWKIF.js.map +1 -0
- package/dist/chunk-OZU5OBWU.js +3 -0
- package/dist/chunk-OZU5OBWU.js.map +1 -0
- package/dist/chunk-Q7Y54EZU.js +3 -0
- package/dist/chunk-Q7Y54EZU.js.map +1 -0
- package/dist/chunk-QLNWMFSL.js +3 -0
- package/dist/chunk-QLNWMFSL.js.map +1 -0
- package/dist/chunk-R5U25TSM.js +3 -0
- package/dist/chunk-R5U25TSM.js.map +1 -0
- package/dist/chunk-RH56J7QY.js +3 -0
- package/dist/chunk-RH56J7QY.js.map +1 -0
- package/dist/chunk-RLHBVYHM.js +3 -0
- package/dist/chunk-RLHBVYHM.js.map +1 -0
- package/dist/chunk-RYVXTIMY.js +3 -0
- package/dist/chunk-RYVXTIMY.js.map +1 -0
- package/dist/chunk-U4R5XKLD.js +3 -0
- package/dist/chunk-U4R5XKLD.js.map +1 -0
- package/dist/chunk-V3ZDECK5.js +3 -0
- package/dist/chunk-V3ZDECK5.js.map +1 -0
- package/dist/chunk-VBWVDIIW.js +3 -0
- package/dist/chunk-VBWVDIIW.js.map +1 -0
- package/dist/chunk-VME4UB43.js +3 -0
- package/dist/chunk-VME4UB43.js.map +1 -0
- package/dist/chunk-VNX5AK2O.js +3 -0
- package/dist/chunk-VNX5AK2O.js.map +1 -0
- package/dist/chunk-WKR2RWJ6.js +3 -0
- package/dist/chunk-WKR2RWJ6.js.map +1 -0
- package/dist/chunk-XD5VGPVP.js +3 -0
- package/dist/chunk-XD5VGPVP.js.map +1 -0
- package/dist/chunk-Z3IKGRKN.js +3 -0
- package/dist/chunk-Z3IKGRKN.js.map +1 -0
- package/dist/chunk-Z7QCZ4DQ.js +3 -0
- package/dist/chunk-Z7QCZ4DQ.js.map +1 -0
- package/dist/chunk-ZHMHS6LG.js +3 -0
- package/dist/chunk-ZHMHS6LG.js.map +1 -0
- package/dist/chunk-ZU32Z5HV.js +3 -0
- package/dist/chunk-ZU32Z5HV.js.map +1 -0
- package/dist/clarity-NXNSINKX.js +3 -0
- package/dist/clarity-NXNSINKX.js.map +1 -0
- package/dist/clojure-Y57BKRMA.js +3 -0
- package/dist/clojure-Y57BKRMA.js.map +1 -0
- package/dist/cmake-LVMEA3JZ.js +3 -0
- package/dist/cmake-LVMEA3JZ.js.map +1 -0
- package/dist/cobol-6DNJTKH3.js +3 -0
- package/dist/cobol-6DNJTKH3.js.map +1 -0
- package/dist/code-block-37QAKDTI-M2QCKVTI.js +4 -0
- package/dist/code-block-37QAKDTI-M2QCKVTI.js.map +1 -0
- package/dist/codeowners-JYHOTXQS.js +3 -0
- package/dist/codeowners-JYHOTXQS.js.map +1 -0
- package/dist/codeql-IWWSYR3L.js +3 -0
- package/dist/codeql-IWWSYR3L.js.map +1 -0
- package/dist/coffee-NNDQ5QXC.js +3 -0
- package/dist/coffee-NNDQ5QXC.js.map +1 -0
- package/dist/common-lisp-JKXCDYH3.js +3 -0
- package/dist/common-lisp-JKXCDYH3.js.map +1 -0
- package/dist/coq-BEHPNP64.js +3 -0
- package/dist/coq-BEHPNP64.js.map +1 -0
- package/dist/cpp-IALOHSZA.js +3 -0
- package/dist/cpp-IALOHSZA.js.map +1 -0
- package/dist/crystal-ZDP3FIUI.js +3 -0
- package/dist/crystal-ZDP3FIUI.js.map +1 -0
- package/dist/csharp-ODFBXRGA.js +3 -0
- package/dist/csharp-ODFBXRGA.js.map +1 -0
- package/dist/css-CJGL5AVH.js +3 -0
- package/dist/css-CJGL5AVH.js.map +1 -0
- package/dist/csv-LIK4TU3Z.js +3 -0
- package/dist/csv-LIK4TU3Z.js.map +1 -0
- package/dist/cue-UAAEAKHI.js +3 -0
- package/dist/cue-UAAEAKHI.js.map +1 -0
- package/dist/cypher-SZPVUQZJ.js +3 -0
- package/dist/cypher-SZPVUQZJ.js.map +1 -0
- package/dist/d-VSCA3XHG.js +3 -0
- package/dist/d-VSCA3XHG.js.map +1 -0
- package/dist/dark-plus-LNHXUR7U.js +3 -0
- package/dist/dark-plus-LNHXUR7U.js.map +1 -0
- package/dist/dart-A4PE6FIS.js +3 -0
- package/dist/dart-A4PE6FIS.js.map +1 -0
- package/dist/dax-TILIKSFB.js +3 -0
- package/dist/dax-TILIKSFB.js.map +1 -0
- package/dist/desktop-75KK3D55.js +3 -0
- package/dist/desktop-75KK3D55.js.map +1 -0
- package/dist/diff-HOT6P45M.js +3 -0
- package/dist/diff-HOT6P45M.js.map +1 -0
- package/dist/docker-FF35TY6T.js +3 -0
- package/dist/docker-FF35TY6T.js.map +1 -0
- package/dist/dotenv-FVPPHJI3.js +3 -0
- package/dist/dotenv-FVPPHJI3.js.map +1 -0
- package/dist/dracula-T2CMBBQ5.js +3 -0
- package/dist/dracula-T2CMBBQ5.js.map +1 -0
- package/dist/dracula-soft-SMFRNKX2.js +3 -0
- package/dist/dracula-soft-SMFRNKX2.js.map +1 -0
- package/dist/dream-maker-SYE3ZPSJ.js +3 -0
- package/dist/dream-maker-SYE3ZPSJ.js.map +1 -0
- package/dist/edge-CCLQ2CKA.js +3 -0
- package/dist/edge-CCLQ2CKA.js.map +1 -0
- package/dist/elixir-F6DQGRKA.js +3 -0
- package/dist/elixir-F6DQGRKA.js.map +1 -0
- package/dist/elm-5QRQXDZ6.js +3 -0
- package/dist/elm-5QRQXDZ6.js.map +1 -0
- package/dist/emacs-lisp-NJ4S4OHV.js +3 -0
- package/dist/emacs-lisp-NJ4S4OHV.js.map +1 -0
- package/dist/erb-HGSLHT5Y.js +3 -0
- package/dist/erb-HGSLHT5Y.js.map +1 -0
- package/dist/erlang-APEONNZ6.js +3 -0
- package/dist/erlang-APEONNZ6.js.map +1 -0
- package/dist/everforest-dark-DBZHIUAO.js +3 -0
- package/dist/everforest-dark-DBZHIUAO.js.map +1 -0
- package/dist/everforest-light-TDAGYJUK.js +3 -0
- package/dist/everforest-light-TDAGYJUK.js.map +1 -0
- package/dist/fennel-7OCMFVPS.js +3 -0
- package/dist/fennel-7OCMFVPS.js.map +1 -0
- package/dist/fish-BC46ME2N.js +3 -0
- package/dist/fish-BC46ME2N.js.map +1 -0
- package/dist/fluent-MXZS6EX3.js +3 -0
- package/dist/fluent-MXZS6EX3.js.map +1 -0
- package/dist/fortran-fixed-form-35BC2KX6.js +3 -0
- package/dist/fortran-fixed-form-35BC2KX6.js.map +1 -0
- package/dist/fortran-free-form-AXRAI2HH.js +3 -0
- package/dist/fortran-free-form-AXRAI2HH.js.map +1 -0
- package/dist/fsharp-JKNSQXHD.js +3 -0
- package/dist/fsharp-JKNSQXHD.js.map +1 -0
- package/dist/gdresource-ZMKZGPZV.js +3 -0
- package/dist/gdresource-ZMKZGPZV.js.map +1 -0
- package/dist/gdscript-HNCVXEYB.js +3 -0
- package/dist/gdscript-HNCVXEYB.js.map +1 -0
- package/dist/gdshader-XAJ4QRYP.js +3 -0
- package/dist/gdshader-XAJ4QRYP.js.map +1 -0
- package/dist/genie-HEFVQZAP.js +3 -0
- package/dist/genie-HEFVQZAP.js.map +1 -0
- package/dist/gherkin-OFBRDPXX.js +3 -0
- package/dist/gherkin-OFBRDPXX.js.map +1 -0
- package/dist/git-commit-ZE2M3Q5H.js +3 -0
- package/dist/git-commit-ZE2M3Q5H.js.map +1 -0
- package/dist/git-rebase-3N3INGLU.js +3 -0
- package/dist/git-rebase-3N3INGLU.js.map +1 -0
- package/dist/github-dark-3E25TTAN.js +3 -0
- package/dist/github-dark-3E25TTAN.js.map +1 -0
- package/dist/github-dark-default-KCBFVSS5.js +3 -0
- package/dist/github-dark-default-KCBFVSS5.js.map +1 -0
- package/dist/github-dark-dimmed-WRCBXEVS.js +3 -0
- package/dist/github-dark-dimmed-WRCBXEVS.js.map +1 -0
- package/dist/github-dark-high-contrast-ET7SAHAV.js +3 -0
- package/dist/github-dark-high-contrast-ET7SAHAV.js.map +1 -0
- package/dist/github-light-6FNTZH5H.js +3 -0
- package/dist/github-light-6FNTZH5H.js.map +1 -0
- package/dist/github-light-default-GGTAKNM7.js +3 -0
- package/dist/github-light-default-GGTAKNM7.js.map +1 -0
- package/dist/github-light-high-contrast-LHYKPR5E.js +3 -0
- package/dist/github-light-high-contrast-LHYKPR5E.js.map +1 -0
- package/dist/gleam-NFFQFQLP.js +3 -0
- package/dist/gleam-NFFQFQLP.js.map +1 -0
- package/dist/glimmer-js-RSUW6JYN.js +3 -0
- package/dist/glimmer-js-RSUW6JYN.js.map +1 -0
- package/dist/glimmer-ts-EZGWLX5T.js +3 -0
- package/dist/glimmer-ts-EZGWLX5T.js.map +1 -0
- package/dist/glsl-VJLRYEVJ.js +3 -0
- package/dist/glsl-VJLRYEVJ.js.map +1 -0
- package/dist/gn-UH2XQWLG.js +3 -0
- package/dist/gn-UH2XQWLG.js.map +1 -0
- package/dist/gnuplot-K6IV6NNR.js +3 -0
- package/dist/gnuplot-K6IV6NNR.js.map +1 -0
- package/dist/go-BDV7RR5G.js +3 -0
- package/dist/go-BDV7RR5G.js.map +1 -0
- package/dist/graphql-YEJQLMOO.js +3 -0
- package/dist/graphql-YEJQLMOO.js.map +1 -0
- package/dist/groovy-SX7K3XGL.js +3 -0
- package/dist/groovy-SX7K3XGL.js.map +1 -0
- package/dist/gruvbox-dark-hard-IQWZCHF7.js +3 -0
- package/dist/gruvbox-dark-hard-IQWZCHF7.js.map +1 -0
- package/dist/gruvbox-dark-medium-ARPWF4FS.js +3 -0
- package/dist/gruvbox-dark-medium-ARPWF4FS.js.map +1 -0
- package/dist/gruvbox-dark-soft-ODS6FPID.js +3 -0
- package/dist/gruvbox-dark-soft-ODS6FPID.js.map +1 -0
- package/dist/gruvbox-light-hard-KFA5YFDW.js +3 -0
- package/dist/gruvbox-light-hard-KFA5YFDW.js.map +1 -0
- package/dist/gruvbox-light-medium-MMET4L3Y.js +3 -0
- package/dist/gruvbox-light-medium-MMET4L3Y.js.map +1 -0
- package/dist/gruvbox-light-soft-DBZDERMK.js +3 -0
- package/dist/gruvbox-light-soft-DBZDERMK.js.map +1 -0
- package/dist/hack-3TGPQNR2.js +3 -0
- package/dist/hack-3TGPQNR2.js.map +1 -0
- package/dist/haml-335RVEQR.js +3 -0
- package/dist/haml-335RVEQR.js.map +1 -0
- package/dist/handlebars-73IS6B2J.js +3 -0
- package/dist/handlebars-73IS6B2J.js.map +1 -0
- package/dist/haskell-P5PTJARU.js +3 -0
- package/dist/haskell-P5PTJARU.js.map +1 -0
- package/dist/haxe-RCPSSA3N.js +3 -0
- package/dist/haxe-RCPSSA3N.js.map +1 -0
- package/dist/hcl-AKKZAVC2.js +3 -0
- package/dist/hcl-AKKZAVC2.js.map +1 -0
- package/dist/hjson-REXV6F6N.js +3 -0
- package/dist/hjson-REXV6F6N.js.map +1 -0
- package/dist/hlsl-AJ7VWOVL.js +3 -0
- package/dist/hlsl-AJ7VWOVL.js.map +1 -0
- package/dist/horizon-FSOMPXNP.js +3 -0
- package/dist/horizon-FSOMPXNP.js.map +1 -0
- package/dist/houston-FAQBCORN.js +3 -0
- package/dist/houston-FAQBCORN.js.map +1 -0
- package/dist/html-654LNGWF.js +3 -0
- package/dist/html-654LNGWF.js.map +1 -0
- package/dist/html-derivative-CMQ7BFDQ.js +3 -0
- package/dist/html-derivative-CMQ7BFDQ.js.map +1 -0
- package/dist/http-NEPTRAQZ.js +3 -0
- package/dist/http-NEPTRAQZ.js.map +1 -0
- package/dist/hurl-V6ZX2Q3F.js +3 -0
- package/dist/hurl-V6ZX2Q3F.js.map +1 -0
- package/dist/hxml-5BXJCAAU.js +3 -0
- package/dist/hxml-5BXJCAAU.js.map +1 -0
- package/dist/hy-SB4TMFE7.js +3 -0
- package/dist/hy-SB4TMFE7.js.map +1 -0
- package/dist/imba-Y64MHYWP.js +3 -0
- package/dist/imba-Y64MHYWP.js.map +1 -0
- package/dist/index.d.ts +187 -41
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/ini-J2OP4CNW.js +3 -0
- package/dist/ini-J2OP4CNW.js.map +1 -0
- package/dist/java-MJKJ5GPP.js +3 -0
- package/dist/java-MJKJ5GPP.js.map +1 -0
- package/dist/javascript-IYAGHPR6.js +3 -0
- package/dist/javascript-IYAGHPR6.js.map +1 -0
- package/dist/jinja-WPD26JJ6.js +3 -0
- package/dist/jinja-WPD26JJ6.js.map +1 -0
- package/dist/jison-UYDZQBN5.js +3 -0
- package/dist/jison-UYDZQBN5.js.map +1 -0
- package/dist/json-5V4JESJO.js +3 -0
- package/dist/json-5V4JESJO.js.map +1 -0
- package/dist/json5-7SHUZD3R.js +3 -0
- package/dist/json5-7SHUZD3R.js.map +1 -0
- package/dist/jsonc-X3Z34FN3.js +3 -0
- package/dist/jsonc-X3Z34FN3.js.map +1 -0
- package/dist/jsonl-6I3D2HM6.js +3 -0
- package/dist/jsonl-6I3D2HM6.js.map +1 -0
- package/dist/jsonnet-PZEQIBYV.js +3 -0
- package/dist/jsonnet-PZEQIBYV.js.map +1 -0
- package/dist/jssm-GJJ25IKR.js +3 -0
- package/dist/jssm-GJJ25IKR.js.map +1 -0
- package/dist/jsx-NI2J427C.js +3 -0
- package/dist/jsx-NI2J427C.js.map +1 -0
- package/dist/julia-QPZ7EOS6.js +3 -0
- package/dist/julia-QPZ7EOS6.js.map +1 -0
- package/dist/kanagawa-dragon-JNDVF5RJ.js +3 -0
- package/dist/kanagawa-dragon-JNDVF5RJ.js.map +1 -0
- package/dist/kanagawa-lotus-S7JK6TQ6.js +3 -0
- package/dist/kanagawa-lotus-S7JK6TQ6.js.map +1 -0
- package/dist/kanagawa-wave-QJJIMVEV.js +3 -0
- package/dist/kanagawa-wave-QJJIMVEV.js.map +1 -0
- package/dist/kb/index.d.ts +79 -0
- package/dist/kb/index.js +2 -0
- package/dist/kb/index.js.map +1 -0
- package/dist/kdl-IA7HA2TL.js +3 -0
- package/dist/kdl-IA7HA2TL.js.map +1 -0
- package/dist/kotlin-CCRMGYMI.js +3 -0
- package/dist/kotlin-CCRMGYMI.js.map +1 -0
- package/dist/kusto-7DW25GYH.js +3 -0
- package/dist/kusto-7DW25GYH.js.map +1 -0
- package/dist/laserwave-YFP3EJVX.js +3 -0
- package/dist/laserwave-YFP3EJVX.js.map +1 -0
- package/dist/latex-F2CTDTFG.js +3 -0
- package/dist/latex-F2CTDTFG.js.map +1 -0
- package/dist/lean-MGJJWBTR.js +3 -0
- package/dist/lean-MGJJWBTR.js.map +1 -0
- package/dist/less-WFSIMX5G.js +3 -0
- package/dist/less-WFSIMX5G.js.map +1 -0
- package/dist/light-plus-NGDHCPUZ.js +3 -0
- package/dist/light-plus-NGDHCPUZ.js.map +1 -0
- package/dist/liquid-7CFNUD3V.js +3 -0
- package/dist/liquid-7CFNUD3V.js.map +1 -0
- package/dist/llvm-CFQSEDXB.js +3 -0
- package/dist/llvm-CFQSEDXB.js.map +1 -0
- package/dist/log-YQNML6LA.js +3 -0
- package/dist/log-YQNML6LA.js.map +1 -0
- package/dist/logo-2PPKBL2M.js +3 -0
- package/dist/logo-2PPKBL2M.js.map +1 -0
- package/dist/lua-RPAMRKNG.js +3 -0
- package/dist/lua-RPAMRKNG.js.map +1 -0
- package/dist/luau-GR2DOH6N.js +3 -0
- package/dist/luau-GR2DOH6N.js.map +1 -0
- package/dist/make-DQQEEPI4.js +3 -0
- package/dist/make-DQQEEPI4.js.map +1 -0
- package/dist/markdown-OC5ILZSY.js +3 -0
- package/dist/markdown-OC5ILZSY.js.map +1 -0
- package/dist/marko-XSB3CTWQ.js +3 -0
- package/dist/marko-XSB3CTWQ.js.map +1 -0
- package/dist/material-theme-H2BHKUKX.js +3 -0
- package/dist/material-theme-H2BHKUKX.js.map +1 -0
- package/dist/material-theme-darker-VENCGWTB.js +3 -0
- package/dist/material-theme-darker-VENCGWTB.js.map +1 -0
- package/dist/material-theme-lighter-SDMLS22W.js +3 -0
- package/dist/material-theme-lighter-SDMLS22W.js.map +1 -0
- package/dist/material-theme-ocean-UHDBRLVF.js +3 -0
- package/dist/material-theme-ocean-UHDBRLVF.js.map +1 -0
- package/dist/material-theme-palenight-3TB2BEET.js +3 -0
- package/dist/material-theme-palenight-3TB2BEET.js.map +1 -0
- package/dist/matlab-YQY6FS4U.js +3 -0
- package/dist/matlab-YQY6FS4U.js.map +1 -0
- package/dist/mcp/index.d.ts +381 -31
- package/dist/mcp/index.js +3 -3
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/react.d.ts +80 -25
- package/dist/mcp/react.js +7 -7
- package/dist/mcp/react.js.map +1 -1
- package/dist/mcp-apps-client-6WEBHSGH.js +3 -0
- package/dist/mcp-apps-client-6WEBHSGH.js.map +1 -0
- package/dist/mdc-TEVTGSC7.js +3 -0
- package/dist/mdc-TEVTGSC7.js.map +1 -0
- package/dist/mdx-ZIH2JLVR.js +3 -0
- package/dist/mdx-ZIH2JLVR.js.map +1 -0
- package/dist/mermaid-4DMBBIKO-NR6M3PLG.js +3 -0
- package/dist/mermaid-4DMBBIKO-NR6M3PLG.js.map +1 -0
- package/dist/mermaid-WPX56SBB.js +3 -0
- package/dist/mermaid-WPX56SBB.js.map +1 -0
- package/dist/min-dark-CQ5WKNT7.js +3 -0
- package/dist/min-dark-CQ5WKNT7.js.map +1 -0
- package/dist/min-light-LZRD4NPR.js +3 -0
- package/dist/min-light-LZRD4NPR.js.map +1 -0
- package/dist/mipsasm-IDXQRZ2B.js +3 -0
- package/dist/mipsasm-IDXQRZ2B.js.map +1 -0
- package/dist/mojo-MH7EQVOK.js +3 -0
- package/dist/mojo-MH7EQVOK.js.map +1 -0
- package/dist/monokai-WHRY6275.js +3 -0
- package/dist/monokai-WHRY6275.js.map +1 -0
- package/dist/moonbit-5JDFTWKE.js +3 -0
- package/dist/moonbit-5JDFTWKE.js.map +1 -0
- package/dist/move-RWSXKYDY.js +3 -0
- package/dist/move-RWSXKYDY.js.map +1 -0
- package/dist/narrat-QJUEXMVV.js +3 -0
- package/dist/narrat-QJUEXMVV.js.map +1 -0
- package/dist/nextflow-2EICNZA3.js +3 -0
- package/dist/nextflow-2EICNZA3.js.map +1 -0
- package/dist/nginx-RIWAEC5Z.js +3 -0
- package/dist/nginx-RIWAEC5Z.js.map +1 -0
- package/dist/night-owl-7PNEW2JB.js +3 -0
- package/dist/night-owl-7PNEW2JB.js.map +1 -0
- package/dist/night-owl-light-GJUYOOJR.js +3 -0
- package/dist/night-owl-light-GJUYOOJR.js.map +1 -0
- package/dist/nim-JPSYX5KC.js +3 -0
- package/dist/nim-JPSYX5KC.js.map +1 -0
- package/dist/nix-XCKQVWCN.js +3 -0
- package/dist/nix-XCKQVWCN.js.map +1 -0
- package/dist/nord-EVGUMUX2.js +3 -0
- package/dist/nord-EVGUMUX2.js.map +1 -0
- package/dist/nushell-QGW7HANA.js +3 -0
- package/dist/nushell-QGW7HANA.js.map +1 -0
- package/dist/objective-c-V7KYXFHL.js +3 -0
- package/dist/objective-c-V7KYXFHL.js.map +1 -0
- package/dist/objective-cpp-NKUEWVGU.js +3 -0
- package/dist/objective-cpp-NKUEWVGU.js.map +1 -0
- package/dist/ocaml-QT2CZJZN.js +3 -0
- package/dist/ocaml-QT2CZJZN.js.map +1 -0
- package/dist/odin-MVMIXBHP.js +3 -0
- package/dist/odin-MVMIXBHP.js.map +1 -0
- package/dist/one-dark-pro-PMTR3SA7.js +3 -0
- package/dist/one-dark-pro-PMTR3SA7.js.map +1 -0
- package/dist/one-light-O7WH4N5X.js +3 -0
- package/dist/one-light-O7WH4N5X.js.map +1 -0
- package/dist/openai-client-HLQSYZJC.js +3 -0
- package/dist/openai-client-HLQSYZJC.js.map +1 -0
- package/dist/openscad-BJDUXUUZ.js +3 -0
- package/dist/openscad-BJDUXUUZ.js.map +1 -0
- package/dist/pascal-HGWEFD6L.js +3 -0
- package/dist/pascal-HGWEFD6L.js.map +1 -0
- package/dist/perl-X4IFZB22.js +3 -0
- package/dist/perl-X4IFZB22.js.map +1 -0
- package/dist/php-3V7EPUAN.js +3 -0
- package/dist/php-3V7EPUAN.js.map +1 -0
- package/dist/pkl-VA5ZK5DW.js +3 -0
- package/dist/pkl-VA5ZK5DW.js.map +1 -0
- package/dist/plastic-FBVUW6NJ.js +3 -0
- package/dist/plastic-FBVUW6NJ.js.map +1 -0
- package/dist/plsql-J7A7YWFH.js +3 -0
- package/dist/plsql-J7A7YWFH.js.map +1 -0
- package/dist/po-5RDI65JX.js +3 -0
- package/dist/po-5RDI65JX.js.map +1 -0
- package/dist/poimandres-WBB7GZAD.js +3 -0
- package/dist/poimandres-WBB7GZAD.js.map +1 -0
- package/dist/polar-VUJL2E7F.js +3 -0
- package/dist/polar-VUJL2E7F.js.map +1 -0
- package/dist/postcss-ESTB5G7N.js +3 -0
- package/dist/postcss-ESTB5G7N.js.map +1 -0
- package/dist/powerquery-ODTEKQCW.js +3 -0
- package/dist/powerquery-ODTEKQCW.js.map +1 -0
- package/dist/powershell-ZOYRAWBJ.js +3 -0
- package/dist/powershell-ZOYRAWBJ.js.map +1 -0
- package/dist/prisma-QHG2W5GE.js +3 -0
- package/dist/prisma-QHG2W5GE.js.map +1 -0
- package/dist/prolog-CSAPG5PH.js +3 -0
- package/dist/prolog-CSAPG5PH.js.map +1 -0
- package/dist/proto-WDNJBTSW.js +3 -0
- package/dist/proto-WDNJBTSW.js.map +1 -0
- package/dist/pug-P7LS6DER.js +3 -0
- package/dist/pug-P7LS6DER.js.map +1 -0
- package/dist/puppet-LHFWHTY3.js +3 -0
- package/dist/puppet-LHFWHTY3.js.map +1 -0
- package/dist/purescript-DUFJP4FY.js +3 -0
- package/dist/purescript-DUFJP4FY.js.map +1 -0
- package/dist/python-5ZNZSNQ2.js +3 -0
- package/dist/python-5ZNZSNQ2.js.map +1 -0
- package/dist/qml-LTAXB6W5.js +3 -0
- package/dist/qml-LTAXB6W5.js.map +1 -0
- package/dist/qmldir-7Z2ODQLM.js +3 -0
- package/dist/qmldir-7Z2ODQLM.js.map +1 -0
- package/dist/qss-FDFD3HQD.js +3 -0
- package/dist/qss-FDFD3HQD.js.map +1 -0
- package/dist/r-6ZOS53WN.js +3 -0
- package/dist/r-6ZOS53WN.js.map +1 -0
- package/dist/racket-7AYZPEUI.js +3 -0
- package/dist/racket-7AYZPEUI.js.map +1 -0
- package/dist/raku-A4F6VHVG.js +3 -0
- package/dist/raku-A4F6VHVG.js.map +1 -0
- package/dist/razor-4QOCK4UD.js +3 -0
- package/dist/razor-4QOCK4UD.js.map +1 -0
- package/dist/red-7KAMONOP.js +3 -0
- package/dist/red-7KAMONOP.js.map +1 -0
- package/dist/reg-FAPHGG66.js +3 -0
- package/dist/reg-FAPHGG66.js.map +1 -0
- package/dist/regexp-5BYLYA2R.js +3 -0
- package/dist/regexp-5BYLYA2R.js.map +1 -0
- package/dist/rel-7DJ7HHU4.js +3 -0
- package/dist/rel-7DJ7HHU4.js.map +1 -0
- package/dist/riscv-YIYJATFG.js +3 -0
- package/dist/riscv-YIYJATFG.js.map +1 -0
- package/dist/ron-HYYMCHTX.js +3 -0
- package/dist/ron-HYYMCHTX.js.map +1 -0
- package/dist/rose-pine-F2G5IHZD.js +3 -0
- package/dist/rose-pine-F2G5IHZD.js.map +1 -0
- package/dist/rose-pine-dawn-ALZ7XGH2.js +3 -0
- package/dist/rose-pine-dawn-ALZ7XGH2.js.map +1 -0
- package/dist/rose-pine-moon-D3K4SWUL.js +3 -0
- package/dist/rose-pine-moon-D3K4SWUL.js.map +1 -0
- package/dist/rosmsg-FDNH6QF7.js +3 -0
- package/dist/rosmsg-FDNH6QF7.js.map +1 -0
- package/dist/rst-WIWCR2KQ.js +3 -0
- package/dist/rst-WIWCR2KQ.js.map +1 -0
- package/dist/ruby-LXZJUMFB.js +3 -0
- package/dist/ruby-LXZJUMFB.js.map +1 -0
- package/dist/rust-V3GMJA2K.js +3 -0
- package/dist/rust-V3GMJA2K.js.map +1 -0
- package/dist/sas-D3G4GB3X.js +3 -0
- package/dist/sas-D3G4GB3X.js.map +1 -0
- package/dist/sass-JTO65AGR.js +3 -0
- package/dist/sass-JTO65AGR.js.map +1 -0
- package/dist/scala-4XQGFSVM.js +3 -0
- package/dist/scala-4XQGFSVM.js.map +1 -0
- package/dist/scheme-CB7AC7IL.js +3 -0
- package/dist/scheme-CB7AC7IL.js.map +1 -0
- package/dist/scss-6SKV4OGI.js +3 -0
- package/dist/scss-6SKV4OGI.js.map +1 -0
- package/dist/sdbl-LKGZFJ46.js +3 -0
- package/dist/sdbl-LKGZFJ46.js.map +1 -0
- package/dist/shaderlab-K536DHEB.js +3 -0
- package/dist/shaderlab-K536DHEB.js.map +1 -0
- package/dist/shellscript-LRNUKUSZ.js +3 -0
- package/dist/shellscript-LRNUKUSZ.js.map +1 -0
- package/dist/shellsession-IBQK7VWQ.js +3 -0
- package/dist/shellsession-IBQK7VWQ.js.map +1 -0
- package/dist/slack-dark-YFPJODWS.js +3 -0
- package/dist/slack-dark-YFPJODWS.js.map +1 -0
- package/dist/slack-ochin-H67AWZOI.js +3 -0
- package/dist/slack-ochin-H67AWZOI.js.map +1 -0
- package/dist/smalltalk-DQOSWAW7.js +3 -0
- package/dist/smalltalk-DQOSWAW7.js.map +1 -0
- package/dist/snazzy-light-OUVS63VK.js +3 -0
- package/dist/snazzy-light-OUVS63VK.js.map +1 -0
- package/dist/solarized-dark-2RCAVEXJ.js +3 -0
- package/dist/solarized-dark-2RCAVEXJ.js.map +1 -0
- package/dist/solarized-light-XFSENHTC.js +3 -0
- package/dist/solarized-light-XFSENHTC.js.map +1 -0
- package/dist/solidity-V2FMZEG4.js +3 -0
- package/dist/solidity-V2FMZEG4.js.map +1 -0
- package/dist/soy-VW3CKXWF.js +3 -0
- package/dist/soy-VW3CKXWF.js.map +1 -0
- package/dist/sparql-L2VKP7YP.js +3 -0
- package/dist/sparql-L2VKP7YP.js.map +1 -0
- package/dist/splunk-KDKHP7GC.js +3 -0
- package/dist/splunk-KDKHP7GC.js.map +1 -0
- package/dist/sql-UF27CALT.js +3 -0
- package/dist/sql-UF27CALT.js.map +1 -0
- package/dist/ssh-config-JC2DQ6ED.js +3 -0
- package/dist/ssh-config-JC2DQ6ED.js.map +1 -0
- package/dist/stata-7PXCUY24.js +3 -0
- package/dist/stata-7PXCUY24.js.map +1 -0
- package/dist/stylus-2L7N3EZD.js +3 -0
- package/dist/stylus-2L7N3EZD.js.map +1 -0
- package/dist/surrealql-ZY3E6XEL.js +3 -0
- package/dist/surrealql-ZY3E6XEL.js.map +1 -0
- package/dist/svelte-Q45XIK2A.js +3 -0
- package/dist/svelte-Q45XIK2A.js.map +1 -0
- package/dist/swift-XBH5HZSC.js +3 -0
- package/dist/swift-XBH5HZSC.js.map +1 -0
- package/dist/synthwave-84-5XXB3K6S.js +3 -0
- package/dist/synthwave-84-5XXB3K6S.js.map +1 -0
- package/dist/system-verilog-VRAUSZY3.js +3 -0
- package/dist/system-verilog-VRAUSZY3.js.map +1 -0
- package/dist/systemd-JOTSGJD4.js +3 -0
- package/dist/systemd-JOTSGJD4.js.map +1 -0
- package/dist/talonscript-NNZRZKOU.js +3 -0
- package/dist/talonscript-NNZRZKOU.js.map +1 -0
- package/dist/tasl-MBFZ4QNC.js +3 -0
- package/dist/tasl-MBFZ4QNC.js.map +1 -0
- package/dist/tcl-4GEDCBVE.js +3 -0
- package/dist/tcl-4GEDCBVE.js.map +1 -0
- package/dist/templ-3XM7DLQ3.js +3 -0
- package/dist/templ-3XM7DLQ3.js.map +1 -0
- package/dist/terraform-XTHOS4UK.js +3 -0
- package/dist/terraform-XTHOS4UK.js.map +1 -0
- package/dist/tex-UXMN2CV7.js +3 -0
- package/dist/tex-UXMN2CV7.js.map +1 -0
- package/dist/tokyo-night-CHJCCBJH.js +3 -0
- package/dist/tokyo-night-CHJCCBJH.js.map +1 -0
- package/dist/toml-J6K55ZSV.js +3 -0
- package/dist/toml-J6K55ZSV.js.map +1 -0
- package/dist/ts-tags-7WGDLEKX.js +3 -0
- package/dist/ts-tags-7WGDLEKX.js.map +1 -0
- package/dist/tsv-DOUJHQDQ.js +3 -0
- package/dist/tsv-DOUJHQDQ.js.map +1 -0
- package/dist/tsx-G5BMVRHK.js +3 -0
- package/dist/tsx-G5BMVRHK.js.map +1 -0
- package/dist/turtle-JHJ7W6U5.js +3 -0
- package/dist/turtle-JHJ7W6U5.js.map +1 -0
- package/dist/twig-C6YWFFZU.js +3 -0
- package/dist/twig-C6YWFFZU.js.map +1 -0
- package/dist/typescript-LMKEAHFC.js +3 -0
- package/dist/typescript-LMKEAHFC.js.map +1 -0
- package/dist/typespec-5CLTIJYY.js +3 -0
- package/dist/typespec-5CLTIJYY.js.map +1 -0
- package/dist/typst-4W4Z436Z.js +3 -0
- package/dist/typst-4W4Z436Z.js.map +1 -0
- package/dist/v-Y4SBDBN7.js +3 -0
- package/dist/v-Y4SBDBN7.js.map +1 -0
- package/dist/vala-UMKT2MFA.js +3 -0
- package/dist/vala-UMKT2MFA.js.map +1 -0
- package/dist/vb-DQ7A5WJU.js +3 -0
- package/dist/vb-DQ7A5WJU.js.map +1 -0
- package/dist/verilog-N6ZF7GQD.js +3 -0
- package/dist/verilog-N6ZF7GQD.js.map +1 -0
- package/dist/vesper-Y5GIEAN4.js +3 -0
- package/dist/vesper-Y5GIEAN4.js.map +1 -0
- package/dist/vhdl-BNYDT37G.js +3 -0
- package/dist/vhdl-BNYDT37G.js.map +1 -0
- package/dist/viml-37RMDCBC.js +3 -0
- package/dist/viml-37RMDCBC.js.map +1 -0
- package/dist/vitesse-black-7TI33KHX.js +3 -0
- package/dist/vitesse-black-7TI33KHX.js.map +1 -0
- package/dist/vitesse-dark-FOB25MRB.js +3 -0
- package/dist/vitesse-dark-FOB25MRB.js.map +1 -0
- package/dist/vitesse-light-4WCNCTCO.js +3 -0
- package/dist/vitesse-light-4WCNCTCO.js.map +1 -0
- package/dist/vue-O6SLORWU.js +3 -0
- package/dist/vue-O6SLORWU.js.map +1 -0
- package/dist/vue-html-ZLTZN573.js +3 -0
- package/dist/vue-html-ZLTZN573.js.map +1 -0
- package/dist/vue-vine-6JKAZ54I.js +3 -0
- package/dist/vue-vine-6JKAZ54I.js.map +1 -0
- package/dist/vyper-GVXF46KD.js +3 -0
- package/dist/vyper-GVXF46KD.js.map +1 -0
- package/dist/wasm-EOPKAILK.js +3 -0
- package/dist/wasm-EOPKAILK.js.map +1 -0
- package/dist/wasm-NTB4O7GL.js +3 -0
- package/dist/wasm-NTB4O7GL.js.map +1 -0
- package/dist/wenyan-W7WB3BC7.js +3 -0
- package/dist/wenyan-W7WB3BC7.js.map +1 -0
- package/dist/wgsl-7GTDVXHG.js +3 -0
- package/dist/wgsl-7GTDVXHG.js.map +1 -0
- package/dist/wikitext-ASAFPAIL.js +3 -0
- package/dist/wikitext-ASAFPAIL.js.map +1 -0
- package/dist/wit-ZBCR6544.js +3 -0
- package/dist/wit-ZBCR6544.js.map +1 -0
- package/dist/wolfram-SZRZOETJ.js +3 -0
- package/dist/wolfram-SZRZOETJ.js.map +1 -0
- package/dist/xml-EBTJCOTU.js +3 -0
- package/dist/xml-EBTJCOTU.js.map +1 -0
- package/dist/xsl-IBYEXWDX.js +3 -0
- package/dist/xsl-IBYEXWDX.js.map +1 -0
- package/dist/yaml-GMVQNECR.js +3 -0
- package/dist/yaml-GMVQNECR.js.map +1 -0
- package/dist/zenscript-O2TZFP4A.js +3 -0
- package/dist/zenscript-O2TZFP4A.js.map +1 -0
- package/dist/zig-ZLGM7IMN.js +3 -0
- package/dist/zig-ZLGM7IMN.js.map +1 -0
- package/package.json +20 -39
- package/dist/mcp-apps-client-Z62VBB36.js +0 -3
- package/dist/mcp-apps-client-Z62VBB36.js.map +0 -1
- package/dist/openai-client-MVV4KJUO.js +0 -3
- package/dist/openai-client-MVV4KJUO.js.map +0 -1
|
@@ -1,6 +1,57 @@
|
|
|
1
1
|
import { UIMessage } from 'ai';
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
interface SearchResult {
|
|
4
|
+
source: string;
|
|
5
|
+
heading: string;
|
|
6
|
+
content: string;
|
|
7
|
+
score: number;
|
|
8
|
+
}
|
|
9
|
+
/** A file to ingest into the knowledge base */
|
|
10
|
+
interface KbIngestFile {
|
|
11
|
+
/** Filename (used as chunk source identifier) */
|
|
12
|
+
filename: string;
|
|
13
|
+
/** Markdown content of the file */
|
|
14
|
+
content: string;
|
|
15
|
+
}
|
|
16
|
+
/** Response from the ingest endpoint */
|
|
17
|
+
interface KbIngestResult {
|
|
18
|
+
/** Number of chunks created from the ingested files */
|
|
19
|
+
chunksIngested: number;
|
|
20
|
+
/** Number of files successfully processed */
|
|
21
|
+
filesProcessed: number;
|
|
22
|
+
}
|
|
23
|
+
/** Options for the search method */
|
|
24
|
+
interface KbSearchOptions {
|
|
25
|
+
/** Number of results to return (1-20, default 5) */
|
|
26
|
+
topK?: number;
|
|
27
|
+
/** Minimum similarity score threshold (0-1, default 0.3) */
|
|
28
|
+
minScore?: number;
|
|
29
|
+
}
|
|
30
|
+
/** A source entry in the knowledge base */
|
|
31
|
+
interface KbSource {
|
|
32
|
+
/** Source filename */
|
|
33
|
+
source: string;
|
|
34
|
+
/** Number of chunks from this source */
|
|
35
|
+
chunkCount: number;
|
|
36
|
+
/** ISO timestamp of when the source was first ingested */
|
|
37
|
+
createdAt: string;
|
|
38
|
+
}
|
|
39
|
+
/** KB client for server-side knowledge base operations */
|
|
40
|
+
interface KbClient {
|
|
41
|
+
/**
|
|
42
|
+
* Ingest files into the knowledge base.
|
|
43
|
+
*
|
|
44
|
+
* **Warning**: This is destructive — it deletes ALL existing chunks
|
|
45
|
+
* for the environment before ingesting the new files.
|
|
46
|
+
*/
|
|
47
|
+
ingest(files: KbIngestFile[]): Promise<KbIngestResult>;
|
|
48
|
+
/** Search the knowledge base for relevant chunks */
|
|
49
|
+
search(query: string, options?: KbSearchOptions): Promise<SearchResult[]>;
|
|
50
|
+
/** List all sources in the knowledge base */
|
|
51
|
+
sources(): Promise<KbSource[]>;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
type EventType = "session.started" | "tool.called" | "quote.requested" | "quote.succeeded" | "quote.failed" | "link.clicked" | "purchase.completed" | "widget_render" | "widget_click" | "widget_link_click" | "widget_error" | "widget_scroll" | "widget_form_field" | "widget_form_submit";
|
|
4
55
|
interface ToolCalledProperties {
|
|
5
56
|
name?: string;
|
|
6
57
|
type?: "pricing" | "product_info" | "availability" | "support" | "other";
|
|
@@ -16,30 +67,7 @@ interface PurchaseCompletedProperties {
|
|
|
16
67
|
amount?: number;
|
|
17
68
|
currency?: string;
|
|
18
69
|
}
|
|
19
|
-
interface
|
|
20
|
-
/**
|
|
21
|
-
* Event type.
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* ```typescript
|
|
25
|
-
* wani.track({
|
|
26
|
-
* event: 'tool.called',
|
|
27
|
-
* });
|
|
28
|
-
* ```
|
|
29
|
-
*/
|
|
30
|
-
event: EventType;
|
|
31
|
-
/**
|
|
32
|
-
* Event properties.
|
|
33
|
-
*
|
|
34
|
-
* @example
|
|
35
|
-
* ```typescript
|
|
36
|
-
* wani.track({
|
|
37
|
-
* event: 'tool.called',
|
|
38
|
-
* properties: { name: 'search' },
|
|
39
|
-
* });
|
|
40
|
-
* ```
|
|
41
|
-
*/
|
|
42
|
-
properties?: Record<string, unknown>;
|
|
70
|
+
interface TrackingContext {
|
|
43
71
|
/**
|
|
44
72
|
* MCP request metadata passed through to the API.
|
|
45
73
|
*
|
|
@@ -48,42 +76,114 @@ interface BaseEvent {
|
|
|
48
76
|
* - `@modelcontextprotocol/sdk`: `request.params._meta`
|
|
49
77
|
*/
|
|
50
78
|
meta?: Record<string, unknown>;
|
|
79
|
+
/** Legacy metadata field supported for backward compatibility. */
|
|
80
|
+
metadata?: Record<string, unknown>;
|
|
81
|
+
/** Optional explicit correlation fields. */
|
|
82
|
+
sessionId?: string;
|
|
83
|
+
traceId?: string;
|
|
84
|
+
requestId?: string;
|
|
85
|
+
correlationId?: string;
|
|
86
|
+
externalUserId?: string;
|
|
87
|
+
/** Optional explicit envelope fields. */
|
|
88
|
+
eventId?: string;
|
|
89
|
+
timestamp?: string | Date;
|
|
90
|
+
source?: string;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Modern tracking shape (preferred).
|
|
94
|
+
*/
|
|
95
|
+
interface BaseTrackEvent extends TrackingContext {
|
|
96
|
+
event: EventType;
|
|
97
|
+
properties?: Record<string, unknown>;
|
|
51
98
|
}
|
|
52
99
|
type TrackEvent = ({
|
|
100
|
+
event: "session.started";
|
|
101
|
+
} & BaseTrackEvent) | ({
|
|
53
102
|
event: "tool.called";
|
|
54
|
-
properties
|
|
55
|
-
} &
|
|
103
|
+
properties?: ToolCalledProperties;
|
|
104
|
+
} & BaseTrackEvent) | ({
|
|
56
105
|
event: "quote.requested";
|
|
57
|
-
} &
|
|
106
|
+
} & BaseTrackEvent) | ({
|
|
58
107
|
event: "quote.succeeded";
|
|
59
|
-
properties
|
|
60
|
-
} &
|
|
108
|
+
properties?: QuoteSucceededProperties;
|
|
109
|
+
} & BaseTrackEvent) | ({
|
|
61
110
|
event: "quote.failed";
|
|
62
|
-
} &
|
|
111
|
+
} & BaseTrackEvent) | ({
|
|
63
112
|
event: "link.clicked";
|
|
64
|
-
properties
|
|
65
|
-
} &
|
|
113
|
+
properties?: LinkClickedProperties;
|
|
114
|
+
} & BaseTrackEvent) | ({
|
|
66
115
|
event: "purchase.completed";
|
|
67
|
-
properties
|
|
68
|
-
} &
|
|
116
|
+
properties?: PurchaseCompletedProperties;
|
|
117
|
+
} & BaseTrackEvent);
|
|
118
|
+
/**
|
|
119
|
+
* Legacy tracking shape supported for existing integrations.
|
|
120
|
+
*/
|
|
121
|
+
interface LegacyTrackEvent extends TrackingContext {
|
|
122
|
+
eventType: EventType;
|
|
123
|
+
properties?: Record<string, unknown>;
|
|
124
|
+
toolName?: string;
|
|
125
|
+
toolType?: ToolCalledProperties["type"];
|
|
126
|
+
quoteAmount?: number;
|
|
127
|
+
quoteCurrency?: string;
|
|
128
|
+
linkUrl?: string;
|
|
129
|
+
purchaseAmount?: number;
|
|
130
|
+
purchaseCurrency?: string;
|
|
131
|
+
}
|
|
69
132
|
/**
|
|
70
|
-
*
|
|
133
|
+
* Public track input accepted by `client.track()`.
|
|
134
|
+
*/
|
|
135
|
+
type TrackInput = TrackEvent | LegacyTrackEvent;
|
|
136
|
+
interface TrackingConfig {
|
|
137
|
+
/** Events API V2 endpoint path. */
|
|
138
|
+
endpointPath?: string;
|
|
139
|
+
/** Periodic flush interval for buffered events. */
|
|
140
|
+
flushIntervalMs?: number;
|
|
141
|
+
/** Max events per HTTP batch send. */
|
|
142
|
+
maxBatchSize?: number;
|
|
143
|
+
/** Max in-memory buffer size before oldest items are dropped. */
|
|
144
|
+
maxBufferSize?: number;
|
|
145
|
+
/** Number of retries for retryable failures. */
|
|
146
|
+
maxRetries?: number;
|
|
147
|
+
/** Retry backoff base delay. */
|
|
148
|
+
retryBaseDelayMs?: number;
|
|
149
|
+
/** Retry backoff max delay. */
|
|
150
|
+
retryMaxDelayMs?: number;
|
|
151
|
+
/** Default shutdown timeout when none is provided. */
|
|
152
|
+
shutdownTimeoutMs?: number;
|
|
153
|
+
}
|
|
154
|
+
interface TrackingShutdownOptions {
|
|
155
|
+
timeoutMs?: number;
|
|
156
|
+
}
|
|
157
|
+
interface TrackingShutdownResult {
|
|
158
|
+
timedOut: boolean;
|
|
159
|
+
pendingEvents: number;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Tracking module methods for WaniWaniClient.
|
|
71
163
|
*/
|
|
72
164
|
interface TrackingClient {
|
|
73
165
|
/**
|
|
74
|
-
* Track an event
|
|
75
|
-
*
|
|
166
|
+
* Track an event using modern or legacy input shape.
|
|
167
|
+
* Returns a deterministic event id immediately after enqueue.
|
|
76
168
|
*/
|
|
77
|
-
track: (event:
|
|
169
|
+
track: (event: TrackInput) => Promise<{
|
|
78
170
|
eventId: string;
|
|
79
171
|
}>;
|
|
172
|
+
/**
|
|
173
|
+
* Flush all currently buffered events.
|
|
174
|
+
*/
|
|
175
|
+
flush: () => Promise<void>;
|
|
176
|
+
/**
|
|
177
|
+
* Flush and stop the transport.
|
|
178
|
+
*/
|
|
179
|
+
shutdown: (options?: TrackingShutdownOptions) => Promise<TrackingShutdownResult>;
|
|
80
180
|
}
|
|
81
181
|
|
|
82
182
|
/**
|
|
83
183
|
* WaniWani SDK Client
|
|
84
184
|
*
|
|
85
185
|
* Extends with each module:
|
|
86
|
-
* - TrackingClient: track(),
|
|
186
|
+
* - TrackingClient: track(), flush(), shutdown()
|
|
87
187
|
*
|
|
88
188
|
* Pass this client to framework adapters:
|
|
89
189
|
* - `toNextJsHandler(wani, { ... })` for Next.js route handlers
|
|
@@ -91,10 +191,13 @@ interface TrackingClient {
|
|
|
91
191
|
interface WaniWaniClient extends TrackingClient {
|
|
92
192
|
/** @internal Resolved config — used by framework adapters */
|
|
93
193
|
readonly _config: InternalConfig;
|
|
194
|
+
/** Knowledge base client for ingestion, search, and source listing */
|
|
195
|
+
readonly kb: KbClient;
|
|
94
196
|
}
|
|
95
197
|
interface InternalConfig {
|
|
96
198
|
baseUrl: string;
|
|
97
199
|
apiKey: string | undefined;
|
|
200
|
+
tracking: Required<TrackingConfig>;
|
|
98
201
|
}
|
|
99
202
|
|
|
100
203
|
interface BeforeRequestContext {
|
|
@@ -140,6 +243,11 @@ interface ChatOptions {
|
|
|
140
243
|
interface NextJsHandlerOptions {
|
|
141
244
|
/** Chat handler configuration */
|
|
142
245
|
chat?: ChatOptions;
|
|
246
|
+
/**
|
|
247
|
+
* Enable verbose debug logging for all handler steps.
|
|
248
|
+
* Logs request details, response codes, resolved URLs, and caught errors.
|
|
249
|
+
*/
|
|
250
|
+
debug?: boolean;
|
|
143
251
|
}
|
|
144
252
|
interface NextJsHandlerResult {
|
|
145
253
|
/** GET handler: routes sub-paths (e.g. /resource for MCP widget content) */
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
1
|
+
function C(l,n){return n?(...a)=>console.log(`[waniwani:${l}]`,...a):()=>{}}var y=class extends Error{constructor(a,m){super(a);this.status=m;this.name="WaniWaniError"}};function E(l){let{apiKey:n,baseUrl:a,systemPrompt:m,maxSteps:e,beforeRequest:d,mcpServerUrl:f,resolveConfig:t,debug:c}=l,r=C("chat",c);return async function(g){r("\u2192 POST",g.url);try{let u=await g.json(),o=u.messages??[],i=u.sessionId,h=m;if(r("body parsed \u2014 messages:",o.length,"sessionId:",i??"(none)"),d){r("running beforeRequest hook");try{let p=await d({messages:o,sessionId:i,request:g});p&&(p.messages&&(o=p.messages),p.systemPrompt!==void 0&&(h=p.systemPrompt),p.sessionId!==void 0&&(i=p.sessionId)),r("beforeRequest hook done \u2014 messages:",o.length,"sessionId:",i??"(none)")}catch(p){console.error("[waniwani:chat] beforeRequest hook error:",p);let T=p instanceof y?p.status:400,k=p instanceof Error?p.message:"Request rejected";return r("\u2190 returning",T,"from hook error"),Response.json({error:k},{status:T})}}let x=f??(await t()).mcpServerUrl;r("mcpServerUrl:",x);let w=`${a}/api/mcp/chat`;r("forwarding to",w);let s=await fetch(w,{method:"POST",headers:{"Content-Type":"application/json",...n?{Authorization:`Bearer ${n}`}:{}},body:JSON.stringify({messages:o,mcpServerUrl:x,sessionId:i,systemPrompt:h,maxSteps:e}),signal:g.signal});if(r("upstream response status:",s.status),!s.ok){let p=await s.text().catch(()=>"");return r("\u2190 returning",s.status,"upstream error:",p),new Response(p,{status:s.status,headers:{"Content-Type":s.headers.get("Content-Type")??"application/json"}})}let H=new Headers({"Content-Type":s.headers.get("Content-Type")??"text/event-stream"}),S=s.headers.get("x-session-id");return S&&H.set("x-session-id",S),r("\u2190 streaming response",s.status,"body null?",s.body===null),new Response(s.body,{status:s.status,headers:H})}catch(u){console.error("[waniwani:chat] handler error:",u);let o=u instanceof Error?u.message:"Unknown error occurred",i=u instanceof y?u.status:500;return r("\u2190 returning",i,"from caught error"),Response.json({error:o},{status:i})}}}function U(l){let{mcpServerUrl:n,resolveConfig:a,debug:m}=l,e=C("resource",m);return async function(f){e("\u2192 GET",f.toString());try{let t=f.searchParams.get("uri");if(e("uri:",t??"(missing)"),!t)return e("\u2190 400 missing uri"),Response.json({error:"Missing uri query parameter"},{status:400});let c=n??(await a()).mcpServerUrl;e("mcpServerUrl:",c);let r,v;try{[{createMCPClient:r},{StreamableHTTPClientTransport:v}]=await Promise.all([import("@ai-sdk/mcp"),import("@modelcontextprotocol/sdk/client/streamableHttp.js")]),e("MCP deps loaded")}catch(u){return console.error("[waniwani:resource] MCP deps import failed:",u),Response.json({error:"MCP resource handler requires @ai-sdk/mcp and @modelcontextprotocol/sdk. Install them to enable resource serving."},{status:501})}e("creating MCP client for",c);let g=await r({transport:new v(new URL(c))});try{e("reading resource:",t);let u=await g.readResource({uri:t});e("resource contents count:",u.contents.length);let o=u.contents[0];if(!o)return e("\u2190 404 resource not found"),Response.json({error:"Resource not found"},{status:404});let i;return"text"in o&&typeof o.text=="string"?i=o.text:"blob"in o&&typeof o.blob=="string"&&(i=atob(o.blob)),i?(e("\u2190 200 HTML length:",i.length),new Response(i,{headers:{"Content-Type":"text/html","Cache-Control":"private, max-age=300"}})):(e("\u2190 404 resource has no content, keys:",Object.keys(o)),Response.json({error:"Resource has no content"},{status:404}))}finally{await g.close(),e("MCP client closed")}}catch(t){console.error("[waniwani:resource] handler error:",t);let c=t instanceof Error?t.message:"Unknown error occurred",r=t instanceof y?t.status:500;return e("\u2190 returning",r,"from caught error"),Response.json({error:c},{status:r})}}}var M=300*1e3;function j(l,n){let a=null,m=null;return async function(){if(a&&Date.now()<a.expiresAt)return a.config;if(m)return m;m=(async()=>{if(!n)throw new y("WANIWANI_API_KEY is required for createChatHandler",401);let d=await fetch(`${l}/api/mcp/environments/config`,{method:"GET",headers:{Authorization:`Bearer ${n}`,"Content-Type":"application/json"}});if(!d.ok){let t=await d.text().catch(()=>"");throw new y(`Failed to resolve MCP environment config: ${d.status} ${t}`,d.status)}let f=await d.json();return a={config:f,expiresAt:Date.now()+M},f})();try{return await m}finally{m=null}}}function P(l,n){return new Response(JSON.stringify(l),{headers:{"Content-Type":"application/json"},status:n})}function A(l={}){let{apiKey:n=process.env.WANIWANI_API_KEY,baseUrl:a="https://app.waniwani.ai",systemPrompt:m,maxSteps:e=5,beforeRequest:d,mcpServerUrl:f,debug:t=!1}=l,c=C("router",t),r=j(a,n),v=E({apiKey:n,baseUrl:a,systemPrompt:m,maxSteps:e,beforeRequest:d,mcpServerUrl:f,resolveConfig:r,debug:t}),g=U({mcpServerUrl:f,resolveConfig:r,debug:t});async function u(){return P({debug:t},200)}async function o(i){c("\u2192 GET",i.url);try{let h=new URL(i.url),w=h.pathname.replace(/\/$/,"").split("/").filter(Boolean).at(-1);if(c("pathname:",h.pathname,"subRoute:",w),w==="resource"){c("dispatching to resource handler");let s=await g(h);return c("\u2190 resource handler returned",s.status),s}if(w==="config"){c("dispatching to config handler");let s=await u();return c("\u2190 config handler returned",s.status),s}return c("\u2190 404 no matching sub-route for",w),P({error:"Not found"},404)}catch(h){console.error("[waniwani:router] GET handler error:",h);let x=h instanceof Error?h.message:"Unknown error occurred";return c("\u2190 500 from caught error"),P({error:x},500)}}return{handleChat:v,handleResource:g,routeGet:o}}function te(l,n){let{apiKey:a,baseUrl:m}=l._config,e=n?.debug??process.env.WANIWANI_DEBUG==="1",d=A({...n?.chat,apiKey:a,baseUrl:m,debug:e});return{POST:d.handleChat,GET:d.routeGet}}export{te as toNextJsHandler};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/error.ts","../../../src/chat/server/handle-chat.ts","../../../src/chat/server/handle-resource.ts","../../../src/chat/server/mcp-config-resolver.ts","../../../src/chat/server/api-handler.ts","../../../src/chat/server/next-js/index.ts"],"sourcesContent":["// WaniWani SDK - Errors\n\nexport class WaniWaniError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic status: number,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"WaniWaniError\";\n\t}\n}\n","// Handle Chat - Proxies chat requests to the WaniWani API\n\nimport { WaniWaniError } from \"../../error\";\nimport type { ApiHandlerDeps } from \"./@types\";\n\nexport function createChatRequestHandler(deps: ApiHandlerDeps) {\n\tconst {\n\t\tapiKey,\n\t\tbaseUrl,\n\t\tsystemPrompt,\n\t\tmaxSteps,\n\t\tbeforeRequest,\n\t\tmcpServerUrl: mcpServerUrlOverride,\n\t\tresolveConfig,\n\t} = deps;\n\n\treturn async function handleChat(request: Request): Promise<Response> {\n\t\ttry {\n\t\t\t// 1. Parse request body\n\t\t\tconst body = await request.json();\n\t\t\tlet messages = body.messages ?? [];\n\t\t\tlet sessionId: string | undefined = body.sessionId;\n\t\t\tlet effectiveSystemPrompt = systemPrompt;\n\n\t\t\t// 2. Run beforeRequest hook\n\t\t\tif (beforeRequest) {\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await beforeRequest({\n\t\t\t\t\t\tmessages,\n\t\t\t\t\t\tsessionId,\n\t\t\t\t\t\trequest,\n\t\t\t\t\t});\n\n\t\t\t\t\tif (result) {\n\t\t\t\t\t\tif (result.messages) messages = result.messages;\n\t\t\t\t\t\tif (result.systemPrompt !== undefined)\n\t\t\t\t\t\t\teffectiveSystemPrompt = result.systemPrompt;\n\t\t\t\t\t\tif (result.sessionId !== undefined) sessionId = result.sessionId;\n\t\t\t\t\t}\n\t\t\t\t} catch (hookError) {\n\t\t\t\t\tconst status =\n\t\t\t\t\t\thookError instanceof WaniWaniError ? hookError.status : 400;\n\t\t\t\t\tconst message =\n\t\t\t\t\t\thookError instanceof Error ? hookError.message : \"Request rejected\";\n\t\t\t\t\treturn Response.json({ error: message }, { status });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// 3. Resolve MCP server URL\n\t\t\tconst mcpServerUrl =\n\t\t\t\tmcpServerUrlOverride ?? (await resolveConfig()).mcpServerUrl;\n\n\t\t\t// 4. Forward to WaniWani API\n\t\t\tconst response = await fetch(`${baseUrl}/api/mcp/chat`, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: {\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t...(apiKey ? { Authorization: `Bearer ${apiKey}` } : {}),\n\t\t\t\t},\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\tmessages,\n\t\t\t\t\tmcpServerUrl,\n\t\t\t\t\tsessionId,\n\t\t\t\t\tsystemPrompt: effectiveSystemPrompt,\n\t\t\t\t\tmaxSteps,\n\t\t\t\t}),\n\t\t\t\tsignal: request.signal,\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst errorBody = await response.text().catch(() => \"\");\n\t\t\t\treturn new Response(errorBody, {\n\t\t\t\t\tstatus: response.status,\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"Content-Type\":\n\t\t\t\t\t\t\tresponse.headers.get(\"Content-Type\") ?? \"application/json\",\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// 5. Stream the response back\n\t\t\tconst headers = new Headers({\n\t\t\t\t\"Content-Type\":\n\t\t\t\t\tresponse.headers.get(\"Content-Type\") ?? \"text/event-stream\",\n\t\t\t});\n\t\t\tconst upstreamSessionId = response.headers.get(\"x-session-id\");\n\t\t\tif (upstreamSessionId) {\n\t\t\t\theaders.set(\"x-session-id\", upstreamSessionId);\n\t\t\t}\n\n\t\t\treturn new Response(response.body, {\n\t\t\t\tstatus: response.status,\n\t\t\t\theaders,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconst message =\n\t\t\t\terror instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\tconst status = error instanceof WaniWaniError ? error.status : 500;\n\n\t\t\treturn Response.json({ error: message }, { status });\n\t\t}\n\t};\n}\n","// Handle Resource - Serves MCP resource content (HTML widgets)\n\nimport { WaniWaniError } from \"../../error\";\nimport type { ResourceHandlerDeps } from \"./@types\";\n\nexport function createResourceHandler(deps: ResourceHandlerDeps) {\n\tconst { mcpServerUrl: mcpServerUrlOverride, resolveConfig } = deps;\n\n\treturn async function handleResource(url: URL): Promise<Response> {\n\t\ttry {\n\t\t\tconst uri = url.searchParams.get(\"uri\");\n\n\t\t\tif (!uri) {\n\t\t\t\treturn Response.json(\n\t\t\t\t\t{ error: \"Missing uri query parameter\" },\n\t\t\t\t\t{ status: 400 },\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst mcpServerUrl =\n\t\t\t\tmcpServerUrlOverride ?? (await resolveConfig()).mcpServerUrl;\n\n\t\t\t// Dynamic imports — these are optional peer dependencies\n\t\t\tlet createMCPClient: typeof import(\"@ai-sdk/mcp\")[\"createMCPClient\"];\n\t\t\tlet StreamableHTTPClientTransport: typeof import(\"@modelcontextprotocol/sdk/client/streamableHttp.js\")[\"StreamableHTTPClientTransport\"];\n\n\t\t\ttry {\n\t\t\t\t[{ createMCPClient }, { StreamableHTTPClientTransport }] =\n\t\t\t\t\tawait Promise.all([\n\t\t\t\t\t\timport(\"@ai-sdk/mcp\"),\n\t\t\t\t\t\timport(\"@modelcontextprotocol/sdk/client/streamableHttp.js\"),\n\t\t\t\t\t]);\n\t\t\t} catch {\n\t\t\t\treturn Response.json(\n\t\t\t\t\t{\n\t\t\t\t\t\terror:\n\t\t\t\t\t\t\t\"MCP resource handler requires @ai-sdk/mcp and @modelcontextprotocol/sdk. Install them to enable resource serving.\",\n\t\t\t\t\t},\n\t\t\t\t\t{ status: 501 },\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst mcp = await createMCPClient({\n\t\t\t\ttransport: new StreamableHTTPClientTransport(new URL(mcpServerUrl)),\n\t\t\t});\n\n\t\t\ttry {\n\t\t\t\tconst result = await mcp.readResource({ uri });\n\n\t\t\t\tconst content = result.contents[0];\n\t\t\t\tif (!content) {\n\t\t\t\t\treturn Response.json(\n\t\t\t\t\t\t{ error: \"Resource not found\" },\n\t\t\t\t\t\t{ status: 404 },\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tlet html: string | undefined;\n\t\t\t\tif (\"text\" in content && typeof content.text === \"string\") {\n\t\t\t\t\thtml = content.text;\n\t\t\t\t} else if (\"blob\" in content && typeof content.blob === \"string\") {\n\t\t\t\t\thtml = atob(content.blob);\n\t\t\t\t}\n\n\t\t\t\tif (!html) {\n\t\t\t\t\treturn Response.json(\n\t\t\t\t\t\t{ error: \"Resource has no content\" },\n\t\t\t\t\t\t{ status: 404 },\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn new Response(html, {\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"Content-Type\": \"text/html\",\n\t\t\t\t\t\t\"Cache-Control\": \"private, max-age=300\",\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} finally {\n\t\t\t\tawait mcp.close();\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconst message =\n\t\t\t\terror instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\tconst status = error instanceof WaniWaniError ? error.status : 500;\n\t\t\treturn Response.json({ error: message }, { status });\n\t\t}\n\t};\n}\n","// MCP Config Resolver - Lazy-loads and caches MCP environment config\n\nimport { WaniWaniError } from \"../../error\";\n\ninterface McpEnvironmentConfig {\n\tmcpServerUrl: string;\n}\n\nconst TTL_MS = 5 * 60 * 1000; // 5 minutes\n\nexport function createMcpConfigResolver(\n\tbaseUrl: string,\n\tapiKey: string | undefined,\n) {\n\tlet cached: { config: McpEnvironmentConfig; expiresAt: number } | null = null;\n\tlet inflight: Promise<McpEnvironmentConfig> | null = null;\n\n\treturn async function resolve(): Promise<McpEnvironmentConfig> {\n\t\tif (cached && Date.now() < cached.expiresAt) {\n\t\t\treturn cached.config;\n\t\t}\n\n\t\t// Deduplicate concurrent requests (cold start scenario)\n\t\tif (inflight) {\n\t\t\treturn inflight;\n\t\t}\n\n\t\tinflight = (async () => {\n\t\t\tif (!apiKey) {\n\t\t\t\tthrow new WaniWaniError(\n\t\t\t\t\t\"WANIWANI_API_KEY is required for createChatHandler\",\n\t\t\t\t\t401,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst response = await fetch(`${baseUrl}/api/mcp/environments/config`, {\n\t\t\t\tmethod: \"GET\",\n\t\t\t\theaders: {\n\t\t\t\t\tAuthorization: `Bearer ${apiKey}`,\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst body = await response.text().catch(() => \"\");\n\t\t\t\tthrow new WaniWaniError(\n\t\t\t\t\t`Failed to resolve MCP environment config: ${response.status} ${body}`,\n\t\t\t\t\tresponse.status,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst data = (await response.json()) as McpEnvironmentConfig;\n\t\t\tcached = { config: data, expiresAt: Date.now() + TTL_MS };\n\t\t\treturn data;\n\t\t})();\n\n\t\ttry {\n\t\t\treturn await inflight;\n\t\t} finally {\n\t\t\tinflight = null;\n\t\t}\n\t};\n}\n","// API Handler - Composes chat and resource handlers into a unified API handler\n\nimport type { ApiHandler, ApiHandlerOptions } from \"./@types\";\nimport { createChatRequestHandler } from \"./handle-chat\";\nimport { createResourceHandler } from \"./handle-resource\";\nimport { createMcpConfigResolver } from \"./mcp-config-resolver\";\n\n/**\n * Create a framework-agnostic API handler for chat and MCP resources.\n *\n * Returns an object with handler methods that can be wired into\n * any framework (Next.js, Hono, Express, etc.):\n *\n * - `handleChat(request)` → proxies chat messages to WaniWani API\n * - `handleResource(url)` → serves MCP resource content (HTML widgets)\n * - `routeGet(request)` → routes GET sub-paths (e.g. /resource)\n *\n * @example\n * ```typescript\n * import { waniwani } from \"@waniwani/sdk\";\n * import { toNextJsHandler } from \"@waniwani/sdk/next-js\";\n *\n * const wani = waniwani();\n *\n * export const { GET, POST } = toNextJsHandler(wani, {\n * chat: { systemPrompt: \"You are a helpful assistant.\" },\n * });\n * ```\n */\nexport function createApiHandler(options: ApiHandlerOptions = {}): ApiHandler {\n\tconst {\n\t\tapiKey = process.env.WANIWANI_API_KEY,\n\t\tbaseUrl = \"https://app.waniwani.ai\",\n\t\tsystemPrompt,\n\t\tmaxSteps = 5,\n\t\tbeforeRequest,\n\t\tmcpServerUrl,\n\t} = options;\n\n\tconst resolveConfig = createMcpConfigResolver(baseUrl, apiKey);\n\n\tconst handleChat = createChatRequestHandler({\n\t\tapiKey,\n\t\tbaseUrl,\n\t\tsystemPrompt,\n\t\tmaxSteps,\n\t\tbeforeRequest,\n\t\tmcpServerUrl,\n\t\tresolveConfig,\n\t});\n\n\tconst handleResource = createResourceHandler({\n\t\tmcpServerUrl,\n\t\tresolveConfig,\n\t});\n\n\tfunction routeGet(request: Request): Promise<Response> {\n\t\tconst url = new URL(request.url);\n\t\tconst segments = url.pathname.replace(/\\/$/, \"\").split(\"/\").filter(Boolean);\n\t\tconst subRoute = segments.at(-1);\n\n\t\tif (subRoute === \"resource\") {\n\t\t\treturn handleResource(url);\n\t\t}\n\n\t\treturn Promise.resolve(\n\t\t\tResponse.json({ error: \"Not found\" }, { status: 404 }),\n\t\t);\n\t}\n\n\treturn { handleChat, handleResource, routeGet };\n}\n","// WaniWani SDK - Next.js Adapter\n\nimport type { WaniWaniClient } from \"../../../types.js\";\nimport { createApiHandler } from \"../api-handler.js\";\nimport type { NextJsHandlerOptions, NextJsHandlerResult } from \"./@types.js\";\n\nexport type { NextJsHandlerOptions, NextJsHandlerResult } from \"./@types.js\";\n\n/**\n * Create Next.js route handlers from a WaniWani client.\n *\n * Returns `{ GET, POST }` for use with catch-all routes.\n * Mount at `app/api/waniwani/[[...path]]/route.ts`:\n *\n * - `POST /api/waniwani` → chat (proxied to WaniWani API)\n * - `GET /api/waniwani/resource?uri=…` → MCP resource content\n *\n * @example\n * ```typescript\n * // app/api/waniwani/[[...path]]/route.ts\n * import { waniwani } from \"@waniwani/sdk\";\n * import { toNextJsHandler } from \"@waniwani/sdk/next-js\";\n *\n * const wani = waniwani();\n *\n * export const { GET, POST } = toNextJsHandler(wani, {\n * chat: {\n * systemPrompt: \"You are a helpful assistant.\",\n * mcpServerUrl: process.env.MCP_SERVER_URL!,\n * },\n * });\n * ```\n */\nexport function toNextJsHandler(\n\tclient: WaniWaniClient,\n\toptions?: NextJsHandlerOptions,\n): NextJsHandlerResult {\n\tconst { apiKey, baseUrl } = client._config;\n\n\tconst handler = createApiHandler({\n\t\t...options?.chat,\n\t\tapiKey,\n\t\tbaseUrl,\n\t});\n\n\treturn {\n\t\tPOST: handler.handleChat,\n\t\tGET: handler.routeGet,\n\t};\n}\n"],"mappings":"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","names":["WaniWaniError","message","status","createChatRequestHandler","deps","apiKey","baseUrl","systemPrompt","maxSteps","beforeRequest","mcpServerUrlOverride","resolveConfig","request","body","messages","sessionId","effectiveSystemPrompt","result","hookError","status","WaniWaniError","message","mcpServerUrl","response","errorBody","headers","upstreamSessionId","error","createResourceHandler","deps","mcpServerUrlOverride","resolveConfig","url","uri","mcpServerUrl","createMCPClient","StreamableHTTPClientTransport","mcp","content","html","error","message","status","WaniWaniError","TTL_MS","createMcpConfigResolver","baseUrl","apiKey","cached","inflight","WaniWaniError","response","body","data","createApiHandler","options","apiKey","baseUrl","systemPrompt","maxSteps","beforeRequest","mcpServerUrl","resolveConfig","createMcpConfigResolver","handleChat","createChatRequestHandler","handleResource","createResourceHandler","routeGet","request","url","toNextJsHandler","client","options","apiKey","baseUrl","handler","createApiHandler"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/logger.ts","../../../src/error.ts","../../../src/chat/server/handle-chat.ts","../../../src/chat/server/handle-resource.ts","../../../src/chat/server/mcp-config-resolver.ts","../../../src/chat/server/api-handler.ts","../../../src/chat/server/next-js/index.ts"],"sourcesContent":["/**\n * Creates a namespaced logger that writes to console.log when enabled,\n * or is a no-op when disabled.\n *\n * @example\n * const log = createLogger(\"chat\", debug);\n * log(\"→ POST\", request.url); // [waniwani:chat] → POST ...\n */\nexport function createLogger(\n\tnamespace: string,\n\tenabled: boolean,\n): (...args: unknown[]) => void {\n\treturn enabled\n\t\t? (...args: unknown[]) => console.log(`[waniwani:${namespace}]`, ...args)\n\t\t: () => {};\n}\n","// WaniWani SDK - Errors\n\nexport class WaniWaniError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic status: number,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"WaniWaniError\";\n\t}\n}\n","// Handle Chat - Proxies chat requests to the WaniWani API\n\nimport { WaniWaniError } from \"../../error\";\nimport { createLogger } from \"../../utils/logger.js\";\nimport type { ApiHandlerDeps } from \"./@types\";\n\nexport function createChatRequestHandler(deps: ApiHandlerDeps) {\n\tconst {\n\t\tapiKey,\n\t\tbaseUrl,\n\t\tsystemPrompt,\n\t\tmaxSteps,\n\t\tbeforeRequest,\n\t\tmcpServerUrl: mcpServerUrlOverride,\n\t\tresolveConfig,\n\t\tdebug,\n\t} = deps;\n\n\tconst log = createLogger(\"chat\", debug);\n\n\treturn async function handleChat(request: Request): Promise<Response> {\n\t\tlog(\"→ POST\", request.url);\n\t\ttry {\n\t\t\t// 1. Parse request body\n\t\t\tconst body = await request.json();\n\t\t\tlet messages = body.messages ?? [];\n\t\t\tlet sessionId: string | undefined = body.sessionId;\n\t\t\tlet effectiveSystemPrompt = systemPrompt;\n\n\t\t\tlog(\n\t\t\t\t\"body parsed — messages:\",\n\t\t\t\tmessages.length,\n\t\t\t\t\"sessionId:\",\n\t\t\t\tsessionId ?? \"(none)\",\n\t\t\t);\n\n\t\t\t// 2. Run beforeRequest hook\n\t\t\tif (beforeRequest) {\n\t\t\t\tlog(\"running beforeRequest hook\");\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await beforeRequest({\n\t\t\t\t\t\tmessages,\n\t\t\t\t\t\tsessionId,\n\t\t\t\t\t\trequest,\n\t\t\t\t\t});\n\n\t\t\t\t\tif (result) {\n\t\t\t\t\t\tif (result.messages) messages = result.messages;\n\t\t\t\t\t\tif (result.systemPrompt !== undefined)\n\t\t\t\t\t\t\teffectiveSystemPrompt = result.systemPrompt;\n\t\t\t\t\t\tif (result.sessionId !== undefined) sessionId = result.sessionId;\n\t\t\t\t\t}\n\t\t\t\t\tlog(\n\t\t\t\t\t\t\"beforeRequest hook done — messages:\",\n\t\t\t\t\t\tmessages.length,\n\t\t\t\t\t\t\"sessionId:\",\n\t\t\t\t\t\tsessionId ?? \"(none)\",\n\t\t\t\t\t);\n\t\t\t\t} catch (hookError) {\n\t\t\t\t\tconsole.error(\"[waniwani:chat] beforeRequest hook error:\", hookError);\n\t\t\t\t\tconst status =\n\t\t\t\t\t\thookError instanceof WaniWaniError ? hookError.status : 400;\n\t\t\t\t\tconst message =\n\t\t\t\t\t\thookError instanceof Error ? hookError.message : \"Request rejected\";\n\t\t\t\t\tlog(\"← returning\", status, \"from hook error\");\n\t\t\t\t\treturn Response.json({ error: message }, { status });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// 3. Resolve MCP server URL\n\t\t\tconst mcpServerUrl =\n\t\t\t\tmcpServerUrlOverride ?? (await resolveConfig()).mcpServerUrl;\n\t\t\tlog(\"mcpServerUrl:\", mcpServerUrl);\n\n\t\t\t// 4. Forward to WaniWani API\n\t\t\tconst upstreamUrl = `${baseUrl}/api/mcp/chat`;\n\t\t\tlog(\"forwarding to\", upstreamUrl);\n\t\t\tconst response = await fetch(upstreamUrl, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: {\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t...(apiKey ? { Authorization: `Bearer ${apiKey}` } : {}),\n\t\t\t\t},\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\tmessages,\n\t\t\t\t\tmcpServerUrl,\n\t\t\t\t\tsessionId,\n\t\t\t\t\tsystemPrompt: effectiveSystemPrompt,\n\t\t\t\t\tmaxSteps,\n\t\t\t\t}),\n\t\t\t\tsignal: request.signal,\n\t\t\t});\n\n\t\t\tlog(\"upstream response status:\", response.status);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst errorBody = await response.text().catch(() => \"\");\n\t\t\t\tlog(\"← returning\", response.status, \"upstream error:\", errorBody);\n\t\t\t\treturn new Response(errorBody, {\n\t\t\t\t\tstatus: response.status,\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"Content-Type\":\n\t\t\t\t\t\t\tresponse.headers.get(\"Content-Type\") ?? \"application/json\",\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// 5. Stream the response back\n\t\t\tconst headers = new Headers({\n\t\t\t\t\"Content-Type\":\n\t\t\t\t\tresponse.headers.get(\"Content-Type\") ?? \"text/event-stream\",\n\t\t\t});\n\t\t\tconst upstreamSessionId = response.headers.get(\"x-session-id\");\n\t\t\tif (upstreamSessionId) {\n\t\t\t\theaders.set(\"x-session-id\", upstreamSessionId);\n\t\t\t}\n\n\t\t\tlog(\n\t\t\t\t\"← streaming response\",\n\t\t\t\tresponse.status,\n\t\t\t\t\"body null?\",\n\t\t\t\tresponse.body === null,\n\t\t\t);\n\t\t\treturn new Response(response.body, {\n\t\t\t\tstatus: response.status,\n\t\t\t\theaders,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[waniwani:chat] handler error:\", error);\n\t\t\tconst message =\n\t\t\t\terror instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\tconst status = error instanceof WaniWaniError ? error.status : 500;\n\t\t\tlog(\"← returning\", status, \"from caught error\");\n\t\t\treturn Response.json({ error: message }, { status });\n\t\t}\n\t};\n}\n","// Handle Resource - Serves MCP resource content (HTML widgets)\n\nimport { WaniWaniError } from \"../../error\";\nimport { createLogger } from \"../../utils/logger.js\";\nimport type { ResourceHandlerDeps } from \"./@types\";\n\nexport function createResourceHandler(deps: ResourceHandlerDeps) {\n\tconst { mcpServerUrl: mcpServerUrlOverride, resolveConfig, debug } = deps;\n\n\tconst log = createLogger(\"resource\", debug);\n\n\treturn async function handleResource(url: URL): Promise<Response> {\n\t\tlog(\"→ GET\", url.toString());\n\t\ttry {\n\t\t\tconst uri = url.searchParams.get(\"uri\");\n\t\t\tlog(\"uri:\", uri ?? \"(missing)\");\n\n\t\t\tif (!uri) {\n\t\t\t\tlog(\"← 400 missing uri\");\n\t\t\t\treturn Response.json(\n\t\t\t\t\t{ error: \"Missing uri query parameter\" },\n\t\t\t\t\t{ status: 400 },\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst mcpServerUrl =\n\t\t\t\tmcpServerUrlOverride ?? (await resolveConfig()).mcpServerUrl;\n\t\t\tlog(\"mcpServerUrl:\", mcpServerUrl);\n\n\t\t\t// Dynamic imports — these are optional peer dependencies\n\t\t\tlet createMCPClient: typeof import(\"@ai-sdk/mcp\")[\"createMCPClient\"];\n\t\t\tlet StreamableHTTPClientTransport: typeof import(\"@modelcontextprotocol/sdk/client/streamableHttp.js\")[\"StreamableHTTPClientTransport\"];\n\n\t\t\ttry {\n\t\t\t\t[{ createMCPClient }, { StreamableHTTPClientTransport }] =\n\t\t\t\t\tawait Promise.all([\n\t\t\t\t\t\timport(\"@ai-sdk/mcp\"),\n\t\t\t\t\t\timport(\"@modelcontextprotocol/sdk/client/streamableHttp.js\"),\n\t\t\t\t\t]);\n\t\t\t\tlog(\"MCP deps loaded\");\n\t\t\t} catch (importError) {\n\t\t\t\tconsole.error(\n\t\t\t\t\t\"[waniwani:resource] MCP deps import failed:\",\n\t\t\t\t\timportError,\n\t\t\t\t);\n\t\t\t\treturn Response.json(\n\t\t\t\t\t{\n\t\t\t\t\t\terror:\n\t\t\t\t\t\t\t\"MCP resource handler requires @ai-sdk/mcp and @modelcontextprotocol/sdk. Install them to enable resource serving.\",\n\t\t\t\t\t},\n\t\t\t\t\t{ status: 501 },\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tlog(\"creating MCP client for\", mcpServerUrl);\n\t\t\tconst mcp = await createMCPClient({\n\t\t\t\ttransport: new StreamableHTTPClientTransport(new URL(mcpServerUrl)),\n\t\t\t});\n\n\t\t\ttry {\n\t\t\t\tlog(\"reading resource:\", uri);\n\t\t\t\tconst result = await mcp.readResource({ uri });\n\t\t\t\tlog(\"resource contents count:\", result.contents.length);\n\n\t\t\t\tconst content = result.contents[0];\n\t\t\t\tif (!content) {\n\t\t\t\t\tlog(\"← 404 resource not found\");\n\t\t\t\t\treturn Response.json(\n\t\t\t\t\t\t{ error: \"Resource not found\" },\n\t\t\t\t\t\t{ status: 404 },\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tlet html: string | undefined;\n\t\t\t\tif (\"text\" in content && typeof content.text === \"string\") {\n\t\t\t\t\thtml = content.text;\n\t\t\t\t} else if (\"blob\" in content && typeof content.blob === \"string\") {\n\t\t\t\t\thtml = atob(content.blob);\n\t\t\t\t}\n\n\t\t\t\tif (!html) {\n\t\t\t\t\tlog(\"← 404 resource has no content, keys:\", Object.keys(content));\n\t\t\t\t\treturn Response.json(\n\t\t\t\t\t\t{ error: \"Resource has no content\" },\n\t\t\t\t\t\t{ status: 404 },\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tlog(\"← 200 HTML length:\", html.length);\n\t\t\t\treturn new Response(html, {\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"Content-Type\": \"text/html\",\n\t\t\t\t\t\t\"Cache-Control\": \"private, max-age=300\",\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} finally {\n\t\t\t\tawait mcp.close();\n\t\t\t\tlog(\"MCP client closed\");\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[waniwani:resource] handler error:\", error);\n\t\t\tconst message =\n\t\t\t\terror instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\tconst status = error instanceof WaniWaniError ? error.status : 500;\n\t\t\tlog(\"← returning\", status, \"from caught error\");\n\t\t\treturn Response.json({ error: message }, { status });\n\t\t}\n\t};\n}\n","// MCP Config Resolver - Lazy-loads and caches MCP environment config\n\nimport { WaniWaniError } from \"../../error\";\n\ninterface McpEnvironmentConfig {\n\tmcpServerUrl: string;\n}\n\nconst TTL_MS = 5 * 60 * 1000; // 5 minutes\n\nexport function createMcpConfigResolver(\n\tbaseUrl: string,\n\tapiKey: string | undefined,\n) {\n\tlet cached: { config: McpEnvironmentConfig; expiresAt: number } | null = null;\n\tlet inflight: Promise<McpEnvironmentConfig> | null = null;\n\n\treturn async function resolve(): Promise<McpEnvironmentConfig> {\n\t\tif (cached && Date.now() < cached.expiresAt) {\n\t\t\treturn cached.config;\n\t\t}\n\n\t\t// Deduplicate concurrent requests (cold start scenario)\n\t\tif (inflight) {\n\t\t\treturn inflight;\n\t\t}\n\n\t\tinflight = (async () => {\n\t\t\tif (!apiKey) {\n\t\t\t\tthrow new WaniWaniError(\n\t\t\t\t\t\"WANIWANI_API_KEY is required for createChatHandler\",\n\t\t\t\t\t401,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst response = await fetch(`${baseUrl}/api/mcp/environments/config`, {\n\t\t\t\tmethod: \"GET\",\n\t\t\t\theaders: {\n\t\t\t\t\tAuthorization: `Bearer ${apiKey}`,\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst body = await response.text().catch(() => \"\");\n\t\t\t\tthrow new WaniWaniError(\n\t\t\t\t\t`Failed to resolve MCP environment config: ${response.status} ${body}`,\n\t\t\t\t\tresponse.status,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst data = (await response.json()) as McpEnvironmentConfig;\n\t\t\tcached = { config: data, expiresAt: Date.now() + TTL_MS };\n\t\t\treturn data;\n\t\t})();\n\n\t\ttry {\n\t\t\treturn await inflight;\n\t\t} finally {\n\t\t\tinflight = null;\n\t\t}\n\t};\n}\n","// API Handler - Composes chat and resource handlers into a unified API handler\n\nimport { createLogger } from \"../../utils/logger.js\";\nimport type { ApiHandler, ApiHandlerOptions } from \"./@types\";\nimport { createChatRequestHandler } from \"./handle-chat\";\nimport { createResourceHandler } from \"./handle-resource\";\nimport { createMcpConfigResolver } from \"./mcp-config-resolver\";\n\n/**\n * Create a JSON response with the given data and status code.\n * @param data - The data to be serialized to JSON.\n * @param status - The HTTP status code to be returned.\n * @returns A Response object with the JSON data and the given status code.\n */\nfunction jsonResponse(data: object, status: number): Response {\n\treturn new Response(JSON.stringify(data), {\n\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\tstatus,\n\t});\n}\n\n/**\n * Create a framework-agnostic API handler for chat and MCP resources.\n *\n * Returns an object with handler methods that can be wired into\n * any framework (Next.js, Hono, Express, etc.):\n *\n * - `handleChat(request)` → proxies chat messages to WaniWani API\n * - `handleResource(url)` → serves MCP resource content (HTML widgets)\n * - `routeGet(request)` → routes GET sub-paths (e.g. /resource)\n *\n * @example\n * ```typescript\n * import { waniwani } from \"@waniwani/sdk\";\n * import { toNextJsHandler } from \"@waniwani/sdk/next-js\";\n *\n * const wani = waniwani();\n *\n * export const { GET, POST, dynamic } = toNextJsHandler(wani, {\n * chat: { systemPrompt: \"You are a helpful assistant.\" },\n * });\n * ```\n */\nexport function createApiHandler(options: ApiHandlerOptions = {}): ApiHandler {\n\tconst {\n\t\tapiKey = process.env.WANIWANI_API_KEY,\n\t\tbaseUrl = \"https://app.waniwani.ai\",\n\t\tsystemPrompt,\n\t\tmaxSteps = 5,\n\t\tbeforeRequest,\n\t\tmcpServerUrl,\n\t\tdebug = false,\n\t} = options;\n\n\tconst log = createLogger(\"router\", debug);\n\n\tconst resolveConfig = createMcpConfigResolver(baseUrl, apiKey);\n\n\tconst handleChat = createChatRequestHandler({\n\t\tapiKey,\n\t\tbaseUrl,\n\t\tsystemPrompt,\n\t\tmaxSteps,\n\t\tbeforeRequest,\n\t\tmcpServerUrl,\n\t\tresolveConfig,\n\t\tdebug,\n\t});\n\n\tconst handleResource = createResourceHandler({\n\t\tmcpServerUrl,\n\t\tresolveConfig,\n\t\tdebug,\n\t});\n\n\tasync function handleConfig(): Promise<Response> {\n\t\treturn jsonResponse({ debug }, 200);\n\t}\n\n\tasync function routeGet(request: Request): Promise<Response> {\n\t\tlog(\"→ GET\", request.url);\n\t\ttry {\n\t\t\tconst url = new URL(request.url);\n\t\t\tconst segments = url.pathname\n\t\t\t\t.replace(/\\/$/, \"\")\n\t\t\t\t.split(\"/\")\n\t\t\t\t.filter(Boolean);\n\t\t\tconst subRoute = segments.at(-1);\n\t\t\tlog(\"pathname:\", url.pathname, \"subRoute:\", subRoute);\n\n\t\t\tif (subRoute === \"resource\") {\n\t\t\t\tlog(\"dispatching to resource handler\");\n\t\t\t\tconst response = await handleResource(url);\n\t\t\t\tlog(\"← resource handler returned\", response.status);\n\t\t\t\treturn response;\n\t\t\t}\n\n\t\t\tif (subRoute === \"config\") {\n\t\t\t\tlog(\"dispatching to config handler\");\n\t\t\t\tconst response = await handleConfig();\n\t\t\t\tlog(\"← config handler returned\", response.status);\n\t\t\t\treturn response;\n\t\t\t}\n\n\t\t\tlog(\"← 404 no matching sub-route for\", subRoute);\n\t\t\treturn jsonResponse({ error: \"Not found\" }, 404);\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[waniwani:router] GET handler error:\", error);\n\t\t\tconst message =\n\t\t\t\terror instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\tlog(\"← 500 from caught error\");\n\t\t\treturn jsonResponse({ error: message }, 500);\n\t\t}\n\t}\n\n\treturn { handleChat, handleResource, routeGet };\n}\n","// WaniWani SDK - Next.js Adapter\n\nimport type { WaniWaniClient } from \"../../../types.js\";\nimport { createApiHandler } from \"../api-handler.js\";\nimport type { NextJsHandlerOptions, NextJsHandlerResult } from \"./@types.js\";\n\nexport type { NextJsHandlerOptions, NextJsHandlerResult } from \"./@types.js\";\n\n/**\n * Create Next.js route handlers from a WaniWani client.\n *\n * Returns `{ GET, POST }` for use with catch-all routes.\n * Mount at `app/api/waniwani/[[...path]]/route.ts`:\n *\n * - `POST /api/waniwani` → chat (proxied to WaniWani API)\n * - `GET /api/waniwani/resource?uri=…` → MCP resource content\n *\n * @example\n * ```typescript\n * // app/api/waniwani/[[...path]]/route.ts\n * import { waniwani } from \"@waniwani/sdk\";\n * import { toNextJsHandler } from \"@waniwani/sdk/next-js\";\n *\n * const wani = waniwani();\n *\n * export const { GET, POST } = toNextJsHandler(wani, {\n * chat: {\n * systemPrompt: \"You are a helpful assistant.\",\n * mcpServerUrl: process.env.MCP_SERVER_URL!,\n * },\n * });\n * ```\n */\nexport function toNextJsHandler(\n\tclient: WaniWaniClient,\n\toptions?: NextJsHandlerOptions,\n): NextJsHandlerResult {\n\tconst { apiKey, baseUrl } = client._config;\n\n\tconst debugEnabled = options?.debug ?? process.env.WANIWANI_DEBUG === \"1\";\n\n\tconst handler = createApiHandler({\n\t\t...options?.chat,\n\t\tapiKey,\n\t\tbaseUrl,\n\t\tdebug: debugEnabled,\n\t});\n\n\treturn {\n\t\tPOST: handler.handleChat,\n\t\tGET: handler.routeGet,\n\t};\n}\n"],"mappings":"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","names":["createLogger","namespace","enabled","args","WaniWaniError","message","status","createChatRequestHandler","deps","apiKey","baseUrl","systemPrompt","maxSteps","beforeRequest","mcpServerUrlOverride","resolveConfig","debug","log","createLogger","request","body","messages","sessionId","effectiveSystemPrompt","result","hookError","status","WaniWaniError","message","mcpServerUrl","upstreamUrl","response","errorBody","headers","upstreamSessionId","error","createResourceHandler","deps","mcpServerUrlOverride","resolveConfig","debug","log","createLogger","url","uri","mcpServerUrl","createMCPClient","StreamableHTTPClientTransport","importError","mcp","result","content","html","error","message","status","WaniWaniError","TTL_MS","createMcpConfigResolver","baseUrl","apiKey","cached","inflight","WaniWaniError","response","body","data","jsonResponse","data","status","createApiHandler","options","apiKey","baseUrl","systemPrompt","maxSteps","beforeRequest","mcpServerUrl","debug","log","createLogger","resolveConfig","createMcpConfigResolver","handleChat","createChatRequestHandler","handleResource","createResourceHandler","handleConfig","routeGet","request","url","subRoute","response","error","message","toNextJsHandler","client","options","apiKey","baseUrl","debugEnabled","handler","createApiHandler"]}
|
|
@@ -53,6 +53,11 @@ interface ApiHandlerOptions {
|
|
|
53
53
|
* Useful for development/testing when pointing to a local MCP server.
|
|
54
54
|
*/
|
|
55
55
|
mcpServerUrl?: string;
|
|
56
|
+
/**
|
|
57
|
+
* Enable verbose debug logging for all handler steps.
|
|
58
|
+
* Logs request details, response codes, resolved URLs, and caught errors.
|
|
59
|
+
*/
|
|
60
|
+
debug?: boolean;
|
|
56
61
|
}
|
|
57
62
|
interface ApiHandler {
|
|
58
63
|
/** Proxies chat messages to the WaniWani API */
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var e=Object.freeze(JSON.parse(`{"displayName":"Stylus","fileTypes":["styl","stylus","css.styl","css.stylus"],"name":"stylus","patterns":[{"include":"#comment"},{"include":"#at_rule"},{"include":"#language_keywords"},{"include":"#language_constants"},{"include":"#variable_declaration"},{"include":"#function"},{"include":"#selector"},{"include":"#declaration"},{"captures":{"1":{"name":"punctuation.section.property-list.begin.css"},"2":{"name":"punctuation.section.property-list.end.css"}},"match":"(\\\\{)(})","name":"meta.brace.curly.css"},{"match":"[{}]","name":"meta.brace.curly.css"},{"include":"#numeric"},{"include":"#string"},{"include":"#operator"}],"repository":{"at_rule":{"patterns":[{"begin":"\\\\s*((@)(import|require))\\\\b\\\\s*","beginCaptures":{"1":{"name":"keyword.control.at-rule.import.stylus"},"2":{"name":"punctuation.definition.keyword.stylus"}},"end":"\\\\s*((?=;|$|\\\\n))","endCaptures":{"1":{"name":"punctuation.terminator.rule.css"}},"name":"meta.at-rule.import.css","patterns":[{"include":"#string"}]},{"begin":"\\\\s*((@)(extends?))\\\\b\\\\s*","beginCaptures":{"1":{"name":"keyword.control.at-rule.extend.stylus"},"2":{"name":"punctuation.definition.keyword.stylus"}},"end":"\\\\s*((?=;|$|\\\\n))","endCaptures":{"1":{"name":"punctuation.terminator.rule.css"}},"name":"meta.at-rule.extend.css","patterns":[{"include":"#selector"}]},{"captures":{"1":{"name":"keyword.control.at-rule.fontface.stylus"},"2":{"name":"punctuation.definition.keyword.stylus"}},"match":"^\\\\s*((@)font-face)\\\\b","name":"meta.at-rule.fontface.stylus"},{"captures":{"1":{"name":"keyword.control.at-rule.css.stylus"},"2":{"name":"punctuation.definition.keyword.stylus"}},"match":"^\\\\s*((@)css)\\\\b","name":"meta.at-rule.css.stylus"},{"begin":"\\\\s*((@)charset)\\\\b\\\\s*","beginCaptures":{"1":{"name":"keyword.control.at-rule.charset.stylus"},"2":{"name":"punctuation.definition.keyword.stylus"}},"end":"\\\\s*((?=;|$|\\\\n))","name":"meta.at-rule.charset.stylus","patterns":[{"include":"#string"}]},{"begin":"\\\\s*((@)keyframes)\\\\b\\\\s+([-A-Z_a-z][-0-9A-Z_a-z]*)","beginCaptures":{"1":{"name":"keyword.control.at-rule.keyframes.stylus"},"2":{"name":"punctuation.definition.keyword.stylus"},"3":{"name":"entity.name.function.keyframe.stylus"}},"end":"\\\\s*((?=\\\\{|$|\\\\n))","name":"meta.at-rule.keyframes.stylus"},{"begin":"(?=\\\\b((\\\\d+%|from\\\\b|to\\\\b)))","end":"(?=([\\\\n{]))","name":"meta.at-rule.keyframes.stylus","patterns":[{"match":"\\\\b((\\\\d+%|from\\\\b|to\\\\b))","name":"entity.other.attribute-name.stylus"}]},{"captures":{"1":{"name":"keyword.control.at-rule.media.stylus"},"2":{"name":"punctuation.definition.keyword.stylus"}},"match":"^\\\\s*((@)media)\\\\b","name":"meta.at-rule.media.stylus"},{"match":"(?=\\\\w)(?<![-\\\\w])(width|scan|resolution|orientation|monochrome|min-width|min-resolution|min-monochrome|min-height|min-device-width|min-device-height|min-device-aspect-ratio|min-color-index|min-color|min-aspect-ratio|max-width|max-resolution|max-monochrome|max-height|max-device-width|max-device-height|max-device-aspect-ratio|max-color-index|max-color|max-aspect-ratio|height|grid|device-width|device-height|device-aspect-ratio|color-index|color|aspect-ratio)(?<=\\\\w)(?![-\\\\w])","name":"support.type.property-name.media-feature.media.css"},{"match":"(?=\\\\w)(?<![-\\\\w])(tv|tty|screen|projection|print|handheld|embossed|braille|aural|all)(?<=\\\\w)(?![-\\\\w])","name":"support.constant.media-type.media.css"},{"match":"(?=\\\\w)(?<![-\\\\w])(portrait|landscape)(?<=\\\\w)(?![-\\\\w])","name":"support.constant.property-value.media-property.media.css"}]},"char_escape":{"match":"\\\\\\\\(.)","name":"constant.character.escape.stylus"},"color":{"patterns":[{"begin":"\\\\b(rgba??|hsla??)(\\\\()","beginCaptures":{"1":{"name":"support.function.color.css"},"2":{"name":"punctuation.section.function.css"}},"end":"(\\\\))","endCaptures":{"1":{"name":"punctuation.section.function.css"}},"name":"meta.function.color.css","patterns":[{"match":"\\\\s*(,)\\\\s*","name":"punctuation.separator.parameter.css"},{"include":"#numeric"},{"include":"#property_variable"}]},{"captures":{"1":{"name":"punctuation.definition.constant.css"}},"match":"(#)(\\\\h{3}|\\\\h{6})\\\\b","name":"constant.other.color.rgb-value.css"},{"match":"\\\\b(aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow)\\\\b","name":"support.constant.color.w3c-standard-color-name.css"},{"match":"\\\\b(aliceblue|antiquewhite|aquamarine|azure|beige|bisque|blanchedalmond|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|gainsboro|ghostwhite|gold|goldenrod|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|limegreen|linen|magenta|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|oldlace|olivedrab|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|thistle|tomato|turquoise|violet|wheat|whitesmoke|yellowgreen)\\\\b","name":"support.constant.color.w3c-extended-color-name.css"}]},"comment":{"patterns":[{"include":"#comment_block"},{"include":"#comment_line"}]},"comment_block":{"begin":"/\\\\*","beginCaptures":{"0":{"name":"punctuation.definition.comment.begin.css"}},"end":"\\\\*/","endCaptures":{"0":{"name":"punctuation.definition.comment.end.css"}},"name":"comment.block.css"},"comment_line":{"begin":"(^[\\\\t ]+)?(?=//)","beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.stylus"}},"end":"(?!\\\\G)","patterns":[{"begin":"//","beginCaptures":{"0":{"name":"punctuation.definition.comment.stylus"}},"end":"(?=\\\\n)","name":"comment.line.double-slash.stylus"}]},"declaration":{"begin":"((?<=^)[^\\\\n\\\\S]+)|((?<=;)[^\\\\n\\\\S]*)|((?<=\\\\{)[^\\\\n\\\\S]*)","end":"(?=\\\\n)|(;)|(?=})|(\\\\n)","endCaptures":{"2":{"name":"punctuation.terminator.rule.css"}},"name":"meta.property-list.css","patterns":[{"match":"(?<![-\\\\w])--[-A-Z_a-z[^\\\\x00-\\\\x7F]](?:[-0-9A-Z_a-z[^\\\\x00-\\\\x7F]]|\\\\\\\\(?:\\\\h{1,6}|.))*","name":"variable.css"},{"include":"#language_keywords"},{"include":"#language_constants"},{"match":"(?<=^)[^\\\\n\\\\S]+(\\\\n)"},{"captures":{"1":{"name":"support.type.property-name.css"},"2":{"name":"punctuation.separator.key-value.css"},"3":{"name":"variable.section.css"}},"match":"\\\\G\\\\s*(counter-(?:reset|increment))(?:(:)|[^\\\\n\\\\S])[^\\\\n\\\\S]*([-A-Z_a-z][-0-9A-Z_a-z]*)","name":"meta.property.counter.css"},{"begin":"\\\\G\\\\s*(filter)(?:(:)|[^\\\\n\\\\S])[^\\\\n\\\\S]*","beginCaptures":{"1":{"name":"support.type.property-name.css"},"2":{"name":"punctuation.separator.key-value.css"}},"end":"(?=[\\\\n;}]|$)","name":"meta.property.filter.css","patterns":[{"include":"#function"},{"include":"#property_values"}]},{"include":"#property"},{"include":"#interpolation"},{"include":"$self"}]},"font_name":{"match":"\\\\b((?i:arial|century|comic|courier|cursive|fantasy|futura|garamond|georgia|helvetica|impact|lucida|monospace|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif))\\\\b","name":"support.constant.font-name.css"},"function":{"begin":"(?=[-A-Z_a-z][-0-9A-Z_a-z]*\\\\()","end":"(\\\\))","endCaptures":{"1":{"name":"punctuation.section.function.css"}},"patterns":[{"begin":"(format|url|local)(\\\\()","beginCaptures":{"1":{"name":"support.function.misc.css"},"2":{"name":"punctuation.section.function.css"}},"end":"(?=\\\\))","name":"meta.function.misc.css","patterns":[{"match":"(?<=\\\\()[^)\\\\s]*(?=\\\\))","name":"string.css"},{"include":"#string"},{"include":"#variable"},{"include":"#operator"},{"match":"\\\\s*"}]},{"captures":{"1":{"name":"support.function.misc.counter.css"},"2":{"name":"punctuation.section.function.css"},"3":{"name":"variable.section.css"}},"match":"(counter)(\\\\()([-A-Z_a-z][-0-9A-Z_a-z]*)(?=\\\\))","name":"meta.function.misc.counter.css"},{"begin":"(counters)(\\\\()","beginCaptures":{"1":{"name":"support.function.misc.counters.css"},"2":{"name":"punctuation.section.function.css"}},"end":"(?=\\\\))","name":"meta.function.misc.counters.css","patterns":[{"match":"\\\\G[-A-Z_a-z][-0-9A-Z_a-z]*","name":"variable.section.css"},{"match":"\\\\s*(,)\\\\s*","name":"punctuation.separator.parameter.css"},{"include":"#string"},{"include":"#interpolation"}]},{"begin":"(attr)(\\\\()","beginCaptures":{"1":{"name":"support.function.misc.attr.css"},"2":{"name":"punctuation.section.function.css"}},"end":"(?=\\\\))","name":"meta.function.misc.attr.css","patterns":[{"match":"\\\\G[-A-Z_a-z][-0-9A-Z_a-z]*","name":"entity.other.attribute-name.attribute.css"},{"match":"(?<=[-0-9A-Z_a-z])\\\\s*\\\\b(string|color|url|integer|number|length|em|ex|px|rem|vw|vh|vmin|vmax|mm|cm|in|pt|pc|angle|deg|grad|rad|time|s|ms|frequency|Hz|kHz|%)\\\\b","name":"support.type.attr.css"},{"match":"\\\\s*(,)\\\\s*","name":"punctuation.separator.parameter.css"},{"include":"#string"},{"include":"#interpolation"}]},{"begin":"(calc)(\\\\()","beginCaptures":{"1":{"name":"support.function.misc.calc.css"},"2":{"name":"punctuation.section.function.css"}},"end":"(?=\\\\))","name":"meta.function.misc.calc.css","patterns":[{"include":"#property_values"}]},{"begin":"(cubic-bezier)(\\\\()","beginCaptures":{"1":{"name":"support.function.timing.cubic-bezier.css"},"2":{"name":"punctuation.section.function.css"}},"end":"(?=\\\\))","name":"meta.function.timing.cubic-bezier.css","patterns":[{"match":"\\\\s*(,)\\\\s*","name":"punctuation.separator.parameter.css"},{"include":"#numeric"},{"include":"#interpolation"}]},{"begin":"(steps)(\\\\()","beginCaptures":{"1":{"name":"support.function.timing.steps.css"},"2":{"name":"punctuation.section.function.css"}},"end":"(?=\\\\))","name":"meta.function.timing.steps.css","patterns":[{"match":"\\\\s*(,)\\\\s*","name":"punctuation.separator.parameter.css"},{"include":"#numeric"},{"match":"\\\\b(start|end)\\\\b","name":"support.constant.timing.steps.direction.css"},{"include":"#interpolation"}]},{"begin":"((?:linear|radial|repeating-linear|repeating-radial)-gradient)(\\\\()","beginCaptures":{"1":{"name":"support.function.gradient.css"},"2":{"name":"punctuation.section.function.css"}},"end":"(?=\\\\))","name":"meta.function.gradient.css","patterns":[{"match":"\\\\s*(,)\\\\s*","name":"punctuation.separator.parameter.css"},{"include":"#numeric"},{"include":"#color"},{"match":"\\\\b(to|bottom|right|left|top|circle|ellipse|center|closest-side|closest-corner|farthest-side|farthest-corner|at)\\\\b","name":"support.constant.gradient.css"},{"include":"#interpolation"}]},{"begin":"(blur|brightness|contrast|grayscale|hue-rotate|invert|opacity|saturate|sepia)(\\\\()","beginCaptures":{"1":{"name":"support.function.filter.css"},"2":{"name":"punctuation.section.function.css"}},"end":"(?=\\\\))","name":"meta.function.filter.css","patterns":[{"include":"#numeric"},{"include":"#property_variable"},{"include":"#interpolation"}]},{"begin":"(drop-shadow)(\\\\()","beginCaptures":{"1":{"name":"support.function.filter.drop-shadow.css"},"2":{"name":"punctuation.section.function.css"}},"end":"(?=\\\\))","name":"meta.function.filter.drop-shadow.css","patterns":[{"include":"#numeric"},{"include":"#color"},{"include":"#property_variable"},{"include":"#interpolation"}]},{"begin":"(matrix|matrix3d|perspective|rotate|rotate3d|rotate[Xx]|rotate[Yy]|rotate[Zz]|scale|scale3d|scale[Xx]|scale[Yy]|scale[Zz]|skew[Xx]??|skew[Yy]|translate|translate3d|translate[Xx]|translate[Yy]|translate[Zz])(\\\\()","beginCaptures":{"1":{"name":"support.function.transform.css"},"2":{"name":"punctuation.section.function.css"}},"end":"(?=\\\\))","name":"meta.function.transform.css","patterns":[{"include":"#numeric"},{"include":"#property_variable"},{"include":"#interpolation"}]},{"match":"(url|local|format|counters??|attr|calc)(?=\\\\()","name":"support.function.misc.css"},{"match":"(cubic-bezier|steps)(?=\\\\()","name":"support.function.timing.css"},{"match":"((?:linear|radial|repeating-linear|repeating-radial)-gradient)(?=\\\\()","name":"support.function.gradient.css"},{"match":"(blur|brightness|contrast|drop-shadow|grayscale|hue-rotate|invert|opacity|saturate|sepia)(?=\\\\()","name":"support.function.filter.css"},{"match":"(matrix|matrix3d|perspective|rotate|rotate3d|rotate[Xx]|rotate[Yy]|rotate[Zz]|scale|scale3d|scale[Xx]|scale[Yy]|scale[Zz]|skew[Xx]??|skew[Yy]|translate|translate3d|translate[Xx]|translate[Yy]|translate[Zz])(?=\\\\()","name":"support.function.transform.css"},{"begin":"([-A-Z_a-z][-0-9A-Z_a-z]*)(\\\\()","beginCaptures":{"1":{"name":"entity.name.function.stylus"},"2":{"name":"punctuation.section.function.css"}},"end":"(?=\\\\))","name":"meta.function.stylus","patterns":[{"match":"--[-A-Z_a-z[^\\\\x00-\\\\x7F]](?:[-0-9A-Z_a-z[^\\\\x00-\\\\x7F]]|\\\\\\\\(?:\\\\h{1,6}|.))*","name":"variable.argument.stylus"},{"match":"\\\\s*(,)\\\\s*","name":"punctuation.separator.parameter.css"},{"include":"#interpolation"},{"include":"#property_values"}]},{"match":"\\\\(","name":"punctuation.section.function.css"}]},"interpolation":{"begin":"(\\\\{)[^\\\\n\\\\S]*(?=[^;=]*[^\\\\n\\\\S]*})","beginCaptures":{"1":{"name":"meta.brace.curly"}},"end":"[^\\\\n\\\\S]*(})|\\\\n|$","endCaptures":{"1":{"name":"meta.brace.curly"}},"name":"meta.interpolation.stylus","patterns":[{"include":"#variable"},{"include":"#numeric"},{"include":"#string"},{"include":"#operator"}]},"language_constants":{"match":"\\\\b(true|false|null)\\\\b","name":"constant.language.stylus"},"language_keywords":{"patterns":[{"match":"(\\\\b|\\\\s)(return|else|for|unless|if|else)\\\\b","name":"keyword.control.stylus"},{"match":"(\\\\b|\\\\s)(!important|in|is defined|is a)\\\\b","name":"keyword.other.stylus"},{"match":"\\\\barguments\\\\b","name":"variable.language.stylus"}]},"numeric":{"patterns":[{"captures":{"1":{"name":"keyword.other.unit.css"}},"match":"(?<![-\\\\w])(?:[-+]?[0-9]+(?:\\\\.[0-9]+)?|\\\\.[0-9]+)((?:px|pt|ch|cm|mm|in|r?em|ex|pc|deg|g?rad|dpi|dpcm|dppx|fr|ms|s|turn|vh|vmax|vmin|vw)\\\\b|%)?","name":"constant.numeric.css"}]},"operator":{"patterns":[{"match":"((?:[!+:?~]|(\\\\s-\\\\s)|\\\\*?\\\\*|[%/]|(\\\\.)?\\\\.\\\\.|[<>]|[-%*+/:<-?]?=|!=)|\\\\b(?:in|is(?:nt)?|(?<!:)not|or|and)\\\\b)","name":"keyword.operator.stylus"},{"include":"#char_escape"}]},"property":{"begin":"\\\\G\\\\s*(?:(-webkit-[-A-Za-z]+|-moz-[-A-Za-z]+|-o-[-A-Za-z]+|-ms-[-A-Za-z]+|-khtml-[-A-Za-z]+|zoom|z-index|[xy]|wrap|word-wrap|word-spacing|word-break|word|width|widows|white-space-collapse|white-space|white|weight|volume|voice-volume|voice-stress|voice-rate|voice-pitch-range|voice-pitch|voice-family|voice-duration|voice-balance|voice|visibility|vertical-align|variant|user-select|up|unicode-bidi|unicode-range|unicode|trim|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform|touch-action|top-width|top-style|top-right-radius|top-left-radius|top-color|top|timing-function|text-wrap|text-transform|text-shadow|text-replace|text-rendering|text-overflow|text-outline|text-justify|text-indent|text-height|text-emphasis|text-decoration|text-align-last|text-align|text|target-position|target-new|target-name|target|table-layout|tab-size|style-type|style-position|style-image|style|string-set|stretch|stress|stacking-strategy|stacking-shift|stacking-ruby|stacking|src|speed|speech-rate|speech|speak-punctuation|speak-numeral|speak-header|speak|span|spacing|space-collapse|space|sizing|size-adjust|size|shadow|respond-to|rule-width|rule-style|rule-color|rule|ruby-span|ruby-position|ruby-overhang|ruby-align|ruby|rows|rotation-point|rotation|role|right-width|right-style|right-color|right|richness|rest-before|rest-after|rest|resource|resize|reset|replace|repeat|rendering-intent|rate|radius|quotes|punctuation-trim|punctuation|property|profile|presentation-level|presentation|position|pointer-events|point|play-state|play-during|play-count|pitch-range|pitch|phonemes|pause-before|pause-after|pause|page-policy|page-break-inside|page-break-before|page-break-after|page|padding-top|padding-right|padding-left|padding-bottom|padding|pack|overhang|overflow-y|overflow-x|overflow-style|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|origin|orientation|orient|ordinal-group|order|opacity|offset|numeral|new|nav-up|nav-right|nav-left|nav-index|nav-down|nav|name|move-to|model|mix-blend-mode|min-width|min-height|min|max-width|max-height|max|marquee-style|marquee-speed|marquee-play-count|marquee-direction|marquee|marks|mark-before|mark-after|mark|margin-top|margin-right|margin-left|margin-bottom|margin|mask-image|list-style-type|list-style-position|list-style-image|list-style|list|lines|line-stacking-strategy|line-stacking-shift|line-stacking-ruby|line-stacking|line-height|line-break|level|letter-spacing|length|left-width|left-style|left-color|left|label|justify-content|justify|iteration-count|inline-box-align|initial-value|initial-size|initial-before-align|initial-before-adjust|initial-after-align|initial-after-adjust|index|indent|increment|image-resolution|image-orientation|image|icon|hyphens|hyphenate-resource|hyphenate-lines|hyphenate-character|hyphenate-before|hyphenate-after|hyphenate|height|header|hanging-punctuation|gap|grid|grid-area|grid-auto-columns|grid-auto-flow|grid-auto-rows|grid-column|grid-column-end|grid-column-start|grid-row|grid-row-end|grid-row-start|grid-template|grid-template-areas|grid-template-columns|grid-template-rows|row-gap|gap|font-kerning|font-language-override|font-weight|font-variant-caps|font-variant|font-style|font-synthesis|font-stretch|font-size-adjust|font-size|font-family|font|float-offset|float|flex-wrap|flex-shrink|flex-grow|flex-group|flex-flow|flex-direction|flex-basis|flex|fit-position|fit|fill|filter|family|empty-cells|emphasis|elevation|duration|drop-initial-value|drop-initial-size|drop-initial-before-align|drop-initial-before-adjust|drop-initial-after-align|drop-initial-after-adjust|drop|down|dominant-baseline|display-role|display-model|display|direction|delay|decoration-break|decoration|cursor|cue-before|cue-after|cue|crop|counter-reset|counter-increment|counter|count|content|columns|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|column-break-before|column-break-after|column|color-profile|color|collapse|clip|clear|character|caption-side|break-inside|break-before|break-after|break|box-sizing|box-shadow|box-pack|box-orient|box-ordinal-group|box-lines|box-flex-group|box-flex|box-direction|box-decoration-break|box-align|box|bottom-width|bottom-style|bottom-right-radius|bottom-left-radius|bottom-color|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-length|border-left-width|border-left-style|border-left-color|border-left|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|bookmark-target|bookmark-level|bookmark-label|bookmark|binding|bidi|before|baseline-shift|baseline|balance|background-blend-mode|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-break|background-attachment|background|azimuth|attachment|appearance|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-duration|animation-direction|animation-delay|animation-fill-mode|animation|alignment-baseline|alignment-adjust|alignment|align-self|align-last|align-items|align-content|align|after|adjust|will-change)|(writing-mode|text-anchor|stroke-width|stroke-opacity|stroke-miterlimit|stroke-linejoin|stroke-linecap|stroke-dashoffset|stroke-dasharray|stroke|stop-opacity|stop-color|shape-rendering|marker-start|marker-mid|marker-end|lighting-color|kerning|image-rendering|glyph-orientation-vertical|glyph-orientation-horizontal|flood-opacity|flood-color|fill-rule|fill-opacity|fill|enable-background|color-rendering|color-interpolation-filters|color-interpolation|clip-rule|clip-path)|([-A-Z_a-z][-0-9A-Z_a-z]*))(?!([^\\\\n\\\\S]*&)|([^\\\\n\\\\S]*\\\\{))(?=:|([^\\\\n\\\\S]+\\\\S))","beginCaptures":{"1":{"name":"support.type.property-name.css"},"2":{"name":"support.type.property-name.svg.css"},"3":{"name":"support.function.mixin.stylus"}},"end":"(;)|(?=[\\\\n}]|$)","endCaptures":{"1":{"name":"punctuation.terminator.rule.css"}},"patterns":[{"include":"#property_value"}]},"property_value":{"begin":"\\\\G(?:(:)|(\\\\s))(\\\\s*)(?!&)","beginCaptures":{"1":{"name":"punctuation.separator.key-value.css"},"2":{"name":"punctuation.separator.key-value.css"}},"end":"(?=[\\\\n;}])","endCaptures":{"1":{"name":"punctuation.terminator.rule.css"}},"name":"meta.property-value.css","patterns":[{"include":"#property_values"},{"match":"\\\\N+?"}]},"property_values":{"patterns":[{"include":"#function"},{"include":"#comment"},{"include":"#language_keywords"},{"include":"#language_constants"},{"match":"(?=\\\\w)(?<![-\\\\w])(wrap-reverse|wrap|whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|unicase|underline|ultra-expanded|ultra-condensed|transparent|transform|top|titling-caps|thin|thick|text-top|text-bottom|text|tb-rl|table-row-group|table-row|table-header-group|table-footer-group|table-column-group|table-column|table-cell|table|sw-resize|super|strict|stretch|step-start|step-end|static|square|space-between|space-around|space|solid|soft-light|small-caps|separate|semi-expanded|semi-condensed|se-resize|scroll|screen|saturation|s-resize|running|rtl|row-reverse|row-resize|row|round|right|ridge|reverse|repeat-y|repeat-x|repeat|relative|progressive|progress|pre-wrap|pre-line|pre|pointer|petite-caps|paused|pan-x|pan-left|pan-right|pan-y|pan-up|pan-down|padding-box|overline|overlay|outside|outset|optimizeSpeed|optimizeLegibility|opacity|oblique|nw-resize|nowrap|not-allowed|normal|none|no-repeat|no-drop|newspaper|ne-resize|n-resize|multiply|move|middle|medium|max-height|manipulation|main-size|luminosity|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|local|list-item|linear(?!-)|line-through|line-edge|line|lighter|lighten|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline-block|inline|inherit|infinite|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|hue|horizontal|hidden|help|hard-light|hand|groove|geometricPrecision|forwards|flex-start|flex-end|flex|fixed|extra-expanded|extra-condensed|expanded|exclusion|ellipsis|ease-out|ease-in-out|ease-in|ease|e-resize|double|dotted|distribute-space|distribute-letter|distribute-all-lines|distribute|disc|disabled|difference|default|decimal|dashed|darken|currentColor|crosshair|cover|content-box|contain|condensed|column-reverse|column|color-dodge|color-burn|color|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|border-box|bolder|bold|block|bidi-override|below|baseline|balance|backwards|auto|antialiased|always|alternate-reverse|alternate|all-small-caps|all-scroll|all-petite-caps|all|absolute)(?<=\\\\w)(?![-\\\\w])","name":"support.constant.property-value.css"},{"match":"(?=\\\\w)(?<![-\\\\w])(start|sRGB|square|round|optimizeSpeed|optimizeQuality|nonzero|miter|middle|linearRGB|geometricPrecision |evenodd |end |crispEdges|butt|bevel)(?<=\\\\w)(?![-\\\\w])","name":"support.constant.property-value.svg.css"},{"include":"#font_name"},{"include":"#numeric"},{"include":"#color"},{"include":"#string"},{"match":"!\\\\s*important","name":"keyword.other.important.css"},{"include":"#operator"},{"include":"#stylus_keywords"},{"include":"#property_variable"}]},"property_variable":{"patterns":[{"include":"#variable"},{"match":"(?<!^)(@[-A-Z_a-z][-0-9A-Z_a-z]*)","name":"variable.property.stylus"}]},"selector":{"patterns":[{"match":"(?=\\\\w)(?<![-\\\\w])(a|abbr|acronym|address|area|article|aside|audio|b|base|bdi|bdo|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|data|datalist|dd|del|details|dfn|dialog|div|dl|dt|em|embed|eventsource|fieldset|figure|figcaption|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|main|map|mark|math|menu|menuitem|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|picture|pre|progress|q|rb|rp|rtc??|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|svg|table|tbody|td|template|textarea|tfoot|th|thead|time|title|tr|track|tt|ul??|var|video|wbr)(?<=\\\\w)(?![-\\\\w])","name":"entity.name.tag.css"},{"match":"(?=\\\\w)(?<![-\\\\w])(vkern|view|use|tspan|tref|title|textPath|text|symbol|switch|svg|style|stop|set|script|rect|radialGradient|polyline|polygon|pattern|path|mpath|missing-glyph|metadata|mask|marker|linearGradient|line|image|hkern|glyphRef|glyph|g|foreignObject|font-face-uri|font-face-src|font-face-name|font-face-format|font-face|font|filter|feTurbulence|feTile|feSpotLight|feSpecularLighting|fePointLight|feOffset|feMorphology|feMergeNode|feMerge|feImage|feGaussianBlur|feFuncR|feFuncG|feFuncB|feFuncA|feFlood|feDistantLight|feDisplacementMap|feDiffuseLighting|feConvolveMatrix|feComposite|feComponentTransfer|feColorMatrix|feBlend|ellipse|desc|defs|cursor|color-profile|clipPath|circle|animateTransform|animateMotion|animateColor|animate|altGlyphItem|altGlyphDef|altGlyph|a)(?<=\\\\w)(?![-\\\\w])","name":"entity.name.tag.svg.css"},{"match":"\\\\s*(,)\\\\s*","name":"meta.selector.stylus"},{"match":"\\\\*","name":"meta.selector.stylus"},{"captures":{"2":{"name":"entity.other.attribute-name.parent-selector-suffix.stylus"}},"match":"\\\\s*(&)([-0-9A-Z_a-z]+)\\\\s*","name":"meta.selector.stylus"},{"match":"\\\\s*(&)\\\\s*","name":"meta.selector.stylus"},{"captures":{"1":{"name":"punctuation.definition.entity.css"}},"match":"(\\\\.)[-0-9A-Z_a-z]+","name":"entity.other.attribute-name.class.css"},{"captures":{"1":{"name":"punctuation.definition.entity.css"}},"match":"(#)[A-Za-z][-0-9A-Z_a-z]*","name":"entity.other.attribute-name.id.css"},{"captures":{"1":{"name":"punctuation.definition.entity.css"}},"match":"(:+)(after|before|content|first-letter|first-line|host|(-(moz|webkit|ms)-)?selection)\\\\b","name":"entity.other.attribute-name.pseudo-element.css"},{"captures":{"1":{"name":"punctuation.definition.entity.css"}},"match":"(:)((first|last)-child|(first|last|only)-of-type|empty|root|target|first|left|right)\\\\b","name":"entity.other.attribute-name.pseudo-class.css"},{"captures":{"1":{"name":"punctuation.definition.entity.css"}},"match":"(:)(checked|enabled|default|disabled|indeterminate|invalid|optional|required|valid)\\\\b","name":"entity.other.attribute-name.pseudo-class.ui-state.css"},{"begin":"((:)not)(\\\\()","beginCaptures":{"1":{"name":"entity.other.attribute-name.pseudo-class.css"},"2":{"name":"punctuation.definition.entity.css"},"3":{"name":"punctuation.section.function.css"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.function.css"}},"patterns":[{"include":"#selector"}]},{"captures":{"1":{"name":"entity.other.attribute-name.pseudo-class.css"},"2":{"name":"punctuation.definition.entity.css"},"3":{"name":"punctuation.section.function.css"},"4":{"name":"constant.numeric.css"},"5":{"name":"punctuation.section.function.css"}},"match":"((:)nth-(?:(?:last-)?child|(?:last-)?of-type))(\\\\()(-?(?:\\\\d+n?|n)(?:\\\\+\\\\d+)?|even|odd)(\\\\))"},{"captures":{"1":{"name":"entity.other.attribute-name.pseudo-class.css"},"2":{"name":"puncutation.definition.entity.css"},"3":{"name":"punctuation.section.function.css"},"4":{"name":"constant.language.css"},"5":{"name":"punctuation.section.function.css"}},"match":"((:)dir)\\\\s*(?:(\\\\()(ltr|rtl)?(\\\\)))?"},{"captures":{"1":{"name":"entity.other.attribute-name.pseudo-class.css"},"2":{"name":"puncutation.definition.entity.css"},"3":{"name":"punctuation.section.function.css"},"4":{"name":"constant.language.css"},"6":{"name":"punctuation.section.function.css"}},"match":"((:)lang)\\\\s*(?:(\\\\()(\\\\w+(-\\\\w+)?)?(\\\\)))?"},{"captures":{"1":{"name":"punctuation.definition.entity.css"}},"match":"(:)(active|hover|link|visited|focus)\\\\b","name":"entity.other.attribute-name.pseudo-class.css"},{"captures":{"1":{"name":"punctuation.definition.entity.css"}},"match":"(::)(shadow)\\\\b","name":"entity.other.attribute-name.pseudo-class.css"},{"captures":{"1":{"name":"punctuation.definition.entity.css"},"2":{"name":"entity.other.attribute-name.attribute.css"},"3":{"name":"punctuation.separator.operator.css"},"4":{"name":"string.unquoted.attribute-value.css"},"5":{"name":"string.quoted.double.attribute-value.css"},"6":{"name":"punctuation.definition.string.begin.css"},"7":{"name":"punctuation.definition.string.end.css"},"8":{"name":"punctuation.definition.entity.css"}},"match":"(?i)(\\\\[)\\\\s*(-?[\\\\\\\\_a-z[:^ascii:]][-0-9\\\\\\\\_a-z[:^ascii:]]*)(?:\\\\s*([$*^|~]?=)\\\\s*(?:(-?[\\\\\\\\_a-z[:^ascii:]][-0-9\\\\\\\\_a-z[:^ascii:]]*)|((?>([\\"'])(?:[^\\\\\\\\]|\\\\\\\\.)*?(\\\\6)))))?\\\\s*(])","name":"meta.attribute-selector.css"},{"include":"#interpolation"},{"include":"#variable"}]},"string":{"patterns":[{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.css"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.css"}},"name":"string.quoted.double.css","patterns":[{"match":"\\\\\\\\(\\\\h{1,6}|.)","name":"constant.character.escape.css"}]},{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.css"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.css"}},"name":"string.quoted.single.css","patterns":[{"match":"\\\\\\\\(\\\\h{1,6}|.)","name":"constant.character.escape.css"}]}]},"variable":{"match":"(\\\\$[-A-Z_a-z][-0-9A-Z_a-z]*)","name":"variable.stylus"},"variable_declaration":{"begin":"^[^\\\\n\\\\S]*(\\\\$?[-A-Z_a-z][-0-9A-Z_a-z]*)[^\\\\n\\\\S]*([:?]??=)","beginCaptures":{"1":{"name":"variable.stylus"},"2":{"name":"keyword.operator.stylus"}},"end":"(\\\\n)|(;)|(?=})","endCaptures":{"2":{"name":"punctuation.terminator.rule.css"}},"patterns":[{"include":"#property_values"}]}},"scopeName":"source.stylus","aliases":["styl"]}`)),t=[e];export{t as a};
|
|
3
|
+
//# sourceMappingURL=chunk-2RR26LLP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../node_modules/@shikijs/langs/dist/stylus.mjs"],"sourcesContent":["const lang = Object.freeze(JSON.parse(\"{\\\"displayName\\\":\\\"Stylus\\\",\\\"fileTypes\\\":[\\\"styl\\\",\\\"stylus\\\",\\\"css.styl\\\",\\\"css.stylus\\\"],\\\"name\\\":\\\"stylus\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"#comment\\\"},{\\\"include\\\":\\\"#at_rule\\\"},{\\\"include\\\":\\\"#language_keywords\\\"},{\\\"include\\\":\\\"#language_constants\\\"},{\\\"include\\\":\\\"#variable_declaration\\\"},{\\\"include\\\":\\\"#function\\\"},{\\\"include\\\":\\\"#selector\\\"},{\\\"include\\\":\\\"#declaration\\\"},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"punctuation.section.property-list.begin.css\\\"},\\\"2\\\":{\\\"name\\\":\\\"punctuation.section.property-list.end.css\\\"}},\\\"match\\\":\\\"(\\\\\\\\{)(})\\\",\\\"name\\\":\\\"meta.brace.curly.css\\\"},{\\\"match\\\":\\\"[{}]\\\",\\\"name\\\":\\\"meta.brace.curly.css\\\"},{\\\"include\\\":\\\"#numeric\\\"},{\\\"include\\\":\\\"#string\\\"},{\\\"include\\\":\\\"#operator\\\"}],\\\"repository\\\":{\\\"at_rule\\\":{\\\"patterns\\\":[{\\\"begin\\\":\\\"\\\\\\\\s*((@)(import|require))\\\\\\\\b\\\\\\\\s*\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.at-rule.import.stylus\\\"},\\\"2\\\":{\\\"name\\\":\\\"punctuation.definition.keyword.stylus\\\"}},\\\"end\\\":\\\"\\\\\\\\s*((?=;|$|\\\\\\\\n))\\\",\\\"endCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"punctuation.terminator.rule.css\\\"}},\\\"name\\\":\\\"meta.at-rule.import.css\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"#string\\\"}]},{\\\"begin\\\":\\\"\\\\\\\\s*((@)(extends?))\\\\\\\\b\\\\\\\\s*\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.at-rule.extend.stylus\\\"},\\\"2\\\":{\\\"name\\\":\\\"punctuation.definition.keyword.stylus\\\"}},\\\"end\\\":\\\"\\\\\\\\s*((?=;|$|\\\\\\\\n))\\\",\\\"endCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"punctuation.terminator.rule.css\\\"}},\\\"name\\\":\\\"meta.at-rule.extend.css\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"#selector\\\"}]},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.at-rule.fontface.stylus\\\"},\\\"2\\\":{\\\"name\\\":\\\"punctuation.definition.keyword.stylus\\\"}},\\\"match\\\":\\\"^\\\\\\\\s*((@)font-face)\\\\\\\\b\\\",\\\"name\\\":\\\"meta.at-rule.fontface.stylus\\\"},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.at-rule.css.stylus\\\"},\\\"2\\\":{\\\"name\\\":\\\"punctuation.definition.keyword.stylus\\\"}},\\\"match\\\":\\\"^\\\\\\\\s*((@)css)\\\\\\\\b\\\",\\\"name\\\":\\\"meta.at-rule.css.stylus\\\"},{\\\"begin\\\":\\\"\\\\\\\\s*((@)charset)\\\\\\\\b\\\\\\\\s*\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.at-rule.charset.stylus\\\"},\\\"2\\\":{\\\"name\\\":\\\"punctuation.definition.keyword.stylus\\\"}},\\\"end\\\":\\\"\\\\\\\\s*((?=;|$|\\\\\\\\n))\\\",\\\"name\\\":\\\"meta.at-rule.charset.stylus\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"#string\\\"}]},{\\\"begin\\\":\\\"\\\\\\\\s*((@)keyframes)\\\\\\\\b\\\\\\\\s+([-A-Z_a-z][-0-9A-Z_a-z]*)\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.at-rule.keyframes.stylus\\\"},\\\"2\\\":{\\\"name\\\":\\\"punctuation.definition.keyword.stylus\\\"},\\\"3\\\":{\\\"name\\\":\\\"entity.name.function.keyframe.stylus\\\"}},\\\"end\\\":\\\"\\\\\\\\s*((?=\\\\\\\\{|$|\\\\\\\\n))\\\",\\\"name\\\":\\\"meta.at-rule.keyframes.stylus\\\"},{\\\"begin\\\":\\\"(?=\\\\\\\\b((\\\\\\\\d+%|from\\\\\\\\b|to\\\\\\\\b)))\\\",\\\"end\\\":\\\"(?=([\\\\\\\\n{]))\\\",\\\"name\\\":\\\"meta.at-rule.keyframes.stylus\\\",\\\"patterns\\\":[{\\\"match\\\":\\\"\\\\\\\\b((\\\\\\\\d+%|from\\\\\\\\b|to\\\\\\\\b))\\\",\\\"name\\\":\\\"entity.other.attribute-name.stylus\\\"}]},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.at-rule.media.stylus\\\"},\\\"2\\\":{\\\"name\\\":\\\"punctuation.definition.keyword.stylus\\\"}},\\\"match\\\":\\\"^\\\\\\\\s*((@)media)\\\\\\\\b\\\",\\\"name\\\":\\\"meta.at-rule.media.stylus\\\"},{\\\"match\\\":\\\"(?=\\\\\\\\w)(?<![-\\\\\\\\w])(width|scan|resolution|orientation|monochrome|min-width|min-resolution|min-monochrome|min-height|min-device-width|min-device-height|min-device-aspect-ratio|min-color-index|min-color|min-aspect-ratio|max-width|max-resolution|max-monochrome|max-height|max-device-width|max-device-height|max-device-aspect-ratio|max-color-index|max-color|max-aspect-ratio|height|grid|device-width|device-height|device-aspect-ratio|color-index|color|aspect-ratio)(?<=\\\\\\\\w)(?![-\\\\\\\\w])\\\",\\\"name\\\":\\\"support.type.property-name.media-feature.media.css\\\"},{\\\"match\\\":\\\"(?=\\\\\\\\w)(?<![-\\\\\\\\w])(tv|tty|screen|projection|print|handheld|embossed|braille|aural|all)(?<=\\\\\\\\w)(?![-\\\\\\\\w])\\\",\\\"name\\\":\\\"support.constant.media-type.media.css\\\"},{\\\"match\\\":\\\"(?=\\\\\\\\w)(?<![-\\\\\\\\w])(portrait|landscape)(?<=\\\\\\\\w)(?![-\\\\\\\\w])\\\",\\\"name\\\":\\\"support.constant.property-value.media-property.media.css\\\"}]},\\\"char_escape\\\":{\\\"match\\\":\\\"\\\\\\\\\\\\\\\\(.)\\\",\\\"name\\\":\\\"constant.character.escape.stylus\\\"},\\\"color\\\":{\\\"patterns\\\":[{\\\"begin\\\":\\\"\\\\\\\\b(rgba??|hsla??)(\\\\\\\\()\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"support.function.color.css\\\"},\\\"2\\\":{\\\"name\\\":\\\"punctuation.section.function.css\\\"}},\\\"end\\\":\\\"(\\\\\\\\))\\\",\\\"endCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"punctuation.section.function.css\\\"}},\\\"name\\\":\\\"meta.function.color.css\\\",\\\"patterns\\\":[{\\\"match\\\":\\\"\\\\\\\\s*(,)\\\\\\\\s*\\\",\\\"name\\\":\\\"punctuation.separator.parameter.css\\\"},{\\\"include\\\":\\\"#numeric\\\"},{\\\"include\\\":\\\"#property_variable\\\"}]},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"punctuation.definition.constant.css\\\"}},\\\"match\\\":\\\"(#)(\\\\\\\\h{3}|\\\\\\\\h{6})\\\\\\\\b\\\",\\\"name\\\":\\\"constant.other.color.rgb-value.css\\\"},{\\\"match\\\":\\\"\\\\\\\\b(aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow)\\\\\\\\b\\\",\\\"name\\\":\\\"support.constant.color.w3c-standard-color-name.css\\\"},{\\\"match\\\":\\\"\\\\\\\\b(aliceblue|antiquewhite|aquamarine|azure|beige|bisque|blanchedalmond|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|gainsboro|ghostwhite|gold|goldenrod|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|limegreen|linen|magenta|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|oldlace|olivedrab|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|thistle|tomato|turquoise|violet|wheat|whitesmoke|yellowgreen)\\\\\\\\b\\\",\\\"name\\\":\\\"support.constant.color.w3c-extended-color-name.css\\\"}]},\\\"comment\\\":{\\\"patterns\\\":[{\\\"include\\\":\\\"#comment_block\\\"},{\\\"include\\\":\\\"#comment_line\\\"}]},\\\"comment_block\\\":{\\\"begin\\\":\\\"/\\\\\\\\*\\\",\\\"beginCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.comment.begin.css\\\"}},\\\"end\\\":\\\"\\\\\\\\*/\\\",\\\"endCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.comment.end.css\\\"}},\\\"name\\\":\\\"comment.block.css\\\"},\\\"comment_line\\\":{\\\"begin\\\":\\\"(^[\\\\\\\\t ]+)?(?=//)\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"punctuation.whitespace.comment.leading.stylus\\\"}},\\\"end\\\":\\\"(?!\\\\\\\\G)\\\",\\\"patterns\\\":[{\\\"begin\\\":\\\"//\\\",\\\"beginCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.comment.stylus\\\"}},\\\"end\\\":\\\"(?=\\\\\\\\n)\\\",\\\"name\\\":\\\"comment.line.double-slash.stylus\\\"}]},\\\"declaration\\\":{\\\"begin\\\":\\\"((?<=^)[^\\\\\\\\n\\\\\\\\S]+)|((?<=;)[^\\\\\\\\n\\\\\\\\S]*)|((?<=\\\\\\\\{)[^\\\\\\\\n\\\\\\\\S]*)\\\",\\\"end\\\":\\\"(?=\\\\\\\\n)|(;)|(?=})|(\\\\\\\\n)\\\",\\\"endCaptures\\\":{\\\"2\\\":{\\\"name\\\":\\\"punctuation.terminator.rule.css\\\"}},\\\"name\\\":\\\"meta.property-list.css\\\",\\\"patterns\\\":[{\\\"match\\\":\\\"(?<![-\\\\\\\\w])--[-A-Z_a-z[^\\\\\\\\x00-\\\\\\\\x7F]](?:[-0-9A-Z_a-z[^\\\\\\\\x00-\\\\\\\\x7F]]|\\\\\\\\\\\\\\\\(?:\\\\\\\\h{1,6}|.))*\\\",\\\"name\\\":\\\"variable.css\\\"},{\\\"include\\\":\\\"#language_keywords\\\"},{\\\"include\\\":\\\"#language_constants\\\"},{\\\"match\\\":\\\"(?<=^)[^\\\\\\\\n\\\\\\\\S]+(\\\\\\\\n)\\\"},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"support.type.property-name.css\\\"},\\\"2\\\":{\\\"name\\\":\\\"punctuation.separator.key-value.css\\\"},\\\"3\\\":{\\\"name\\\":\\\"variable.section.css\\\"}},\\\"match\\\":\\\"\\\\\\\\G\\\\\\\\s*(counter-(?:reset|increment))(?:(:)|[^\\\\\\\\n\\\\\\\\S])[^\\\\\\\\n\\\\\\\\S]*([-A-Z_a-z][-0-9A-Z_a-z]*)\\\",\\\"name\\\":\\\"meta.property.counter.css\\\"},{\\\"begin\\\":\\\"\\\\\\\\G\\\\\\\\s*(filter)(?:(:)|[^\\\\\\\\n\\\\\\\\S])[^\\\\\\\\n\\\\\\\\S]*\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"support.type.property-name.css\\\"},\\\"2\\\":{\\\"name\\\":\\\"punctuation.separator.key-value.css\\\"}},\\\"end\\\":\\\"(?=[\\\\\\\\n;}]|$)\\\",\\\"name\\\":\\\"meta.property.filter.css\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"#function\\\"},{\\\"include\\\":\\\"#property_values\\\"}]},{\\\"include\\\":\\\"#property\\\"},{\\\"include\\\":\\\"#interpolation\\\"},{\\\"include\\\":\\\"$self\\\"}]},\\\"font_name\\\":{\\\"match\\\":\\\"\\\\\\\\b((?i:arial|century|comic|courier|cursive|fantasy|futura|garamond|georgia|helvetica|impact|lucida|monospace|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif))\\\\\\\\b\\\",\\\"name\\\":\\\"support.constant.font-name.css\\\"},\\\"function\\\":{\\\"begin\\\":\\\"(?=[-A-Z_a-z][-0-9A-Z_a-z]*\\\\\\\\()\\\",\\\"end\\\":\\\"(\\\\\\\\))\\\",\\\"endCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"punctuation.section.function.css\\\"}},\\\"patterns\\\":[{\\\"begin\\\":\\\"(format|url|local)(\\\\\\\\()\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"support.function.misc.css\\\"},\\\"2\\\":{\\\"name\\\":\\\"punctuation.section.function.css\\\"}},\\\"end\\\":\\\"(?=\\\\\\\\))\\\",\\\"name\\\":\\\"meta.function.misc.css\\\",\\\"patterns\\\":[{\\\"match\\\":\\\"(?<=\\\\\\\\()[^)\\\\\\\\s]*(?=\\\\\\\\))\\\",\\\"name\\\":\\\"string.css\\\"},{\\\"include\\\":\\\"#string\\\"},{\\\"include\\\":\\\"#variable\\\"},{\\\"include\\\":\\\"#operator\\\"},{\\\"match\\\":\\\"\\\\\\\\s*\\\"}]},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"support.function.misc.counter.css\\\"},\\\"2\\\":{\\\"name\\\":\\\"punctuation.section.function.css\\\"},\\\"3\\\":{\\\"name\\\":\\\"variable.section.css\\\"}},\\\"match\\\":\\\"(counter)(\\\\\\\\()([-A-Z_a-z][-0-9A-Z_a-z]*)(?=\\\\\\\\))\\\",\\\"name\\\":\\\"meta.function.misc.counter.css\\\"},{\\\"begin\\\":\\\"(counters)(\\\\\\\\()\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"support.function.misc.counters.css\\\"},\\\"2\\\":{\\\"name\\\":\\\"punctuation.section.function.css\\\"}},\\\"end\\\":\\\"(?=\\\\\\\\))\\\",\\\"name\\\":\\\"meta.function.misc.counters.css\\\",\\\"patterns\\\":[{\\\"match\\\":\\\"\\\\\\\\G[-A-Z_a-z][-0-9A-Z_a-z]*\\\",\\\"name\\\":\\\"variable.section.css\\\"},{\\\"match\\\":\\\"\\\\\\\\s*(,)\\\\\\\\s*\\\",\\\"name\\\":\\\"punctuation.separator.parameter.css\\\"},{\\\"include\\\":\\\"#string\\\"},{\\\"include\\\":\\\"#interpolation\\\"}]},{\\\"begin\\\":\\\"(attr)(\\\\\\\\()\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"support.function.misc.attr.css\\\"},\\\"2\\\":{\\\"name\\\":\\\"punctuation.section.function.css\\\"}},\\\"end\\\":\\\"(?=\\\\\\\\))\\\",\\\"name\\\":\\\"meta.function.misc.attr.css\\\",\\\"patterns\\\":[{\\\"match\\\":\\\"\\\\\\\\G[-A-Z_a-z][-0-9A-Z_a-z]*\\\",\\\"name\\\":\\\"entity.other.attribute-name.attribute.css\\\"},{\\\"match\\\":\\\"(?<=[-0-9A-Z_a-z])\\\\\\\\s*\\\\\\\\b(string|color|url|integer|number|length|em|ex|px|rem|vw|vh|vmin|vmax|mm|cm|in|pt|pc|angle|deg|grad|rad|time|s|ms|frequency|Hz|kHz|%)\\\\\\\\b\\\",\\\"name\\\":\\\"support.type.attr.css\\\"},{\\\"match\\\":\\\"\\\\\\\\s*(,)\\\\\\\\s*\\\",\\\"name\\\":\\\"punctuation.separator.parameter.css\\\"},{\\\"include\\\":\\\"#string\\\"},{\\\"include\\\":\\\"#interpolation\\\"}]},{\\\"begin\\\":\\\"(calc)(\\\\\\\\()\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"support.function.misc.calc.css\\\"},\\\"2\\\":{\\\"name\\\":\\\"punctuation.section.function.css\\\"}},\\\"end\\\":\\\"(?=\\\\\\\\))\\\",\\\"name\\\":\\\"meta.function.misc.calc.css\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"#property_values\\\"}]},{\\\"begin\\\":\\\"(cubic-bezier)(\\\\\\\\()\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"support.function.timing.cubic-bezier.css\\\"},\\\"2\\\":{\\\"name\\\":\\\"punctuation.section.function.css\\\"}},\\\"end\\\":\\\"(?=\\\\\\\\))\\\",\\\"name\\\":\\\"meta.function.timing.cubic-bezier.css\\\",\\\"patterns\\\":[{\\\"match\\\":\\\"\\\\\\\\s*(,)\\\\\\\\s*\\\",\\\"name\\\":\\\"punctuation.separator.parameter.css\\\"},{\\\"include\\\":\\\"#numeric\\\"},{\\\"include\\\":\\\"#interpolation\\\"}]},{\\\"begin\\\":\\\"(steps)(\\\\\\\\()\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"support.function.timing.steps.css\\\"},\\\"2\\\":{\\\"name\\\":\\\"punctuation.section.function.css\\\"}},\\\"end\\\":\\\"(?=\\\\\\\\))\\\",\\\"name\\\":\\\"meta.function.timing.steps.css\\\",\\\"patterns\\\":[{\\\"match\\\":\\\"\\\\\\\\s*(,)\\\\\\\\s*\\\",\\\"name\\\":\\\"punctuation.separator.parameter.css\\\"},{\\\"include\\\":\\\"#numeric\\\"},{\\\"match\\\":\\\"\\\\\\\\b(start|end)\\\\\\\\b\\\",\\\"name\\\":\\\"support.constant.timing.steps.direction.css\\\"},{\\\"include\\\":\\\"#interpolation\\\"}]},{\\\"begin\\\":\\\"((?:linear|radial|repeating-linear|repeating-radial)-gradient)(\\\\\\\\()\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"support.function.gradient.css\\\"},\\\"2\\\":{\\\"name\\\":\\\"punctuation.section.function.css\\\"}},\\\"end\\\":\\\"(?=\\\\\\\\))\\\",\\\"name\\\":\\\"meta.function.gradient.css\\\",\\\"patterns\\\":[{\\\"match\\\":\\\"\\\\\\\\s*(,)\\\\\\\\s*\\\",\\\"name\\\":\\\"punctuation.separator.parameter.css\\\"},{\\\"include\\\":\\\"#numeric\\\"},{\\\"include\\\":\\\"#color\\\"},{\\\"match\\\":\\\"\\\\\\\\b(to|bottom|right|left|top|circle|ellipse|center|closest-side|closest-corner|farthest-side|farthest-corner|at)\\\\\\\\b\\\",\\\"name\\\":\\\"support.constant.gradient.css\\\"},{\\\"include\\\":\\\"#interpolation\\\"}]},{\\\"begin\\\":\\\"(blur|brightness|contrast|grayscale|hue-rotate|invert|opacity|saturate|sepia)(\\\\\\\\()\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"support.function.filter.css\\\"},\\\"2\\\":{\\\"name\\\":\\\"punctuation.section.function.css\\\"}},\\\"end\\\":\\\"(?=\\\\\\\\))\\\",\\\"name\\\":\\\"meta.function.filter.css\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"#numeric\\\"},{\\\"include\\\":\\\"#property_variable\\\"},{\\\"include\\\":\\\"#interpolation\\\"}]},{\\\"begin\\\":\\\"(drop-shadow)(\\\\\\\\()\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"support.function.filter.drop-shadow.css\\\"},\\\"2\\\":{\\\"name\\\":\\\"punctuation.section.function.css\\\"}},\\\"end\\\":\\\"(?=\\\\\\\\))\\\",\\\"name\\\":\\\"meta.function.filter.drop-shadow.css\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"#numeric\\\"},{\\\"include\\\":\\\"#color\\\"},{\\\"include\\\":\\\"#property_variable\\\"},{\\\"include\\\":\\\"#interpolation\\\"}]},{\\\"begin\\\":\\\"(matrix|matrix3d|perspective|rotate|rotate3d|rotate[Xx]|rotate[Yy]|rotate[Zz]|scale|scale3d|scale[Xx]|scale[Yy]|scale[Zz]|skew[Xx]??|skew[Yy]|translate|translate3d|translate[Xx]|translate[Yy]|translate[Zz])(\\\\\\\\()\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"support.function.transform.css\\\"},\\\"2\\\":{\\\"name\\\":\\\"punctuation.section.function.css\\\"}},\\\"end\\\":\\\"(?=\\\\\\\\))\\\",\\\"name\\\":\\\"meta.function.transform.css\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"#numeric\\\"},{\\\"include\\\":\\\"#property_variable\\\"},{\\\"include\\\":\\\"#interpolation\\\"}]},{\\\"match\\\":\\\"(url|local|format|counters??|attr|calc)(?=\\\\\\\\()\\\",\\\"name\\\":\\\"support.function.misc.css\\\"},{\\\"match\\\":\\\"(cubic-bezier|steps)(?=\\\\\\\\()\\\",\\\"name\\\":\\\"support.function.timing.css\\\"},{\\\"match\\\":\\\"((?:linear|radial|repeating-linear|repeating-radial)-gradient)(?=\\\\\\\\()\\\",\\\"name\\\":\\\"support.function.gradient.css\\\"},{\\\"match\\\":\\\"(blur|brightness|contrast|drop-shadow|grayscale|hue-rotate|invert|opacity|saturate|sepia)(?=\\\\\\\\()\\\",\\\"name\\\":\\\"support.function.filter.css\\\"},{\\\"match\\\":\\\"(matrix|matrix3d|perspective|rotate|rotate3d|rotate[Xx]|rotate[Yy]|rotate[Zz]|scale|scale3d|scale[Xx]|scale[Yy]|scale[Zz]|skew[Xx]??|skew[Yy]|translate|translate3d|translate[Xx]|translate[Yy]|translate[Zz])(?=\\\\\\\\()\\\",\\\"name\\\":\\\"support.function.transform.css\\\"},{\\\"begin\\\":\\\"([-A-Z_a-z][-0-9A-Z_a-z]*)(\\\\\\\\()\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"entity.name.function.stylus\\\"},\\\"2\\\":{\\\"name\\\":\\\"punctuation.section.function.css\\\"}},\\\"end\\\":\\\"(?=\\\\\\\\))\\\",\\\"name\\\":\\\"meta.function.stylus\\\",\\\"patterns\\\":[{\\\"match\\\":\\\"--[-A-Z_a-z[^\\\\\\\\x00-\\\\\\\\x7F]](?:[-0-9A-Z_a-z[^\\\\\\\\x00-\\\\\\\\x7F]]|\\\\\\\\\\\\\\\\(?:\\\\\\\\h{1,6}|.))*\\\",\\\"name\\\":\\\"variable.argument.stylus\\\"},{\\\"match\\\":\\\"\\\\\\\\s*(,)\\\\\\\\s*\\\",\\\"name\\\":\\\"punctuation.separator.parameter.css\\\"},{\\\"include\\\":\\\"#interpolation\\\"},{\\\"include\\\":\\\"#property_values\\\"}]},{\\\"match\\\":\\\"\\\\\\\\(\\\",\\\"name\\\":\\\"punctuation.section.function.css\\\"}]},\\\"interpolation\\\":{\\\"begin\\\":\\\"(\\\\\\\\{)[^\\\\\\\\n\\\\\\\\S]*(?=[^;=]*[^\\\\\\\\n\\\\\\\\S]*})\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"meta.brace.curly\\\"}},\\\"end\\\":\\\"[^\\\\\\\\n\\\\\\\\S]*(})|\\\\\\\\n|$\\\",\\\"endCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"meta.brace.curly\\\"}},\\\"name\\\":\\\"meta.interpolation.stylus\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"#variable\\\"},{\\\"include\\\":\\\"#numeric\\\"},{\\\"include\\\":\\\"#string\\\"},{\\\"include\\\":\\\"#operator\\\"}]},\\\"language_constants\\\":{\\\"match\\\":\\\"\\\\\\\\b(true|false|null)\\\\\\\\b\\\",\\\"name\\\":\\\"constant.language.stylus\\\"},\\\"language_keywords\\\":{\\\"patterns\\\":[{\\\"match\\\":\\\"(\\\\\\\\b|\\\\\\\\s)(return|else|for|unless|if|else)\\\\\\\\b\\\",\\\"name\\\":\\\"keyword.control.stylus\\\"},{\\\"match\\\":\\\"(\\\\\\\\b|\\\\\\\\s)(!important|in|is defined|is a)\\\\\\\\b\\\",\\\"name\\\":\\\"keyword.other.stylus\\\"},{\\\"match\\\":\\\"\\\\\\\\barguments\\\\\\\\b\\\",\\\"name\\\":\\\"variable.language.stylus\\\"}]},\\\"numeric\\\":{\\\"patterns\\\":[{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.other.unit.css\\\"}},\\\"match\\\":\\\"(?<![-\\\\\\\\w])(?:[-+]?[0-9]+(?:\\\\\\\\.[0-9]+)?|\\\\\\\\.[0-9]+)((?:px|pt|ch|cm|mm|in|r?em|ex|pc|deg|g?rad|dpi|dpcm|dppx|fr|ms|s|turn|vh|vmax|vmin|vw)\\\\\\\\b|%)?\\\",\\\"name\\\":\\\"constant.numeric.css\\\"}]},\\\"operator\\\":{\\\"patterns\\\":[{\\\"match\\\":\\\"((?:[!+:?~]|(\\\\\\\\s-\\\\\\\\s)|\\\\\\\\*?\\\\\\\\*|[%/]|(\\\\\\\\.)?\\\\\\\\.\\\\\\\\.|[<>]|[-%*+/:<-?]?=|!=)|\\\\\\\\b(?:in|is(?:nt)?|(?<!:)not|or|and)\\\\\\\\b)\\\",\\\"name\\\":\\\"keyword.operator.stylus\\\"},{\\\"include\\\":\\\"#char_escape\\\"}]},\\\"property\\\":{\\\"begin\\\":\\\"\\\\\\\\G\\\\\\\\s*(?:(-webkit-[-A-Za-z]+|-moz-[-A-Za-z]+|-o-[-A-Za-z]+|-ms-[-A-Za-z]+|-khtml-[-A-Za-z]+|zoom|z-index|[xy]|wrap|word-wrap|word-spacing|word-break|word|width|widows|white-space-collapse|white-space|white|weight|volume|voice-volume|voice-stress|voice-rate|voice-pitch-range|voice-pitch|voice-family|voice-duration|voice-balance|voice|visibility|vertical-align|variant|user-select|up|unicode-bidi|unicode-range|unicode|trim|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform|touch-action|top-width|top-style|top-right-radius|top-left-radius|top-color|top|timing-function|text-wrap|text-transform|text-shadow|text-replace|text-rendering|text-overflow|text-outline|text-justify|text-indent|text-height|text-emphasis|text-decoration|text-align-last|text-align|text|target-position|target-new|target-name|target|table-layout|tab-size|style-type|style-position|style-image|style|string-set|stretch|stress|stacking-strategy|stacking-shift|stacking-ruby|stacking|src|speed|speech-rate|speech|speak-punctuation|speak-numeral|speak-header|speak|span|spacing|space-collapse|space|sizing|size-adjust|size|shadow|respond-to|rule-width|rule-style|rule-color|rule|ruby-span|ruby-position|ruby-overhang|ruby-align|ruby|rows|rotation-point|rotation|role|right-width|right-style|right-color|right|richness|rest-before|rest-after|rest|resource|resize|reset|replace|repeat|rendering-intent|rate|radius|quotes|punctuation-trim|punctuation|property|profile|presentation-level|presentation|position|pointer-events|point|play-state|play-during|play-count|pitch-range|pitch|phonemes|pause-before|pause-after|pause|page-policy|page-break-inside|page-break-before|page-break-after|page|padding-top|padding-right|padding-left|padding-bottom|padding|pack|overhang|overflow-y|overflow-x|overflow-style|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|origin|orientation|orient|ordinal-group|order|opacity|offset|numeral|new|nav-up|nav-right|nav-left|nav-index|nav-down|nav|name|move-to|model|mix-blend-mode|min-width|min-height|min|max-width|max-height|max|marquee-style|marquee-speed|marquee-play-count|marquee-direction|marquee|marks|mark-before|mark-after|mark|margin-top|margin-right|margin-left|margin-bottom|margin|mask-image|list-style-type|list-style-position|list-style-image|list-style|list|lines|line-stacking-strategy|line-stacking-shift|line-stacking-ruby|line-stacking|line-height|line-break|level|letter-spacing|length|left-width|left-style|left-color|left|label|justify-content|justify|iteration-count|inline-box-align|initial-value|initial-size|initial-before-align|initial-before-adjust|initial-after-align|initial-after-adjust|index|indent|increment|image-resolution|image-orientation|image|icon|hyphens|hyphenate-resource|hyphenate-lines|hyphenate-character|hyphenate-before|hyphenate-after|hyphenate|height|header|hanging-punctuation|gap|grid|grid-area|grid-auto-columns|grid-auto-flow|grid-auto-rows|grid-column|grid-column-end|grid-column-start|grid-row|grid-row-end|grid-row-start|grid-template|grid-template-areas|grid-template-columns|grid-template-rows|row-gap|gap|font-kerning|font-language-override|font-weight|font-variant-caps|font-variant|font-style|font-synthesis|font-stretch|font-size-adjust|font-size|font-family|font|float-offset|float|flex-wrap|flex-shrink|flex-grow|flex-group|flex-flow|flex-direction|flex-basis|flex|fit-position|fit|fill|filter|family|empty-cells|emphasis|elevation|duration|drop-initial-value|drop-initial-size|drop-initial-before-align|drop-initial-before-adjust|drop-initial-after-align|drop-initial-after-adjust|drop|down|dominant-baseline|display-role|display-model|display|direction|delay|decoration-break|decoration|cursor|cue-before|cue-after|cue|crop|counter-reset|counter-increment|counter|count|content|columns|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|column-break-before|column-break-after|column|color-profile|color|collapse|clip|clear|character|caption-side|break-inside|break-before|break-after|break|box-sizing|box-shadow|box-pack|box-orient|box-ordinal-group|box-lines|box-flex-group|box-flex|box-direction|box-decoration-break|box-align|box|bottom-width|bottom-style|bottom-right-radius|bottom-left-radius|bottom-color|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-length|border-left-width|border-left-style|border-left-color|border-left|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|bookmark-target|bookmark-level|bookmark-label|bookmark|binding|bidi|before|baseline-shift|baseline|balance|background-blend-mode|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-break|background-attachment|background|azimuth|attachment|appearance|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-duration|animation-direction|animation-delay|animation-fill-mode|animation|alignment-baseline|alignment-adjust|alignment|align-self|align-last|align-items|align-content|align|after|adjust|will-change)|(writing-mode|text-anchor|stroke-width|stroke-opacity|stroke-miterlimit|stroke-linejoin|stroke-linecap|stroke-dashoffset|stroke-dasharray|stroke|stop-opacity|stop-color|shape-rendering|marker-start|marker-mid|marker-end|lighting-color|kerning|image-rendering|glyph-orientation-vertical|glyph-orientation-horizontal|flood-opacity|flood-color|fill-rule|fill-opacity|fill|enable-background|color-rendering|color-interpolation-filters|color-interpolation|clip-rule|clip-path)|([-A-Z_a-z][-0-9A-Z_a-z]*))(?!([^\\\\\\\\n\\\\\\\\S]*&)|([^\\\\\\\\n\\\\\\\\S]*\\\\\\\\{))(?=:|([^\\\\\\\\n\\\\\\\\S]+\\\\\\\\S))\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"support.type.property-name.css\\\"},\\\"2\\\":{\\\"name\\\":\\\"support.type.property-name.svg.css\\\"},\\\"3\\\":{\\\"name\\\":\\\"support.function.mixin.stylus\\\"}},\\\"end\\\":\\\"(;)|(?=[\\\\\\\\n}]|$)\\\",\\\"endCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"punctuation.terminator.rule.css\\\"}},\\\"patterns\\\":[{\\\"include\\\":\\\"#property_value\\\"}]},\\\"property_value\\\":{\\\"begin\\\":\\\"\\\\\\\\G(?:(:)|(\\\\\\\\s))(\\\\\\\\s*)(?!&)\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"punctuation.separator.key-value.css\\\"},\\\"2\\\":{\\\"name\\\":\\\"punctuation.separator.key-value.css\\\"}},\\\"end\\\":\\\"(?=[\\\\\\\\n;}])\\\",\\\"endCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"punctuation.terminator.rule.css\\\"}},\\\"name\\\":\\\"meta.property-value.css\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"#property_values\\\"},{\\\"match\\\":\\\"\\\\\\\\N+?\\\"}]},\\\"property_values\\\":{\\\"patterns\\\":[{\\\"include\\\":\\\"#function\\\"},{\\\"include\\\":\\\"#comment\\\"},{\\\"include\\\":\\\"#language_keywords\\\"},{\\\"include\\\":\\\"#language_constants\\\"},{\\\"match\\\":\\\"(?=\\\\\\\\w)(?<![-\\\\\\\\w])(wrap-reverse|wrap|whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|unicase|underline|ultra-expanded|ultra-condensed|transparent|transform|top|titling-caps|thin|thick|text-top|text-bottom|text|tb-rl|table-row-group|table-row|table-header-group|table-footer-group|table-column-group|table-column|table-cell|table|sw-resize|super|strict|stretch|step-start|step-end|static|square|space-between|space-around|space|solid|soft-light|small-caps|separate|semi-expanded|semi-condensed|se-resize|scroll|screen|saturation|s-resize|running|rtl|row-reverse|row-resize|row|round|right|ridge|reverse|repeat-y|repeat-x|repeat|relative|progressive|progress|pre-wrap|pre-line|pre|pointer|petite-caps|paused|pan-x|pan-left|pan-right|pan-y|pan-up|pan-down|padding-box|overline|overlay|outside|outset|optimizeSpeed|optimizeLegibility|opacity|oblique|nw-resize|nowrap|not-allowed|normal|none|no-repeat|no-drop|newspaper|ne-resize|n-resize|multiply|move|middle|medium|max-height|manipulation|main-size|luminosity|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|local|list-item|linear(?!-)|line-through|line-edge|line|lighter|lighten|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline-block|inline|inherit|infinite|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|hue|horizontal|hidden|help|hard-light|hand|groove|geometricPrecision|forwards|flex-start|flex-end|flex|fixed|extra-expanded|extra-condensed|expanded|exclusion|ellipsis|ease-out|ease-in-out|ease-in|ease|e-resize|double|dotted|distribute-space|distribute-letter|distribute-all-lines|distribute|disc|disabled|difference|default|decimal|dashed|darken|currentColor|crosshair|cover|content-box|contain|condensed|column-reverse|column|color-dodge|color-burn|color|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|border-box|bolder|bold|block|bidi-override|below|baseline|balance|backwards|auto|antialiased|always|alternate-reverse|alternate|all-small-caps|all-scroll|all-petite-caps|all|absolute)(?<=\\\\\\\\w)(?![-\\\\\\\\w])\\\",\\\"name\\\":\\\"support.constant.property-value.css\\\"},{\\\"match\\\":\\\"(?=\\\\\\\\w)(?<![-\\\\\\\\w])(start|sRGB|square|round|optimizeSpeed|optimizeQuality|nonzero|miter|middle|linearRGB|geometricPrecision |evenodd |end |crispEdges|butt|bevel)(?<=\\\\\\\\w)(?![-\\\\\\\\w])\\\",\\\"name\\\":\\\"support.constant.property-value.svg.css\\\"},{\\\"include\\\":\\\"#font_name\\\"},{\\\"include\\\":\\\"#numeric\\\"},{\\\"include\\\":\\\"#color\\\"},{\\\"include\\\":\\\"#string\\\"},{\\\"match\\\":\\\"!\\\\\\\\s*important\\\",\\\"name\\\":\\\"keyword.other.important.css\\\"},{\\\"include\\\":\\\"#operator\\\"},{\\\"include\\\":\\\"#stylus_keywords\\\"},{\\\"include\\\":\\\"#property_variable\\\"}]},\\\"property_variable\\\":{\\\"patterns\\\":[{\\\"include\\\":\\\"#variable\\\"},{\\\"match\\\":\\\"(?<!^)(@[-A-Z_a-z][-0-9A-Z_a-z]*)\\\",\\\"name\\\":\\\"variable.property.stylus\\\"}]},\\\"selector\\\":{\\\"patterns\\\":[{\\\"match\\\":\\\"(?=\\\\\\\\w)(?<![-\\\\\\\\w])(a|abbr|acronym|address|area|article|aside|audio|b|base|bdi|bdo|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|data|datalist|dd|del|details|dfn|dialog|div|dl|dt|em|embed|eventsource|fieldset|figure|figcaption|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|main|map|mark|math|menu|menuitem|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|picture|pre|progress|q|rb|rp|rtc??|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|svg|table|tbody|td|template|textarea|tfoot|th|thead|time|title|tr|track|tt|ul??|var|video|wbr)(?<=\\\\\\\\w)(?![-\\\\\\\\w])\\\",\\\"name\\\":\\\"entity.name.tag.css\\\"},{\\\"match\\\":\\\"(?=\\\\\\\\w)(?<![-\\\\\\\\w])(vkern|view|use|tspan|tref|title|textPath|text|symbol|switch|svg|style|stop|set|script|rect|radialGradient|polyline|polygon|pattern|path|mpath|missing-glyph|metadata|mask|marker|linearGradient|line|image|hkern|glyphRef|glyph|g|foreignObject|font-face-uri|font-face-src|font-face-name|font-face-format|font-face|font|filter|feTurbulence|feTile|feSpotLight|feSpecularLighting|fePointLight|feOffset|feMorphology|feMergeNode|feMerge|feImage|feGaussianBlur|feFuncR|feFuncG|feFuncB|feFuncA|feFlood|feDistantLight|feDisplacementMap|feDiffuseLighting|feConvolveMatrix|feComposite|feComponentTransfer|feColorMatrix|feBlend|ellipse|desc|defs|cursor|color-profile|clipPath|circle|animateTransform|animateMotion|animateColor|animate|altGlyphItem|altGlyphDef|altGlyph|a)(?<=\\\\\\\\w)(?![-\\\\\\\\w])\\\",\\\"name\\\":\\\"entity.name.tag.svg.css\\\"},{\\\"match\\\":\\\"\\\\\\\\s*(,)\\\\\\\\s*\\\",\\\"name\\\":\\\"meta.selector.stylus\\\"},{\\\"match\\\":\\\"\\\\\\\\*\\\",\\\"name\\\":\\\"meta.selector.stylus\\\"},{\\\"captures\\\":{\\\"2\\\":{\\\"name\\\":\\\"entity.other.attribute-name.parent-selector-suffix.stylus\\\"}},\\\"match\\\":\\\"\\\\\\\\s*(&)([-0-9A-Z_a-z]+)\\\\\\\\s*\\\",\\\"name\\\":\\\"meta.selector.stylus\\\"},{\\\"match\\\":\\\"\\\\\\\\s*(&)\\\\\\\\s*\\\",\\\"name\\\":\\\"meta.selector.stylus\\\"},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"punctuation.definition.entity.css\\\"}},\\\"match\\\":\\\"(\\\\\\\\.)[-0-9A-Z_a-z]+\\\",\\\"name\\\":\\\"entity.other.attribute-name.class.css\\\"},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"punctuation.definition.entity.css\\\"}},\\\"match\\\":\\\"(#)[A-Za-z][-0-9A-Z_a-z]*\\\",\\\"name\\\":\\\"entity.other.attribute-name.id.css\\\"},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"punctuation.definition.entity.css\\\"}},\\\"match\\\":\\\"(:+)(after|before|content|first-letter|first-line|host|(-(moz|webkit|ms)-)?selection)\\\\\\\\b\\\",\\\"name\\\":\\\"entity.other.attribute-name.pseudo-element.css\\\"},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"punctuation.definition.entity.css\\\"}},\\\"match\\\":\\\"(:)((first|last)-child|(first|last|only)-of-type|empty|root|target|first|left|right)\\\\\\\\b\\\",\\\"name\\\":\\\"entity.other.attribute-name.pseudo-class.css\\\"},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"punctuation.definition.entity.css\\\"}},\\\"match\\\":\\\"(:)(checked|enabled|default|disabled|indeterminate|invalid|optional|required|valid)\\\\\\\\b\\\",\\\"name\\\":\\\"entity.other.attribute-name.pseudo-class.ui-state.css\\\"},{\\\"begin\\\":\\\"((:)not)(\\\\\\\\()\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"entity.other.attribute-name.pseudo-class.css\\\"},\\\"2\\\":{\\\"name\\\":\\\"punctuation.definition.entity.css\\\"},\\\"3\\\":{\\\"name\\\":\\\"punctuation.section.function.css\\\"}},\\\"end\\\":\\\"\\\\\\\\)\\\",\\\"endCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.section.function.css\\\"}},\\\"patterns\\\":[{\\\"include\\\":\\\"#selector\\\"}]},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"entity.other.attribute-name.pseudo-class.css\\\"},\\\"2\\\":{\\\"name\\\":\\\"punctuation.definition.entity.css\\\"},\\\"3\\\":{\\\"name\\\":\\\"punctuation.section.function.css\\\"},\\\"4\\\":{\\\"name\\\":\\\"constant.numeric.css\\\"},\\\"5\\\":{\\\"name\\\":\\\"punctuation.section.function.css\\\"}},\\\"match\\\":\\\"((:)nth-(?:(?:last-)?child|(?:last-)?of-type))(\\\\\\\\()(-?(?:\\\\\\\\d+n?|n)(?:\\\\\\\\+\\\\\\\\d+)?|even|odd)(\\\\\\\\))\\\"},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"entity.other.attribute-name.pseudo-class.css\\\"},\\\"2\\\":{\\\"name\\\":\\\"puncutation.definition.entity.css\\\"},\\\"3\\\":{\\\"name\\\":\\\"punctuation.section.function.css\\\"},\\\"4\\\":{\\\"name\\\":\\\"constant.language.css\\\"},\\\"5\\\":{\\\"name\\\":\\\"punctuation.section.function.css\\\"}},\\\"match\\\":\\\"((:)dir)\\\\\\\\s*(?:(\\\\\\\\()(ltr|rtl)?(\\\\\\\\)))?\\\"},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"entity.other.attribute-name.pseudo-class.css\\\"},\\\"2\\\":{\\\"name\\\":\\\"puncutation.definition.entity.css\\\"},\\\"3\\\":{\\\"name\\\":\\\"punctuation.section.function.css\\\"},\\\"4\\\":{\\\"name\\\":\\\"constant.language.css\\\"},\\\"6\\\":{\\\"name\\\":\\\"punctuation.section.function.css\\\"}},\\\"match\\\":\\\"((:)lang)\\\\\\\\s*(?:(\\\\\\\\()(\\\\\\\\w+(-\\\\\\\\w+)?)?(\\\\\\\\)))?\\\"},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"punctuation.definition.entity.css\\\"}},\\\"match\\\":\\\"(:)(active|hover|link|visited|focus)\\\\\\\\b\\\",\\\"name\\\":\\\"entity.other.attribute-name.pseudo-class.css\\\"},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"punctuation.definition.entity.css\\\"}},\\\"match\\\":\\\"(::)(shadow)\\\\\\\\b\\\",\\\"name\\\":\\\"entity.other.attribute-name.pseudo-class.css\\\"},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"punctuation.definition.entity.css\\\"},\\\"2\\\":{\\\"name\\\":\\\"entity.other.attribute-name.attribute.css\\\"},\\\"3\\\":{\\\"name\\\":\\\"punctuation.separator.operator.css\\\"},\\\"4\\\":{\\\"name\\\":\\\"string.unquoted.attribute-value.css\\\"},\\\"5\\\":{\\\"name\\\":\\\"string.quoted.double.attribute-value.css\\\"},\\\"6\\\":{\\\"name\\\":\\\"punctuation.definition.string.begin.css\\\"},\\\"7\\\":{\\\"name\\\":\\\"punctuation.definition.string.end.css\\\"},\\\"8\\\":{\\\"name\\\":\\\"punctuation.definition.entity.css\\\"}},\\\"match\\\":\\\"(?i)(\\\\\\\\[)\\\\\\\\s*(-?[\\\\\\\\\\\\\\\\_a-z[:^ascii:]][-0-9\\\\\\\\\\\\\\\\_a-z[:^ascii:]]*)(?:\\\\\\\\s*([$*^|~]?=)\\\\\\\\s*(?:(-?[\\\\\\\\\\\\\\\\_a-z[:^ascii:]][-0-9\\\\\\\\\\\\\\\\_a-z[:^ascii:]]*)|((?>([\\\\\\\"'])(?:[^\\\\\\\\\\\\\\\\]|\\\\\\\\\\\\\\\\.)*?(\\\\\\\\6)))))?\\\\\\\\s*(])\\\",\\\"name\\\":\\\"meta.attribute-selector.css\\\"},{\\\"include\\\":\\\"#interpolation\\\"},{\\\"include\\\":\\\"#variable\\\"}]},\\\"string\\\":{\\\"patterns\\\":[{\\\"begin\\\":\\\"\\\\\\\"\\\",\\\"beginCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.string.begin.css\\\"}},\\\"end\\\":\\\"\\\\\\\"\\\",\\\"endCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.string.end.css\\\"}},\\\"name\\\":\\\"string.quoted.double.css\\\",\\\"patterns\\\":[{\\\"match\\\":\\\"\\\\\\\\\\\\\\\\(\\\\\\\\h{1,6}|.)\\\",\\\"name\\\":\\\"constant.character.escape.css\\\"}]},{\\\"begin\\\":\\\"'\\\",\\\"beginCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.string.begin.css\\\"}},\\\"end\\\":\\\"'\\\",\\\"endCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.string.end.css\\\"}},\\\"name\\\":\\\"string.quoted.single.css\\\",\\\"patterns\\\":[{\\\"match\\\":\\\"\\\\\\\\\\\\\\\\(\\\\\\\\h{1,6}|.)\\\",\\\"name\\\":\\\"constant.character.escape.css\\\"}]}]},\\\"variable\\\":{\\\"match\\\":\\\"(\\\\\\\\$[-A-Z_a-z][-0-9A-Z_a-z]*)\\\",\\\"name\\\":\\\"variable.stylus\\\"},\\\"variable_declaration\\\":{\\\"begin\\\":\\\"^[^\\\\\\\\n\\\\\\\\S]*(\\\\\\\\$?[-A-Z_a-z][-0-9A-Z_a-z]*)[^\\\\\\\\n\\\\\\\\S]*([:?]??=)\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"variable.stylus\\\"},\\\"2\\\":{\\\"name\\\":\\\"keyword.operator.stylus\\\"}},\\\"end\\\":\\\"(\\\\\\\\n)|(;)|(?=})\\\",\\\"endCaptures\\\":{\\\"2\\\":{\\\"name\\\":\\\"punctuation.terminator.rule.css\\\"}},\\\"patterns\\\":[{\\\"include\\\":\\\"#property_values\\\"}]}},\\\"scopeName\\\":\\\"source.stylus\\\",\\\"aliases\\\":[\\\"styl\\\"]}\"))\n\nexport default [\nlang\n]\n"],"mappings":";AAAA,IAAMA,EAAO,OAAO,OAAO,KAAK,MAAM,ky8BAAm2gC,CAAC,EAEn4gCC,EAAQ,CACfD,CACA","names":["lang","stylus_default"]}
|