@opentig/cli 0.0.0-reserved.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +37 -0
- package/THIRD_PARTY_NOTICES.md +21 -0
- package/dist/bin.mjs +28 -0
- package/dist/chunks/cli-bEPXlEpH.mjs +1407 -0
- package/dist/client/assets/App-1nMyZ0Eq.js +118 -0
- package/dist/client/assets/CreatePullRequestDialog-NPqtWmYL.js +2 -0
- package/dist/client/assets/DepartureMono-Regular-2BZob_Zz.woff2 +0 -0
- package/dist/client/assets/DiffWorkspace-CZH8jCtn.js +26 -0
- package/dist/client/assets/EditContext-CvJWfVl1.js +1 -0
- package/dist/client/assets/EditableFileViewer-4ap_dRdR.js +1 -0
- package/dist/client/assets/EditableFileViewer-B2G3Xa33.css +1 -0
- package/dist/client/assets/File-C25AAfq1.js +1 -0
- package/dist/client/assets/FilesView-C6qX7ixR.js +1 -0
- package/dist/client/assets/GitHubAvatar-DV6lI4Jh.js +1 -0
- package/dist/client/assets/HistoryView-CgKY4Sjl.js +1 -0
- package/dist/client/assets/HtmlFileViewer-CiPZFmIx.js +6 -0
- package/dist/client/assets/HtmlFileViewer-D6UPnZvW.css +1 -0
- package/dist/client/assets/IconEdit-DZPhGn6H.js +1 -0
- package/dist/client/assets/IconFolderPlus-CE1ATVt-.js +1 -0
- package/dist/client/assets/ImageFileViewer-D8TdwFTO.css +1 -0
- package/dist/client/assets/ImageFileViewer-RAXxHOBt.js +1 -0
- package/dist/client/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/dist/client/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/dist/client/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/dist/client/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/dist/client/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/dist/client/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/dist/client/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/dist/client/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/dist/client/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/dist/client/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/dist/client/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/dist/client/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/dist/client/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/dist/client/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/dist/client/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/dist/client/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/dist/client/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/dist/client/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/dist/client/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/dist/client/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/dist/client/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/dist/client/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/dist/client/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/dist/client/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/dist/client/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/dist/client/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/dist/client/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/dist/client/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/dist/client/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/dist/client/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/dist/client/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/dist/client/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/dist/client/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/dist/client/assets/LocalRefsDialog-DIFaZUiQ.js +1 -0
- package/dist/client/assets/MarkdownFileViewer-Y9tvTC3N.js +2 -0
- package/dist/client/assets/PairingPage-rJKAimg3.js +1 -0
- package/dist/client/assets/PierreDiffViewer-BRQK_cuH.js +1 -0
- package/dist/client/assets/PierreEditBoundary-YYf1awXS.js +2 -0
- package/dist/client/assets/PierreWorkerPool-CRVJ90kq.js +1384 -0
- package/dist/client/assets/PullRequestDiff-BWdKV4LM.js +1 -0
- package/dist/client/assets/PullRequestViewer-6MhtdrJc.js +2 -0
- package/dist/client/assets/PullRequestsView-CJy2RRm7.js +1 -0
- package/dist/client/assets/QuickOpenDialog-CciIWIcs.js +1 -0
- package/dist/client/assets/RepositoryProjectsDialog-c_ZJ0g3C.js +1 -0
- package/dist/client/assets/SearchView-D5NpA3kT.js +1 -0
- package/dist/client/assets/SettingsDialog-B0XwVWYT.js +9 -0
- package/dist/client/assets/Viewer-u1esMhLs.js +3 -0
- package/dist/client/assets/abap-BdImnpbu.js +1 -0
- package/dist/client/assets/abnfDiagram-N423BO3Z-DRTxjQR7.js +1 -0
- package/dist/client/assets/actionscript-3-CoDkCxhg.js +1 -0
- package/dist/client/assets/ada-bCR0ucgS.js +1 -0
- package/dist/client/assets/andromeeda-C4gqWexZ.js +1 -0
- package/dist/client/assets/angular-html-DA-rfuFy.js +1 -0
- package/dist/client/assets/angular-ts-BrjP3tb8.js +1 -0
- package/dist/client/assets/apache-Pmp26Uib.js +1 -0
- package/dist/client/assets/apex-Dqspr-GT.js +1 -0
- package/dist/client/assets/apl-CORt7UWP.js +1 -0
- package/dist/client/assets/applescript-Co6uUVPk.js +1 -0
- package/dist/client/assets/ara-BRHolxvo.js +1 -0
- package/dist/client/assets/arc-DlZI_By6.js +1 -0
- package/dist/client/assets/architectureDiagram-T3A2C74G-BpcQblyb.js +36 -0
- package/dist/client/assets/asciidoc-Ve4PFQV2.js +1 -0
- package/dist/client/assets/asm-D_Q5rh1f.js +1 -0
- package/dist/client/assets/astro-HNnZUWAn.js +1 -0
- package/dist/client/assets/aurora-x-D-2ljcwZ.js +1 -0
- package/dist/client/assets/awk-DMzUqQB5.js +1 -0
- package/dist/client/assets/ayu-dark-DYE7WIF3.js +1 -0
- package/dist/client/assets/ayu-light-BA47KaF1.js +1 -0
- package/dist/client/assets/ayu-mirage-32ctXXKs.js +1 -0
- package/dist/client/assets/ballerina-BFfxhgS-.js +1 -0
- package/dist/client/assets/base-ui-BxmCGIFY.js +1 -0
- package/dist/client/assets/bash-GUlTfq8i.js +1 -0
- package/dist/client/assets/bat-BkioyH1T.js +1 -0
- package/dist/client/assets/beancount-k_qm7-4y.js +1 -0
- package/dist/client/assets/berry-uYugtg8r.js +1 -0
- package/dist/client/assets/bibtex-CHM0blh-.js +1 -0
- package/dist/client/assets/bicep-Bmn6On1c.js +1 -0
- package/dist/client/assets/bird2-BIv1doCn.js +1 -0
- package/dist/client/assets/blade-2xfisSek.js +1 -0
- package/dist/client/assets/blockDiagram-VBNYF7ZC-BF55JK7V.js +132 -0
- package/dist/client/assets/bsl-BO_Y6i37.js +1 -0
- package/dist/client/assets/c-BIGW1oBm.js +1 -0
- package/dist/client/assets/c3-MRO5bC_T.js +1 -0
- package/dist/client/assets/c4Diagram-5PPSVZJV-CkQ8c1Fd.js +10 -0
- package/dist/client/assets/cadence-Bv_4Rxtq.js +1 -0
- package/dist/client/assets/cairo-KRGpt6FW.js +1 -0
- package/dist/client/assets/catppuccin-frappe-DFWUc33u.js +1 -0
- package/dist/client/assets/catppuccin-latte-C9dUb6Cb.js +1 -0
- package/dist/client/assets/catppuccin-macchiato-DQyhUUbL.js +1 -0
- package/dist/client/assets/catppuccin-mocha-D87Tk5Gz.js +1 -0
- package/dist/client/assets/channel-D-dDbEF9.js +1 -0
- package/dist/client/assets/checkbox-vpy6b6Uq.js +1 -0
- package/dist/client/assets/chunk-2GRJ4B5K-BsVfgXSJ.js +1 -0
- package/dist/client/assets/chunk-2Q5K7J3B-hYvR7LDf.js +1 -0
- package/dist/client/assets/chunk-5RXB4S5H-B2TcxiXR.js +231 -0
- package/dist/client/assets/chunk-5VM5RSS4-TDJFncVJ.js +15 -0
- package/dist/client/assets/chunk-6Q2QTUOP-BDdSa8Zj.js +88 -0
- package/dist/client/assets/chunk-GF5L2VYU-CUHPmM86.js +206 -0
- package/dist/client/assets/chunk-JWPE2WC7-Pq05eTDs.js +1 -0
- package/dist/client/assets/chunk-KBJHAD2P-QSlaIrVy.js +1 -0
- package/dist/client/assets/chunk-RYQCIY6F-C0P7HEQg.js +1 -0
- package/dist/client/assets/chunk-XXDRQBXY-C_oHIOR7.js +1 -0
- package/dist/client/assets/clarity-D53aC0YG.js +1 -0
- package/dist/client/assets/classDiagram-JCYQIIEL-DHG_NsyB.js +1 -0
- package/dist/client/assets/classDiagram-v2-OCEON4UE-DHG_NsyB.js +1 -0
- package/dist/client/assets/clojure-P80f7IUj.js +1 -0
- package/dist/client/assets/cmake-D1j8_8rp.js +1 -0
- package/dist/client/assets/cobol-nBiQ_Alo.js +1 -0
- package/dist/client/assets/codeowners-Bp6g37R7.js +1 -0
- package/dist/client/assets/codeql-DsOJ9woJ.js +1 -0
- package/dist/client/assets/coffee-Ch7k5sss.js +1 -0
- package/dist/client/assets/common-lisp-Cg-RD9OK.js +1 -0
- package/dist/client/assets/coq-DkFqJrB1.js +1 -0
- package/dist/client/assets/cose-bilkent-JH36ORCC-Du6jXfCO.js +1 -0
- package/dist/client/assets/cpp-UfJy6YNI.js +1 -0
- package/dist/client/assets/crystal-DGywbUpC.js +1 -0
- package/dist/client/assets/csharp-DSvCPggb.js +1 -0
- package/dist/client/assets/css-BrPgM3ja.js +1 -0
- package/dist/client/assets/css-CLj8gQPS.js +1 -0
- package/dist/client/assets/csv-fuZLfV_i.js +1 -0
- package/dist/client/assets/cue-D82EKSYY.js +1 -0
- package/dist/client/assets/cynefin-VYW2F7L2-CTUvB8CJ.js +166 -0
- package/dist/client/assets/cynefinDiagram-MW4NZA55-BLRqmW6C.js +62 -0
- package/dist/client/assets/cypher-COkxafJQ.js +1 -0
- package/dist/client/assets/cytoscape.esm-D3_iZ_3b.js +321 -0
- package/dist/client/assets/d-85-TOEBH.js +1 -0
- package/dist/client/assets/dagre-VZM6K2ZE-DTAlXx2k.js +4 -0
- package/dist/client/assets/dark-plus-C3mMm8J8.js +1 -0
- package/dist/client/assets/dart-bE4Kk8sk.js +1 -0
- package/dist/client/assets/dax-CEL-wOlO.js +1 -0
- package/dist/client/assets/defaultLocale-DX6XiGOO.js +1 -0
- package/dist/client/assets/desktop-BmXAJ9_W.js +1 -0
- package/dist/client/assets/diagram-7IWD3JNH-Coh1c4kx.js +30 -0
- package/dist/client/assets/diagram-B4RE2ZJO-TahBzLDX.js +3 -0
- package/dist/client/assets/diagram-LBJQPF4R-2uwXPdqa.js +24 -0
- package/dist/client/assets/diagram-Q27KOJAE-Bm4UNuoF.js +24 -0
- package/dist/client/assets/diagram-UB23O5K3-dWga-ccy.js +41 -0
- package/dist/client/assets/diff-D97Zzqfu.js +1 -0
- package/dist/client/assets/docker-BcOcwvcX.js +1 -0
- package/dist/client/assets/dockerfile-CIggHhkJ.js +1 -0
- package/dist/client/assets/dotenv-Da5cRb03.js +1 -0
- package/dist/client/assets/dracula-BzJJZx-M.js +1 -0
- package/dist/client/assets/dracula-soft-BXkSAIEj.js +1 -0
- package/dist/client/assets/dream-maker-BtqSS_iP.js +1 -0
- package/dist/client/assets/ebnfDiagram-BXEA7PRR-D0IK6JUi.js +1 -0
- package/dist/client/assets/edge-FbVlp4U3.js +1 -0
- package/dist/client/assets/elixir-CkH2-t6x.js +1 -0
- package/dist/client/assets/elm-DbKCFpqz.js +1 -0
- package/dist/client/assets/emacs-lisp-CXvaQtF9.js +1 -0
- package/dist/client/assets/erDiagram-JOGREHBK-DouKd_mX.js +85 -0
- package/dist/client/assets/erb-Dm6A9KJ5.js +1 -0
- package/dist/client/assets/erlang-DsQrWhSR.js +1 -0
- package/dist/client/assets/everforest-dark-BgDCqdQA.js +1 -0
- package/dist/client/assets/everforest-light-C8M2exoo.js +1 -0
- package/dist/client/assets/fennel-BYunw83y.js +1 -0
- package/dist/client/assets/fish-BvzEVeQv.js +1 -0
- package/dist/client/assets/flowDiagram-UKHOOZJN-DQQX82AJ.js +156 -0
- package/dist/client/assets/fluent-C4IJs8-o.js +1 -0
- package/dist/client/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
- package/dist/client/assets/fortran-free-form-BxgE0vQu.js +1 -0
- package/dist/client/assets/fsharp-CXgrBDvD.js +1 -0
- package/dist/client/assets/ganttDiagram-PKOTCBZU-CbvAYRQc.js +292 -0
- package/dist/client/assets/gdresource-BOOCDP_w.js +1 -0
- package/dist/client/assets/gdscript-C5YyOfLZ.js +1 -0
- package/dist/client/assets/gdshader-DkwncUOv.js +1 -0
- package/dist/client/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
- package/dist/client/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
- package/dist/client/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
- package/dist/client/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
- package/dist/client/assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.woff2 +0 -0
- package/dist/client/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2 +0 -0
- package/dist/client/assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.woff2 +0 -0
- package/dist/client/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2 +0 -0
- package/dist/client/assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2 +0 -0
- package/dist/client/assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2 +0 -0
- package/dist/client/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
- package/dist/client/assets/genie-D0YGMca9.js +1 -0
- package/dist/client/assets/gh-utils-XOjL-WGw.js +1 -0
- package/dist/client/assets/gherkin-DyxjwDmM.js +1 -0
- package/dist/client/assets/git-commit-F4YmCXRG.js +1 -0
- package/dist/client/assets/git-rebase-r7XF79zn.js +1 -0
- package/dist/client/assets/gitGraphDiagram-DS77QQ5N-D7cqbpF-.js +106 -0
- package/dist/client/assets/github-dark-DHJKELXO.js +1 -0
- package/dist/client/assets/github-dark-default-Cuk6v7N8.js +1 -0
- package/dist/client/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
- package/dist/client/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
- package/dist/client/assets/github-light-DAi9KRSo.js +1 -0
- package/dist/client/assets/github-light-default-D7oLnXFd.js +1 -0
- package/dist/client/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
- package/dist/client/assets/gleam-BspZqrRM.js +1 -0
- package/dist/client/assets/glimmer-js-ByusRIyA.js +1 -0
- package/dist/client/assets/glimmer-ts-BfAWNZQY.js +1 -0
- package/dist/client/assets/glsl-DplSGwfg.js +1 -0
- package/dist/client/assets/gn-n2N0HUVH.js +1 -0
- package/dist/client/assets/gnuplot-DdkO51Og.js +1 -0
- package/dist/client/assets/go-C27-OAKa.js +1 -0
- package/dist/client/assets/go-C8bbjMAQ.js +1 -0
- package/dist/client/assets/graph-DOmOIIwC.js +1 -0
- package/dist/client/assets/graphql-ChdNCCLP.js +1 -0
- package/dist/client/assets/groovy-gcz8RCvz.js +1 -0
- package/dist/client/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
- package/dist/client/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
- package/dist/client/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
- package/dist/client/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
- package/dist/client/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
- package/dist/client/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
- package/dist/client/assets/hack-DbPARsA_.js +1 -0
- package/dist/client/assets/haml-D5jkg6IW.js +1 -0
- package/dist/client/assets/handlebars-BpdQsYii.js +1 -0
- package/dist/client/assets/haskell-Df6bDoY_.js +1 -0
- package/dist/client/assets/haxe-CzTSHFRz.js +1 -0
- package/dist/client/assets/hcl-BWvSN4gD.js +1 -0
- package/dist/client/assets/hjson-D5-asLiD.js +1 -0
- package/dist/client/assets/hlsl-D3lLCCz7.js +1 -0
- package/dist/client/assets/horizon-BUw7H-hv.js +1 -0
- package/dist/client/assets/horizon-bright-CUuTKBJd.js +1 -0
- package/dist/client/assets/houston-DnULxvSX.js +1 -0
- package/dist/client/assets/html-IjFELPCF.js +1 -0
- package/dist/client/assets/html-derivative-DlHx6ybY.js +1 -0
- package/dist/client/assets/html-pp8916En.js +1 -0
- package/dist/client/assets/http-jrhK8wxY.js +1 -0
- package/dist/client/assets/hurl-irOxFIW8.js +1 -0
- package/dist/client/assets/hxml-Bvhsp5Yf.js +1 -0
- package/dist/client/assets/hy-DFXneXwc.js +1 -0
- package/dist/client/assets/imba-DGztddWO.js +1 -0
- package/dist/client/assets/inconsolata-latin-ext-wght-normal-C75G6mlG.woff2 +0 -0
- package/dist/client/assets/inconsolata-latin-wght-normal-DBskYKbm.woff2 +0 -0
- package/dist/client/assets/inconsolata-vietnamese-wght-normal-C5Hzp2b_.woff2 +0 -0
- package/dist/client/assets/index-BgLrS_2D.js +3 -0
- package/dist/client/assets/index-Bm8fY0Qs.css +1 -0
- package/dist/client/assets/index-CtEztN1P.js +141 -0
- package/dist/client/assets/index-DDbUjVD9.js +518 -0
- package/dist/client/assets/index-DwuduZw_.js +3 -0
- package/dist/client/assets/infoDiagram-6WML65LV-C0NfpA-J.js +2 -0
- package/dist/client/assets/ini-BEwlwnbL.js +1 -0
- package/dist/client/assets/init-Gi6I4Gst.js +1 -0
- package/dist/client/assets/ishikawaDiagram-WSZJBQD7-DhIW58so.js +70 -0
- package/dist/client/assets/java-CylS5w8V.js +1 -0
- package/dist/client/assets/java-D3uEDCrY.js +1 -0
- package/dist/client/assets/javascript-wDzz0qaB.js +1 -0
- package/dist/client/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
- package/dist/client/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
- package/dist/client/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
- package/dist/client/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
- package/dist/client/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
- package/dist/client/assets/jinja-f2NsQr07.js +1 -0
- package/dist/client/assets/jison-wvAkD_A8.js +1 -0
- package/dist/client/assets/journeyDiagram-NVQOT4AX-DqZZm_oH.js +139 -0
- package/dist/client/assets/js-eRS0TrZp.js +1 -0
- package/dist/client/assets/json-CAhrKACI.js +1 -0
- package/dist/client/assets/json-Cp-IABpG.js +1 -0
- package/dist/client/assets/json5-C9tS-k6U.js +1 -0
- package/dist/client/assets/jsonc-Des-eS-w.js +1 -0
- package/dist/client/assets/jsonl-DcaNXYhu.js +1 -0
- package/dist/client/assets/jsonnet-DFQXde-d.js +1 -0
- package/dist/client/assets/jssm-C2t-YnRu.js +1 -0
- package/dist/client/assets/jsx-g9-lgVsj.js +1 -0
- package/dist/client/assets/julia-D7OTSIA_.js +1 -0
- package/dist/client/assets/just-CUsbIsdP.js +1 -0
- package/dist/client/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
- package/dist/client/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
- package/dist/client/assets/kanagawa-wave-DWedfzmr.js +1 -0
- package/dist/client/assets/kanban-definition-27J2QSJJ-DpSYxBwt.js +89 -0
- package/dist/client/assets/katex-HP8lGamR.js +257 -0
- package/dist/client/assets/kdl-DV7GczEv.js +1 -0
- package/dist/client/assets/kotlin-BdnUsdx6.js +1 -0
- package/dist/client/assets/kusto-wEQ09or8.js +1 -0
- package/dist/client/assets/laserwave-DUszq2jm.js +1 -0
- package/dist/client/assets/latex-CaSxy8MP.js +1 -0
- package/dist/client/assets/layout-D-LzfAck.js +1 -0
- package/dist/client/assets/lean-BZvkOJ9d.js +1 -0
- package/dist/client/assets/less-B1dDrJ26.js +1 -0
- package/dist/client/assets/light-plus-B7mTdjB0.js +1 -0
- package/dist/client/assets/linear-DRxvRS4v.js +1 -0
- package/dist/client/assets/liquid-C0sCDyMI.js +1 -0
- package/dist/client/assets/llvm-DjAJT7YJ.js +1 -0
- package/dist/client/assets/log-2UxHyX5q.js +1 -0
- package/dist/client/assets/logo-BtOb2qkB.js +1 -0
- package/dist/client/assets/lua-BaeVxFsk.js +1 -0
- package/dist/client/assets/luau-KW6xsasC.js +1 -0
- package/dist/client/assets/makefile-DD9maIlR.js +1 -0
- package/dist/client/assets/map-DxJ2ADlA.js +1 -0
- package/dist/client/assets/markdown-B6IgHDDD.js +1 -0
- package/dist/client/assets/markdown-ChhkSSkz.css +1 -0
- package/dist/client/assets/markdown-Cvjx9yec.js +1 -0
- package/dist/client/assets/marko-DjSrsDqO.js +1 -0
- package/dist/client/assets/material-theme-D5KoaKCx.js +1 -0
- package/dist/client/assets/material-theme-darker-BfHTSMKl.js +1 -0
- package/dist/client/assets/material-theme-lighter-B0m2ddpp.js +1 -0
- package/dist/client/assets/material-theme-ocean-CyktbL80.js +1 -0
- package/dist/client/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
- package/dist/client/assets/matlab-D7o27uSR.js +1 -0
- package/dist/client/assets/mdc-DTYItulj.js +1 -0
- package/dist/client/assets/mdx-Cmh6b_Ma.js +1 -0
- package/dist/client/assets/mermaid-mWjccvbQ.js +1 -0
- package/dist/client/assets/mermaid.core-Bz1ouG4e.js +306 -0
- package/dist/client/assets/min-dark-CafNBF8u.js +1 -0
- package/dist/client/assets/min-light-CTRr51gU.js +1 -0
- package/dist/client/assets/mindmap-definition-FAOFIHXS-ohtsO4nF.js +96 -0
- package/dist/client/assets/mipsasm-CKIfxQSi.js +1 -0
- package/dist/client/assets/mojo-rZm6bMo-.js +1 -0
- package/dist/client/assets/monokai-D4h5O-jR.js +1 -0
- package/dist/client/assets/moonbit-_H4v1dQx.js +1 -0
- package/dist/client/assets/move-IF9eRakj.js +1 -0
- package/dist/client/assets/narrat-DRg8JJMk.js +1 -0
- package/dist/client/assets/nextflow-C-mBbutL.js +1 -0
- package/dist/client/assets/nextflow-groovy-vE_lwT2v.js +1 -0
- package/dist/client/assets/nginx-BpAMiNFr.js +1 -0
- package/dist/client/assets/night-owl-C39BiMTA.js +1 -0
- package/dist/client/assets/night-owl-light-CMTm3GFP.js +1 -0
- package/dist/client/assets/nim-BIad80T-.js +1 -0
- package/dist/client/assets/nix-CwoSXNpI.js +1 -0
- package/dist/client/assets/nord-Ddv68eIx.js +1 -0
- package/dist/client/assets/nushell-Cz2AlsmD.js +1 -0
- package/dist/client/assets/objective-c-DXmwc3jG.js +1 -0
- package/dist/client/assets/objective-cpp-CLxacb5B.js +1 -0
- package/dist/client/assets/ocaml-C0hk2d4L.js +1 -0
- package/dist/client/assets/odin-BBf5iR-q.js +1 -0
- package/dist/client/assets/one-light-CoLDteqg.js +10 -0
- package/dist/client/assets/openscad-C4EeE6gA.js +1 -0
- package/dist/client/assets/ordinal-Cboi1Yqb.js +1 -0
- package/dist/client/assets/pascal-D93ZcfNL.js +1 -0
- package/dist/client/assets/pegDiagram-VL7TDLO6-BmDfUXjC.js +1 -0
- package/dist/client/assets/perl-B9cMNwum.js +1 -0
- package/dist/client/assets/php-Csjmro_R.js +1 -0
- package/dist/client/assets/pieDiagram-7S7Q4E2Y-CUADuvir.js +39 -0
- package/dist/client/assets/pierre-dark-CyvmCCZW.js +1 -0
- package/dist/client/assets/pierre-dark-protanopia-deuteranopia-Rgc0TwpF.js +1 -0
- package/dist/client/assets/pierre-dark-soft-BHGpRqa4.js +1 -0
- package/dist/client/assets/pierre-dark-tritanopia-Beq2gCRQ.js +1 -0
- package/dist/client/assets/pierre-dark-vibrant-BWBVywrn.js +1 -0
- package/dist/client/assets/pierre-light-480U9XYS.js +1 -0
- package/dist/client/assets/pierre-light-protanopia-deuteranopia-CaVOBURG.js +1 -0
- package/dist/client/assets/pierre-light-soft-CVdyfjmI.js +1 -0
- package/dist/client/assets/pierre-light-tritanopia-B4_gpKOM.js +1 -0
- package/dist/client/assets/pierre-light-vibrant-DdTDNdfJ.js +1 -0
- package/dist/client/assets/pkl-u5AG7uiY.js +1 -0
- package/dist/client/assets/plastic-3e1v2bzS.js +1 -0
- package/dist/client/assets/platform-BMNQ8V5r.js +4 -0
- package/dist/client/assets/plsql-ChMvpjG-.js +1 -0
- package/dist/client/assets/plus-jakarta-sans-latin-ext-wght-normal-DmpS2jIq.woff2 +0 -0
- package/dist/client/assets/plus-jakarta-sans-latin-wght-normal-eXO_dkmS.woff2 +0 -0
- package/dist/client/assets/plus-jakarta-sans-vietnamese-wght-normal-qRpaaN48.woff2 +0 -0
- package/dist/client/assets/po-BTJTHyun.js +1 -0
- package/dist/client/assets/poimandres-CS3Unz2-.js +1 -0
- package/dist/client/assets/polar-C0HS_06l.js +1 -0
- package/dist/client/assets/postcss-CXtECtnM.js +1 -0
- package/dist/client/assets/powerquery-CEu0bR-o.js +1 -0
- package/dist/client/assets/powershell-Dpen1YoG.js +1 -0
- package/dist/client/assets/prisma-Dd19v3D-.js +1 -0
- package/dist/client/assets/prolog-CbFg5uaA.js +1 -0
- package/dist/client/assets/proto-C7zT0LnQ.js +1 -0
- package/dist/client/assets/pug-DKIMFp6K.js +1 -0
- package/dist/client/assets/puppet-BMWR74SV.js +1 -0
- package/dist/client/assets/purescript-CklMAg4u.js +1 -0
- package/dist/client/assets/python-B6aJPvgy.js +1 -0
- package/dist/client/assets/python-By0ufZ0-.js +1 -0
- package/dist/client/assets/qml-3beO22l8.js +1 -0
- package/dist/client/assets/qmldir-C8lEn-DE.js +1 -0
- package/dist/client/assets/qss-IeuSbFQv.js +1 -0
- package/dist/client/assets/quadrantDiagram-CIZ2JOQS-BGGXYgGq.js +7 -0
- package/dist/client/assets/r-Dspwwk_N.js +1 -0
- package/dist/client/assets/racket-BqYA7rlc.js +1 -0
- package/dist/client/assets/railroadDiagram-AXF67PYL-CuQocJeb.js +1 -0
- package/dist/client/assets/raku-DXvB9xmW.js +1 -0
- package/dist/client/assets/razor-BjBPvh-w.js +1 -0
- package/dist/client/assets/react-rd22PHbN.js +9 -0
- package/dist/client/assets/red-bN70gL4F.js +1 -0
- package/dist/client/assets/reg-C-SQnVFl.js +1 -0
- package/dist/client/assets/regexp-CDVJQ6XC.js +1 -0
- package/dist/client/assets/rel-C3B-1QV4.js +1 -0
- package/dist/client/assets/render-markdown-BnNqckxy.js +280 -0
- package/dist/client/assets/requirementDiagram-LRYGKXZP-7w9ufPrL.js +84 -0
- package/dist/client/assets/riscv-BM1_JUlF.js +1 -0
- package/dist/client/assets/ron-D8l8udqQ.js +1 -0
- package/dist/client/assets/rose-pine-dawn-DHQR4-dF.js +1 -0
- package/dist/client/assets/rose-pine-moon-D4_iv3hh.js +1 -0
- package/dist/client/assets/rose-pine-qdsjHGoJ.js +1 -0
- package/dist/client/assets/rosmsg-BJDFO7_C.js +1 -0
- package/dist/client/assets/rst-CpCqk9r5.js +1 -0
- package/dist/client/assets/ruby-DyJCeAvU.js +1 -0
- package/dist/client/assets/rust-B1yitclQ.js +1 -0
- package/dist/client/assets/rust-DYFNg61u.js +1 -0
- package/dist/client/assets/sankeyDiagram-W5VNT64P-DWDWhnZJ.js +40 -0
- package/dist/client/assets/sas-DEy46yEz.js +1 -0
- package/dist/client/assets/sass-Cj5Yp3dK.js +1 -0
- package/dist/client/assets/scala-C151Ov-r.js +1 -0
- package/dist/client/assets/scheme-C98Dy4si.js +1 -0
- package/dist/client/assets/scss-D5BDwBP9.js +1 -0
- package/dist/client/assets/sdbl-DVxCFoDh.js +1 -0
- package/dist/client/assets/sequenceDiagram-SI44F4Z6-BQAnExHF.js +162 -0
- package/dist/client/assets/shaderlab-Dg9Lc6iA.js +1 -0
- package/dist/client/assets/shellscript-Yzrsuije.js +1 -0
- package/dist/client/assets/shellsession-BADoaaVG.js +1 -0
- package/dist/client/assets/sizeCapture-X5ZJPWSS-BC2GpN9p.js +1 -0
- package/dist/client/assets/slack-dark-BthQWCQV.js +1 -0
- package/dist/client/assets/slack-ochin-DqwNpetd.js +1 -0
- package/dist/client/assets/smalltalk-BERRCDM3.js +1 -0
- package/dist/client/assets/snazzy-light-Bw305WKR.js +1 -0
- package/dist/client/assets/solarized-dark-DXbdFlpD.js +1 -0
- package/dist/client/assets/solarized-light-L9t79GZl.js +1 -0
- package/dist/client/assets/solidity-rGO070M0.js +1 -0
- package/dist/client/assets/soy-8wufbnw4.js +1 -0
- package/dist/client/assets/space-grotesk-latin-ext-wght-normal-D9tNdqV9.woff2 +0 -0
- package/dist/client/assets/space-grotesk-latin-wght-normal-BhU9QXUp.woff2 +0 -0
- package/dist/client/assets/space-grotesk-vietnamese-wght-normal-D0rl6rjA.woff2 +0 -0
- package/dist/client/assets/sparql-rVzFXLq3.js +1 -0
- package/dist/client/assets/splunk-BtCnVYZw.js +1 -0
- package/dist/client/assets/sql-CRqJ_cUM.js +1 -0
- package/dist/client/assets/sql-XBgvrH07.js +1 -0
- package/dist/client/assets/ssh-config-_ykCGR6B.js +1 -0
- package/dist/client/assets/stata-DI20mbqo.js +1 -0
- package/dist/client/assets/stateDiagram-OKZ733FA-vXwPDk5C.js +1 -0
- package/dist/client/assets/stateDiagram-v2-UEYNNEHI-BA-7Q81g.js +1 -0
- package/dist/client/assets/stylus-BEDo0Tqx.js +1 -0
- package/dist/client/assets/surrealql-Bq5Q-fJD.js +1 -0
- package/dist/client/assets/svelte-Cy7k_4gC.js +1 -0
- package/dist/client/assets/swift-D82vCrfD.js +1 -0
- package/dist/client/assets/swimlanes-SLNWSIFB-DdBBGgwS.js +2 -0
- package/dist/client/assets/swimlanesDiagram-ULZ7WXOC-BSDBQ9JF.js +8 -0
- package/dist/client/assets/synthwave-84-CbfX1IO0.js +1 -0
- package/dist/client/assets/system-verilog-CnnmHF94.js +1 -0
- package/dist/client/assets/systemd-4A_iFExJ.js +1 -0
- package/dist/client/assets/talonscript-CkByrt1z.js +1 -0
- package/dist/client/assets/tanstack-BEeM5REq.js +1 -0
- package/dist/client/assets/tasl-QIJgUcNo.js +1 -0
- package/dist/client/assets/tcl-dwOrl1Do.js +1 -0
- package/dist/client/assets/templ-DhtptRzy.js +1 -0
- package/dist/client/assets/terraform-BETggiCN.js +1 -0
- package/dist/client/assets/tex-idrVyKtj.js +1 -0
- package/dist/client/assets/timeline-definition-Z64GVDOM-CcXzq7ZH.js +120 -0
- package/dist/client/assets/tokyo-night-hegEt444.js +1 -0
- package/dist/client/assets/toml-vGWfd6FD.js +1 -0
- package/dist/client/assets/ts-BBgwK5l8.js +1 -0
- package/dist/client/assets/ts-tags-D351s5mN.js +1 -0
- package/dist/client/assets/tsv-B_m7g4N7.js +1 -0
- package/dist/client/assets/tsx-COt5Ahok.js +1 -0
- package/dist/client/assets/tsx-ubaFQlaU.js +1 -0
- package/dist/client/assets/turtle-BsS91CYL.js +1 -0
- package/dist/client/assets/twig-CW1WmMYd.js +1 -0
- package/dist/client/assets/typescript-BPQ3VLAy.js +1 -0
- package/dist/client/assets/typespec-CAFt9gP4.js +1 -0
- package/dist/client/assets/typst-DHCkPAjA.js +1 -0
- package/dist/client/assets/v-BcVCzyr7.js +1 -0
- package/dist/client/assets/vala-CsfeWuGM.js +1 -0
- package/dist/client/assets/vb-D17OF-Vu.js +1 -0
- package/dist/client/assets/vennDiagram-T6HMQDX7-PiBQGztV.js +34 -0
- package/dist/client/assets/verilog-BQ8w6xss.js +1 -0
- package/dist/client/assets/vesper-DRje8inN.js +1 -0
- package/dist/client/assets/vhdl-CeAyd5Ju.js +1 -0
- package/dist/client/assets/viewer-tabs-B_boC13j.js +1 -0
- package/dist/client/assets/viewer-tabs-D8o-L3pM.css +1 -0
- package/dist/client/assets/viml-CJc9bBzg.js +1 -0
- package/dist/client/assets/vitesse-black-Bkuqu6BP.js +1 -0
- package/dist/client/assets/vitesse-dark-D0r3Knsf.js +1 -0
- package/dist/client/assets/vitesse-light-CVO1_9PV.js +1 -0
- package/dist/client/assets/vue-D2xRrEX4.js +1 -0
- package/dist/client/assets/vue-html-AaS7Mt5G.js +1 -0
- package/dist/client/assets/vue-vine-BoDAl6tE.js +1 -0
- package/dist/client/assets/vyper-CDx5xZoG.js +1 -0
- package/dist/client/assets/wardleyDiagram-T6FBY63Y-R9-CuOPS.js +78 -0
- package/dist/client/assets/wasm-CG6Dc4jp.js +1 -0
- package/dist/client/assets/wasm-MzD3tlZU.js +1 -0
- package/dist/client/assets/wenyan-BV7otONQ.js +1 -0
- package/dist/client/assets/wgsl-Dx-B1_4e.js +1 -0
- package/dist/client/assets/wikitext-BhOHFoWU.js +1 -0
- package/dist/client/assets/wit-5i3qLPDT.js +1 -0
- package/dist/client/assets/wolfram-lXgVvXCa.js +1 -0
- package/dist/client/assets/worker-iQRq_znZ.js +156 -0
- package/dist/client/assets/xml-C1zs8cY-.js +1 -0
- package/dist/client/assets/xml-sdJ4AIDG.js +1 -0
- package/dist/client/assets/xsl-CtQFsRM5.js +1 -0
- package/dist/client/assets/xychartDiagram-ELKLHX3M-CrK1rvFm.js +7 -0
- package/dist/client/assets/yaml-Buea-lGh.js +1 -0
- package/dist/client/assets/yaml-CF_Zl04g.js +1 -0
- package/dist/client/assets/zenscript-DVFEvuxE.js +1 -0
- package/dist/client/assets/zig-VOosw3JB.js +1 -0
- package/dist/client/boot-theme.js +9 -0
- package/dist/client/index.html +79 -0
- package/dist/client/opentig.ico +0 -0
- package/dist/client/opentig.svg +7 -0
- package/dist/client/vscode-icons/LICENSE.txt +21 -0
- package/dist/client/vscode-icons/default_file.svg +1 -0
- package/dist/client/vscode-icons/default_folder.svg +1 -0
- package/dist/client/vscode-icons/default_folder_opened.svg +1 -0
- package/dist/client/vscode-icons/default_root_folder.svg +1 -0
- package/dist/client/vscode-icons/default_root_folder_opened.svg +1 -0
- package/dist/client/vscode-icons/file_type_access.svg +1 -0
- package/dist/client/vscode-icons/file_type_access2.svg +1 -0
- package/dist/client/vscode-icons/file_type_actionscript.svg +1 -0
- package/dist/client/vscode-icons/file_type_actionscript2.svg +1 -0
- package/dist/client/vscode-icons/file_type_ada.svg +1 -0
- package/dist/client/vscode-icons/file_type_advpl.svg +1 -0
- package/dist/client/vscode-icons/file_type_affectscript.svg +1 -0
- package/dist/client/vscode-icons/file_type_affinity.svg +1 -0
- package/dist/client/vscode-icons/file_type_affinitydesigner.svg +1 -0
- package/dist/client/vscode-icons/file_type_affinityphoto.svg +1 -0
- package/dist/client/vscode-icons/file_type_affinitypublisher.svg +1 -0
- package/dist/client/vscode-icons/file_type_agda.svg +1 -0
- package/dist/client/vscode-icons/file_type_agents.svg +1 -0
- package/dist/client/vscode-icons/file_type_ai.svg +1 -0
- package/dist/client/vscode-icons/file_type_ai2.svg +1 -0
- package/dist/client/vscode-icons/file_type_al.svg +1 -0
- package/dist/client/vscode-icons/file_type_al_dal.svg +1 -0
- package/dist/client/vscode-icons/file_type_alchemy.svg +1 -0
- package/dist/client/vscode-icons/file_type_allcontributors.svg +1 -0
- package/dist/client/vscode-icons/file_type_alloy.svg +1 -0
- package/dist/client/vscode-icons/file_type_allure.svg +1 -0
- package/dist/client/vscode-icons/file_type_angular.svg +1 -0
- package/dist/client/vscode-icons/file_type_ansible.svg +1 -0
- package/dist/client/vscode-icons/file_type_antlers_html.svg +1 -0
- package/dist/client/vscode-icons/file_type_antlr.svg +1 -0
- package/dist/client/vscode-icons/file_type_anyscript.svg +1 -0
- package/dist/client/vscode-icons/file_type_apache.svg +1 -0
- package/dist/client/vscode-icons/file_type_apex.svg +1 -0
- package/dist/client/vscode-icons/file_type_api_extractor.svg +1 -0
- package/dist/client/vscode-icons/file_type_apib.svg +1 -0
- package/dist/client/vscode-icons/file_type_apib2.svg +1 -0
- package/dist/client/vscode-icons/file_type_apl.svg +1 -0
- package/dist/client/vscode-icons/file_type_applescript.svg +1 -0
- package/dist/client/vscode-icons/file_type_appscript.svg +1 -0
- package/dist/client/vscode-icons/file_type_appsemble.svg +1 -0
- package/dist/client/vscode-icons/file_type_appveyor.svg +1 -0
- package/dist/client/vscode-icons/file_type_arduino.svg +1 -0
- package/dist/client/vscode-icons/file_type_asciidoc.svg +1 -0
- package/dist/client/vscode-icons/file_type_aseprite.svg +1 -0
- package/dist/client/vscode-icons/file_type_asp.svg +1 -0
- package/dist/client/vscode-icons/file_type_aspx.svg +1 -0
- package/dist/client/vscode-icons/file_type_assembly.svg +1 -0
- package/dist/client/vscode-icons/file_type_assembly_script.svg +1 -0
- package/dist/client/vscode-icons/file_type_astro.svg +1 -0
- package/dist/client/vscode-icons/file_type_astroconfig.svg +1 -0
- package/dist/client/vscode-icons/file_type_atom.svg +1 -0
- package/dist/client/vscode-icons/file_type_ats.svg +1 -0
- package/dist/client/vscode-icons/file_type_attw.svg +1 -0
- package/dist/client/vscode-icons/file_type_audio.svg +1 -0
- package/dist/client/vscode-icons/file_type_aurelia.svg +1 -0
- package/dist/client/vscode-icons/file_type_autohotkey.svg +1 -0
- package/dist/client/vscode-icons/file_type_autoit.svg +1 -0
- package/dist/client/vscode-icons/file_type_avif.svg +1 -0
- package/dist/client/vscode-icons/file_type_avro.svg +1 -0
- package/dist/client/vscode-icons/file_type_awk.svg +1 -0
- package/dist/client/vscode-icons/file_type_aws.svg +1 -0
- package/dist/client/vscode-icons/file_type_azure.svg +1 -0
- package/dist/client/vscode-icons/file_type_azurepipelines.svg +1 -0
- package/dist/client/vscode-icons/file_type_azurestreamanalytics.svg +1 -0
- package/dist/client/vscode-icons/file_type_babel.svg +1 -0
- package/dist/client/vscode-icons/file_type_babel2.svg +1 -0
- package/dist/client/vscode-icons/file_type_bak.svg +1 -0
- package/dist/client/vscode-icons/file_type_ballerina.svg +1 -0
- package/dist/client/vscode-icons/file_type_bat.svg +1 -0
- package/dist/client/vscode-icons/file_type_bats.svg +1 -0
- package/dist/client/vscode-icons/file_type_bazaar.svg +1 -0
- package/dist/client/vscode-icons/file_type_bazel.svg +1 -0
- package/dist/client/vscode-icons/file_type_bazel_ignore.svg +1 -0
- package/dist/client/vscode-icons/file_type_bazel_version.svg +1 -0
- package/dist/client/vscode-icons/file_type_befunge.svg +1 -0
- package/dist/client/vscode-icons/file_type_bicep.svg +1 -0
- package/dist/client/vscode-icons/file_type_biml.svg +1 -0
- package/dist/client/vscode-icons/file_type_binary.svg +1 -0
- package/dist/client/vscode-icons/file_type_biome.svg +1 -0
- package/dist/client/vscode-icons/file_type_bitbucketpipeline.svg +1 -0
- package/dist/client/vscode-icons/file_type_bithound.svg +1 -0
- package/dist/client/vscode-icons/file_type_blade.svg +1 -0
- package/dist/client/vscode-icons/file_type_blender.svg +1 -0
- package/dist/client/vscode-icons/file_type_blitzbasic.svg +1 -0
- package/dist/client/vscode-icons/file_type_bolt.svg +1 -0
- package/dist/client/vscode-icons/file_type_bosque.svg +1 -0
- package/dist/client/vscode-icons/file_type_bower.svg +1 -0
- package/dist/client/vscode-icons/file_type_bower2.svg +1 -0
- package/dist/client/vscode-icons/file_type_brew.svg +1 -0
- package/dist/client/vscode-icons/file_type_browserslist.svg +1 -0
- package/dist/client/vscode-icons/file_type_bruno.svg +1 -0
- package/dist/client/vscode-icons/file_type_buckbuild.svg +1 -0
- package/dist/client/vscode-icons/file_type_buf.svg +1 -0
- package/dist/client/vscode-icons/file_type_bun.svg +1 -0
- package/dist/client/vscode-icons/file_type_bundlemon.svg +1 -0
- package/dist/client/vscode-icons/file_type_bundler.svg +1 -0
- package/dist/client/vscode-icons/file_type_bunfig.svg +1 -0
- package/dist/client/vscode-icons/file_type_c.svg +1 -0
- package/dist/client/vscode-icons/file_type_c2.svg +1 -0
- package/dist/client/vscode-icons/file_type_c3.svg +1 -0
- package/dist/client/vscode-icons/file_type_c_al.svg +1 -0
- package/dist/client/vscode-icons/file_type_cabal.svg +1 -0
- package/dist/client/vscode-icons/file_type_caddy.svg +1 -0
- package/dist/client/vscode-icons/file_type_cake.svg +1 -0
- package/dist/client/vscode-icons/file_type_cakephp.svg +1 -0
- package/dist/client/vscode-icons/file_type_cangjie.svg +1 -0
- package/dist/client/vscode-icons/file_type_capacitor.svg +1 -0
- package/dist/client/vscode-icons/file_type_capnp.svg +1 -0
- package/dist/client/vscode-icons/file_type_cargo.svg +1 -0
- package/dist/client/vscode-icons/file_type_casc.svg +1 -0
- package/dist/client/vscode-icons/file_type_cddl.svg +1 -0
- package/dist/client/vscode-icons/file_type_cert.svg +1 -0
- package/dist/client/vscode-icons/file_type_ceylon.svg +1 -0
- package/dist/client/vscode-icons/file_type_cf.svg +1 -0
- package/dist/client/vscode-icons/file_type_cf2.svg +1 -0
- package/dist/client/vscode-icons/file_type_cfc.svg +1 -0
- package/dist/client/vscode-icons/file_type_cfc2.svg +1 -0
- package/dist/client/vscode-icons/file_type_cfm.svg +1 -0
- package/dist/client/vscode-icons/file_type_cfm2.svg +1 -0
- package/dist/client/vscode-icons/file_type_changie.svg +1 -0
- package/dist/client/vscode-icons/file_type_cheader.svg +1 -0
- package/dist/client/vscode-icons/file_type_chef.svg +1 -0
- package/dist/client/vscode-icons/file_type_chef_cookbook.svg +1 -0
- package/dist/client/vscode-icons/file_type_circleci.svg +1 -0
- package/dist/client/vscode-icons/file_type_circom.svg +1 -0
- package/dist/client/vscode-icons/file_type_clangd.svg +1 -0
- package/dist/client/vscode-icons/file_type_class.svg +1 -0
- package/dist/client/vscode-icons/file_type_claude.svg +1 -0
- package/dist/client/vscode-icons/file_type_clojure.svg +1 -0
- package/dist/client/vscode-icons/file_type_clojurescript.svg +1 -0
- package/dist/client/vscode-icons/file_type_cloudflare.svg +1 -0
- package/dist/client/vscode-icons/file_type_cloudfoundry.svg +1 -0
- package/dist/client/vscode-icons/file_type_cmake.svg +1 -0
- package/dist/client/vscode-icons/file_type_cobol.svg +1 -0
- package/dist/client/vscode-icons/file_type_codacy.svg +1 -0
- package/dist/client/vscode-icons/file_type_codeclimate.svg +1 -0
- package/dist/client/vscode-icons/file_type_codecov.svg +1 -0
- package/dist/client/vscode-icons/file_type_codekit.svg +1 -0
- package/dist/client/vscode-icons/file_type_codemagic.svg +1 -0
- package/dist/client/vscode-icons/file_type_codeowners.svg +1 -0
- package/dist/client/vscode-icons/file_type_codeql.svg +1 -0
- package/dist/client/vscode-icons/file_type_coderabbit.svg +1 -0
- package/dist/client/vscode-icons/file_type_coffeelint.svg +1 -0
- package/dist/client/vscode-icons/file_type_coffeescript.svg +1 -0
- package/dist/client/vscode-icons/file_type_commitizen.svg +1 -0
- package/dist/client/vscode-icons/file_type_commitlint.svg +1 -0
- package/dist/client/vscode-icons/file_type_compass.svg +1 -0
- package/dist/client/vscode-icons/file_type_composer.svg +1 -0
- package/dist/client/vscode-icons/file_type_conan.svg +1 -0
- package/dist/client/vscode-icons/file_type_conda.svg +1 -0
- package/dist/client/vscode-icons/file_type_config.svg +1 -0
- package/dist/client/vscode-icons/file_type_confluence.svg +1 -0
- package/dist/client/vscode-icons/file_type_context7.svg +1 -0
- package/dist/client/vscode-icons/file_type_copilot.svg +1 -0
- package/dist/client/vscode-icons/file_type_coverage.svg +1 -0
- package/dist/client/vscode-icons/file_type_coveralls.svg +1 -0
- package/dist/client/vscode-icons/file_type_cpp.svg +1 -0
- package/dist/client/vscode-icons/file_type_cpp2.svg +1 -0
- package/dist/client/vscode-icons/file_type_cpp3.svg +1 -0
- package/dist/client/vscode-icons/file_type_cppheader.svg +1 -0
- package/dist/client/vscode-icons/file_type_craco.svg +1 -0
- package/dist/client/vscode-icons/file_type_crowdin.svg +1 -0
- package/dist/client/vscode-icons/file_type_crystal.svg +1 -0
- package/dist/client/vscode-icons/file_type_csharp.svg +1 -0
- package/dist/client/vscode-icons/file_type_csharp2.svg +1 -0
- package/dist/client/vscode-icons/file_type_cspell.svg +1 -0
- package/dist/client/vscode-icons/file_type_csproj.svg +1 -0
- package/dist/client/vscode-icons/file_type_css.svg +1 -0
- package/dist/client/vscode-icons/file_type_css2.svg +1 -0
- package/dist/client/vscode-icons/file_type_css2map.svg +1 -0
- package/dist/client/vscode-icons/file_type_csscomb.svg +1 -0
- package/dist/client/vscode-icons/file_type_csslint.svg +1 -0
- package/dist/client/vscode-icons/file_type_cssmap.svg +1 -0
- package/dist/client/vscode-icons/file_type_cucumber.svg +1 -0
- package/dist/client/vscode-icons/file_type_cuda.svg +1 -0
- package/dist/client/vscode-icons/file_type_cue.svg +1 -0
- package/dist/client/vscode-icons/file_type_cursorrules.svg +1 -0
- package/dist/client/vscode-icons/file_type_cvs.svg +1 -0
- package/dist/client/vscode-icons/file_type_cypress.svg +1 -0
- package/dist/client/vscode-icons/file_type_cypress_spec.svg +1 -0
- package/dist/client/vscode-icons/file_type_cython.svg +1 -0
- package/dist/client/vscode-icons/file_type_dal.svg +1 -0
- package/dist/client/vscode-icons/file_type_darcs.svg +1 -0
- package/dist/client/vscode-icons/file_type_dartlang.svg +1 -0
- package/dist/client/vscode-icons/file_type_dartlang_generated.svg +1 -0
- package/dist/client/vscode-icons/file_type_dartlang_ignore.svg +1 -0
- package/dist/client/vscode-icons/file_type_databricks.svg +1 -0
- package/dist/client/vscode-icons/file_type_datadog.svg +1 -0
- package/dist/client/vscode-icons/file_type_db.svg +1 -0
- package/dist/client/vscode-icons/file_type_dbt.svg +1 -0
- package/dist/client/vscode-icons/file_type_debian.svg +1 -0
- package/dist/client/vscode-icons/file_type_delphi.svg +1 -0
- package/dist/client/vscode-icons/file_type_deno.svg +1 -0
- package/dist/client/vscode-icons/file_type_denoify.svg +1 -0
- package/dist/client/vscode-icons/file_type_dependabot.svg +1 -0
- package/dist/client/vscode-icons/file_type_dependencies.svg +1 -0
- package/dist/client/vscode-icons/file_type_design_tokens.svg +1 -0
- package/dist/client/vscode-icons/file_type_devcontainer.svg +1 -0
- package/dist/client/vscode-icons/file_type_devenv.svg +1 -0
- package/dist/client/vscode-icons/file_type_devvit.svg +1 -0
- package/dist/client/vscode-icons/file_type_dhall.svg +1 -0
- package/dist/client/vscode-icons/file_type_diff.svg +1 -0
- package/dist/client/vscode-icons/file_type_django.svg +1 -0
- package/dist/client/vscode-icons/file_type_dlang.svg +1 -0
- package/dist/client/vscode-icons/file_type_docker.svg +1 -0
- package/dist/client/vscode-icons/file_type_docker2.svg +1 -0
- package/dist/client/vscode-icons/file_type_dockertest.svg +1 -0
- package/dist/client/vscode-icons/file_type_dockertest2.svg +1 -0
- package/dist/client/vscode-icons/file_type_docpad.svg +1 -0
- package/dist/client/vscode-icons/file_type_docusaurus.svg +1 -0
- package/dist/client/vscode-icons/file_type_docz.svg +1 -0
- package/dist/client/vscode-icons/file_type_dojo.svg +1 -0
- package/dist/client/vscode-icons/file_type_doppler.svg +1 -0
- package/dist/client/vscode-icons/file_type_dotenv.svg +1 -0
- package/dist/client/vscode-icons/file_type_dotjs.svg +1 -0
- package/dist/client/vscode-icons/file_type_doxyfile.svg +1 -0
- package/dist/client/vscode-icons/file_type_doxygen.svg +1 -0
- package/dist/client/vscode-icons/file_type_drawio.svg +1 -0
- package/dist/client/vscode-icons/file_type_drizzle_orm.svg +1 -0
- package/dist/client/vscode-icons/file_type_drone.svg +1 -0
- package/dist/client/vscode-icons/file_type_drools.svg +1 -0
- package/dist/client/vscode-icons/file_type_dtd.svg +1 -0
- package/dist/client/vscode-icons/file_type_duckdb.svg +1 -0
- package/dist/client/vscode-icons/file_type_dune.svg +1 -0
- package/dist/client/vscode-icons/file_type_dustjs.svg +1 -0
- package/dist/client/vscode-icons/file_type_dvc.svg +1 -0
- package/dist/client/vscode-icons/file_type_dylan.svg +1 -0
- package/dist/client/vscode-icons/file_type_earthly.svg +1 -0
- package/dist/client/vscode-icons/file_type_eas-metadata.svg +1 -0
- package/dist/client/vscode-icons/file_type_edge.svg +1 -0
- package/dist/client/vscode-icons/file_type_edge2.svg +1 -0
- package/dist/client/vscode-icons/file_type_editorconfig.svg +1 -0
- package/dist/client/vscode-icons/file_type_eex.svg +1 -0
- package/dist/client/vscode-icons/file_type_ejs.svg +1 -0
- package/dist/client/vscode-icons/file_type_elastic.svg +1 -0
- package/dist/client/vscode-icons/file_type_elasticbeanstalk.svg +1 -0
- package/dist/client/vscode-icons/file_type_electron.svg +1 -0
- package/dist/client/vscode-icons/file_type_eleventy.svg +1 -0
- package/dist/client/vscode-icons/file_type_eleventy2.svg +1 -0
- package/dist/client/vscode-icons/file_type_elixir.svg +1 -0
- package/dist/client/vscode-icons/file_type_elm.svg +1 -0
- package/dist/client/vscode-icons/file_type_elm2.svg +1 -0
- package/dist/client/vscode-icons/file_type_emacs.svg +1 -0
- package/dist/client/vscode-icons/file_type_ember.svg +1 -0
- package/dist/client/vscode-icons/file_type_ensime.svg +1 -0
- package/dist/client/vscode-icons/file_type_eps.svg +1 -0
- package/dist/client/vscode-icons/file_type_epub.svg +1 -0
- package/dist/client/vscode-icons/file_type_erb.svg +1 -0
- package/dist/client/vscode-icons/file_type_erlang.svg +1 -0
- package/dist/client/vscode-icons/file_type_erlang2.svg +1 -0
- package/dist/client/vscode-icons/file_type_esbuild.svg +1 -0
- package/dist/client/vscode-icons/file_type_eslint.svg +1 -0
- package/dist/client/vscode-icons/file_type_eslint2.svg +1 -0
- package/dist/client/vscode-icons/file_type_esphome.svg +1 -0
- package/dist/client/vscode-icons/file_type_excalidraw.svg +1 -0
- package/dist/client/vscode-icons/file_type_excel.svg +1 -0
- package/dist/client/vscode-icons/file_type_excel2.svg +1 -0
- package/dist/client/vscode-icons/file_type_expo.svg +1 -0
- package/dist/client/vscode-icons/file_type_falcon.svg +1 -0
- package/dist/client/vscode-icons/file_type_fantasticon.svg +1 -0
- package/dist/client/vscode-icons/file_type_fastly.svg +1 -0
- package/dist/client/vscode-icons/file_type_fauna.svg +1 -0
- package/dist/client/vscode-icons/file_type_favicon.svg +1 -0
- package/dist/client/vscode-icons/file_type_fbx.svg +1 -0
- package/dist/client/vscode-icons/file_type_firebase.svg +1 -0
- package/dist/client/vscode-icons/file_type_firebasehosting.svg +1 -0
- package/dist/client/vscode-icons/file_type_firebasestorage.svg +1 -0
- package/dist/client/vscode-icons/file_type_firestore.svg +1 -0
- package/dist/client/vscode-icons/file_type_fitbit.svg +1 -0
- package/dist/client/vscode-icons/file_type_fla.svg +1 -0
- package/dist/client/vscode-icons/file_type_flareact.svg +1 -0
- package/dist/client/vscode-icons/file_type_flash.svg +1 -0
- package/dist/client/vscode-icons/file_type_flatbuffers.svg +1 -0
- package/dist/client/vscode-icons/file_type_fleet.svg +1 -0
- package/dist/client/vscode-icons/file_type_floobits.svg +1 -0
- package/dist/client/vscode-icons/file_type_flow.svg +1 -0
- package/dist/client/vscode-icons/file_type_flowgorithm.svg +1 -0
- package/dist/client/vscode-icons/file_type_flutter.svg +1 -0
- package/dist/client/vscode-icons/file_type_flutter_package.svg +1 -0
- package/dist/client/vscode-icons/file_type_flyio.svg +1 -0
- package/dist/client/vscode-icons/file_type_font.svg +1 -0
- package/dist/client/vscode-icons/file_type_formkit.svg +1 -0
- package/dist/client/vscode-icons/file_type_fortran.svg +1 -0
- package/dist/client/vscode-icons/file_type_fossa.svg +1 -0
- package/dist/client/vscode-icons/file_type_fossil.svg +1 -0
- package/dist/client/vscode-icons/file_type_freemarker.svg +1 -0
- package/dist/client/vscode-icons/file_type_fritzing.svg +1 -0
- package/dist/client/vscode-icons/file_type_frontcommerce.svg +1 -0
- package/dist/client/vscode-icons/file_type_fsharp.svg +1 -0
- package/dist/client/vscode-icons/file_type_fsharp2.svg +1 -0
- package/dist/client/vscode-icons/file_type_fsproj.svg +1 -0
- package/dist/client/vscode-icons/file_type_fthtml.svg +1 -0
- package/dist/client/vscode-icons/file_type_funding.svg +1 -0
- package/dist/client/vscode-icons/file_type_fusebox.svg +1 -0
- package/dist/client/vscode-icons/file_type_galen.svg +1 -0
- package/dist/client/vscode-icons/file_type_galen2.svg +1 -0
- package/dist/client/vscode-icons/file_type_gamemaker.svg +1 -0
- package/dist/client/vscode-icons/file_type_gamemaker2.svg +1 -0
- package/dist/client/vscode-icons/file_type_gamemaker81.svg +1 -0
- package/dist/client/vscode-icons/file_type_gatsby.svg +1 -0
- package/dist/client/vscode-icons/file_type_gcloud.svg +1 -0
- package/dist/client/vscode-icons/file_type_gcode.svg +1 -0
- package/dist/client/vscode-icons/file_type_gdscript.svg +1 -0
- package/dist/client/vscode-icons/file_type_gduid.svg +1 -0
- package/dist/client/vscode-icons/file_type_gemini.svg +1 -0
- package/dist/client/vscode-icons/file_type_genstat.svg +1 -0
- package/dist/client/vscode-icons/file_type_geojson.svg +1 -0
- package/dist/client/vscode-icons/file_type_gimp.svg +1 -0
- package/dist/client/vscode-icons/file_type_git.svg +1 -0
- package/dist/client/vscode-icons/file_type_git2.svg +1 -0
- package/dist/client/vscode-icons/file_type_gitlab.svg +1 -0
- package/dist/client/vscode-icons/file_type_gitpod.svg +1 -0
- package/dist/client/vscode-icons/file_type_gleam.svg +1 -0
- package/dist/client/vscode-icons/file_type_gleamconfig.svg +1 -0
- package/dist/client/vscode-icons/file_type_glide.svg +1 -0
- package/dist/client/vscode-icons/file_type_glimmer.svg +1 -0
- package/dist/client/vscode-icons/file_type_glitter.svg +1 -0
- package/dist/client/vscode-icons/file_type_glsl.svg +1 -0
- package/dist/client/vscode-icons/file_type_gltf.svg +1 -0
- package/dist/client/vscode-icons/file_type_glyphs.svg +1 -0
- package/dist/client/vscode-icons/file_type_gnu.svg +1 -0
- package/dist/client/vscode-icons/file_type_gnuplot.svg +1 -0
- package/dist/client/vscode-icons/file_type_go.svg +1 -0
- package/dist/client/vscode-icons/file_type_go_aqua.svg +1 -0
- package/dist/client/vscode-icons/file_type_go_black.svg +1 -0
- package/dist/client/vscode-icons/file_type_go_fuchsia.svg +1 -0
- package/dist/client/vscode-icons/file_type_go_gopher.svg +1 -0
- package/dist/client/vscode-icons/file_type_go_lightblue.svg +1 -0
- package/dist/client/vscode-icons/file_type_go_package.svg +1 -0
- package/dist/client/vscode-icons/file_type_go_white.svg +1 -0
- package/dist/client/vscode-icons/file_type_go_work.svg +1 -0
- package/dist/client/vscode-icons/file_type_go_yellow.svg +1 -0
- package/dist/client/vscode-icons/file_type_goctl.svg +1 -0
- package/dist/client/vscode-icons/file_type_godot.svg +1 -0
- package/dist/client/vscode-icons/file_type_gpg.svg +1 -0
- package/dist/client/vscode-icons/file_type_gradle.svg +1 -0
- package/dist/client/vscode-icons/file_type_gradle2.svg +1 -0
- package/dist/client/vscode-icons/file_type_grain.svg +1 -0
- package/dist/client/vscode-icons/file_type_graphql.svg +1 -0
- package/dist/client/vscode-icons/file_type_graphql_config.svg +1 -0
- package/dist/client/vscode-icons/file_type_graphviz.svg +1 -0
- package/dist/client/vscode-icons/file_type_greenkeeper.svg +1 -0
- package/dist/client/vscode-icons/file_type_gridsome.svg +1 -0
- package/dist/client/vscode-icons/file_type_grit.svg +1 -0
- package/dist/client/vscode-icons/file_type_groovy.svg +1 -0
- package/dist/client/vscode-icons/file_type_groovy2.svg +1 -0
- package/dist/client/vscode-icons/file_type_grunt.svg +1 -0
- package/dist/client/vscode-icons/file_type_gulp.svg +1 -0
- package/dist/client/vscode-icons/file_type_haml.svg +1 -0
- package/dist/client/vscode-icons/file_type_handlebars.svg +1 -0
- package/dist/client/vscode-icons/file_type_handlebars2.svg +1 -0
- package/dist/client/vscode-icons/file_type_harbour.svg +1 -0
- package/dist/client/vscode-icons/file_type_hardhat.svg +1 -0
- package/dist/client/vscode-icons/file_type_hashicorp.svg +1 -0
- package/dist/client/vscode-icons/file_type_haskell.svg +1 -0
- package/dist/client/vscode-icons/file_type_haskell2.svg +1 -0
- package/dist/client/vscode-icons/file_type_haxe.svg +1 -0
- package/dist/client/vscode-icons/file_type_haxecheckstyle.svg +1 -0
- package/dist/client/vscode-icons/file_type_haxedevelop.svg +1 -0
- package/dist/client/vscode-icons/file_type_helix.svg +1 -0
- package/dist/client/vscode-icons/file_type_helm.svg +1 -0
- package/dist/client/vscode-icons/file_type_histoire.svg +1 -0
- package/dist/client/vscode-icons/file_type_hjson.svg +1 -0
- package/dist/client/vscode-icons/file_type_hlsl.svg +1 -0
- package/dist/client/vscode-icons/file_type_homeassistant.svg +1 -0
- package/dist/client/vscode-icons/file_type_horusec.svg +1 -0
- package/dist/client/vscode-icons/file_type_host.svg +1 -0
- package/dist/client/vscode-icons/file_type_html.svg +1 -0
- package/dist/client/vscode-icons/file_type_htmlhint.svg +1 -0
- package/dist/client/vscode-icons/file_type_htmlvalidate.svg +1 -0
- package/dist/client/vscode-icons/file_type_http.svg +1 -0
- package/dist/client/vscode-icons/file_type_huff.svg +1 -0
- package/dist/client/vscode-icons/file_type_hugo.svg +1 -0
- package/dist/client/vscode-icons/file_type_humanstxt.svg +1 -0
- package/dist/client/vscode-icons/file_type_hunspell.svg +1 -0
- package/dist/client/vscode-icons/file_type_hurl.svg +1 -0
- package/dist/client/vscode-icons/file_type_husky.svg +1 -0
- package/dist/client/vscode-icons/file_type_hy.svg +1 -0
- package/dist/client/vscode-icons/file_type_hygen.svg +1 -0
- package/dist/client/vscode-icons/file_type_hypr.svg +1 -0
- package/dist/client/vscode-icons/file_type_icl.svg +1 -0
- package/dist/client/vscode-icons/file_type_idris.svg +1 -0
- package/dist/client/vscode-icons/file_type_idrisbin.svg +1 -0
- package/dist/client/vscode-icons/file_type_idrispkg.svg +1 -0
- package/dist/client/vscode-icons/file_type_image.svg +1 -0
- package/dist/client/vscode-icons/file_type_imba.svg +1 -0
- package/dist/client/vscode-icons/file_type_inc.svg +1 -0
- package/dist/client/vscode-icons/file_type_infopath.svg +1 -0
- package/dist/client/vscode-icons/file_type_informix.svg +1 -0
- package/dist/client/vscode-icons/file_type_ini.svg +1 -0
- package/dist/client/vscode-icons/file_type_ink.svg +1 -0
- package/dist/client/vscode-icons/file_type_innosetup.svg +1 -0
- package/dist/client/vscode-icons/file_type_io.svg +1 -0
- package/dist/client/vscode-icons/file_type_iodine.svg +1 -0
- package/dist/client/vscode-icons/file_type_ionic.svg +1 -0
- package/dist/client/vscode-icons/file_type_jake.svg +1 -0
- package/dist/client/vscode-icons/file_type_janet.svg +1 -0
- package/dist/client/vscode-icons/file_type_jar.svg +1 -0
- package/dist/client/vscode-icons/file_type_jasmine.svg +1 -0
- package/dist/client/vscode-icons/file_type_java.svg +1 -0
- package/dist/client/vscode-icons/file_type_jbuilder.svg +1 -0
- package/dist/client/vscode-icons/file_type_jekyll.svg +1 -0
- package/dist/client/vscode-icons/file_type_jenkins.svg +1 -0
- package/dist/client/vscode-icons/file_type_jest.svg +1 -0
- package/dist/client/vscode-icons/file_type_jest_snapshot.svg +1 -0
- package/dist/client/vscode-icons/file_type_jetbrains.svg +1 -0
- package/dist/client/vscode-icons/file_type_jinja.svg +1 -0
- package/dist/client/vscode-icons/file_type_jpm.svg +1 -0
- package/dist/client/vscode-icons/file_type_js.svg +1 -0
- package/dist/client/vscode-icons/file_type_js_official.svg +1 -0
- package/dist/client/vscode-icons/file_type_jsbeautify.svg +1 -0
- package/dist/client/vscode-icons/file_type_jsconfig.svg +1 -0
- package/dist/client/vscode-icons/file_type_jscpd.svg +1 -0
- package/dist/client/vscode-icons/file_type_jshint.svg +1 -0
- package/dist/client/vscode-icons/file_type_jsmap.svg +1 -0
- package/dist/client/vscode-icons/file_type_json.svg +1 -0
- package/dist/client/vscode-icons/file_type_json2.svg +1 -0
- package/dist/client/vscode-icons/file_type_json5.svg +1 -0
- package/dist/client/vscode-icons/file_type_json_official.svg +1 -0
- package/dist/client/vscode-icons/file_type_json_schema.svg +1 -0
- package/dist/client/vscode-icons/file_type_jsonld.svg +1 -0
- package/dist/client/vscode-icons/file_type_jsonnet.svg +1 -0
- package/dist/client/vscode-icons/file_type_jsp.svg +1 -0
- package/dist/client/vscode-icons/file_type_jsr.svg +1 -0
- package/dist/client/vscode-icons/file_type_jss.svg +1 -0
- package/dist/client/vscode-icons/file_type_juice.svg +1 -0
- package/dist/client/vscode-icons/file_type_julia.svg +1 -0
- package/dist/client/vscode-icons/file_type_julia2.svg +1 -0
- package/dist/client/vscode-icons/file_type_jupyter.svg +1 -0
- package/dist/client/vscode-icons/file_type_just.svg +1 -0
- package/dist/client/vscode-icons/file_type_k.svg +1 -0
- package/dist/client/vscode-icons/file_type_karma.svg +1 -0
- package/dist/client/vscode-icons/file_type_key.svg +1 -0
- package/dist/client/vscode-icons/file_type_kitchenci.svg +1 -0
- package/dist/client/vscode-icons/file_type_kite.svg +1 -0
- package/dist/client/vscode-icons/file_type_kivy.svg +1 -0
- package/dist/client/vscode-icons/file_type_knex.svg +1 -0
- package/dist/client/vscode-icons/file_type_knip.svg +1 -0
- package/dist/client/vscode-icons/file_type_kos.svg +1 -0
- package/dist/client/vscode-icons/file_type_kotlin.svg +1 -0
- package/dist/client/vscode-icons/file_type_kusto.svg +1 -0
- package/dist/client/vscode-icons/file_type_language_configuration.svg +1 -0
- package/dist/client/vscode-icons/file_type_lark.svg +1 -0
- package/dist/client/vscode-icons/file_type_latino.svg +1 -0
- package/dist/client/vscode-icons/file_type_layout.svg +1 -0
- package/dist/client/vscode-icons/file_type_lean.svg +1 -0
- package/dist/client/vscode-icons/file_type_leanconfig.svg +1 -0
- package/dist/client/vscode-icons/file_type_lefthook.svg +1 -0
- package/dist/client/vscode-icons/file_type_lemon.svg +1 -0
- package/dist/client/vscode-icons/file_type_lerna.svg +1 -0
- package/dist/client/vscode-icons/file_type_less.svg +1 -0
- package/dist/client/vscode-icons/file_type_lex.svg +1 -0
- package/dist/client/vscode-icons/file_type_liara.svg +1 -0
- package/dist/client/vscode-icons/file_type_libreoffice_base.svg +1 -0
- package/dist/client/vscode-icons/file_type_libreoffice_calc.svg +1 -0
- package/dist/client/vscode-icons/file_type_libreoffice_draw.svg +1 -0
- package/dist/client/vscode-icons/file_type_libreoffice_impress.svg +1 -0
- package/dist/client/vscode-icons/file_type_libreoffice_math.svg +1 -0
- package/dist/client/vscode-icons/file_type_libreoffice_writer.svg +1 -0
- package/dist/client/vscode-icons/file_type_license.svg +1 -0
- package/dist/client/vscode-icons/file_type_licensebat.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_actionscript2.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_ada.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_agda.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_agents.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_apl.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_astro.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_astroconfig.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_babel.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_babel2.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_cabal.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_circleci.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_cloudfoundry.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_codacy.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_codeclimate.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_codeowners.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_config.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_copilot.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_crystal.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_cue.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_cypress.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_cypress_spec.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_db.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_devenv.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_dhall.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_docpad.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_drizzle_orm.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_drone.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_duckdb.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_eas-metadata.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_eleventy.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_eleventy2.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_esphome.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_expo.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_firebasehosting.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_fla.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_font.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_gamemaker2.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_gradle.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_hashicorp.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_hjson.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_huff.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_ini.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_io.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_js.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_jsconfig.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_jsmap.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_json.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_json5.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_json_schema.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_jsonld.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_kite.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_lark.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_lean.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_leanconfig.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_lerna.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_mailing.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_markuplint.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_mcp.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_mdx-components.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_mdx.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_mikro_orm.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_mlang.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_mustache.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_mypy.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_neo4j.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_netlify.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_next.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_nim.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_nx.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_objidconfig.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_openHAB.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_opencode.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_oxc.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_packship.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_pcl.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_pnpm.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_prettier.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_prisma.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_purescript.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_quasar.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_railway.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_raku.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_razzle.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_reactrouter.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_readthedocs.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_rehype.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_remark.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_render.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_replit.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_retext.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_rolldown.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_rome.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_rubocop.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_rust.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_rust_toolchain.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_safetensors.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_shadcn.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_shaderlab.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_skill.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_solidity.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_spin.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_stylelint.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_stylus.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_symfony.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_systemd.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_systemverilog.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_testcafe.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_testjs.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_tex.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_tm.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_tmux.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_todo.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_toit.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_toml.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_toon.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_tree.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_trivy.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_turbo.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_unibeautify.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_vash.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_vercel.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_vite.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_vitest.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_vsix.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_vsixmanifest.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_warp.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_wesl.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_xfl.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_xorg.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_yaml.svg +1 -0
- package/dist/client/vscode-icons/file_type_light_yaml_official.svg +1 -0
- package/dist/client/vscode-icons/file_type_lighthouse.svg +1 -0
- package/dist/client/vscode-icons/file_type_lilypond.svg +1 -0
- package/dist/client/vscode-icons/file_type_lime.svg +1 -0
- package/dist/client/vscode-icons/file_type_lintstagedrc.svg +1 -0
- package/dist/client/vscode-icons/file_type_liquid.svg +1 -0
- package/dist/client/vscode-icons/file_type_lisp.svg +1 -0
- package/dist/client/vscode-icons/file_type_livescript.svg +1 -0
- package/dist/client/vscode-icons/file_type_lnk.svg +1 -0
- package/dist/client/vscode-icons/file_type_locale.svg +1 -0
- package/dist/client/vscode-icons/file_type_log.svg +1 -0
- package/dist/client/vscode-icons/file_type_lolcode.svg +1 -0
- package/dist/client/vscode-icons/file_type_lsl.svg +1 -0
- package/dist/client/vscode-icons/file_type_lua.svg +1 -0
- package/dist/client/vscode-icons/file_type_luau.svg +1 -0
- package/dist/client/vscode-icons/file_type_lychee.svg +1 -0
- package/dist/client/vscode-icons/file_type_lync.svg +1 -0
- package/dist/client/vscode-icons/file_type_mailing.svg +1 -0
- package/dist/client/vscode-icons/file_type_manifest.svg +1 -0
- package/dist/client/vscode-icons/file_type_manifest_bak.svg +1 -0
- package/dist/client/vscode-icons/file_type_manifest_skip.svg +1 -0
- package/dist/client/vscode-icons/file_type_map.svg +1 -0
- package/dist/client/vscode-icons/file_type_mariadb.svg +1 -0
- package/dist/client/vscode-icons/file_type_markdown.svg +1 -0
- package/dist/client/vscode-icons/file_type_markdownlint.svg +1 -0
- package/dist/client/vscode-icons/file_type_markdownlint_ignore.svg +1 -0
- package/dist/client/vscode-icons/file_type_marko.svg +1 -0
- package/dist/client/vscode-icons/file_type_markojs.svg +1 -0
- package/dist/client/vscode-icons/file_type_markuplint.svg +1 -0
- package/dist/client/vscode-icons/file_type_master-co.svg +1 -0
- package/dist/client/vscode-icons/file_type_matlab.svg +1 -0
- package/dist/client/vscode-icons/file_type_maven.svg +1 -0
- package/dist/client/vscode-icons/file_type_maxscript.svg +1 -0
- package/dist/client/vscode-icons/file_type_maya.svg +1 -0
- package/dist/client/vscode-icons/file_type_mcp.svg +1 -0
- package/dist/client/vscode-icons/file_type_mdx-components.svg +1 -0
- package/dist/client/vscode-icons/file_type_mdx.svg +1 -0
- package/dist/client/vscode-icons/file_type_mdxlint.svg +1 -0
- package/dist/client/vscode-icons/file_type_mediawiki.svg +1 -0
- package/dist/client/vscode-icons/file_type_mercurial.svg +1 -0
- package/dist/client/vscode-icons/file_type_mermaid.svg +1 -0
- package/dist/client/vscode-icons/file_type_meson.svg +1 -0
- package/dist/client/vscode-icons/file_type_metal.svg +1 -0
- package/dist/client/vscode-icons/file_type_meteor.svg +1 -0
- package/dist/client/vscode-icons/file_type_metro.svg +1 -0
- package/dist/client/vscode-icons/file_type_mikro_orm.svg +1 -0
- package/dist/client/vscode-icons/file_type_minecraft.svg +1 -0
- package/dist/client/vscode-icons/file_type_mise.svg +1 -0
- package/dist/client/vscode-icons/file_type_mivascript.svg +1 -0
- package/dist/client/vscode-icons/file_type_mjml.svg +1 -0
- package/dist/client/vscode-icons/file_type_mlang.svg +1 -0
- package/dist/client/vscode-icons/file_type_mocha.svg +1 -0
- package/dist/client/vscode-icons/file_type_modernizr.svg +1 -0
- package/dist/client/vscode-icons/file_type_modernjs.svg +1 -0
- package/dist/client/vscode-icons/file_type_mojo.svg +1 -0
- package/dist/client/vscode-icons/file_type_mojolicious.svg +1 -0
- package/dist/client/vscode-icons/file_type_moleculer.svg +1 -0
- package/dist/client/vscode-icons/file_type_mondoo.svg +1 -0
- package/dist/client/vscode-icons/file_type_mongo.svg +1 -0
- package/dist/client/vscode-icons/file_type_monotone.svg +1 -0
- package/dist/client/vscode-icons/file_type_motif.svg +1 -0
- package/dist/client/vscode-icons/file_type_mson.svg +1 -0
- package/dist/client/vscode-icons/file_type_msw.svg +1 -0
- package/dist/client/vscode-icons/file_type_mustache.svg +1 -0
- package/dist/client/vscode-icons/file_type_mvt.svg +1 -0
- package/dist/client/vscode-icons/file_type_mvtcss.svg +1 -0
- package/dist/client/vscode-icons/file_type_mvtjs.svg +1 -0
- package/dist/client/vscode-icons/file_type_mypy.svg +1 -0
- package/dist/client/vscode-icons/file_type_mysql.svg +1 -0
- package/dist/client/vscode-icons/file_type_n64.svg +1 -0
- package/dist/client/vscode-icons/file_type_nanostaged.svg +1 -0
- package/dist/client/vscode-icons/file_type_ndst.svg +1 -0
- package/dist/client/vscode-icons/file_type_nearly.svg +1 -0
- package/dist/client/vscode-icons/file_type_neo4j.svg +1 -0
- package/dist/client/vscode-icons/file_type_nest_adapter_js.svg +1 -0
- package/dist/client/vscode-icons/file_type_nest_adapter_ts.svg +1 -0
- package/dist/client/vscode-icons/file_type_nest_controller_js.svg +1 -0
- package/dist/client/vscode-icons/file_type_nest_controller_ts.svg +1 -0
- package/dist/client/vscode-icons/file_type_nest_decorator_js.svg +1 -0
- package/dist/client/vscode-icons/file_type_nest_decorator_ts.svg +1 -0
- package/dist/client/vscode-icons/file_type_nest_filter_js.svg +1 -0
- package/dist/client/vscode-icons/file_type_nest_filter_ts.svg +1 -0
- package/dist/client/vscode-icons/file_type_nest_gateway_js.svg +1 -0
- package/dist/client/vscode-icons/file_type_nest_gateway_ts.svg +1 -0
- package/dist/client/vscode-icons/file_type_nest_guard_js.svg +1 -0
- package/dist/client/vscode-icons/file_type_nest_guard_ts.svg +1 -0
- package/dist/client/vscode-icons/file_type_nest_interceptor_js.svg +1 -0
- package/dist/client/vscode-icons/file_type_nest_interceptor_ts.svg +1 -0
- package/dist/client/vscode-icons/file_type_nest_middleware_js.svg +1 -0
- package/dist/client/vscode-icons/file_type_nest_middleware_ts.svg +1 -0
- package/dist/client/vscode-icons/file_type_nest_module_js.svg +1 -0
- package/dist/client/vscode-icons/file_type_nest_module_ts.svg +1 -0
- package/dist/client/vscode-icons/file_type_nest_pipe_js.svg +1 -0
- package/dist/client/vscode-icons/file_type_nest_pipe_ts.svg +1 -0
- package/dist/client/vscode-icons/file_type_nest_service_js.svg +1 -0
- package/dist/client/vscode-icons/file_type_nest_service_ts.svg +1 -0
- package/dist/client/vscode-icons/file_type_nestjs.svg +1 -0
- package/dist/client/vscode-icons/file_type_netlify.svg +1 -0
- package/dist/client/vscode-icons/file_type_next.svg +1 -0
- package/dist/client/vscode-icons/file_type_nextflow.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_component_css.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_component_dart.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_component_html.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_component_js.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_component_js2.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_component_less.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_component_sass.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_component_scss.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_component_ts.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_component_ts2.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_controller_js.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_controller_ts.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_directive_dart.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_directive_js.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_directive_js2.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_directive_ts.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_directive_ts2.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_guard_dart.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_guard_js.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_guard_ts.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_interceptor_dart.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_interceptor_js.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_interceptor_ts.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_module_dart.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_module_js.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_module_js2.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_module_ts.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_module_ts2.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_pipe_dart.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_pipe_js.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_pipe_js2.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_pipe_ts.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_pipe_ts2.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_routing_dart.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_routing_js.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_routing_js2.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_routing_ts.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_routing_ts2.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_service_dart.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_service_js.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_service_js2.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_service_ts.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_service_ts2.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_smart_component_dart.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_smart_component_js.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_smart_component_js2.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_smart_component_ts.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_smart_component_ts2.svg +1 -0
- package/dist/client/vscode-icons/file_type_ng_tailwind.svg +1 -0
- package/dist/client/vscode-icons/file_type_nginx.svg +1 -0
- package/dist/client/vscode-icons/file_type_nim.svg +1 -0
- package/dist/client/vscode-icons/file_type_nimble.svg +1 -0
- package/dist/client/vscode-icons/file_type_ninja.svg +1 -0
- package/dist/client/vscode-icons/file_type_nix.svg +1 -0
- package/dist/client/vscode-icons/file_type_njsproj.svg +1 -0
- package/dist/client/vscode-icons/file_type_noc.svg +1 -0
- package/dist/client/vscode-icons/file_type_node.svg +1 -0
- package/dist/client/vscode-icons/file_type_node2.svg +1 -0
- package/dist/client/vscode-icons/file_type_nodemon.svg +1 -0
- package/dist/client/vscode-icons/file_type_npm.svg +1 -0
- package/dist/client/vscode-icons/file_type_npmpackagejsonlint.svg +1 -0
- package/dist/client/vscode-icons/file_type_nsi.svg +1 -0
- package/dist/client/vscode-icons/file_type_nsri-integrity.svg +1 -0
- package/dist/client/vscode-icons/file_type_nsri.svg +1 -0
- package/dist/client/vscode-icons/file_type_nuget.svg +1 -0
- package/dist/client/vscode-icons/file_type_numpy.svg +1 -0
- package/dist/client/vscode-icons/file_type_nunjucks.svg +1 -0
- package/dist/client/vscode-icons/file_type_nushell.svg +1 -0
- package/dist/client/vscode-icons/file_type_nuxt.svg +1 -0
- package/dist/client/vscode-icons/file_type_nx.svg +1 -0
- package/dist/client/vscode-icons/file_type_nyc.svg +1 -0
- package/dist/client/vscode-icons/file_type_objectivec.svg +1 -0
- package/dist/client/vscode-icons/file_type_objectivecpp.svg +1 -0
- package/dist/client/vscode-icons/file_type_objidconfig.svg +1 -0
- package/dist/client/vscode-icons/file_type_ocaml.svg +1 -0
- package/dist/client/vscode-icons/file_type_ocaml_intf.svg +1 -0
- package/dist/client/vscode-icons/file_type_ogone.svg +1 -0
- package/dist/client/vscode-icons/file_type_onenote.svg +1 -0
- package/dist/client/vscode-icons/file_type_opam.svg +1 -0
- package/dist/client/vscode-icons/file_type_openHAB.svg +1 -0
- package/dist/client/vscode-icons/file_type_opencl.svg +1 -0
- package/dist/client/vscode-icons/file_type_opencode.svg +1 -0
- package/dist/client/vscode-icons/file_type_openscad.svg +1 -0
- package/dist/client/vscode-icons/file_type_opentofu.svg +1 -0
- package/dist/client/vscode-icons/file_type_org.svg +1 -0
- package/dist/client/vscode-icons/file_type_orval.svg +1 -0
- package/dist/client/vscode-icons/file_type_outlook.svg +1 -0
- package/dist/client/vscode-icons/file_type_ovpn.svg +1 -0
- package/dist/client/vscode-icons/file_type_oxc.svg +1 -0
- package/dist/client/vscode-icons/file_type_package.svg +1 -0
- package/dist/client/vscode-icons/file_type_packship.svg +1 -0
- package/dist/client/vscode-icons/file_type_paket.svg +1 -0
- package/dist/client/vscode-icons/file_type_pandacss.svg +1 -0
- package/dist/client/vscode-icons/file_type_parcel.svg +1 -0
- package/dist/client/vscode-icons/file_type_parquet.svg +1 -0
- package/dist/client/vscode-icons/file_type_patch.svg +1 -0
- package/dist/client/vscode-icons/file_type_pawn.svg +1 -0
- package/dist/client/vscode-icons/file_type_pcl.svg +1 -0
- package/dist/client/vscode-icons/file_type_pddl.svg +1 -0
- package/dist/client/vscode-icons/file_type_pddl_happenings.svg +1 -0
- package/dist/client/vscode-icons/file_type_pddl_plan.svg +1 -0
- package/dist/client/vscode-icons/file_type_pdf.svg +1 -0
- package/dist/client/vscode-icons/file_type_pdf2.svg +1 -0
- package/dist/client/vscode-icons/file_type_pdm.svg +1 -0
- package/dist/client/vscode-icons/file_type_peeky.svg +1 -0
- package/dist/client/vscode-icons/file_type_perl.svg +1 -0
- package/dist/client/vscode-icons/file_type_perl2.svg +1 -0
- package/dist/client/vscode-icons/file_type_perl6.svg +1 -0
- package/dist/client/vscode-icons/file_type_pgsql.svg +1 -0
- package/dist/client/vscode-icons/file_type_photoshop.svg +1 -0
- package/dist/client/vscode-icons/file_type_photoshop2.svg +1 -0
- package/dist/client/vscode-icons/file_type_php.svg +1 -0
- package/dist/client/vscode-icons/file_type_php2.svg +1 -0
- package/dist/client/vscode-icons/file_type_php3.svg +1 -0
- package/dist/client/vscode-icons/file_type_phpcsfixer.svg +1 -0
- package/dist/client/vscode-icons/file_type_phpstan.svg +1 -0
- package/dist/client/vscode-icons/file_type_phpunit.svg +1 -0
- package/dist/client/vscode-icons/file_type_phraseapp.svg +1 -0
- package/dist/client/vscode-icons/file_type_pine.svg +1 -0
- package/dist/client/vscode-icons/file_type_pip.svg +1 -0
- package/dist/client/vscode-icons/file_type_pipeline.svg +1 -0
- package/dist/client/vscode-icons/file_type_pixi.svg +1 -0
- package/dist/client/vscode-icons/file_type_plantuml.svg +1 -0
- package/dist/client/vscode-icons/file_type_platformio.svg +1 -0
- package/dist/client/vscode-icons/file_type_playwright.svg +1 -0
- package/dist/client/vscode-icons/file_type_plsql.svg +1 -0
- package/dist/client/vscode-icons/file_type_plsql_package.svg +1 -0
- package/dist/client/vscode-icons/file_type_plsql_package_body.svg +1 -0
- package/dist/client/vscode-icons/file_type_plsql_package_header.svg +1 -0
- package/dist/client/vscode-icons/file_type_plsql_package_spec.svg +1 -0
- package/dist/client/vscode-icons/file_type_pm2.svg +1 -0
- package/dist/client/vscode-icons/file_type_pnpm.svg +1 -0
- package/dist/client/vscode-icons/file_type_poedit.svg +1 -0
- package/dist/client/vscode-icons/file_type_poetry.svg +1 -0
- package/dist/client/vscode-icons/file_type_polyglot.svg +1 -0
- package/dist/client/vscode-icons/file_type_polymer.svg +1 -0
- package/dist/client/vscode-icons/file_type_pony.svg +1 -0
- package/dist/client/vscode-icons/file_type_postcss.svg +1 -0
- package/dist/client/vscode-icons/file_type_postcssconfig.svg +1 -0
- package/dist/client/vscode-icons/file_type_postman.svg +1 -0
- package/dist/client/vscode-icons/file_type_postscript.svg +1 -0
- package/dist/client/vscode-icons/file_type_powerbi.svg +1 -0
- package/dist/client/vscode-icons/file_type_powerpoint.svg +1 -0
- package/dist/client/vscode-icons/file_type_powerpoint2.svg +1 -0
- package/dist/client/vscode-icons/file_type_powershell.svg +1 -0
- package/dist/client/vscode-icons/file_type_powershell2.svg +1 -0
- package/dist/client/vscode-icons/file_type_powershell_format.svg +1 -0
- package/dist/client/vscode-icons/file_type_powershell_psd.svg +1 -0
- package/dist/client/vscode-icons/file_type_powershell_psd2.svg +1 -0
- package/dist/client/vscode-icons/file_type_powershell_psm.svg +1 -0
- package/dist/client/vscode-icons/file_type_powershell_psm2.svg +1 -0
- package/dist/client/vscode-icons/file_type_powershell_types.svg +1 -0
- package/dist/client/vscode-icons/file_type_preact.svg +1 -0
- package/dist/client/vscode-icons/file_type_precommit.svg +1 -0
- package/dist/client/vscode-icons/file_type_prettier.svg +1 -0
- package/dist/client/vscode-icons/file_type_prisma.svg +1 -0
- package/dist/client/vscode-icons/file_type_prismaconfig.svg +1 -0
- package/dist/client/vscode-icons/file_type_processinglang.svg +1 -0
- package/dist/client/vscode-icons/file_type_procfile.svg +1 -0
- package/dist/client/vscode-icons/file_type_progress.svg +1 -0
- package/dist/client/vscode-icons/file_type_prolog.svg +1 -0
- package/dist/client/vscode-icons/file_type_prometheus.svg +1 -0
- package/dist/client/vscode-icons/file_type_protobuf.svg +1 -0
- package/dist/client/vscode-icons/file_type_protractor.svg +1 -0
- package/dist/client/vscode-icons/file_type_publiccode.svg +1 -0
- package/dist/client/vscode-icons/file_type_publisher.svg +1 -0
- package/dist/client/vscode-icons/file_type_pug.svg +1 -0
- package/dist/client/vscode-icons/file_type_pulumi.svg +1 -0
- package/dist/client/vscode-icons/file_type_puppet.svg +1 -0
- package/dist/client/vscode-icons/file_type_purescript.svg +1 -0
- package/dist/client/vscode-icons/file_type_purgecss.svg +1 -0
- package/dist/client/vscode-icons/file_type_pyenv.svg +1 -0
- package/dist/client/vscode-icons/file_type_pypi.svg +1 -0
- package/dist/client/vscode-icons/file_type_pyret.svg +1 -0
- package/dist/client/vscode-icons/file_type_pyscript.svg +1 -0
- package/dist/client/vscode-icons/file_type_pytest.svg +1 -0
- package/dist/client/vscode-icons/file_type_python.svg +1 -0
- package/dist/client/vscode-icons/file_type_pythonconfig.svg +1 -0
- package/dist/client/vscode-icons/file_type_pythowo.svg +1 -0
- package/dist/client/vscode-icons/file_type_pytyped.svg +1 -0
- package/dist/client/vscode-icons/file_type_pyup.svg +1 -0
- package/dist/client/vscode-icons/file_type_q.svg +1 -0
- package/dist/client/vscode-icons/file_type_qbs.svg +1 -0
- package/dist/client/vscode-icons/file_type_qlikview.svg +1 -0
- package/dist/client/vscode-icons/file_type_qml.svg +1 -0
- package/dist/client/vscode-icons/file_type_qmldir.svg +1 -0
- package/dist/client/vscode-icons/file_type_qrc.svg +1 -0
- package/dist/client/vscode-icons/file_type_qsharp.svg +1 -0
- package/dist/client/vscode-icons/file_type_quasar.svg +1 -0
- package/dist/client/vscode-icons/file_type_quokka.svg +1 -0
- package/dist/client/vscode-icons/file_type_r.svg +1 -0
- package/dist/client/vscode-icons/file_type_ra_syntax_tree.svg +1 -0
- package/dist/client/vscode-icons/file_type_racket.svg +1 -0
- package/dist/client/vscode-icons/file_type_rails.svg +1 -0
- package/dist/client/vscode-icons/file_type_railway.svg +1 -0
- package/dist/client/vscode-icons/file_type_rake.svg +1 -0
- package/dist/client/vscode-icons/file_type_raku.svg +1 -0
- package/dist/client/vscode-icons/file_type_raml.svg +1 -0
- package/dist/client/vscode-icons/file_type_razor.svg +1 -0
- package/dist/client/vscode-icons/file_type_razzle.svg +1 -0
- package/dist/client/vscode-icons/file_type_reactjs.svg +1 -0
- package/dist/client/vscode-icons/file_type_reactrouter.svg +1 -0
- package/dist/client/vscode-icons/file_type_reacttemplate.svg +1 -0
- package/dist/client/vscode-icons/file_type_reactts.svg +1 -0
- package/dist/client/vscode-icons/file_type_readthedocs.svg +1 -0
- package/dist/client/vscode-icons/file_type_reason.svg +1 -0
- package/dist/client/vscode-icons/file_type_red.svg +1 -0
- package/dist/client/vscode-icons/file_type_registry.svg +1 -0
- package/dist/client/vscode-icons/file_type_rego.svg +1 -0
- package/dist/client/vscode-icons/file_type_rehype.svg +1 -0
- package/dist/client/vscode-icons/file_type_remark.svg +1 -0
- package/dist/client/vscode-icons/file_type_render.svg +1 -0
- package/dist/client/vscode-icons/file_type_renovate.svg +1 -0
- package/dist/client/vscode-icons/file_type_replit.svg +1 -0
- package/dist/client/vscode-icons/file_type_rescript.svg +1 -0
- package/dist/client/vscode-icons/file_type_rest.svg +1 -0
- package/dist/client/vscode-icons/file_type_retext.svg +1 -0
- package/dist/client/vscode-icons/file_type_rexx.svg +1 -0
- package/dist/client/vscode-icons/file_type_riot.svg +1 -0
- package/dist/client/vscode-icons/file_type_ripple.svg +1 -0
- package/dist/client/vscode-icons/file_type_rmd.svg +1 -0
- package/dist/client/vscode-icons/file_type_rnc.svg +1 -0
- package/dist/client/vscode-icons/file_type_robotframework.svg +1 -0
- package/dist/client/vscode-icons/file_type_robots.svg +1 -0
- package/dist/client/vscode-icons/file_type_rolldown.svg +1 -0
- package/dist/client/vscode-icons/file_type_rollup.svg +1 -0
- package/dist/client/vscode-icons/file_type_rome.svg +1 -0
- package/dist/client/vscode-icons/file_type_ron.svg +1 -0
- package/dist/client/vscode-icons/file_type_rproj.svg +1 -0
- package/dist/client/vscode-icons/file_type_rspec.svg +1 -0
- package/dist/client/vscode-icons/file_type_rss.svg +1 -0
- package/dist/client/vscode-icons/file_type_rubocop.svg +1 -0
- package/dist/client/vscode-icons/file_type_ruby.svg +1 -0
- package/dist/client/vscode-icons/file_type_ruff.svg +1 -0
- package/dist/client/vscode-icons/file_type_rust.svg +1 -0
- package/dist/client/vscode-icons/file_type_rust_toolchain.svg +1 -0
- package/dist/client/vscode-icons/file_type_s-lang.svg +1 -0
- package/dist/client/vscode-icons/file_type_safetensors.svg +1 -0
- package/dist/client/vscode-icons/file_type_sails.svg +1 -0
- package/dist/client/vscode-icons/file_type_saltstack.svg +1 -0
- package/dist/client/vscode-icons/file_type_san.svg +1 -0
- package/dist/client/vscode-icons/file_type_sapphire_framework_cli.svg +1 -0
- package/dist/client/vscode-icons/file_type_sas.svg +1 -0
- package/dist/client/vscode-icons/file_type_sass.svg +1 -0
- package/dist/client/vscode-icons/file_type_sbt.svg +1 -0
- package/dist/client/vscode-icons/file_type_scala.svg +1 -0
- package/dist/client/vscode-icons/file_type_scilab.svg +1 -0
- package/dist/client/vscode-icons/file_type_script.svg +1 -0
- package/dist/client/vscode-icons/file_type_scss.svg +1 -0
- package/dist/client/vscode-icons/file_type_scss2.svg +1 -0
- package/dist/client/vscode-icons/file_type_sdlang.svg +1 -0
- package/dist/client/vscode-icons/file_type_search_result.svg +1 -0
- package/dist/client/vscode-icons/file_type_seedkit.svg +1 -0
- package/dist/client/vscode-icons/file_type_sentry.svg +1 -0
- package/dist/client/vscode-icons/file_type_sequelize.svg +1 -0
- package/dist/client/vscode-icons/file_type_serverless.svg +1 -0
- package/dist/client/vscode-icons/file_type_shadcn.svg +1 -0
- package/dist/client/vscode-icons/file_type_shaderlab.svg +1 -0
- package/dist/client/vscode-icons/file_type_shell.svg +1 -0
- package/dist/client/vscode-icons/file_type_shellcheck.svg +1 -0
- package/dist/client/vscode-icons/file_type_shuttle.svg +1 -0
- package/dist/client/vscode-icons/file_type_silverstripe.svg +1 -0
- package/dist/client/vscode-icons/file_type_sino.svg +1 -0
- package/dist/client/vscode-icons/file_type_sitemap.svg +1 -0
- package/dist/client/vscode-icons/file_type_siyuan.svg +1 -0
- package/dist/client/vscode-icons/file_type_sketch.svg +1 -0
- package/dist/client/vscode-icons/file_type_skill.svg +1 -0
- package/dist/client/vscode-icons/file_type_skipper.svg +1 -0
- package/dist/client/vscode-icons/file_type_slang.svg +1 -0
- package/dist/client/vscode-icons/file_type_slashup.svg +1 -0
- package/dist/client/vscode-icons/file_type_slice.svg +1 -0
- package/dist/client/vscode-icons/file_type_slim.svg +1 -0
- package/dist/client/vscode-icons/file_type_slint.svg +1 -0
- package/dist/client/vscode-icons/file_type_sln.svg +1 -0
- package/dist/client/vscode-icons/file_type_sln2.svg +1 -0
- package/dist/client/vscode-icons/file_type_smarty.svg +1 -0
- package/dist/client/vscode-icons/file_type_smithery.svg +1 -0
- package/dist/client/vscode-icons/file_type_snakemake.svg +1 -0
- package/dist/client/vscode-icons/file_type_snapcraft.svg +1 -0
- package/dist/client/vscode-icons/file_type_snaplet.svg +1 -0
- package/dist/client/vscode-icons/file_type_snort.svg +1 -0
- package/dist/client/vscode-icons/file_type_snyk.svg +1 -0
- package/dist/client/vscode-icons/file_type_solidarity.svg +1 -0
- package/dist/client/vscode-icons/file_type_solidity.svg +1 -0
- package/dist/client/vscode-icons/file_type_source.svg +1 -0
- package/dist/client/vscode-icons/file_type_spacengine.svg +1 -0
- package/dist/client/vscode-icons/file_type_sparql.svg +1 -0
- package/dist/client/vscode-icons/file_type_spin.svg +1 -0
- package/dist/client/vscode-icons/file_type_sqf.svg +1 -0
- package/dist/client/vscode-icons/file_type_sql.svg +1 -0
- package/dist/client/vscode-icons/file_type_sqlite.svg +1 -0
- package/dist/client/vscode-icons/file_type_squirrel.svg +1 -0
- package/dist/client/vscode-icons/file_type_sss.svg +1 -0
- package/dist/client/vscode-icons/file_type_sst.svg +1 -0
- package/dist/client/vscode-icons/file_type_stackblitz.svg +1 -0
- package/dist/client/vscode-icons/file_type_stan.svg +1 -0
- package/dist/client/vscode-icons/file_type_stata.svg +1 -0
- package/dist/client/vscode-icons/file_type_stencil.svg +1 -0
- package/dist/client/vscode-icons/file_type_storyboard.svg +1 -0
- package/dist/client/vscode-icons/file_type_storybook.svg +1 -0
- package/dist/client/vscode-icons/file_type_stryker.svg +1 -0
- package/dist/client/vscode-icons/file_type_stylable.svg +1 -0
- package/dist/client/vscode-icons/file_type_style.svg +1 -0
- package/dist/client/vscode-icons/file_type_styled.svg +1 -0
- package/dist/client/vscode-icons/file_type_stylelint.svg +1 -0
- package/dist/client/vscode-icons/file_type_stylish_haskell.svg +1 -0
- package/dist/client/vscode-icons/file_type_stylus.svg +1 -0
- package/dist/client/vscode-icons/file_type_sublime.svg +1 -0
- package/dist/client/vscode-icons/file_type_subversion.svg +1 -0
- package/dist/client/vscode-icons/file_type_svelte.svg +1 -0
- package/dist/client/vscode-icons/file_type_svelteconfig.svg +1 -0
- package/dist/client/vscode-icons/file_type_svg.svg +1 -0
- package/dist/client/vscode-icons/file_type_svgo.svg +1 -0
- package/dist/client/vscode-icons/file_type_swagger.svg +1 -0
- package/dist/client/vscode-icons/file_type_swc.svg +1 -0
- package/dist/client/vscode-icons/file_type_swift.svg +1 -0
- package/dist/client/vscode-icons/file_type_swig.svg +1 -0
- package/dist/client/vscode-icons/file_type_symfony.svg +1 -0
- package/dist/client/vscode-icons/file_type_syncpack.svg +1 -0
- package/dist/client/vscode-icons/file_type_systemd.svg +1 -0
- package/dist/client/vscode-icons/file_type_systemverilog.svg +1 -0
- package/dist/client/vscode-icons/file_type_t4tt.svg +1 -0
- package/dist/client/vscode-icons/file_type_tailwind.svg +1 -0
- package/dist/client/vscode-icons/file_type_tamagui.svg +1 -0
- package/dist/client/vscode-icons/file_type_taplo.svg +1 -0
- package/dist/client/vscode-icons/file_type_taskfile.svg +1 -0
- package/dist/client/vscode-icons/file_type_tauri.svg +1 -0
- package/dist/client/vscode-icons/file_type_tcl.svg +1 -0
- package/dist/client/vscode-icons/file_type_teal.svg +1 -0
- package/dist/client/vscode-icons/file_type_templ.svg +1 -0
- package/dist/client/vscode-icons/file_type_tera.svg +1 -0
- package/dist/client/vscode-icons/file_type_terraform.svg +1 -0
- package/dist/client/vscode-icons/file_type_test.svg +1 -0
- package/dist/client/vscode-icons/file_type_testcafe.svg +1 -0
- package/dist/client/vscode-icons/file_type_testjs.svg +1 -0
- package/dist/client/vscode-icons/file_type_testplane.svg +1 -0
- package/dist/client/vscode-icons/file_type_testts.svg +1 -0
- package/dist/client/vscode-icons/file_type_tex.svg +1 -0
- package/dist/client/vscode-icons/file_type_text.svg +1 -0
- package/dist/client/vscode-icons/file_type_textile.svg +1 -0
- package/dist/client/vscode-icons/file_type_textlint.svg +1 -0
- package/dist/client/vscode-icons/file_type_tfs.svg +1 -0
- package/dist/client/vscode-icons/file_type_thinkscript.svg +1 -0
- package/dist/client/vscode-icons/file_type_tiltfile.svg +1 -0
- package/dist/client/vscode-icons/file_type_tm.svg +1 -0
- package/dist/client/vscode-icons/file_type_tmux.svg +1 -0
- package/dist/client/vscode-icons/file_type_todo.svg +1 -0
- package/dist/client/vscode-icons/file_type_toit.svg +1 -0
- package/dist/client/vscode-icons/file_type_toml.svg +1 -0
- package/dist/client/vscode-icons/file_type_toon.svg +1 -0
- package/dist/client/vscode-icons/file_type_tox.svg +1 -0
- package/dist/client/vscode-icons/file_type_travis.svg +1 -0
- package/dist/client/vscode-icons/file_type_tree.svg +1 -0
- package/dist/client/vscode-icons/file_type_tres.svg +1 -0
- package/dist/client/vscode-icons/file_type_trivy.svg +1 -0
- package/dist/client/vscode-icons/file_type_truffle.svg +1 -0
- package/dist/client/vscode-icons/file_type_trunk.svg +1 -0
- package/dist/client/vscode-icons/file_type_tsbuildinfo.svg +1 -0
- package/dist/client/vscode-icons/file_type_tscn.svg +1 -0
- package/dist/client/vscode-icons/file_type_tsconfig.svg +1 -0
- package/dist/client/vscode-icons/file_type_tsconfig_official.svg +1 -0
- package/dist/client/vscode-icons/file_type_tsdoc.svg +1 -0
- package/dist/client/vscode-icons/file_type_tsdown.svg +1 -0
- package/dist/client/vscode-icons/file_type_tslint.svg +1 -0
- package/dist/client/vscode-icons/file_type_tt.svg +1 -0
- package/dist/client/vscode-icons/file_type_ttcn.svg +1 -0
- package/dist/client/vscode-icons/file_type_tuc.svg +1 -0
- package/dist/client/vscode-icons/file_type_turbo.svg +1 -0
- package/dist/client/vscode-icons/file_type_twig.svg +1 -0
- package/dist/client/vscode-icons/file_type_typedoc.svg +1 -0
- package/dist/client/vscode-icons/file_type_typescript.svg +1 -0
- package/dist/client/vscode-icons/file_type_typescript_official.svg +1 -0
- package/dist/client/vscode-icons/file_type_typescriptdef.svg +1 -0
- package/dist/client/vscode-icons/file_type_typescriptdef_official.svg +1 -0
- package/dist/client/vscode-icons/file_type_typo3.svg +1 -0
- package/dist/client/vscode-icons/file_type_uiua.svg +1 -0
- package/dist/client/vscode-icons/file_type_unibeautify.svg +1 -0
- package/dist/client/vscode-icons/file_type_unison.svg +1 -0
- package/dist/client/vscode-icons/file_type_unlicense.svg +1 -0
- package/dist/client/vscode-icons/file_type_unocss.svg +1 -0
- package/dist/client/vscode-icons/file_type_uv.svg +1 -0
- package/dist/client/vscode-icons/file_type_vagrant.svg +1 -0
- package/dist/client/vscode-icons/file_type_vala.svg +1 -0
- package/dist/client/vscode-icons/file_type_vale.svg +1 -0
- package/dist/client/vscode-icons/file_type_vanilla_extract.svg +1 -0
- package/dist/client/vscode-icons/file_type_vapi.svg +1 -0
- package/dist/client/vscode-icons/file_type_vapor.svg +1 -0
- package/dist/client/vscode-icons/file_type_vash.svg +1 -0
- package/dist/client/vscode-icons/file_type_vb.svg +1 -0
- package/dist/client/vscode-icons/file_type_vba.svg +1 -0
- package/dist/client/vscode-icons/file_type_vbhtml.svg +1 -0
- package/dist/client/vscode-icons/file_type_vbproj.svg +1 -0
- package/dist/client/vscode-icons/file_type_vcxproj.svg +1 -0
- package/dist/client/vscode-icons/file_type_velocity.svg +1 -0
- package/dist/client/vscode-icons/file_type_vento.svg +1 -0
- package/dist/client/vscode-icons/file_type_vercel.svg +1 -0
- package/dist/client/vscode-icons/file_type_verilog.svg +1 -0
- package/dist/client/vscode-icons/file_type_vhdl.svg +1 -0
- package/dist/client/vscode-icons/file_type_video.svg +1 -0
- package/dist/client/vscode-icons/file_type_view.svg +1 -0
- package/dist/client/vscode-icons/file_type_vim.svg +1 -0
- package/dist/client/vscode-icons/file_type_vite.svg +1 -0
- package/dist/client/vscode-icons/file_type_vitest.svg +1 -0
- package/dist/client/vscode-icons/file_type_vlang.svg +1 -0
- package/dist/client/vscode-icons/file_type_volt.svg +1 -0
- package/dist/client/vscode-icons/file_type_vroom.svg +1 -0
- package/dist/client/vscode-icons/file_type_vscode-insiders.svg +1 -0
- package/dist/client/vscode-icons/file_type_vscode.svg +1 -0
- package/dist/client/vscode-icons/file_type_vscode2.svg +1 -0
- package/dist/client/vscode-icons/file_type_vscode3.svg +1 -0
- package/dist/client/vscode-icons/file_type_vscode_test.svg +1 -0
- package/dist/client/vscode-icons/file_type_vsix.svg +1 -0
- package/dist/client/vscode-icons/file_type_vsixmanifest.svg +1 -0
- package/dist/client/vscode-icons/file_type_vue.svg +1 -0
- package/dist/client/vscode-icons/file_type_vueconfig.svg +1 -0
- package/dist/client/vscode-icons/file_type_vvvvvv.svg +1 -0
- package/dist/client/vscode-icons/file_type_vyper.svg +1 -0
- package/dist/client/vscode-icons/file_type_wallaby.svg +1 -0
- package/dist/client/vscode-icons/file_type_wally.svg +1 -0
- package/dist/client/vscode-icons/file_type_warp.svg +1 -0
- package/dist/client/vscode-icons/file_type_wasm.svg +1 -0
- package/dist/client/vscode-icons/file_type_wasp.svg +1 -0
- package/dist/client/vscode-icons/file_type_watchmanconfig.svg +1 -0
- package/dist/client/vscode-icons/file_type_wdio.svg +1 -0
- package/dist/client/vscode-icons/file_type_weblate.svg +1 -0
- package/dist/client/vscode-icons/file_type_webpack.svg +1 -0
- package/dist/client/vscode-icons/file_type_wenyan.svg +1 -0
- package/dist/client/vscode-icons/file_type_wercker.svg +1 -0
- package/dist/client/vscode-icons/file_type_wesl.svg +1 -0
- package/dist/client/vscode-icons/file_type_wgsl.svg +1 -0
- package/dist/client/vscode-icons/file_type_wikitext.svg +1 -0
- package/dist/client/vscode-icons/file_type_windi.svg +1 -0
- package/dist/client/vscode-icons/file_type_wit.svg +1 -0
- package/dist/client/vscode-icons/file_type_wolfram.svg +1 -0
- package/dist/client/vscode-icons/file_type_word.svg +1 -0
- package/dist/client/vscode-icons/file_type_word2.svg +1 -0
- package/dist/client/vscode-icons/file_type_wpml.svg +1 -0
- package/dist/client/vscode-icons/file_type_wurst.svg +1 -0
- package/dist/client/vscode-icons/file_type_wxml.svg +1 -0
- package/dist/client/vscode-icons/file_type_wxss.svg +1 -0
- package/dist/client/vscode-icons/file_type_wxt.svg +1 -0
- package/dist/client/vscode-icons/file_type_xaml.svg +1 -0
- package/dist/client/vscode-icons/file_type_xcode.svg +1 -0
- package/dist/client/vscode-icons/file_type_xfl.svg +1 -0
- package/dist/client/vscode-icons/file_type_xib.svg +1 -0
- package/dist/client/vscode-icons/file_type_xliff.svg +1 -0
- package/dist/client/vscode-icons/file_type_xmake.svg +1 -0
- package/dist/client/vscode-icons/file_type_xml.svg +1 -0
- package/dist/client/vscode-icons/file_type_xo.svg +1 -0
- package/dist/client/vscode-icons/file_type_xorg.svg +1 -0
- package/dist/client/vscode-icons/file_type_xquery.svg +1 -0
- package/dist/client/vscode-icons/file_type_xsl.svg +1 -0
- package/dist/client/vscode-icons/file_type_yacc.svg +1 -0
- package/dist/client/vscode-icons/file_type_yaml.svg +1 -0
- package/dist/client/vscode-icons/file_type_yaml_official.svg +1 -0
- package/dist/client/vscode-icons/file_type_yamllint.svg +1 -0
- package/dist/client/vscode-icons/file_type_yandex.svg +1 -0
- package/dist/client/vscode-icons/file_type_yang.svg +1 -0
- package/dist/client/vscode-icons/file_type_yarn.svg +1 -0
- package/dist/client/vscode-icons/file_type_yeoman.svg +1 -0
- package/dist/client/vscode-icons/file_type_zig.svg +1 -0
- package/dist/client/vscode-icons/file_type_zip.svg +1 -0
- package/dist/client/vscode-icons/file_type_zip2.svg +1 -0
- package/dist/client/vscode-icons/file_type_zizmor.svg +1 -0
- package/dist/client/vscode-icons/folder_type_android.svg +1 -0
- package/dist/client/vscode-icons/folder_type_android_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_angular.svg +1 -0
- package/dist/client/vscode-icons/folder_type_angular_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_apache.svg +1 -0
- package/dist/client/vscode-icons/folder_type_apache_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_api.svg +1 -0
- package/dist/client/vscode-icons/folder_type_api_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_app.svg +1 -0
- package/dist/client/vscode-icons/folder_type_app_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_arangodb.svg +1 -0
- package/dist/client/vscode-icons/folder_type_arangodb_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_asset.svg +1 -0
- package/dist/client/vscode-icons/folder_type_asset_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_astro.svg +1 -0
- package/dist/client/vscode-icons/folder_type_astro_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_audio.svg +1 -0
- package/dist/client/vscode-icons/folder_type_audio_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_aurelia.svg +1 -0
- package/dist/client/vscode-icons/folder_type_aurelia_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_aws.svg +1 -0
- package/dist/client/vscode-icons/folder_type_aws_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_azure.svg +1 -0
- package/dist/client/vscode-icons/folder_type_azure_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_azurepipelines.svg +1 -0
- package/dist/client/vscode-icons/folder_type_azurepipelines_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_binary.svg +1 -0
- package/dist/client/vscode-icons/folder_type_binary_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_bloc.svg +1 -0
- package/dist/client/vscode-icons/folder_type_bloc_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_blueprint.svg +1 -0
- package/dist/client/vscode-icons/folder_type_blueprint_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_bot.svg +1 -0
- package/dist/client/vscode-icons/folder_type_bot_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_bower.svg +1 -0
- package/dist/client/vscode-icons/folder_type_bower_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_buildkite.svg +1 -0
- package/dist/client/vscode-icons/folder_type_buildkite_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_cake.svg +1 -0
- package/dist/client/vscode-icons/folder_type_cake_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_cargo.svg +1 -0
- package/dist/client/vscode-icons/folder_type_cargo_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_certificate.svg +1 -0
- package/dist/client/vscode-icons/folder_type_certificate_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_changesets.svg +1 -0
- package/dist/client/vscode-icons/folder_type_changesets_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_chef.svg +1 -0
- package/dist/client/vscode-icons/folder_type_chef_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_circleci.svg +1 -0
- package/dist/client/vscode-icons/folder_type_circleci_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_claude.svg +1 -0
- package/dist/client/vscode-icons/folder_type_claude_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_cli.svg +1 -0
- package/dist/client/vscode-icons/folder_type_cli_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_client.svg +1 -0
- package/dist/client/vscode-icons/folder_type_client_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_cloudflare.svg +1 -0
- package/dist/client/vscode-icons/folder_type_cloudflare_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_cmake.svg +1 -0
- package/dist/client/vscode-icons/folder_type_cmake_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_common.svg +1 -0
- package/dist/client/vscode-icons/folder_type_common_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_component.svg +1 -0
- package/dist/client/vscode-icons/folder_type_component_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_composer.svg +1 -0
- package/dist/client/vscode-icons/folder_type_composer_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_config.svg +1 -0
- package/dist/client/vscode-icons/folder_type_config_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_controller.svg +1 -0
- package/dist/client/vscode-icons/folder_type_controller_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_coverage.svg +1 -0
- package/dist/client/vscode-icons/folder_type_coverage_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_css.svg +1 -0
- package/dist/client/vscode-icons/folder_type_css2.svg +1 -0
- package/dist/client/vscode-icons/folder_type_css2_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_css_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_cubit.svg +1 -0
- package/dist/client/vscode-icons/folder_type_cubit_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_cursor.svg +1 -0
- package/dist/client/vscode-icons/folder_type_cursor_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_cypress.svg +1 -0
- package/dist/client/vscode-icons/folder_type_cypress_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_dapr.svg +1 -0
- package/dist/client/vscode-icons/folder_type_dapr_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_dart.svg +1 -0
- package/dist/client/vscode-icons/folder_type_dart_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_databricks.svg +1 -0
- package/dist/client/vscode-icons/folder_type_databricks_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_datadog.svg +1 -0
- package/dist/client/vscode-icons/folder_type_datadog_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_db.svg +1 -0
- package/dist/client/vscode-icons/folder_type_db_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_debian.svg +1 -0
- package/dist/client/vscode-icons/folder_type_debian_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_dependabot.svg +1 -0
- package/dist/client/vscode-icons/folder_type_dependabot_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_devcontainer.svg +1 -0
- package/dist/client/vscode-icons/folder_type_devcontainer_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_devenv.svg +1 -0
- package/dist/client/vscode-icons/folder_type_devenv_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_dist.svg +1 -0
- package/dist/client/vscode-icons/folder_type_dist_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_docker.svg +1 -0
- package/dist/client/vscode-icons/folder_type_docker_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_docs.svg +1 -0
- package/dist/client/vscode-icons/folder_type_docs_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_e2e.svg +1 -0
- package/dist/client/vscode-icons/folder_type_e2e_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_elasticbeanstalk.svg +1 -0
- package/dist/client/vscode-icons/folder_type_elasticbeanstalk_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_electron.svg +1 -0
- package/dist/client/vscode-icons/folder_type_electron_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_environments.svg +1 -0
- package/dist/client/vscode-icons/folder_type_environments_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_expo.svg +1 -0
- package/dist/client/vscode-icons/folder_type_expo_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_favicon.svg +1 -0
- package/dist/client/vscode-icons/folder_type_favicon_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_flow.svg +1 -0
- package/dist/client/vscode-icons/folder_type_flow_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_flutter.svg +1 -0
- package/dist/client/vscode-icons/folder_type_flutter_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_fonts.svg +1 -0
- package/dist/client/vscode-icons/folder_type_fonts_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_frontcommerce.svg +1 -0
- package/dist/client/vscode-icons/folder_type_frontcommerce_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_gcp.svg +1 -0
- package/dist/client/vscode-icons/folder_type_gcp_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_gemini.svg +1 -0
- package/dist/client/vscode-icons/folder_type_gemini_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_git.svg +1 -0
- package/dist/client/vscode-icons/folder_type_git_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_github.svg +1 -0
- package/dist/client/vscode-icons/folder_type_github_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_gitlab.svg +1 -0
- package/dist/client/vscode-icons/folder_type_gitlab_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_godot.svg +1 -0
- package/dist/client/vscode-icons/folder_type_godot_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_gradle.svg +1 -0
- package/dist/client/vscode-icons/folder_type_gradle_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_graphql.svg +1 -0
- package/dist/client/vscode-icons/folder_type_graphql_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_grunt.svg +1 -0
- package/dist/client/vscode-icons/folder_type_grunt_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_gulp.svg +1 -0
- package/dist/client/vscode-icons/folder_type_gulp_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_haxelib.svg +1 -0
- package/dist/client/vscode-icons/folder_type_haxelib_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_helper.svg +1 -0
- package/dist/client/vscode-icons/folder_type_helper_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_histoire.svg +1 -0
- package/dist/client/vscode-icons/folder_type_histoire_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_hook.svg +1 -0
- package/dist/client/vscode-icons/folder_type_hook_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_husky.svg +1 -0
- package/dist/client/vscode-icons/folder_type_husky_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_idea.svg +1 -0
- package/dist/client/vscode-icons/folder_type_idea_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_images.svg +1 -0
- package/dist/client/vscode-icons/folder_type_images_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_include.svg +1 -0
- package/dist/client/vscode-icons/folder_type_include_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_interfaces.svg +1 -0
- package/dist/client/vscode-icons/folder_type_interfaces_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_ios.svg +1 -0
- package/dist/client/vscode-icons/folder_type_ios_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_js.svg +1 -0
- package/dist/client/vscode-icons/folder_type_js_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_json.svg +1 -0
- package/dist/client/vscode-icons/folder_type_json_official.svg +1 -0
- package/dist/client/vscode-icons/folder_type_json_official_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_json_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_junie.svg +1 -0
- package/dist/client/vscode-icons/folder_type_junie_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_kiro.svg +1 -0
- package/dist/client/vscode-icons/folder_type_kiro_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_kotlin.svg +1 -0
- package/dist/client/vscode-icons/folder_type_kotlin_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_kubernetes.svg +1 -0
- package/dist/client/vscode-icons/folder_type_kubernetes_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_less.svg +1 -0
- package/dist/client/vscode-icons/folder_type_less_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_library.svg +1 -0
- package/dist/client/vscode-icons/folder_type_library_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_light_cursor.svg +1 -0
- package/dist/client/vscode-icons/folder_type_light_cursor_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_light_cypress.svg +1 -0
- package/dist/client/vscode-icons/folder_type_light_cypress_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_light_devenv.svg +1 -0
- package/dist/client/vscode-icons/folder_type_light_devenv_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_light_electron.svg +1 -0
- package/dist/client/vscode-icons/folder_type_light_electron_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_light_expo.svg +1 -0
- package/dist/client/vscode-icons/folder_type_light_expo_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_light_fonts.svg +1 -0
- package/dist/client/vscode-icons/folder_type_light_fonts_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_light_gradle.svg +1 -0
- package/dist/client/vscode-icons/folder_type_light_gradle_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_light_meteor.svg +1 -0
- package/dist/client/vscode-icons/folder_type_light_meteor_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_light_mypy.svg +1 -0
- package/dist/client/vscode-icons/folder_type_light_mypy_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_light_mysql.svg +1 -0
- package/dist/client/vscode-icons/folder_type_light_mysql_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_light_node.svg +1 -0
- package/dist/client/vscode-icons/folder_type_light_node_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_light_redux.svg +1 -0
- package/dist/client/vscode-icons/folder_type_light_redux_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_light_sass.svg +1 -0
- package/dist/client/vscode-icons/folder_type_light_sass_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_light_zed.svg +1 -0
- package/dist/client/vscode-icons/folder_type_light_zed_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_linux.svg +1 -0
- package/dist/client/vscode-icons/folder_type_linux_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_locale.svg +1 -0
- package/dist/client/vscode-icons/folder_type_locale_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_log.svg +1 -0
- package/dist/client/vscode-icons/folder_type_log_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_macos.svg +1 -0
- package/dist/client/vscode-icons/folder_type_macos_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_mariadb.svg +1 -0
- package/dist/client/vscode-icons/folder_type_mariadb_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_maven.svg +1 -0
- package/dist/client/vscode-icons/folder_type_maven_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_mediawiki.svg +1 -0
- package/dist/client/vscode-icons/folder_type_mediawiki_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_memcached.svg +1 -0
- package/dist/client/vscode-icons/folder_type_memcached_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_meteor.svg +1 -0
- package/dist/client/vscode-icons/folder_type_meteor_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_middleware.svg +1 -0
- package/dist/client/vscode-icons/folder_type_middleware_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_minecraft.svg +1 -0
- package/dist/client/vscode-icons/folder_type_minecraft_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_minikube.svg +1 -0
- package/dist/client/vscode-icons/folder_type_minikube_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_mjml.svg +1 -0
- package/dist/client/vscode-icons/folder_type_mjml_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_mobile.svg +1 -0
- package/dist/client/vscode-icons/folder_type_mobile_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_mock.svg +1 -0
- package/dist/client/vscode-icons/folder_type_mock_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_model.svg +1 -0
- package/dist/client/vscode-icons/folder_type_model_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_module.svg +1 -0
- package/dist/client/vscode-icons/folder_type_module_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_mojo.svg +1 -0
- package/dist/client/vscode-icons/folder_type_mojo_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_mongodb.svg +1 -0
- package/dist/client/vscode-icons/folder_type_mongodb_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_mypy.svg +1 -0
- package/dist/client/vscode-icons/folder_type_mypy_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_mysql.svg +1 -0
- package/dist/client/vscode-icons/folder_type_mysql_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_netlify.svg +1 -0
- package/dist/client/vscode-icons/folder_type_netlify_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_next.svg +1 -0
- package/dist/client/vscode-icons/folder_type_next_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_nginx.svg +1 -0
- package/dist/client/vscode-icons/folder_type_nginx_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_nix.svg +1 -0
- package/dist/client/vscode-icons/folder_type_nix_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_node.svg +1 -0
- package/dist/client/vscode-icons/folder_type_node_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_notebooks.svg +1 -0
- package/dist/client/vscode-icons/folder_type_notebooks_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_notification.svg +1 -0
- package/dist/client/vscode-icons/folder_type_notification_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_nuget.svg +1 -0
- package/dist/client/vscode-icons/folder_type_nuget_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_nuxt.svg +1 -0
- package/dist/client/vscode-icons/folder_type_nuxt_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_package.svg +1 -0
- package/dist/client/vscode-icons/folder_type_package_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_paket.svg +1 -0
- package/dist/client/vscode-icons/folder_type_paket_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_php.svg +1 -0
- package/dist/client/vscode-icons/folder_type_php_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_platformio.svg +1 -0
- package/dist/client/vscode-icons/folder_type_platformio_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_plugin.svg +1 -0
- package/dist/client/vscode-icons/folder_type_plugin_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_prisma.svg +1 -0
- package/dist/client/vscode-icons/folder_type_prisma_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_private.svg +1 -0
- package/dist/client/vscode-icons/folder_type_private_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_public.svg +1 -0
- package/dist/client/vscode-icons/folder_type_public_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_pytest.svg +1 -0
- package/dist/client/vscode-icons/folder_type_pytest_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_python.svg +1 -0
- package/dist/client/vscode-icons/folder_type_python_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_ravendb.svg +1 -0
- package/dist/client/vscode-icons/folder_type_ravendb_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_redis.svg +1 -0
- package/dist/client/vscode-icons/folder_type_redis_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_redux.svg +1 -0
- package/dist/client/vscode-icons/folder_type_redux_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_route.svg +1 -0
- package/dist/client/vscode-icons/folder_type_route_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_sass.svg +1 -0
- package/dist/client/vscode-icons/folder_type_sass_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_script.svg +1 -0
- package/dist/client/vscode-icons/folder_type_script_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_seedkit.svg +1 -0
- package/dist/client/vscode-icons/folder_type_seedkit_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_server.svg +1 -0
- package/dist/client/vscode-icons/folder_type_server_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_services.svg +1 -0
- package/dist/client/vscode-icons/folder_type_services_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_shared.svg +1 -0
- package/dist/client/vscode-icons/folder_type_shared_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_snaplet.svg +1 -0
- package/dist/client/vscode-icons/folder_type_snaplet_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_spin.svg +1 -0
- package/dist/client/vscode-icons/folder_type_spin_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_src.svg +1 -0
- package/dist/client/vscode-icons/folder_type_src_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_sso.svg +1 -0
- package/dist/client/vscode-icons/folder_type_sso_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_story.svg +1 -0
- package/dist/client/vscode-icons/folder_type_story_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_style.svg +1 -0
- package/dist/client/vscode-icons/folder_type_style_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_supabase.svg +1 -0
- package/dist/client/vscode-icons/folder_type_supabase_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_svelte.svg +1 -0
- package/dist/client/vscode-icons/folder_type_svelte_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_swagger.svg +1 -0
- package/dist/client/vscode-icons/folder_type_swagger_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_tauri.svg +1 -0
- package/dist/client/vscode-icons/folder_type_tauri_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_temp.svg +1 -0
- package/dist/client/vscode-icons/folder_type_temp_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_template.svg +1 -0
- package/dist/client/vscode-icons/folder_type_template_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_test.svg +1 -0
- package/dist/client/vscode-icons/folder_type_test_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_theme.svg +1 -0
- package/dist/client/vscode-icons/folder_type_theme_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_tools.svg +1 -0
- package/dist/client/vscode-icons/folder_type_tools_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_travis.svg +1 -0
- package/dist/client/vscode-icons/folder_type_travis_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_trunk.svg +1 -0
- package/dist/client/vscode-icons/folder_type_trunk_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_turbo.svg +1 -0
- package/dist/client/vscode-icons/folder_type_turbo_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_typescript.svg +1 -0
- package/dist/client/vscode-icons/folder_type_typescript_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_typings.svg +1 -0
- package/dist/client/vscode-icons/folder_type_typings2.svg +1 -0
- package/dist/client/vscode-icons/folder_type_typings2_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_typings_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_vagrant.svg +1 -0
- package/dist/client/vscode-icons/folder_type_vagrant_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_vercel.svg +1 -0
- package/dist/client/vscode-icons/folder_type_vercel_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_video.svg +1 -0
- package/dist/client/vscode-icons/folder_type_video_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_view.svg +1 -0
- package/dist/client/vscode-icons/folder_type_view_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_vitepress.svg +1 -0
- package/dist/client/vscode-icons/folder_type_vitepress_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_vs.svg +1 -0
- package/dist/client/vscode-icons/folder_type_vs2.svg +1 -0
- package/dist/client/vscode-icons/folder_type_vs2_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_vs_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_vscode.svg +1 -0
- package/dist/client/vscode-icons/folder_type_vscode2.svg +1 -0
- package/dist/client/vscode-icons/folder_type_vscode2_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_vscode3.svg +1 -0
- package/dist/client/vscode-icons/folder_type_vscode3_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_vscode_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_vscode_test.svg +1 -0
- package/dist/client/vscode-icons/folder_type_vscode_test2.svg +1 -0
- package/dist/client/vscode-icons/folder_type_vscode_test2_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_vscode_test3.svg +1 -0
- package/dist/client/vscode-icons/folder_type_vscode_test3_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_vscode_test_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_wasm.svg +1 -0
- package/dist/client/vscode-icons/folder_type_wasm_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_wasp.svg +1 -0
- package/dist/client/vscode-icons/folder_type_wasp_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_webpack.svg +1 -0
- package/dist/client/vscode-icons/folder_type_webpack_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_windows.svg +1 -0
- package/dist/client/vscode-icons/folder_type_windows_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_windsurf.svg +1 -0
- package/dist/client/vscode-icons/folder_type_windsurf_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_wit.svg +1 -0
- package/dist/client/vscode-icons/folder_type_wit_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_www.svg +1 -0
- package/dist/client/vscode-icons/folder_type_www_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_yarn.svg +1 -0
- package/dist/client/vscode-icons/folder_type_yarn_opened.svg +1 -0
- package/dist/client/vscode-icons/folder_type_zed.svg +1 -0
- package/dist/client/vscode-icons/folder_type_zed_opened.svg +1 -0
- package/dist/dev.mjs +89 -0
- package/dist/manifest.json +9 -0
- package/dist/server.mjs +22107 -0
- package/dist/utility.mjs +152 -0
- package/package.json +53 -4
- package/RESERVED.txt +0 -1
|
@@ -0,0 +1,1407 @@
|
|
|
1
|
+
import { spawn, execFile } from "node:child_process";
|
|
2
|
+
import process$1 from "node:process";
|
|
3
|
+
import { w as writeFileAtomically, r as redactSensitiveText, n as normalizeRuntimePlatform, a as applicationName, runOpenTigServer } from "../server.mjs";
|
|
4
|
+
import os from "node:os";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
import { access, rm, mkdir, cp, rename, writeFile, chmod, readFile, appendFile, stat } from "node:fs/promises";
|
|
7
|
+
import { fileURLToPath } from "node:url";
|
|
8
|
+
import { randomBytes } from "node:crypto";
|
|
9
|
+
var QrCodeDataType = /* @__PURE__ */ ((QrCodeDataType2) => {
|
|
10
|
+
QrCodeDataType2[QrCodeDataType2["Border"] = -1] = "Border";
|
|
11
|
+
QrCodeDataType2[QrCodeDataType2["Data"] = 0] = "Data";
|
|
12
|
+
QrCodeDataType2[QrCodeDataType2["Function"] = 1] = "Function";
|
|
13
|
+
QrCodeDataType2[QrCodeDataType2["Position"] = 2] = "Position";
|
|
14
|
+
QrCodeDataType2[QrCodeDataType2["Timing"] = 3] = "Timing";
|
|
15
|
+
QrCodeDataType2[QrCodeDataType2["Alignment"] = 4] = "Alignment";
|
|
16
|
+
return QrCodeDataType2;
|
|
17
|
+
})(QrCodeDataType || {});
|
|
18
|
+
const LOW = [0, 1];
|
|
19
|
+
const MEDIUM = [1, 0];
|
|
20
|
+
const QUARTILE = [2, 3];
|
|
21
|
+
const HIGH = [3, 2];
|
|
22
|
+
const EccMap = {
|
|
23
|
+
L: LOW,
|
|
24
|
+
M: MEDIUM,
|
|
25
|
+
Q: QUARTILE,
|
|
26
|
+
H: HIGH
|
|
27
|
+
};
|
|
28
|
+
const NUMERIC_REGEX = /^\d*$/;
|
|
29
|
+
const ALPHANUMERIC_REGEX = /^[A-Z0-9 $%*+./:-]*$/;
|
|
30
|
+
const ALPHANUMERIC_CHARSET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:";
|
|
31
|
+
const MIN_VERSION = 1;
|
|
32
|
+
const MAX_VERSION = 40;
|
|
33
|
+
const PENALTY_N1 = 3;
|
|
34
|
+
const PENALTY_N2 = 3;
|
|
35
|
+
const PENALTY_N3 = 40;
|
|
36
|
+
const PENALTY_N4 = 10;
|
|
37
|
+
const ECC_CODEWORDS_PER_BLOCK = [
|
|
38
|
+
// Version: (note that index 0 is for padding, and is set to an illegal value)
|
|
39
|
+
// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level
|
|
40
|
+
[-1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],
|
|
41
|
+
// Low
|
|
42
|
+
[-1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28],
|
|
43
|
+
// Medium
|
|
44
|
+
[-1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],
|
|
45
|
+
// Quartile
|
|
46
|
+
[-1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30]
|
|
47
|
+
// High
|
|
48
|
+
];
|
|
49
|
+
const NUM_ERROR_CORRECTION_BLOCKS = [
|
|
50
|
+
// Version: (note that index 0 is for padding, and is set to an illegal value)
|
|
51
|
+
// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level
|
|
52
|
+
[-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25],
|
|
53
|
+
// Low
|
|
54
|
+
[-1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49],
|
|
55
|
+
// Medium
|
|
56
|
+
[-1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68],
|
|
57
|
+
// Quartile
|
|
58
|
+
[-1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81]
|
|
59
|
+
// High
|
|
60
|
+
];
|
|
61
|
+
class QrCode {
|
|
62
|
+
/* -- Constructor (low level) and fields -- */
|
|
63
|
+
// Creates a new QR Code with the given version number,
|
|
64
|
+
// error correction level, data codeword bytes, and mask number.
|
|
65
|
+
// This is a low-level API that most users should not use directly.
|
|
66
|
+
// A mid-level API is the encodeSegments() function.
|
|
67
|
+
constructor(version2, ecc, dataCodewords, msk) {
|
|
68
|
+
this.version = version2;
|
|
69
|
+
this.ecc = ecc;
|
|
70
|
+
if (version2 < MIN_VERSION || version2 > MAX_VERSION)
|
|
71
|
+
throw new RangeError("Version value out of range");
|
|
72
|
+
if (msk < -1 || msk > 7)
|
|
73
|
+
throw new RangeError("Mask value out of range");
|
|
74
|
+
this.size = version2 * 4 + 17;
|
|
75
|
+
const row = Array.from({ length: this.size }).fill(false);
|
|
76
|
+
for (let i = 0; i < this.size; i++) {
|
|
77
|
+
this.modules.push(row.slice());
|
|
78
|
+
this.types.push(row.map(() => 0));
|
|
79
|
+
}
|
|
80
|
+
this.drawFunctionPatterns();
|
|
81
|
+
const allCodewords = this.addEccAndInterleave(dataCodewords);
|
|
82
|
+
this.drawCodewords(allCodewords);
|
|
83
|
+
if (msk === -1) {
|
|
84
|
+
let minPenalty = 1e9;
|
|
85
|
+
for (let i = 0; i < 8; i++) {
|
|
86
|
+
this.applyMask(i);
|
|
87
|
+
this.drawFormatBits(i);
|
|
88
|
+
const penalty = this.getPenaltyScore();
|
|
89
|
+
if (penalty < minPenalty) {
|
|
90
|
+
msk = i;
|
|
91
|
+
minPenalty = penalty;
|
|
92
|
+
}
|
|
93
|
+
this.applyMask(i);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
this.mask = msk;
|
|
97
|
+
this.applyMask(msk);
|
|
98
|
+
this.drawFormatBits(msk);
|
|
99
|
+
}
|
|
100
|
+
/* -- Fields -- */
|
|
101
|
+
// The width and height of this QR Code, measured in modules, between
|
|
102
|
+
// 21 and 177 (inclusive). This is equal to version * 4 + 17.
|
|
103
|
+
size;
|
|
104
|
+
// The index of the mask pattern used in this QR Code, which is between 0 and 7 (inclusive).
|
|
105
|
+
// Even if a QR Code is created with automatic masking requested (mask = -1),
|
|
106
|
+
// the resulting object still has a mask value between 0 and 7.
|
|
107
|
+
mask;
|
|
108
|
+
// The modules of this QR Code (false = light, true = dark).
|
|
109
|
+
// Immutable after constructor finishes. Accessed through getModule().
|
|
110
|
+
modules = [];
|
|
111
|
+
types = [];
|
|
112
|
+
/* -- Accessor methods -- */
|
|
113
|
+
// Returns the color of the module (pixel) at the given coordinates, which is false
|
|
114
|
+
// for light or true for dark. The top left corner has the coordinates (x=0, y=0).
|
|
115
|
+
// If the given coordinates are out of bounds, then false (light) is returned.
|
|
116
|
+
getModule(x, y) {
|
|
117
|
+
return x >= 0 && x < this.size && y >= 0 && y < this.size && this.modules[y][x];
|
|
118
|
+
}
|
|
119
|
+
/* -- Private helper methods for constructor: Drawing function modules -- */
|
|
120
|
+
// Reads this object's version field, and draws and marks all function modules.
|
|
121
|
+
drawFunctionPatterns() {
|
|
122
|
+
for (let i = 0; i < this.size; i++) {
|
|
123
|
+
this.setFunctionModule(6, i, i % 2 === 0, QrCodeDataType.Timing);
|
|
124
|
+
this.setFunctionModule(i, 6, i % 2 === 0, QrCodeDataType.Timing);
|
|
125
|
+
}
|
|
126
|
+
this.drawFinderPattern(3, 3);
|
|
127
|
+
this.drawFinderPattern(this.size - 4, 3);
|
|
128
|
+
this.drawFinderPattern(3, this.size - 4);
|
|
129
|
+
const alignPatPos = this.getAlignmentPatternPositions();
|
|
130
|
+
const numAlign = alignPatPos.length;
|
|
131
|
+
for (let i = 0; i < numAlign; i++) {
|
|
132
|
+
for (let j = 0; j < numAlign; j++) {
|
|
133
|
+
if (!(i === 0 && j === 0 || i === 0 && j === numAlign - 1 || i === numAlign - 1 && j === 0))
|
|
134
|
+
this.drawAlignmentPattern(alignPatPos[i], alignPatPos[j]);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
this.drawFormatBits(0);
|
|
138
|
+
this.drawVersion();
|
|
139
|
+
}
|
|
140
|
+
// Draws two copies of the format bits (with its own error correction code)
|
|
141
|
+
// based on the given mask and this object's error correction level field.
|
|
142
|
+
drawFormatBits(mask) {
|
|
143
|
+
const data = this.ecc[1] << 3 | mask;
|
|
144
|
+
let rem = data;
|
|
145
|
+
for (let i = 0; i < 10; i++)
|
|
146
|
+
rem = rem << 1 ^ (rem >>> 9) * 1335;
|
|
147
|
+
const bits = (data << 10 | rem) ^ 21522;
|
|
148
|
+
for (let i = 0; i <= 5; i++)
|
|
149
|
+
this.setFunctionModule(8, i, getBit(bits, i));
|
|
150
|
+
this.setFunctionModule(8, 7, getBit(bits, 6));
|
|
151
|
+
this.setFunctionModule(8, 8, getBit(bits, 7));
|
|
152
|
+
this.setFunctionModule(7, 8, getBit(bits, 8));
|
|
153
|
+
for (let i = 9; i < 15; i++)
|
|
154
|
+
this.setFunctionModule(14 - i, 8, getBit(bits, i));
|
|
155
|
+
for (let i = 0; i < 8; i++)
|
|
156
|
+
this.setFunctionModule(this.size - 1 - i, 8, getBit(bits, i));
|
|
157
|
+
for (let i = 8; i < 15; i++)
|
|
158
|
+
this.setFunctionModule(8, this.size - 15 + i, getBit(bits, i));
|
|
159
|
+
this.setFunctionModule(8, this.size - 8, true);
|
|
160
|
+
}
|
|
161
|
+
// Draws two copies of the version bits (with its own error correction code),
|
|
162
|
+
// based on this object's version field, iff 7 <= version <= 40.
|
|
163
|
+
drawVersion() {
|
|
164
|
+
if (this.version < 7)
|
|
165
|
+
return;
|
|
166
|
+
let rem = this.version;
|
|
167
|
+
for (let i = 0; i < 12; i++)
|
|
168
|
+
rem = rem << 1 ^ (rem >>> 11) * 7973;
|
|
169
|
+
const bits = this.version << 12 | rem;
|
|
170
|
+
for (let i = 0; i < 18; i++) {
|
|
171
|
+
const color = getBit(bits, i);
|
|
172
|
+
const a = this.size - 11 + i % 3;
|
|
173
|
+
const b = Math.floor(i / 3);
|
|
174
|
+
this.setFunctionModule(a, b, color);
|
|
175
|
+
this.setFunctionModule(b, a, color);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// Draws a 9*9 finder pattern including the border separator,
|
|
179
|
+
// with the center module at (x, y). Modules can be out of bounds.
|
|
180
|
+
drawFinderPattern(x, y) {
|
|
181
|
+
for (let dy = -4; dy <= 4; dy++) {
|
|
182
|
+
for (let dx = -4; dx <= 4; dx++) {
|
|
183
|
+
const dist = Math.max(Math.abs(dx), Math.abs(dy));
|
|
184
|
+
const xx = x + dx;
|
|
185
|
+
const yy = y + dy;
|
|
186
|
+
if (xx >= 0 && xx < this.size && yy >= 0 && yy < this.size)
|
|
187
|
+
this.setFunctionModule(xx, yy, dist !== 2 && dist !== 4, QrCodeDataType.Position);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// Draws a 5*5 alignment pattern, with the center module
|
|
192
|
+
// at (x, y). All modules must be in bounds.
|
|
193
|
+
drawAlignmentPattern(x, y) {
|
|
194
|
+
for (let dy = -2; dy <= 2; dy++) {
|
|
195
|
+
for (let dx = -2; dx <= 2; dx++) {
|
|
196
|
+
this.setFunctionModule(
|
|
197
|
+
x + dx,
|
|
198
|
+
y + dy,
|
|
199
|
+
Math.max(Math.abs(dx), Math.abs(dy)) !== 1,
|
|
200
|
+
QrCodeDataType.Alignment
|
|
201
|
+
);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
// Sets the color of a module and marks it as a function module.
|
|
206
|
+
// Only used by the constructor. Coordinates must be in bounds.
|
|
207
|
+
setFunctionModule(x, y, isDark, type = QrCodeDataType.Function) {
|
|
208
|
+
this.modules[y][x] = isDark;
|
|
209
|
+
this.types[y][x] = type;
|
|
210
|
+
}
|
|
211
|
+
/* -- Private helper methods for constructor: Codewords and masking -- */
|
|
212
|
+
// Returns a new byte string representing the given data with the appropriate error correction
|
|
213
|
+
// codewords appended to it, based on this object's version and error correction level.
|
|
214
|
+
addEccAndInterleave(data) {
|
|
215
|
+
const ver = this.version;
|
|
216
|
+
const ecl = this.ecc;
|
|
217
|
+
if (data.length !== getNumDataCodewords(ver, ecl))
|
|
218
|
+
throw new RangeError("Invalid argument");
|
|
219
|
+
const numBlocks = NUM_ERROR_CORRECTION_BLOCKS[ecl[0]][ver];
|
|
220
|
+
const blockEccLen = ECC_CODEWORDS_PER_BLOCK[ecl[0]][ver];
|
|
221
|
+
const rawCodewords = Math.floor(getNumRawDataModules(ver) / 8);
|
|
222
|
+
const numShortBlocks = numBlocks - rawCodewords % numBlocks;
|
|
223
|
+
const shortBlockLen = Math.floor(rawCodewords / numBlocks);
|
|
224
|
+
const blocks = [];
|
|
225
|
+
const rsDiv = reedSolomonComputeDivisor(blockEccLen);
|
|
226
|
+
for (let i = 0, k = 0; i < numBlocks; i++) {
|
|
227
|
+
const dat = data.slice(k, k + shortBlockLen - blockEccLen + (i < numShortBlocks ? 0 : 1));
|
|
228
|
+
k += dat.length;
|
|
229
|
+
const ecc = reedSolomonComputeRemainder(dat, rsDiv);
|
|
230
|
+
if (i < numShortBlocks)
|
|
231
|
+
dat.push(0);
|
|
232
|
+
blocks.push(dat.concat(ecc));
|
|
233
|
+
}
|
|
234
|
+
const result = [];
|
|
235
|
+
for (let i = 0; i < blocks[0].length; i++) {
|
|
236
|
+
blocks.forEach((block, j) => {
|
|
237
|
+
if (i !== shortBlockLen - blockEccLen || j >= numShortBlocks)
|
|
238
|
+
result.push(block[i]);
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
return result;
|
|
242
|
+
}
|
|
243
|
+
// Draws the given sequence of 8-bit codewords (data and error correction) onto the entire
|
|
244
|
+
// data area of this QR Code. Function modules need to be marked off before this is called.
|
|
245
|
+
drawCodewords(data) {
|
|
246
|
+
if (data.length !== Math.floor(getNumRawDataModules(this.version) / 8))
|
|
247
|
+
throw new RangeError("Invalid argument");
|
|
248
|
+
let i = 0;
|
|
249
|
+
for (let right = this.size - 1; right >= 1; right -= 2) {
|
|
250
|
+
if (right === 6)
|
|
251
|
+
right = 5;
|
|
252
|
+
for (let vert = 0; vert < this.size; vert++) {
|
|
253
|
+
for (let j = 0; j < 2; j++) {
|
|
254
|
+
const x = right - j;
|
|
255
|
+
const upward = (right + 1 & 2) === 0;
|
|
256
|
+
const y = upward ? this.size - 1 - vert : vert;
|
|
257
|
+
if (!this.types[y][x] && i < data.length * 8) {
|
|
258
|
+
this.modules[y][x] = getBit(data[i >>> 3], 7 - (i & 7));
|
|
259
|
+
i++;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
// XORs the codeword modules in this QR Code with the given mask pattern.
|
|
266
|
+
// The function modules must be marked and the codeword bits must be drawn
|
|
267
|
+
// before masking. Due to the arithmetic of XOR, calling applyMask() with
|
|
268
|
+
// the same mask value a second time will undo the mask. A final well-formed
|
|
269
|
+
// QR Code needs exactly one (not zero, two, etc.) mask applied.
|
|
270
|
+
applyMask(mask) {
|
|
271
|
+
if (mask < 0 || mask > 7)
|
|
272
|
+
throw new RangeError("Mask value out of range");
|
|
273
|
+
for (let y = 0; y < this.size; y++) {
|
|
274
|
+
for (let x = 0; x < this.size; x++) {
|
|
275
|
+
let invert;
|
|
276
|
+
switch (mask) {
|
|
277
|
+
case 0:
|
|
278
|
+
invert = (x + y) % 2 === 0;
|
|
279
|
+
break;
|
|
280
|
+
case 1:
|
|
281
|
+
invert = y % 2 === 0;
|
|
282
|
+
break;
|
|
283
|
+
case 2:
|
|
284
|
+
invert = x % 3 === 0;
|
|
285
|
+
break;
|
|
286
|
+
case 3:
|
|
287
|
+
invert = (x + y) % 3 === 0;
|
|
288
|
+
break;
|
|
289
|
+
case 4:
|
|
290
|
+
invert = (Math.floor(x / 3) + Math.floor(y / 2)) % 2 === 0;
|
|
291
|
+
break;
|
|
292
|
+
case 5:
|
|
293
|
+
invert = x * y % 2 + x * y % 3 === 0;
|
|
294
|
+
break;
|
|
295
|
+
case 6:
|
|
296
|
+
invert = (x * y % 2 + x * y % 3) % 2 === 0;
|
|
297
|
+
break;
|
|
298
|
+
case 7:
|
|
299
|
+
invert = ((x + y) % 2 + x * y % 3) % 2 === 0;
|
|
300
|
+
break;
|
|
301
|
+
default:
|
|
302
|
+
throw new Error("Unreachable");
|
|
303
|
+
}
|
|
304
|
+
if (!this.types[y][x] && invert)
|
|
305
|
+
this.modules[y][x] = !this.modules[y][x];
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
// Calculates and returns the penalty score based on state of this QR Code's current modules.
|
|
310
|
+
// This is used by the automatic mask choice algorithm to find the mask pattern that yields the lowest score.
|
|
311
|
+
getPenaltyScore() {
|
|
312
|
+
let result = 0;
|
|
313
|
+
for (let y = 0; y < this.size; y++) {
|
|
314
|
+
let runColor = false;
|
|
315
|
+
let runX = 0;
|
|
316
|
+
const runHistory = [0, 0, 0, 0, 0, 0, 0];
|
|
317
|
+
for (let x = 0; x < this.size; x++) {
|
|
318
|
+
if (this.modules[y][x] === runColor) {
|
|
319
|
+
runX++;
|
|
320
|
+
if (runX === 5)
|
|
321
|
+
result += PENALTY_N1;
|
|
322
|
+
else if (runX > 5)
|
|
323
|
+
result++;
|
|
324
|
+
} else {
|
|
325
|
+
this.finderPenaltyAddHistory(runX, runHistory);
|
|
326
|
+
if (!runColor)
|
|
327
|
+
result += this.finderPenaltyCountPatterns(runHistory) * PENALTY_N3;
|
|
328
|
+
runColor = this.modules[y][x];
|
|
329
|
+
runX = 1;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
result += this.finderPenaltyTerminateAndCount(runColor, runX, runHistory) * PENALTY_N3;
|
|
333
|
+
}
|
|
334
|
+
for (let x = 0; x < this.size; x++) {
|
|
335
|
+
let runColor = false;
|
|
336
|
+
let runY = 0;
|
|
337
|
+
const runHistory = [0, 0, 0, 0, 0, 0, 0];
|
|
338
|
+
for (let y = 0; y < this.size; y++) {
|
|
339
|
+
if (this.modules[y][x] === runColor) {
|
|
340
|
+
runY++;
|
|
341
|
+
if (runY === 5)
|
|
342
|
+
result += PENALTY_N1;
|
|
343
|
+
else if (runY > 5)
|
|
344
|
+
result++;
|
|
345
|
+
} else {
|
|
346
|
+
this.finderPenaltyAddHistory(runY, runHistory);
|
|
347
|
+
if (!runColor)
|
|
348
|
+
result += this.finderPenaltyCountPatterns(runHistory) * PENALTY_N3;
|
|
349
|
+
runColor = this.modules[y][x];
|
|
350
|
+
runY = 1;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
result += this.finderPenaltyTerminateAndCount(runColor, runY, runHistory) * PENALTY_N3;
|
|
354
|
+
}
|
|
355
|
+
for (let y = 0; y < this.size - 1; y++) {
|
|
356
|
+
for (let x = 0; x < this.size - 1; x++) {
|
|
357
|
+
const color = this.modules[y][x];
|
|
358
|
+
if (color === this.modules[y][x + 1] && color === this.modules[y + 1][x] && color === this.modules[y + 1][x + 1]) {
|
|
359
|
+
result += PENALTY_N2;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
let dark = 0;
|
|
364
|
+
for (const row of this.modules)
|
|
365
|
+
dark = row.reduce((sum, color) => sum + (color ? 1 : 0), dark);
|
|
366
|
+
const total = this.size * this.size;
|
|
367
|
+
const k = Math.ceil(Math.abs(dark * 20 - total * 10) / total) - 1;
|
|
368
|
+
result += k * PENALTY_N4;
|
|
369
|
+
return result;
|
|
370
|
+
}
|
|
371
|
+
/* -- Private helper functions -- */
|
|
372
|
+
// Returns an ascending list of positions of alignment patterns for this version number.
|
|
373
|
+
// Each position is in the range [0,177), and are used on both the x and y axes.
|
|
374
|
+
// This could be implemented as lookup table of 40 variable-length lists of integers.
|
|
375
|
+
getAlignmentPatternPositions() {
|
|
376
|
+
if (this.version === 1) {
|
|
377
|
+
return [];
|
|
378
|
+
} else {
|
|
379
|
+
const numAlign = Math.floor(this.version / 7) + 2;
|
|
380
|
+
const step = this.version === 32 ? 26 : Math.ceil((this.version * 4 + 4) / (numAlign * 2 - 2)) * 2;
|
|
381
|
+
const result = [6];
|
|
382
|
+
for (let pos = this.size - 7; result.length < numAlign; pos -= step)
|
|
383
|
+
result.splice(1, 0, pos);
|
|
384
|
+
return result;
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
// Can only be called immediately after a light run is added, and
|
|
388
|
+
// returns either 0, 1, or 2. A helper function for getPenaltyScore().
|
|
389
|
+
finderPenaltyCountPatterns(runHistory) {
|
|
390
|
+
const n = runHistory[1];
|
|
391
|
+
const core = n > 0 && runHistory[2] === n && runHistory[3] === n * 3 && runHistory[4] === n && runHistory[5] === n;
|
|
392
|
+
return (core && runHistory[0] >= n * 4 && runHistory[6] >= n ? 1 : 0) + (core && runHistory[6] >= n * 4 && runHistory[0] >= n ? 1 : 0);
|
|
393
|
+
}
|
|
394
|
+
// Must be called at the end of a line (row or column) of modules. A helper function for getPenaltyScore().
|
|
395
|
+
finderPenaltyTerminateAndCount(currentRunColor, currentRunLength, runHistory) {
|
|
396
|
+
if (currentRunColor) {
|
|
397
|
+
this.finderPenaltyAddHistory(currentRunLength, runHistory);
|
|
398
|
+
currentRunLength = 0;
|
|
399
|
+
}
|
|
400
|
+
currentRunLength += this.size;
|
|
401
|
+
this.finderPenaltyAddHistory(currentRunLength, runHistory);
|
|
402
|
+
return this.finderPenaltyCountPatterns(runHistory);
|
|
403
|
+
}
|
|
404
|
+
// Pushes the given value to the front and drops the last value. A helper function for getPenaltyScore().
|
|
405
|
+
finderPenaltyAddHistory(currentRunLength, runHistory) {
|
|
406
|
+
if (runHistory[0] === 0)
|
|
407
|
+
currentRunLength += this.size;
|
|
408
|
+
runHistory.pop();
|
|
409
|
+
runHistory.unshift(currentRunLength);
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
function appendBits(val, len, bb) {
|
|
413
|
+
if (len < 0 || len > 31 || val >>> len !== 0)
|
|
414
|
+
throw new RangeError("Value out of range");
|
|
415
|
+
for (let i = len - 1; i >= 0; i--)
|
|
416
|
+
bb.push(val >>> i & 1);
|
|
417
|
+
}
|
|
418
|
+
function getBit(x, i) {
|
|
419
|
+
return (x >>> i & 1) !== 0;
|
|
420
|
+
}
|
|
421
|
+
class QrSegment {
|
|
422
|
+
// Creates a new QR Code segment with the given attributes and data.
|
|
423
|
+
// The character count (numChars) must agree with the mode and the bit buffer length,
|
|
424
|
+
// but the constraint isn't checked. The given bit buffer is cloned and stored.
|
|
425
|
+
constructor(mode, numChars, bitData) {
|
|
426
|
+
this.mode = mode;
|
|
427
|
+
this.numChars = numChars;
|
|
428
|
+
this.bitData = bitData;
|
|
429
|
+
if (numChars < 0)
|
|
430
|
+
throw new RangeError("Invalid argument");
|
|
431
|
+
this.bitData = bitData.slice();
|
|
432
|
+
}
|
|
433
|
+
/* -- Methods -- */
|
|
434
|
+
// Returns a new copy of the data bits of this segment.
|
|
435
|
+
getData() {
|
|
436
|
+
return this.bitData.slice();
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
const MODE_NUMERIC = [1, 10, 12, 14];
|
|
440
|
+
const MODE_ALPHANUMERIC = [2, 9, 11, 13];
|
|
441
|
+
const MODE_BYTE = [4, 8, 16, 16];
|
|
442
|
+
function numCharCountBits(mode, ver) {
|
|
443
|
+
return mode[Math.floor((ver + 7) / 17) + 1];
|
|
444
|
+
}
|
|
445
|
+
function makeBytes(data) {
|
|
446
|
+
const bb = [];
|
|
447
|
+
for (const b of data)
|
|
448
|
+
appendBits(b, 8, bb);
|
|
449
|
+
return new QrSegment(MODE_BYTE, data.length, bb);
|
|
450
|
+
}
|
|
451
|
+
function makeNumeric(digits) {
|
|
452
|
+
if (!isNumeric(digits))
|
|
453
|
+
throw new RangeError("String contains non-numeric characters");
|
|
454
|
+
const bb = [];
|
|
455
|
+
for (let i = 0; i < digits.length; ) {
|
|
456
|
+
const n = Math.min(digits.length - i, 3);
|
|
457
|
+
appendBits(Number.parseInt(digits.substring(i, i + n), 10), n * 3 + 1, bb);
|
|
458
|
+
i += n;
|
|
459
|
+
}
|
|
460
|
+
return new QrSegment(MODE_NUMERIC, digits.length, bb);
|
|
461
|
+
}
|
|
462
|
+
function makeAlphanumeric(text) {
|
|
463
|
+
if (!isAlphanumeric(text))
|
|
464
|
+
throw new RangeError("String contains unencodable characters in alphanumeric mode");
|
|
465
|
+
const bb = [];
|
|
466
|
+
let i;
|
|
467
|
+
for (i = 0; i + 2 <= text.length; i += 2) {
|
|
468
|
+
let temp = ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)) * 45;
|
|
469
|
+
temp += ALPHANUMERIC_CHARSET.indexOf(text.charAt(i + 1));
|
|
470
|
+
appendBits(temp, 11, bb);
|
|
471
|
+
}
|
|
472
|
+
if (i < text.length)
|
|
473
|
+
appendBits(ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)), 6, bb);
|
|
474
|
+
return new QrSegment(MODE_ALPHANUMERIC, text.length, bb);
|
|
475
|
+
}
|
|
476
|
+
function makeSegments(text) {
|
|
477
|
+
if (text === "")
|
|
478
|
+
return [];
|
|
479
|
+
else if (isNumeric(text))
|
|
480
|
+
return [makeNumeric(text)];
|
|
481
|
+
else if (isAlphanumeric(text))
|
|
482
|
+
return [makeAlphanumeric(text)];
|
|
483
|
+
else
|
|
484
|
+
return [makeBytes(toUtf8ByteArray(text))];
|
|
485
|
+
}
|
|
486
|
+
function isNumeric(text) {
|
|
487
|
+
return NUMERIC_REGEX.test(text);
|
|
488
|
+
}
|
|
489
|
+
function isAlphanumeric(text) {
|
|
490
|
+
return ALPHANUMERIC_REGEX.test(text);
|
|
491
|
+
}
|
|
492
|
+
function getTotalBits(segs, version2) {
|
|
493
|
+
let result = 0;
|
|
494
|
+
for (const seg of segs) {
|
|
495
|
+
const ccbits = numCharCountBits(seg.mode, version2);
|
|
496
|
+
if (seg.numChars >= 1 << ccbits)
|
|
497
|
+
return Number.POSITIVE_INFINITY;
|
|
498
|
+
result += 4 + ccbits + seg.bitData.length;
|
|
499
|
+
}
|
|
500
|
+
return result;
|
|
501
|
+
}
|
|
502
|
+
function toUtf8ByteArray(str) {
|
|
503
|
+
str = encodeURI(str);
|
|
504
|
+
const result = [];
|
|
505
|
+
for (let i = 0; i < str.length; i++) {
|
|
506
|
+
if (str.charAt(i) !== "%") {
|
|
507
|
+
result.push(str.charCodeAt(i));
|
|
508
|
+
} else {
|
|
509
|
+
result.push(Number.parseInt(str.substring(i + 1, i + 3), 16));
|
|
510
|
+
i += 2;
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
return result;
|
|
514
|
+
}
|
|
515
|
+
function getNumRawDataModules(ver) {
|
|
516
|
+
if (ver < MIN_VERSION || ver > MAX_VERSION)
|
|
517
|
+
throw new RangeError("Version number out of range");
|
|
518
|
+
let result = (16 * ver + 128) * ver + 64;
|
|
519
|
+
if (ver >= 2) {
|
|
520
|
+
const numAlign = Math.floor(ver / 7) + 2;
|
|
521
|
+
result -= (25 * numAlign - 10) * numAlign - 55;
|
|
522
|
+
if (ver >= 7)
|
|
523
|
+
result -= 36;
|
|
524
|
+
}
|
|
525
|
+
return result;
|
|
526
|
+
}
|
|
527
|
+
function getNumDataCodewords(ver, ecl) {
|
|
528
|
+
return Math.floor(getNumRawDataModules(ver) / 8) - ECC_CODEWORDS_PER_BLOCK[ecl[0]][ver] * NUM_ERROR_CORRECTION_BLOCKS[ecl[0]][ver];
|
|
529
|
+
}
|
|
530
|
+
function reedSolomonComputeDivisor(degree) {
|
|
531
|
+
if (degree < 1 || degree > 255)
|
|
532
|
+
throw new RangeError("Degree out of range");
|
|
533
|
+
const result = [];
|
|
534
|
+
for (let i = 0; i < degree - 1; i++)
|
|
535
|
+
result.push(0);
|
|
536
|
+
result.push(1);
|
|
537
|
+
let root = 1;
|
|
538
|
+
for (let i = 0; i < degree; i++) {
|
|
539
|
+
for (let j = 0; j < result.length; j++) {
|
|
540
|
+
result[j] = reedSolomonMultiply(result[j], root);
|
|
541
|
+
if (j + 1 < result.length)
|
|
542
|
+
result[j] ^= result[j + 1];
|
|
543
|
+
}
|
|
544
|
+
root = reedSolomonMultiply(root, 2);
|
|
545
|
+
}
|
|
546
|
+
return result;
|
|
547
|
+
}
|
|
548
|
+
function reedSolomonComputeRemainder(data, divisor) {
|
|
549
|
+
const result = divisor.map((_) => 0);
|
|
550
|
+
for (const b of data) {
|
|
551
|
+
const factor = b ^ result.shift();
|
|
552
|
+
result.push(0);
|
|
553
|
+
divisor.forEach((coef, i) => result[i] ^= reedSolomonMultiply(coef, factor));
|
|
554
|
+
}
|
|
555
|
+
return result;
|
|
556
|
+
}
|
|
557
|
+
function reedSolomonMultiply(x, y) {
|
|
558
|
+
if (x >>> 8 !== 0 || y >>> 8 !== 0)
|
|
559
|
+
throw new RangeError("Byte out of range");
|
|
560
|
+
let z = 0;
|
|
561
|
+
for (let i = 7; i >= 0; i--) {
|
|
562
|
+
z = z << 1 ^ (z >>> 7) * 285;
|
|
563
|
+
z ^= (y >>> i & 1) * x;
|
|
564
|
+
}
|
|
565
|
+
return z;
|
|
566
|
+
}
|
|
567
|
+
function encodeSegments(segs, ecl, minVersion = 1, maxVersion = 40, mask = -1, boostEcl = true) {
|
|
568
|
+
if (!(MIN_VERSION <= minVersion && minVersion <= maxVersion && maxVersion <= MAX_VERSION) || mask < -1 || mask > 7) {
|
|
569
|
+
throw new RangeError("Invalid value");
|
|
570
|
+
}
|
|
571
|
+
let version2;
|
|
572
|
+
let dataUsedBits;
|
|
573
|
+
for (version2 = minVersion; ; version2++) {
|
|
574
|
+
const dataCapacityBits2 = getNumDataCodewords(version2, ecl) * 8;
|
|
575
|
+
const usedBits = getTotalBits(segs, version2);
|
|
576
|
+
if (usedBits <= dataCapacityBits2) {
|
|
577
|
+
dataUsedBits = usedBits;
|
|
578
|
+
break;
|
|
579
|
+
}
|
|
580
|
+
if (version2 >= maxVersion)
|
|
581
|
+
throw new RangeError("Data too long");
|
|
582
|
+
}
|
|
583
|
+
for (const newEcl of [MEDIUM, QUARTILE, HIGH]) {
|
|
584
|
+
if (boostEcl && dataUsedBits <= getNumDataCodewords(version2, newEcl) * 8)
|
|
585
|
+
ecl = newEcl;
|
|
586
|
+
}
|
|
587
|
+
const bb = [];
|
|
588
|
+
for (const seg of segs) {
|
|
589
|
+
appendBits(seg.mode[0], 4, bb);
|
|
590
|
+
appendBits(seg.numChars, numCharCountBits(seg.mode, version2), bb);
|
|
591
|
+
for (const b of seg.getData())
|
|
592
|
+
bb.push(b);
|
|
593
|
+
}
|
|
594
|
+
const dataCapacityBits = getNumDataCodewords(version2, ecl) * 8;
|
|
595
|
+
appendBits(0, Math.min(4, dataCapacityBits - bb.length), bb);
|
|
596
|
+
appendBits(0, (8 - bb.length % 8) % 8, bb);
|
|
597
|
+
for (let padByte = 236; bb.length < dataCapacityBits; padByte ^= 236 ^ 17)
|
|
598
|
+
appendBits(padByte, 8, bb);
|
|
599
|
+
const dataCodewords = Array.from({ length: Math.ceil(bb.length / 8) }, () => 0);
|
|
600
|
+
bb.forEach((b, i) => dataCodewords[i >>> 3] |= b << 7 - (i & 7));
|
|
601
|
+
return new QrCode(version2, ecl, dataCodewords, mask);
|
|
602
|
+
}
|
|
603
|
+
function encode(data, options) {
|
|
604
|
+
const {
|
|
605
|
+
ecc = "L",
|
|
606
|
+
boostEcc = false,
|
|
607
|
+
minVersion = 1,
|
|
608
|
+
maxVersion = 40,
|
|
609
|
+
maskPattern = -1,
|
|
610
|
+
border = 1
|
|
611
|
+
} = options || {};
|
|
612
|
+
const segment = typeof data === "string" ? makeSegments(data) : Array.isArray(data) ? [makeBytes(data)] : void 0;
|
|
613
|
+
if (!segment)
|
|
614
|
+
throw new Error(`uqr only supports encoding string and binary data, but got: ${typeof data}`);
|
|
615
|
+
const qr = encodeSegments(
|
|
616
|
+
segment,
|
|
617
|
+
EccMap[ecc],
|
|
618
|
+
minVersion,
|
|
619
|
+
maxVersion,
|
|
620
|
+
maskPattern,
|
|
621
|
+
boostEcc
|
|
622
|
+
);
|
|
623
|
+
const result = addBorder({
|
|
624
|
+
version: qr.version,
|
|
625
|
+
maskPattern: qr.mask,
|
|
626
|
+
size: qr.size,
|
|
627
|
+
data: qr.modules,
|
|
628
|
+
types: qr.types
|
|
629
|
+
}, border);
|
|
630
|
+
if (options?.invert)
|
|
631
|
+
result.data = result.data.map((row) => row.map((mod) => !mod));
|
|
632
|
+
options?.onEncoded?.(result);
|
|
633
|
+
return result;
|
|
634
|
+
}
|
|
635
|
+
function addBorder(input, border = 1) {
|
|
636
|
+
if (!border)
|
|
637
|
+
return input;
|
|
638
|
+
const { size } = input;
|
|
639
|
+
const newSize = size + border * 2;
|
|
640
|
+
input.size = newSize;
|
|
641
|
+
input.data.forEach((row) => {
|
|
642
|
+
for (let i = 0; i < border; i++) {
|
|
643
|
+
row.unshift(false);
|
|
644
|
+
row.push(false);
|
|
645
|
+
}
|
|
646
|
+
});
|
|
647
|
+
for (let i = 0; i < border; i++) {
|
|
648
|
+
input.data.unshift(Array.from({ length: newSize }, (_) => false));
|
|
649
|
+
input.data.push(Array.from({ length: newSize }, (_) => false));
|
|
650
|
+
}
|
|
651
|
+
const b = QrCodeDataType.Border;
|
|
652
|
+
input.types.forEach((row) => {
|
|
653
|
+
for (let i = 0; i < border; i++) {
|
|
654
|
+
row.unshift(b);
|
|
655
|
+
row.push(b);
|
|
656
|
+
}
|
|
657
|
+
});
|
|
658
|
+
for (let i = 0; i < border; i++) {
|
|
659
|
+
input.types.unshift(Array.from({ length: newSize }, (_) => b));
|
|
660
|
+
input.types.push(Array.from({ length: newSize }, (_) => b));
|
|
661
|
+
}
|
|
662
|
+
return input;
|
|
663
|
+
}
|
|
664
|
+
function getDataAt(data, x, y, defaults = false) {
|
|
665
|
+
if (x < 0 || y < 0 || x >= data.length || y >= data.length)
|
|
666
|
+
return defaults;
|
|
667
|
+
return data[y][x];
|
|
668
|
+
}
|
|
669
|
+
function renderUnicodeCompact(data, options = {}) {
|
|
670
|
+
const palette = {
|
|
671
|
+
WHITE_ALL: "█",
|
|
672
|
+
WHITE_BLACK: "▀",
|
|
673
|
+
BLACK_WHITE: "▄",
|
|
674
|
+
BLACK_ALL: " "
|
|
675
|
+
};
|
|
676
|
+
const result = encode(data, options);
|
|
677
|
+
const WHITE = false;
|
|
678
|
+
const BLACK = true;
|
|
679
|
+
const at = (x, y) => getDataAt(result.data, x, y, true);
|
|
680
|
+
const lines = [];
|
|
681
|
+
let line = "";
|
|
682
|
+
for (let row = 0; row < result.size; row += 2) {
|
|
683
|
+
for (let col = 0; col < result.size; col++) {
|
|
684
|
+
if (at(col, row) === WHITE && at(col, row + 1) === WHITE)
|
|
685
|
+
line += palette.WHITE_ALL;
|
|
686
|
+
else if (at(col, row) === WHITE && at(col, row + 1) === BLACK)
|
|
687
|
+
line += palette.WHITE_BLACK;
|
|
688
|
+
else if (at(col, row) === BLACK && at(col, row + 1) === WHITE)
|
|
689
|
+
line += palette.BLACK_WHITE;
|
|
690
|
+
else
|
|
691
|
+
line += palette.BLACK_ALL;
|
|
692
|
+
}
|
|
693
|
+
lines.push(line);
|
|
694
|
+
line = "";
|
|
695
|
+
}
|
|
696
|
+
return lines.join("\n");
|
|
697
|
+
}
|
|
698
|
+
function browserCommand(url, platform = process.platform) {
|
|
699
|
+
if (platform === "win32") return { executable: "rundll32.exe", args: ["url.dll,FileProtocolHandler", url] };
|
|
700
|
+
if (platform === "darwin") return { executable: "open", args: [url] };
|
|
701
|
+
return { executable: "xdg-open", args: [url] };
|
|
702
|
+
}
|
|
703
|
+
function openSystemBrowser(url, launch = spawn, platform = process.platform) {
|
|
704
|
+
const command = browserCommand(url, platform);
|
|
705
|
+
return new Promise((resolve, reject) => {
|
|
706
|
+
let child;
|
|
707
|
+
try {
|
|
708
|
+
child = launch(command.executable, command.args, {
|
|
709
|
+
detached: true,
|
|
710
|
+
shell: false,
|
|
711
|
+
stdio: "ignore",
|
|
712
|
+
windowsHide: true
|
|
713
|
+
});
|
|
714
|
+
} catch (error) {
|
|
715
|
+
reject(error);
|
|
716
|
+
return;
|
|
717
|
+
}
|
|
718
|
+
child.once("error", reject);
|
|
719
|
+
child.once("spawn", () => {
|
|
720
|
+
child.unref();
|
|
721
|
+
resolve();
|
|
722
|
+
});
|
|
723
|
+
});
|
|
724
|
+
}
|
|
725
|
+
const DEFAULT_SERVER_HOST = "127.0.0.1";
|
|
726
|
+
const DEFAULT_SERVER_PORT = 6767;
|
|
727
|
+
class CliUsageError extends Error {
|
|
728
|
+
exitCode = 2;
|
|
729
|
+
constructor(message) {
|
|
730
|
+
super(message);
|
|
731
|
+
this.name = "CliUsageError";
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
function parseCliArguments(args, environment = process.env, currentDirectory = process.cwd(), homeDirectory = os.homedir()) {
|
|
735
|
+
let command = "start";
|
|
736
|
+
let commandSelected = false;
|
|
737
|
+
let serviceAction = null;
|
|
738
|
+
let hostValue;
|
|
739
|
+
let portValue;
|
|
740
|
+
let homeValue;
|
|
741
|
+
let noBrowser = false;
|
|
742
|
+
let optionsEnded = false;
|
|
743
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
744
|
+
const argument = args[index];
|
|
745
|
+
if (!optionsEnded && argument === "--") {
|
|
746
|
+
optionsEnded = true;
|
|
747
|
+
continue;
|
|
748
|
+
}
|
|
749
|
+
if (!optionsEnded && (argument === "--help" || argument === "-h")) return terminalConfig("help", homeDirectory);
|
|
750
|
+
if (!optionsEnded && (argument === "--version" || argument === "-v")) return terminalConfig("version", homeDirectory);
|
|
751
|
+
if (!optionsEnded && argument === "--no-browser") {
|
|
752
|
+
noBrowser = true;
|
|
753
|
+
continue;
|
|
754
|
+
}
|
|
755
|
+
if (!optionsEnded && argument.startsWith("--")) {
|
|
756
|
+
const [name, inline] = splitOption(argument);
|
|
757
|
+
const value = inline ?? args[++index];
|
|
758
|
+
if (value === void 0 || value.startsWith("--")) throw new CliUsageError(`Missing value for ${name}.`);
|
|
759
|
+
if (name === "--host") hostValue = value;
|
|
760
|
+
else if (name === "--port") portValue = value;
|
|
761
|
+
else if (name === "--home") homeValue = value;
|
|
762
|
+
else throw new CliUsageError(`Unknown option: ${name}.`);
|
|
763
|
+
continue;
|
|
764
|
+
}
|
|
765
|
+
if (!commandSelected && isCommand(argument)) {
|
|
766
|
+
if (argument === "help" || argument === "version") {
|
|
767
|
+
return terminalConfig(argument, homeDirectory);
|
|
768
|
+
}
|
|
769
|
+
command = argument;
|
|
770
|
+
commandSelected = true;
|
|
771
|
+
continue;
|
|
772
|
+
}
|
|
773
|
+
if (command === "service" && serviceAction === null && isServiceAction(argument)) {
|
|
774
|
+
serviceAction = argument;
|
|
775
|
+
continue;
|
|
776
|
+
}
|
|
777
|
+
throw new CliUsageError(`Unexpected argument: ${argument}. Add and select repositories from the OpenTig web UI.`);
|
|
778
|
+
}
|
|
779
|
+
if (command === "pair" && (hostValue !== void 0 || portValue !== void 0 || noBrowser)) {
|
|
780
|
+
throw new CliUsageError("The pair command only accepts --home.");
|
|
781
|
+
}
|
|
782
|
+
if (command === "service" && serviceAction === null) throw new CliUsageError("The service command requires install, status, or uninstall.");
|
|
783
|
+
if (command === "service" && serviceAction !== "install" && (hostValue !== void 0 || portValue !== void 0 || noBrowser)) {
|
|
784
|
+
throw new CliUsageError(`The service ${serviceAction} command only accepts --home.`);
|
|
785
|
+
}
|
|
786
|
+
if (command === "pair") {
|
|
787
|
+
return {
|
|
788
|
+
command,
|
|
789
|
+
serviceAction: null,
|
|
790
|
+
host: DEFAULT_SERVER_HOST,
|
|
791
|
+
port: DEFAULT_SERVER_PORT,
|
|
792
|
+
home: resolvePath(homeValue ?? environment.OPENTIG_HOME ?? path.join(homeDirectory, ".opentig"), currentDirectory, "home"),
|
|
793
|
+
openBrowser: false
|
|
794
|
+
};
|
|
795
|
+
}
|
|
796
|
+
const host = validateHost(hostValue ?? environment.OPENTIG_HOST ?? DEFAULT_SERVER_HOST);
|
|
797
|
+
const environmentPort = environment.OPENTIG_PORT;
|
|
798
|
+
const port = validatePort(portValue ?? environmentPort ?? String(DEFAULT_SERVER_PORT));
|
|
799
|
+
const home = resolvePath(homeValue ?? environment.OPENTIG_HOME ?? path.join(homeDirectory, ".opentig"), currentDirectory, "home");
|
|
800
|
+
return {
|
|
801
|
+
command,
|
|
802
|
+
serviceAction,
|
|
803
|
+
host,
|
|
804
|
+
port,
|
|
805
|
+
home,
|
|
806
|
+
openBrowser: command === "start" && !noBrowser
|
|
807
|
+
};
|
|
808
|
+
}
|
|
809
|
+
function cliHelp(version2) {
|
|
810
|
+
return `OpenTig ${version2}
|
|
811
|
+
|
|
812
|
+
Usage:
|
|
813
|
+
opentig [options]
|
|
814
|
+
opentig start [options]
|
|
815
|
+
opentig serve [options]
|
|
816
|
+
opentig pair [--home <path>]
|
|
817
|
+
opentig service <install|status|uninstall> [options]
|
|
818
|
+
opentig help
|
|
819
|
+
opentig version
|
|
820
|
+
|
|
821
|
+
Commands:
|
|
822
|
+
start Start OpenTig and open the one-use pairing link (default)
|
|
823
|
+
serve Start OpenTig without opening a browser; ideal for servers
|
|
824
|
+
pair Print a fresh five-minute code/link for a running server
|
|
825
|
+
service Explicitly manage startup at boot (Linux/systemd only)
|
|
826
|
+
help Show this help
|
|
827
|
+
version Show the OpenTig version
|
|
828
|
+
|
|
829
|
+
Options:
|
|
830
|
+
--host <host> Listener host (default: ${DEFAULT_SERVER_HOST}; env: OPENTIG_HOST)
|
|
831
|
+
--port <port> Listener port (default: ${DEFAULT_SERVER_PORT}; env: OPENTIG_PORT)
|
|
832
|
+
--home <path> Data directory (default: ~/.opentig; env: OPENTIG_HOME)
|
|
833
|
+
--no-browser Do not open a browser in start mode
|
|
834
|
+
-h, --help Show help
|
|
835
|
+
-v, --version Show version
|
|
836
|
+
|
|
837
|
+
Examples:
|
|
838
|
+
opentig start
|
|
839
|
+
opentig serve
|
|
840
|
+
opentig serve --host 127.0.0.1 --port 6767
|
|
841
|
+
opentig pair --home ~/.opentig
|
|
842
|
+
opentig service install --host 127.0.0.1 --port 6767
|
|
843
|
+
opentig service status
|
|
844
|
+
|
|
845
|
+
Repositories:
|
|
846
|
+
Add, open, and switch server-side Git repositories from the web UI. The CLI
|
|
847
|
+
starts one OpenTig instance and is never scoped to a project directory.
|
|
848
|
+
|
|
849
|
+
Pairing and remote access:
|
|
850
|
+
Every browser needs the printed five-minute, one-use code. Open the printed
|
|
851
|
+
link, or open https://your-domain.example/pair and paste the code there.
|
|
852
|
+
A same-machine HTTPS tunnel can point directly to http://127.0.0.1:6767;
|
|
853
|
+
no public URL needs to be registered in OpenTig. Use --host 0.0.0.0 only for
|
|
854
|
+
a trusted LAN/VPN; pairing is still required.
|
|
855
|
+
|
|
856
|
+
Runtime behavior:
|
|
857
|
+
The configured port is never changed silently. If it is occupied, OpenTig
|
|
858
|
+
exits and asks you to stop that process or choose another --port. SIGINT and
|
|
859
|
+
SIGTERM shut the server down cleanly. npx and bunx never install a service;
|
|
860
|
+
service installation is an explicit Linux/systemd action.
|
|
861
|
+
|
|
862
|
+
Requirements: Node.js 24 or later and Git. Plain bunx launches the Node shebang;
|
|
863
|
+
running OpenTig with the Bun runtime itself is not supported.`;
|
|
864
|
+
}
|
|
865
|
+
function terminalConfig(command, home) {
|
|
866
|
+
return {
|
|
867
|
+
command,
|
|
868
|
+
serviceAction: null,
|
|
869
|
+
host: DEFAULT_SERVER_HOST,
|
|
870
|
+
port: DEFAULT_SERVER_PORT,
|
|
871
|
+
home: path.resolve(home, ".opentig"),
|
|
872
|
+
openBrowser: false
|
|
873
|
+
};
|
|
874
|
+
}
|
|
875
|
+
function splitOption(argument) {
|
|
876
|
+
const separator = argument.indexOf("=");
|
|
877
|
+
return separator < 0 ? [argument, void 0] : [argument.slice(0, separator), argument.slice(separator + 1)];
|
|
878
|
+
}
|
|
879
|
+
function isCommand(value) {
|
|
880
|
+
return value === "start" || value === "serve" || value === "pair" || value === "service" || value === "help" || value === "version";
|
|
881
|
+
}
|
|
882
|
+
function isServiceAction(value) {
|
|
883
|
+
return value === "install" || value === "status" || value === "uninstall";
|
|
884
|
+
}
|
|
885
|
+
function validateHost(value) {
|
|
886
|
+
const normalized = value.trim();
|
|
887
|
+
if (!normalized || normalized.length > 255 || /[\s/?#@\\]/.test(normalized)) throw new CliUsageError("Invalid host.");
|
|
888
|
+
return normalized;
|
|
889
|
+
}
|
|
890
|
+
function validatePort(value) {
|
|
891
|
+
if (!/^\d+$/.test(value)) throw new CliUsageError("Port must be an integer between 1 and 65535.");
|
|
892
|
+
const port = Number(value);
|
|
893
|
+
if (!Number.isSafeInteger(port) || port < 1 || port > 65535) throw new CliUsageError("Port must be an integer between 1 and 65535.");
|
|
894
|
+
return port;
|
|
895
|
+
}
|
|
896
|
+
function resolvePath(value, currentDirectory, label) {
|
|
897
|
+
if (!value || value.includes("\0")) throw new CliUsageError(`Invalid ${label}.`);
|
|
898
|
+
return path.resolve(currentDirectory, value);
|
|
899
|
+
}
|
|
900
|
+
const version = "0.1.2";
|
|
901
|
+
const packageMetadata = {
|
|
902
|
+
version
|
|
903
|
+
};
|
|
904
|
+
const OPEN_TIG_APP_VERSION = packageMetadata.version;
|
|
905
|
+
const UNIT_NAME = "opentig.service";
|
|
906
|
+
async function manageCliService(config, io) {
|
|
907
|
+
if (process$1.platform !== "linux") {
|
|
908
|
+
throw new Error("Background service management currently supports Linux with systemd. On this platform, start OpenTig with your preferred service manager.");
|
|
909
|
+
}
|
|
910
|
+
const action = config.serviceAction;
|
|
911
|
+
if (!action) throw new Error("A service action is required.");
|
|
912
|
+
const unitPath = path.join(os.homedir(), ".config", "systemd", "user", UNIT_NAME);
|
|
913
|
+
if (action === "status") return serviceStatus(unitPath, io);
|
|
914
|
+
if (action === "uninstall") return uninstallService(config.home, unitPath, io);
|
|
915
|
+
return installService(config, unitPath, io);
|
|
916
|
+
}
|
|
917
|
+
async function installService(config, unitPath, io) {
|
|
918
|
+
const packageRoot = await findPackageRoot(fileURLToPath(import.meta.url));
|
|
919
|
+
await assertPackageBuild(packageRoot);
|
|
920
|
+
const serviceRoot = path.join(config.home, "service");
|
|
921
|
+
const target = path.join(serviceRoot, `app-${OPEN_TIG_APP_VERSION}`);
|
|
922
|
+
const temporary = path.join(serviceRoot, `.install-${process$1.pid}-${Date.now()}`);
|
|
923
|
+
await mkdir(serviceRoot, { recursive: true, mode: 448 });
|
|
924
|
+
await rm(temporary, { recursive: true, force: true });
|
|
925
|
+
try {
|
|
926
|
+
await mkdir(temporary, { recursive: true, mode: 448 });
|
|
927
|
+
await cp(path.join(packageRoot, "dist"), path.join(temporary, "dist"), { recursive: true, force: true });
|
|
928
|
+
for (const name of ["package.json", "README.md", "LICENSE", "THIRD_PARTY_NOTICES.md"]) {
|
|
929
|
+
await cp(path.join(packageRoot, name), path.join(temporary, name), { force: true });
|
|
930
|
+
}
|
|
931
|
+
await installProductionDependencies(temporary);
|
|
932
|
+
await rm(target, { recursive: true, force: true });
|
|
933
|
+
await rename(temporary, target);
|
|
934
|
+
} catch (error) {
|
|
935
|
+
await rm(temporary, { recursive: true, force: true });
|
|
936
|
+
throw error;
|
|
937
|
+
}
|
|
938
|
+
const unit = renderSystemdUnit({
|
|
939
|
+
nodeExecutable: process$1.execPath,
|
|
940
|
+
cliEntrypoint: path.join(target, "dist", "bin.mjs"),
|
|
941
|
+
host: config.host,
|
|
942
|
+
port: config.port,
|
|
943
|
+
home: config.home
|
|
944
|
+
});
|
|
945
|
+
await mkdir(path.dirname(unitPath), { recursive: true, mode: 448 });
|
|
946
|
+
const temporaryUnit = `${unitPath}.${process$1.pid}.tmp`;
|
|
947
|
+
await writeFile(temporaryUnit, unit, { encoding: "utf8", mode: 384 });
|
|
948
|
+
await rename(temporaryUnit, unitPath);
|
|
949
|
+
await chmod(unitPath, 384);
|
|
950
|
+
await runRequired("systemctl", ["--user", "daemon-reload"]);
|
|
951
|
+
await runRequired("systemctl", ["--user", "enable", "--now", UNIT_NAME]);
|
|
952
|
+
await runRequired("loginctl", ["enable-linger"]);
|
|
953
|
+
io.out(`OpenTig service installed and started on ${config.host}:${config.port}.`);
|
|
954
|
+
io.out(`Unit: ${unitPath}`);
|
|
955
|
+
io.out(`Pair another browser with: opentig pair --home ${config.home}`);
|
|
956
|
+
return 0;
|
|
957
|
+
}
|
|
958
|
+
async function serviceStatus(unitPath, io) {
|
|
959
|
+
try {
|
|
960
|
+
await access(unitPath);
|
|
961
|
+
} catch {
|
|
962
|
+
io.out("OpenTig service is not installed.");
|
|
963
|
+
return 1;
|
|
964
|
+
}
|
|
965
|
+
const enabled = await run("systemctl", ["--user", "is-enabled", UNIT_NAME]);
|
|
966
|
+
const active = await run("systemctl", ["--user", "is-active", UNIT_NAME]);
|
|
967
|
+
io.out(`OpenTig service: ${active.stdout.trim() || "unknown"} (${enabled.stdout.trim() || "unknown"}).`);
|
|
968
|
+
io.out(`Unit: ${unitPath}`);
|
|
969
|
+
return active.code === 0 ? 0 : 1;
|
|
970
|
+
}
|
|
971
|
+
async function uninstallService(home, unitPath, io) {
|
|
972
|
+
await run("systemctl", ["--user", "disable", "--now", UNIT_NAME]);
|
|
973
|
+
await rm(unitPath, { force: true });
|
|
974
|
+
await runRequired("systemctl", ["--user", "daemon-reload"]);
|
|
975
|
+
await rm(path.join(home, "service"), { recursive: true, force: true });
|
|
976
|
+
io.out("OpenTig service removed. Repository settings and paired sessions were kept.");
|
|
977
|
+
return 0;
|
|
978
|
+
}
|
|
979
|
+
function renderSystemdUnit(input) {
|
|
980
|
+
const args = [
|
|
981
|
+
input.nodeExecutable,
|
|
982
|
+
input.cliEntrypoint,
|
|
983
|
+
"serve",
|
|
984
|
+
"--host",
|
|
985
|
+
input.host,
|
|
986
|
+
"--port",
|
|
987
|
+
String(input.port),
|
|
988
|
+
"--home",
|
|
989
|
+
input.home
|
|
990
|
+
];
|
|
991
|
+
return `[Unit]
|
|
992
|
+
Description=OpenTig browser Git client
|
|
993
|
+
After=network.target
|
|
994
|
+
|
|
995
|
+
[Service]
|
|
996
|
+
Type=simple
|
|
997
|
+
WorkingDirectory=${systemdQuote(input.home)}
|
|
998
|
+
ExecStart=${args.map(systemdQuote).join(" ")}
|
|
999
|
+
Environment=NODE_ENV=production
|
|
1000
|
+
Restart=on-failure
|
|
1001
|
+
RestartSec=3
|
|
1002
|
+
KillSignal=SIGTERM
|
|
1003
|
+
TimeoutStopSec=10
|
|
1004
|
+
|
|
1005
|
+
[Install]
|
|
1006
|
+
WantedBy=default.target
|
|
1007
|
+
`;
|
|
1008
|
+
}
|
|
1009
|
+
function systemdQuote(value) {
|
|
1010
|
+
if (value.includes("\0") || value.includes("\r") || value.includes("\n")) throw new Error("Service paths and arguments cannot contain control characters.");
|
|
1011
|
+
return `"${value.replaceAll("%", "%%").replaceAll("\\", "\\\\").replaceAll('"', '\\"')}"`;
|
|
1012
|
+
}
|
|
1013
|
+
async function assertPackageBuild(packageRoot) {
|
|
1014
|
+
await Promise.all([
|
|
1015
|
+
access(path.join(packageRoot, "dist", "bin.mjs")),
|
|
1016
|
+
access(path.join(packageRoot, "dist", "client", "index.html")),
|
|
1017
|
+
readFile(path.join(packageRoot, "package.json"), "utf8")
|
|
1018
|
+
]).catch(() => {
|
|
1019
|
+
throw new Error("The OpenTig package is incomplete and cannot be installed as a service.");
|
|
1020
|
+
});
|
|
1021
|
+
}
|
|
1022
|
+
async function findPackageRoot(modulePath) {
|
|
1023
|
+
let directory = path.dirname(modulePath);
|
|
1024
|
+
for (let depth = 0; depth < 4; depth += 1) {
|
|
1025
|
+
try {
|
|
1026
|
+
await Promise.all([
|
|
1027
|
+
access(path.join(directory, "package.json")),
|
|
1028
|
+
access(path.join(directory, "dist", "bin.mjs"))
|
|
1029
|
+
]);
|
|
1030
|
+
return directory;
|
|
1031
|
+
} catch {
|
|
1032
|
+
}
|
|
1033
|
+
const parent = path.dirname(directory);
|
|
1034
|
+
if (parent === directory) break;
|
|
1035
|
+
directory = parent;
|
|
1036
|
+
}
|
|
1037
|
+
throw new Error("Could not locate the installed OpenTig package.");
|
|
1038
|
+
}
|
|
1039
|
+
async function installProductionDependencies(directory) {
|
|
1040
|
+
const npmCli = process$1.env.npm_execpath;
|
|
1041
|
+
if (npmCli) {
|
|
1042
|
+
await runRequired(process$1.execPath, [npmCli, "install", "--omit=dev", "--ignore-scripts", "--no-audit", "--no-fund"], directory);
|
|
1043
|
+
return;
|
|
1044
|
+
}
|
|
1045
|
+
await runRequired("npm", ["install", "--omit=dev", "--ignore-scripts", "--no-audit", "--no-fund"], directory);
|
|
1046
|
+
}
|
|
1047
|
+
function runRequired(command, args, cwd) {
|
|
1048
|
+
return run(command, args, cwd).then((result) => {
|
|
1049
|
+
if (result.code !== 0) throw new Error(`${command} failed: ${result.stderr.trim() || result.stdout.trim() || `exit code ${result.code}`}`);
|
|
1050
|
+
});
|
|
1051
|
+
}
|
|
1052
|
+
function run(command, args, cwd) {
|
|
1053
|
+
return new Promise((resolve, reject) => {
|
|
1054
|
+
execFile(command, args, { cwd, timeout: 12e4, windowsHide: true }, (error, stdout, stderr) => {
|
|
1055
|
+
const code = typeof error?.code === "number" ? error.code : error ? 1 : 0;
|
|
1056
|
+
if (error && error.code === "ENOENT") return reject(new Error(`${command} is required but was not found.`));
|
|
1057
|
+
resolve({ code, stdout, stderr });
|
|
1058
|
+
});
|
|
1059
|
+
});
|
|
1060
|
+
}
|
|
1061
|
+
const RUNTIME_STATE_VERSION = 1;
|
|
1062
|
+
function resolveCliPaths(home) {
|
|
1063
|
+
const resolved = path.resolve(home);
|
|
1064
|
+
const serverData = path.join(resolved, "server");
|
|
1065
|
+
const logs = path.join(resolved, "logs");
|
|
1066
|
+
return {
|
|
1067
|
+
home: resolved,
|
|
1068
|
+
settings: path.join(resolved, "settings.json"),
|
|
1069
|
+
aiLog: path.join(resolved, "ai-log.jsonl"),
|
|
1070
|
+
problems: path.join(resolved, "problems.jsonl"),
|
|
1071
|
+
serverData,
|
|
1072
|
+
logs,
|
|
1073
|
+
serverLog: path.join(logs, "server.log"),
|
|
1074
|
+
runtimeState: path.join(resolved, "runtime.json"),
|
|
1075
|
+
adminToken: path.join(serverData, "admin-token")
|
|
1076
|
+
};
|
|
1077
|
+
}
|
|
1078
|
+
async function prepareCliHome(paths) {
|
|
1079
|
+
await mkdir(paths.home, { recursive: true, mode: 448 });
|
|
1080
|
+
await chmod(paths.home, 448);
|
|
1081
|
+
await Promise.all([
|
|
1082
|
+
mkdir(paths.serverData, { recursive: true, mode: 448 }),
|
|
1083
|
+
mkdir(paths.logs, { recursive: true, mode: 448 })
|
|
1084
|
+
]);
|
|
1085
|
+
await Promise.all([chmod(paths.serverData, 448), chmod(paths.logs, 448)]);
|
|
1086
|
+
}
|
|
1087
|
+
async function loadOrCreateAdminToken(filePath) {
|
|
1088
|
+
try {
|
|
1089
|
+
return await readAdminToken(filePath);
|
|
1090
|
+
} catch (error) {
|
|
1091
|
+
if (error.code !== "ENOENT") throw error;
|
|
1092
|
+
}
|
|
1093
|
+
const token = randomBytes(32).toString("base64url");
|
|
1094
|
+
await writeFileAtomically(filePath, `${token}
|
|
1095
|
+
`, { directoryMode: 448 });
|
|
1096
|
+
return token;
|
|
1097
|
+
}
|
|
1098
|
+
async function readAdminToken(filePath) {
|
|
1099
|
+
const token = (await readFile(filePath, "utf8")).trim();
|
|
1100
|
+
if (!isToken(token)) throw new Error("OpenTig local admin credential is corrupt.");
|
|
1101
|
+
await chmod(filePath, 384);
|
|
1102
|
+
return token;
|
|
1103
|
+
}
|
|
1104
|
+
async function writeRuntimeState(filePath, state) {
|
|
1105
|
+
await writeFileAtomically(
|
|
1106
|
+
filePath,
|
|
1107
|
+
`${JSON.stringify({ version: RUNTIME_STATE_VERSION, ...state }, null, 2)}
|
|
1108
|
+
`,
|
|
1109
|
+
{ parseJson: true, directoryMode: 448 }
|
|
1110
|
+
);
|
|
1111
|
+
}
|
|
1112
|
+
async function readRuntimeState(filePath) {
|
|
1113
|
+
let value;
|
|
1114
|
+
try {
|
|
1115
|
+
value = JSON.parse(await readFile(filePath, "utf8"));
|
|
1116
|
+
} catch (error) {
|
|
1117
|
+
if (error.code === "ENOENT") throw new Error("No running OpenTig server was found for this home.");
|
|
1118
|
+
throw new Error("OpenTig runtime state is unreadable.", { cause: error });
|
|
1119
|
+
}
|
|
1120
|
+
if (!isRuntimeState(value)) throw new Error("OpenTig runtime state is invalid.");
|
|
1121
|
+
await chmod(filePath, 384);
|
|
1122
|
+
return value;
|
|
1123
|
+
}
|
|
1124
|
+
async function clearRuntimeState(filePath, instanceId) {
|
|
1125
|
+
try {
|
|
1126
|
+
const state = await readRuntimeState(filePath);
|
|
1127
|
+
if (state.instanceId === instanceId) await rm(filePath, { force: true });
|
|
1128
|
+
} catch (error) {
|
|
1129
|
+
if (!(error instanceof Error && error.message === "No running OpenTig server was found for this home.")) throw error;
|
|
1130
|
+
}
|
|
1131
|
+
}
|
|
1132
|
+
function newInstanceId() {
|
|
1133
|
+
return randomBytes(24).toString("base64url");
|
|
1134
|
+
}
|
|
1135
|
+
function isToken(value) {
|
|
1136
|
+
return /^[A-Za-z0-9_-]{43}$/.test(value);
|
|
1137
|
+
}
|
|
1138
|
+
function isRuntimeState(value) {
|
|
1139
|
+
const state = value;
|
|
1140
|
+
return Boolean(state && state.version === RUNTIME_STATE_VERSION && Number.isSafeInteger(state.pid) && Number(state.pid) > 0 && typeof state.host === "string" && state.host.length > 0 && state.host.length <= 255 && Number.isSafeInteger(state.port) && Number(state.port) > 0 && Number(state.port) <= 65535 && Number.isSafeInteger(state.protocolVersion) && Number(state.protocolVersion) > 0 && typeof state.appVersion === "string" && state.appVersion.length > 0 && state.appVersion.length <= 128 && typeof state.instanceId === "string" && /^[A-Za-z0-9_-]{32}$/.test(state.instanceId) && typeof state.startedAt === "string" && !Number.isNaN(Date.parse(state.startedAt)));
|
|
1141
|
+
}
|
|
1142
|
+
const MAX_BYTES = 1024 * 1024;
|
|
1143
|
+
const BACKUPS = 3;
|
|
1144
|
+
class CliServerLog {
|
|
1145
|
+
constructor(filePath) {
|
|
1146
|
+
this.filePath = filePath;
|
|
1147
|
+
}
|
|
1148
|
+
filePath;
|
|
1149
|
+
queue = Promise.resolve();
|
|
1150
|
+
logger = (level, message) => {
|
|
1151
|
+
const line = `${(/* @__PURE__ */ new Date()).toISOString()} [${level}] ${redactSensitiveText(message)}
|
|
1152
|
+
`;
|
|
1153
|
+
this.queue = this.queue.then(async () => {
|
|
1154
|
+
await mkdir(path.dirname(this.filePath), { recursive: true, mode: 448 });
|
|
1155
|
+
if (await wouldExceed(this.filePath, Buffer.byteLength(line))) await this.rotate();
|
|
1156
|
+
await appendFile(this.filePath, line, { encoding: "utf8", mode: 384 });
|
|
1157
|
+
}).catch(() => void 0);
|
|
1158
|
+
};
|
|
1159
|
+
close() {
|
|
1160
|
+
return this.queue;
|
|
1161
|
+
}
|
|
1162
|
+
async rotate() {
|
|
1163
|
+
await rm(`${this.filePath}.${BACKUPS}`, { force: true });
|
|
1164
|
+
for (let index = BACKUPS - 1; index >= 1; index -= 1) {
|
|
1165
|
+
await moveIfPresent(`${this.filePath}.${index}`, `${this.filePath}.${index + 1}`);
|
|
1166
|
+
}
|
|
1167
|
+
await moveIfPresent(this.filePath, `${this.filePath}.1`);
|
|
1168
|
+
}
|
|
1169
|
+
}
|
|
1170
|
+
async function wouldExceed(filePath, incomingBytes) {
|
|
1171
|
+
try {
|
|
1172
|
+
return (await stat(filePath)).size + incomingBytes > MAX_BYTES;
|
|
1173
|
+
} catch (error) {
|
|
1174
|
+
if (error.code === "ENOENT") return false;
|
|
1175
|
+
throw error;
|
|
1176
|
+
}
|
|
1177
|
+
}
|
|
1178
|
+
async function moveIfPresent(source, target) {
|
|
1179
|
+
try {
|
|
1180
|
+
await rename(source, target);
|
|
1181
|
+
} catch (error) {
|
|
1182
|
+
if (error.code !== "ENOENT") throw error;
|
|
1183
|
+
}
|
|
1184
|
+
}
|
|
1185
|
+
const SHUTDOWN_TIMEOUT_MS = 8e3;
|
|
1186
|
+
const consoleIo = {
|
|
1187
|
+
out: (value) => process$1.stdout.write(`${value}
|
|
1188
|
+
`),
|
|
1189
|
+
error: (value) => process$1.stderr.write(`${value}
|
|
1190
|
+
`)
|
|
1191
|
+
};
|
|
1192
|
+
async function runCli(args, environment = process$1.env, io = consoleIo, profile = "production") {
|
|
1193
|
+
try {
|
|
1194
|
+
assertNodeVersion();
|
|
1195
|
+
const config = parseCliArguments(args, environment);
|
|
1196
|
+
if (config.command === "help") {
|
|
1197
|
+
io.out(cliHelp(OPEN_TIG_APP_VERSION));
|
|
1198
|
+
return 0;
|
|
1199
|
+
}
|
|
1200
|
+
if (config.command === "version") {
|
|
1201
|
+
io.out(OPEN_TIG_APP_VERSION);
|
|
1202
|
+
return 0;
|
|
1203
|
+
}
|
|
1204
|
+
if (config.command === "service") return await manageCliService(config, io);
|
|
1205
|
+
if (config.command === "pair") return await pairRunningServer(config, io, profile);
|
|
1206
|
+
return await startCliServer(config, io, profile);
|
|
1207
|
+
} catch (error) {
|
|
1208
|
+
const message = redactSensitiveText(error instanceof Error ? error.message : String(error));
|
|
1209
|
+
io.error(`OpenTig: ${message}`);
|
|
1210
|
+
if (error instanceof CliUsageError) io.error('Run "opentig --help" for usage.');
|
|
1211
|
+
return error instanceof CliUsageError ? error.exitCode : 1;
|
|
1212
|
+
}
|
|
1213
|
+
}
|
|
1214
|
+
async function startCliServer(config, io, profile) {
|
|
1215
|
+
await assertGitAvailable();
|
|
1216
|
+
const paths = resolveCliPaths(config.home);
|
|
1217
|
+
await prepareCliHome(paths);
|
|
1218
|
+
await refuseActiveRuntime(paths.runtimeState, profile);
|
|
1219
|
+
const adminToken = await loadOrCreateAdminToken(paths.adminToken);
|
|
1220
|
+
const instanceId = newInstanceId();
|
|
1221
|
+
const log = new CliServerLog(paths.serverLog);
|
|
1222
|
+
let server = null;
|
|
1223
|
+
try {
|
|
1224
|
+
server = await startOnConfiguredPort({
|
|
1225
|
+
appVersion: OPEN_TIG_APP_VERSION,
|
|
1226
|
+
profile,
|
|
1227
|
+
auth: { consumeDesktopSecret: () => false },
|
|
1228
|
+
settingsPath: paths.settings,
|
|
1229
|
+
aiLogPath: paths.aiLog,
|
|
1230
|
+
serverDataPath: paths.serverData,
|
|
1231
|
+
platform: normalizeRuntimePlatform(process$1.platform),
|
|
1232
|
+
host: config.host,
|
|
1233
|
+
mode: "web-access",
|
|
1234
|
+
logger: log.logger,
|
|
1235
|
+
admin: { token: adminToken, instanceId }
|
|
1236
|
+
}, config.port);
|
|
1237
|
+
await writeRuntimeState(paths.runtimeState, {
|
|
1238
|
+
pid: process$1.pid,
|
|
1239
|
+
host: config.host,
|
|
1240
|
+
port: server.port,
|
|
1241
|
+
protocolVersion: server.protocolVersion,
|
|
1242
|
+
appVersion: server.appVersion,
|
|
1243
|
+
instanceId,
|
|
1244
|
+
startedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
1245
|
+
});
|
|
1246
|
+
log.logger("info", `OpenTig CLI ready on ${publicOrigin(config.host, server.port)}.`);
|
|
1247
|
+
const origin = publicOrigin(config.host, server.port);
|
|
1248
|
+
const pairing = rewritePairingOrigin(server.createPairingLink(), origin);
|
|
1249
|
+
io.out(`${applicationName(profile)} ${server.appVersion} is ready.`);
|
|
1250
|
+
if (profile === "dev") io.out(`Dev data directory: ${paths.home}`);
|
|
1251
|
+
io.out(`Connection URL: ${origin}`);
|
|
1252
|
+
printPairing(pairing, io, config.command === "serve");
|
|
1253
|
+
if (!isLoopbackHost(config.host)) {
|
|
1254
|
+
io.error("WARNING: This listener grants owner-level access as your OS user. Use only a trusted LAN/VPN or an HTTPS/SSH tunnel; never expose it directly to the public Internet.");
|
|
1255
|
+
if (config.host === "0.0.0.0" || config.host === "::") {
|
|
1256
|
+
io.error("Replace the loopback host in the printed link with a trusted address of this machine for another device.");
|
|
1257
|
+
}
|
|
1258
|
+
}
|
|
1259
|
+
if (config.openBrowser) {
|
|
1260
|
+
await openSystemBrowser(pairing.url).catch(() => {
|
|
1261
|
+
io.error("Could not open the system browser. Open the one-time pairing link shown above manually.");
|
|
1262
|
+
});
|
|
1263
|
+
}
|
|
1264
|
+
return await waitForShutdown(server, async () => {
|
|
1265
|
+
await clearRuntimeState(paths.runtimeState, instanceId);
|
|
1266
|
+
await log.close();
|
|
1267
|
+
}, io);
|
|
1268
|
+
} catch (error) {
|
|
1269
|
+
if (server) await server.close().catch(() => void 0);
|
|
1270
|
+
await clearRuntimeState(paths.runtimeState, instanceId).catch(() => void 0);
|
|
1271
|
+
await log.close();
|
|
1272
|
+
throw error;
|
|
1273
|
+
}
|
|
1274
|
+
}
|
|
1275
|
+
async function pairRunningServer(config, io, profile) {
|
|
1276
|
+
const paths = resolveCliPaths(config.home);
|
|
1277
|
+
const state = await readRuntimeState(paths.runtimeState);
|
|
1278
|
+
if (!isProcessRunning(state.pid)) throw new Error("OpenTig runtime state is stale; its process is not running.");
|
|
1279
|
+
const origin = publicOrigin(state.host, state.port);
|
|
1280
|
+
const adminOrigin = localAdminOrigin(state);
|
|
1281
|
+
const ready = await fetch(`${adminOrigin}/readyz`, { signal: AbortSignal.timeout(3e3) });
|
|
1282
|
+
if (!ready.ok) throw new Error("The running OpenTig server is not ready.");
|
|
1283
|
+
const identity = await ready.json();
|
|
1284
|
+
if (identity.status !== "ready" || identity.protocolVersion !== state.protocolVersion || identity.appVersion !== state.appVersion || profile === "dev" && identity.profile !== "dev") {
|
|
1285
|
+
throw new Error("OpenTig runtime state does not match the running server.");
|
|
1286
|
+
}
|
|
1287
|
+
const adminToken = await readAdminToken(paths.adminToken).catch(() => {
|
|
1288
|
+
throw new Error("OpenTig local admin credential is missing or unreadable.");
|
|
1289
|
+
});
|
|
1290
|
+
const response = await fetch(`${adminOrigin}/api/admin/pair`, {
|
|
1291
|
+
method: "POST",
|
|
1292
|
+
headers: { "Content-Type": "application/json", "X-OpenTig-Admin": adminToken },
|
|
1293
|
+
body: JSON.stringify({ instanceId: state.instanceId, publicOrigin: origin }),
|
|
1294
|
+
signal: AbortSignal.timeout(3e3)
|
|
1295
|
+
});
|
|
1296
|
+
if (!response.ok) throw new Error("The running server refused the local pairing request.");
|
|
1297
|
+
const pairing = validatePairing(await response.json(), origin);
|
|
1298
|
+
printPairing(pairing, io, true);
|
|
1299
|
+
return 0;
|
|
1300
|
+
}
|
|
1301
|
+
async function startOnConfiguredPort(baseConfig, port) {
|
|
1302
|
+
try {
|
|
1303
|
+
return await runOpenTigServer({ ...baseConfig, port });
|
|
1304
|
+
} catch (error) {
|
|
1305
|
+
if (isAddressInUse(error)) throw new Error(`Port ${port} is already in use. Stop that process or select another port with --port.`, { cause: error });
|
|
1306
|
+
throw error;
|
|
1307
|
+
}
|
|
1308
|
+
}
|
|
1309
|
+
function publicOrigin(host, port) {
|
|
1310
|
+
const displayHost = host === "0.0.0.0" ? "127.0.0.1" : host === "::" ? "::1" : host;
|
|
1311
|
+
return `http://${displayHost.includes(":") ? `[${displayHost}]` : displayHost}:${port}`;
|
|
1312
|
+
}
|
|
1313
|
+
async function refuseActiveRuntime(runtimeStatePath, profile) {
|
|
1314
|
+
try {
|
|
1315
|
+
const state = await readRuntimeState(runtimeStatePath);
|
|
1316
|
+
if (isProcessRunning(state.pid)) throw new Error(`OpenTig is already running for this home (PID ${state.pid}). Use "${profile === "dev" ? "npm run pair:web:dev" : "opentig pair"}" to add a device.`);
|
|
1317
|
+
await clearRuntimeState(runtimeStatePath, state.instanceId);
|
|
1318
|
+
} catch (error) {
|
|
1319
|
+
if (error instanceof Error && error.message === "No running OpenTig server was found for this home.") return;
|
|
1320
|
+
throw error;
|
|
1321
|
+
}
|
|
1322
|
+
}
|
|
1323
|
+
function waitForShutdown(server, afterClose, io) {
|
|
1324
|
+
return new Promise((resolve) => {
|
|
1325
|
+
let stopping = false;
|
|
1326
|
+
const handle = (signal) => {
|
|
1327
|
+
const exitCode = signal === "SIGINT" ? 130 : 143;
|
|
1328
|
+
if (stopping) process$1.exit(exitCode);
|
|
1329
|
+
stopping = true;
|
|
1330
|
+
io.error(`Received ${signal}; shutting down OpenTig...`);
|
|
1331
|
+
const timeout = setTimeout(() => process$1.exit(1), SHUTDOWN_TIMEOUT_MS);
|
|
1332
|
+
void server.close().then(afterClose).then(() => {
|
|
1333
|
+
clearTimeout(timeout);
|
|
1334
|
+
process$1.off("SIGINT", onInterrupt);
|
|
1335
|
+
process$1.off("SIGTERM", onTerminate);
|
|
1336
|
+
resolve(exitCode);
|
|
1337
|
+
}, () => {
|
|
1338
|
+
clearTimeout(timeout);
|
|
1339
|
+
resolve(1);
|
|
1340
|
+
});
|
|
1341
|
+
};
|
|
1342
|
+
const onInterrupt = () => handle("SIGINT");
|
|
1343
|
+
const onTerminate = () => handle("SIGTERM");
|
|
1344
|
+
process$1.on("SIGINT", onInterrupt);
|
|
1345
|
+
process$1.on("SIGTERM", onTerminate);
|
|
1346
|
+
});
|
|
1347
|
+
}
|
|
1348
|
+
function printPairing(pairing, io, includeQr) {
|
|
1349
|
+
const token = new URLSearchParams(new URL(pairing.url).hash.slice(1)).get("token");
|
|
1350
|
+
io.out(`One-time pairing link (expires ${pairing.expiresAt}):`);
|
|
1351
|
+
io.out(pairing.url);
|
|
1352
|
+
if (token) {
|
|
1353
|
+
io.out("Pairing code (paste at /pair on this OpenTig server):");
|
|
1354
|
+
io.out(token);
|
|
1355
|
+
}
|
|
1356
|
+
if (includeQr) io.out(renderUnicodeCompact(pairing.url, { border: 2 }));
|
|
1357
|
+
}
|
|
1358
|
+
function rewritePairingOrigin(pairing, origin) {
|
|
1359
|
+
const source = new URL(pairing.url);
|
|
1360
|
+
const url = new URL("/pair", origin);
|
|
1361
|
+
url.hash = source.hash;
|
|
1362
|
+
return validatePairing({ url: url.href, expiresAt: pairing.expiresAt }, origin);
|
|
1363
|
+
}
|
|
1364
|
+
function validatePairing(value, origin) {
|
|
1365
|
+
const pairing = value;
|
|
1366
|
+
if (!pairing || typeof pairing.url !== "string" || typeof pairing.expiresAt !== "string") throw new Error("The server returned an invalid pairing link.");
|
|
1367
|
+
const url = new URL(pairing.url);
|
|
1368
|
+
const token = new URLSearchParams(url.hash.slice(1)).get("token");
|
|
1369
|
+
const expiresAt = Date.parse(pairing.expiresAt);
|
|
1370
|
+
if (url.origin !== origin || url.pathname !== "/pair" || url.search || !token || !/^[A-Za-z0-9_-]{43}$/.test(token) || expiresAt <= Date.now() || expiresAt > Date.now() + 15 * 60 * 1e3) {
|
|
1371
|
+
throw new Error("The server returned an invalid pairing link.");
|
|
1372
|
+
}
|
|
1373
|
+
return { url: url.href, expiresAt: pairing.expiresAt };
|
|
1374
|
+
}
|
|
1375
|
+
function localAdminOrigin(state) {
|
|
1376
|
+
return publicOrigin(state.host, state.port);
|
|
1377
|
+
}
|
|
1378
|
+
function isLoopbackHost(host) {
|
|
1379
|
+
return host === "127.0.0.1" || host === "::1" || host.toLowerCase() === "localhost";
|
|
1380
|
+
}
|
|
1381
|
+
function isAddressInUse(error) {
|
|
1382
|
+
return error instanceof Error && "code" in error && error.code === "EADDRINUSE";
|
|
1383
|
+
}
|
|
1384
|
+
function isProcessRunning(pid) {
|
|
1385
|
+
try {
|
|
1386
|
+
process$1.kill(pid, 0);
|
|
1387
|
+
return true;
|
|
1388
|
+
} catch (error) {
|
|
1389
|
+
return error.code === "EPERM";
|
|
1390
|
+
}
|
|
1391
|
+
}
|
|
1392
|
+
function assertNodeVersion() {
|
|
1393
|
+
const major = Number(process$1.versions.node.split(".", 1)[0]);
|
|
1394
|
+
if (!Number.isSafeInteger(major) || major < 24) throw new Error("Node.js 24 or later is required.");
|
|
1395
|
+
}
|
|
1396
|
+
function assertGitAvailable() {
|
|
1397
|
+
return new Promise((resolve, reject) => {
|
|
1398
|
+
execFile("git", ["--version"], { timeout: 1e4, windowsHide: true }, (error, stdout) => {
|
|
1399
|
+
if (error || !stdout.trim().startsWith("git version ")) reject(new Error("Git is required and was not found on PATH."));
|
|
1400
|
+
else resolve();
|
|
1401
|
+
});
|
|
1402
|
+
});
|
|
1403
|
+
}
|
|
1404
|
+
export {
|
|
1405
|
+
CliUsageError as C,
|
|
1406
|
+
runCli as r
|
|
1407
|
+
};
|