├── .DS_Store ├── .cargo └── config.toml ├── .editorconfig ├── .github ├── ISSUE_TEMPLATE │ └── bug_report.md └── workflows │ ├── ci.yml │ └── main.yml ├── .rustfmt.toml ├── CHANGELOG.md ├── Cargo.toml ├── Dockerfile ├── LICENSE ├── Makefile.toml ├── README.md ├── bin └── lapce-vue.rustc.wasm ├── build.sh ├── image ├── logo.png ├── lps.png └── type.mov ├── lapce-volar ├── package.json ├── vue-language-server.js └── yarn.lock ├── launch.sh ├── setting.toml ├── src ├── config.rs ├── lib.rs └── main.rs └── volt.toml /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoxin-sky/lapce-vue/62d62b8eb5253f106d189558fbf337abbd04826b/.DS_Store -------------------------------------------------------------------------------- /.cargo/config.toml: -------------------------------------------------------------------------------- 1 | [alias] 2 | m = "make" 3 | i = ["install", "--path", "."] 4 | 5 | [install] 6 | root = "." 7 | 8 | [build] 9 | target = "wasm32-wasi" 10 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | [*] 2 | charset = utf-8 3 | end_of_line = lf 4 | insert_final_newline = true 5 | 6 | [*.toml] 7 | indent_size = 2 8 | indent_style = space 9 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - OS: [e.g. iOS] 28 | - Version [e.g. 22] 29 | 30 | **Smartphone (please complete the following information):** 31 | - Device: [e.g. iPhone6] 32 | - OS: [e.g. iOS8.1] 33 | - Browser [e.g. stock browser, safari] 34 | - Version [e.g. 22] 35 | 36 | **Additional context** 37 | Add any other context about the problem here. 38 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: ci 2 | 3 | on: 4 | workflow_dispatch: 5 | push: 6 | tags: 7 | - v0.* 8 | 9 | jobs: 10 | qemu: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - name: Set up QEMU 14 | uses: docker/setup-qemu-action@v2 15 | - name: Install ldid 16 | uses: MOZGIII/install-ldid-action@v1 17 | with: 18 | tag: v2.1.5-procursus2 19 | 20 | - uses: actions/checkout@v3 21 | - name: Use Node.js 22 | uses: actions/setup-node@v1 23 | with: 24 | node-version: 16 25 | 26 | - name: install pkg 27 | run: | 28 | cd lapce-volar 29 | npm install 30 | npx pkg vue-language-server.js --out-path ${{ github.workspace }}/lapce-volar/dist --target macos-x64,macos-arm64,linux-x64,linux-arm64,win-x64,win-arm64 31 | cd dist 32 | tar -zcvf vue-language-server-linux-x64.tar.gz ./vue-language-server-linux-x64 && rm ./vue-language-server-linux-x64 33 | tar -zcvf vue-language-server-win-x64.exe.tar.gz ./vue-language-server-win-x64.exe && rm ./vue-language-server-win-x64.exe 34 | tar -zcvf vue-language-server-macos-x64.tar.gz ./vue-language-server-macos-x64 && rm ./vue-language-server-macos-x64 35 | tar -zcvf vue-language-server-linux-arm64.tar.gz ./vue-language-server-linux-arm64 && rm ./vue-language-server-linux-arm64 36 | tar -zcvf vue-language-server-macos-arm64.tar.gz ./vue-language-server-macos-arm64 && rm ./vue-language-server-macos-arm64 37 | tar -zcvf vue-language-server-win-arm64.exe.tar.gz ./vue-language-server-win-arm64.exe && rm ./vue-language-server-win-arm64.exe 38 | ls 39 | 40 | - name: upload 41 | uses: actions/upload-artifact@v3 42 | with: 43 | path: ${{ github.workspace }}/lapce-volar/dist/* 44 | retention-days: 1 45 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | # This is a basic workflow to help you get started with Actions 2 | 3 | name: Release 4 | 5 | # Controls when the workflow will run 6 | on: 7 | workflow_dispatch: 8 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 9 | jobs: 10 | linux: 11 | runs-on: ubuntu-latest 12 | container: ubuntu:18.04 13 | 14 | steps: 15 | - uses: actions/checkout@v3 16 | 17 | - name: Docker Setup QEMU 18 | uses: docker/setup-qemu-action@v2.0.0 19 | 20 | - name: Use Node.js 21 | uses: actions/setup-node@v1 22 | with: 23 | node-version: 16 24 | 25 | - name: install pkg 26 | run: | 27 | cd lapce-volar 28 | npm install 29 | npx pkg vue-language-server.js --output-path ./dist --target x64,arm64 30 | 31 | - name: upload 32 | uses: actions/upload-artifact@v3 33 | with: 34 | name: volar 35 | path: ${{ github.workspace }}/lapce-volar/dist/* 36 | -------------------------------------------------------------------------------- /.rustfmt.toml: -------------------------------------------------------------------------------- 1 | reorder_imports = true 2 | newline_style = "unix" 3 | # uncomment once stable 4 | # imports_granularity = "Crate" 5 | # group_imports = "StdExternalCrate" 6 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | # 0.0.2(2022/10/27) 4 | 5 | 1. add custom config vue-language-server path 6 | 2. fix can't observe ts file change 7 | 3. update volar binary version to 1.0.9 8 | 4. add ts takeover mode 9 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | edition = "2021" 3 | name = "lapce-vue" 4 | version = "0.0.1" 5 | resolver = "2" 6 | 7 | [target.'cfg(target_os = "wasi")'.dependencies] 8 | 9 | # default deps for all lapce plugins 10 | anyhow = "1.0" 11 | serde_json = "1.0" 12 | serde = { version = "1.0", features = ["derive"] } 13 | # lapce-plugin = { git = "https://github.com/lapce/lapce-plugin-rust.git", branch = "volt" } 14 | lapce-plugin = { git = "https://github.com/panekj/lapce-plugin-rust.git", branch = "volt" } 15 | toml = "0.5.9" 16 | flate2 = "1.0.24" 17 | tar-wasi = "0.4.38" 18 | 19 | [profile.release] 20 | opt-level = 3 21 | lto = true 22 | codegen-units = 1 23 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine:3.10 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /Makefile.toml: -------------------------------------------------------------------------------- 1 | [tasks.default] 2 | clear = true 3 | dependencies = [ 4 | "fmt", 5 | "check", 6 | "clippy", 7 | "release", 8 | ] 9 | 10 | [tasks.fmt] 11 | command = "cargo" 12 | args = ["fmt"] 13 | 14 | [tasks.release] 15 | dependencies = ["build-release"] 16 | 17 | [tasks.dev] 18 | dependencies = ["build-dev"] 19 | 20 | [tasks.check] 21 | command = "cargo" 22 | args = ["check"] 23 | 24 | [tasks.clippy] 25 | command = "cargo" 26 | args = ["clippy"] 27 | 28 | [tasks.build-dev] 29 | command = "cargo" 30 | args = ["install", "--path", ".", "--debug"] 31 | 32 | [tasks.build-release] 33 | command = "cargo" 34 | args = ["install", "--path", "."] 35 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Lapce Plugin for Vue (based volar) 2 | 3 | ### Preview 4 | 5 | ![vue Plugin for lapce](https://raw.githubusercontent.com/xiaoxin-sky/lapce-vue/master/image/lps.png) 6 | 7 | ### Usage 8 | 9 | 10 | **** 11 | 12 | **Config language server path** 13 | > if download language Binary slow, You can set language server. 14 | > you need install @volar/vue-language-server first, and Paste the npm global xxx@volar/vue-language-server/bin/vue-language-server.js 15 | 16 | install global vue language server 17 | ```bash 18 | npm install @volar/vue-language-server -g 19 | ``` 20 | 21 | get global path 22 | ```bash 23 | npm root -g 24 | # such as echo: /Users/skymac/.nvm/versions/node/v14.19.2/lib/node_modules 25 | ``` 26 | 27 | such as: language server path 28 | `/Users/skymac/.nvm/versions/node/v14.19.2/lib/node_modules@volar/vue-language-server/bin/vue-language-server.js` 29 | 30 | 31 | **Manual installation** 32 | 33 | 1. Open Lapce, Press the F1 key on your keyboard, then input `:open plugins Directory` in the command palette. 34 | 2. Download `lapce-vue.tar.gz` [click here to get release](https://github.com/xiaoxin-sky/lapce-vue/releases) 35 | 3. Extract lapce-vua.tar.gz into your lapce plugins directory. 36 | 4. Reload Lapce 37 | -------------------------------------------------------------------------------- /bin/lapce-vue.rustc.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoxin-sky/lapce-vue/62d62b8eb5253f106d189558fbf337abbd04826b/bin/lapce-vue.rustc.wasm -------------------------------------------------------------------------------- /build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | tar -zcf lapce-vue.tar.gz ./bin volt.toml 3 | -------------------------------------------------------------------------------- /image/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoxin-sky/lapce-vue/62d62b8eb5253f106d189558fbf337abbd04826b/image/logo.png -------------------------------------------------------------------------------- /image/lps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoxin-sky/lapce-vue/62d62b8eb5253f106d189558fbf337abbd04826b/image/lps.png -------------------------------------------------------------------------------- /image/type.mov: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoxin-sky/lapce-vue/62d62b8eb5253f106d189558fbf337abbd04826b/image/type.mov -------------------------------------------------------------------------------- /lapce-volar/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lapce-volar", 3 | "version": "1.0.8", 4 | "description": "", 5 | "main": "vue-language-server.js", 6 | "scripts": {}, 7 | "keywords": [], 8 | "author": "", 9 | "license": "MIT", 10 | "dependencies": { 11 | "@volar/vue-language-server": "1.0.9", 12 | "typescript": "^4.8.4" 13 | }, 14 | "devDependencies": {} 15 | } 16 | -------------------------------------------------------------------------------- /lapce-volar/vue-language-server.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | require("@volar/vue-language-server/out/nodeServer.js"); -------------------------------------------------------------------------------- /lapce-volar/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/helper-string-parser@^7.19.4": 6 | version "7.19.4" 7 | resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" 8 | integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== 9 | 10 | "@babel/helper-validator-identifier@^7.19.1": 11 | version "7.19.1" 12 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" 13 | integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== 14 | 15 | "@babel/parser@^7.16.4", "@babel/parser@^7.6.0", "@babel/parser@^7.9.6": 16 | version "7.19.6" 17 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.19.6.tgz#b923430cb94f58a7eae8facbffa9efd19130e7f8" 18 | integrity sha512-h1IUp81s2JYJ3mRkdxJgs4UvmSsRvDrx5ICSJbPvtWYv5i1nTBGcBpnog+89rAFMwvvru6E5NUHdBe01UeSzYA== 19 | 20 | "@babel/types@^7.6.1", "@babel/types@^7.9.6": 21 | version "7.19.4" 22 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.4.tgz#0dd5c91c573a202d600490a35b33246fed8a41c7" 23 | integrity sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw== 24 | dependencies: 25 | "@babel/helper-string-parser" "^7.19.4" 26 | "@babel/helper-validator-identifier" "^7.19.1" 27 | to-fast-properties "^2.0.0" 28 | 29 | "@emmetio/abbreviation@^2.2.3": 30 | version "2.2.3" 31 | resolved "https://registry.yarnpkg.com/@emmetio/abbreviation/-/abbreviation-2.2.3.tgz#2b3c0383c1a4652f677d5b56fb3f1616fe16ef10" 32 | integrity sha512-87pltuCPt99aL+y9xS6GPZ+Wmmyhll2WXH73gG/xpGcQ84DRnptBsI2r0BeIQ0EB/SQTOe2ANPqFqj3Rj5FOGA== 33 | dependencies: 34 | "@emmetio/scanner" "^1.0.0" 35 | 36 | "@emmetio/css-abbreviation@^2.1.4": 37 | version "2.1.4" 38 | resolved "https://registry.yarnpkg.com/@emmetio/css-abbreviation/-/css-abbreviation-2.1.4.tgz#90362e8a1122ce3b76f6c3157907d30182f53f54" 39 | integrity sha512-qk9L60Y+uRtM5CPbB0y+QNl/1XKE09mSO+AhhSauIfr2YOx/ta3NJw2d8RtCFxgzHeRqFRr8jgyzThbu+MZ4Uw== 40 | dependencies: 41 | "@emmetio/scanner" "^1.0.0" 42 | 43 | "@emmetio/scanner@^1.0.0": 44 | version "1.0.0" 45 | resolved "https://registry.yarnpkg.com/@emmetio/scanner/-/scanner-1.0.0.tgz#065b2af6233fe7474d44823e3deb89724af42b5f" 46 | integrity sha512-8HqW8EVqjnCmWXVpqAOZf+EGESdkR27odcMMMGefgKXtar00SoYNSryGv//TELI4T3QFsECo78p+0lmalk/CFA== 47 | 48 | "@johnsoncodehk/html2pug@^1.0.0": 49 | version "1.0.0" 50 | resolved "https://registry.yarnpkg.com/@johnsoncodehk/html2pug/-/html2pug-1.0.0.tgz#be3d70812ac513fbb16ddbaf065d5f6f8f0996e7" 51 | integrity sha512-TAs9NvSxC2ceT11h9Hck/p4No3lyaAtYUfV0ttPgImLxfbrAtvID5pdQVC5j1hYa/0oMg+Q4Xq91yihSgeAmgQ== 52 | dependencies: 53 | domelementtype "^2.2.0" 54 | domhandler "^4.3.1" 55 | htmlparser2 "^7.2.0" 56 | pug "^3.0.2" 57 | 58 | "@johnsoncodehk/pug-beautify@^0.2.2": 59 | version "0.2.2" 60 | resolved "https://registry.yarnpkg.com/@johnsoncodehk/pug-beautify/-/pug-beautify-0.2.2.tgz#6818e7cab0f2d2354492c13bad73881e9cb3ef54" 61 | integrity sha512-qqNS/YD0Nck5wtQLCPHAfGVgWbbGafxSPjNh0ekYPFSNNqnDH2kamnduzYly8IiADmeVx/MfAE1njMEjVeHTMA== 62 | 63 | "@volar-plugins/css@1.0.9": 64 | version "1.0.9" 65 | resolved "https://registry.npmmirror.com/@volar-plugins/css/-/css-1.0.9.tgz#7ccfa8b4fbcdc40008dbfc181b22a8ad4ce046eb" 66 | integrity sha512-D0BxYd2Fj4X1x4UAtmYZFg/4t6ojQcfBAVMdMFfWc8dQ1AGZuDldU7hpJ3UTlZLGQWZ4LVz1usaATnpxRAEk4Q== 67 | dependencies: 68 | "@volar/shared" "1.0.9" 69 | vscode-css-languageservice "^6.1.1" 70 | vscode-languageserver-protocol "^3.17.2" 71 | vscode-languageserver-textdocument "^1.0.7" 72 | 73 | "@volar-plugins/emmet@1.0.9": 74 | version "1.0.9" 75 | resolved "https://registry.npmmirror.com/@volar-plugins/emmet/-/emmet-1.0.9.tgz#d936a8b02b78b653d9f6721760af0d845e736653" 76 | integrity sha512-PHxACT3o/CXwBJHR5Y0gdannS6o+8Q5wrVeLcppfQ8rxu+2A7t5FBy0ED6Fr/0dnns3yo4F35Uk4F3ErzUA+dw== 77 | dependencies: 78 | "@vscode/emmet-helper" "^2.8.4" 79 | 80 | "@volar-plugins/html@1.0.9": 81 | version "1.0.9" 82 | resolved "https://registry.npmmirror.com/@volar-plugins/html/-/html-1.0.9.tgz#fb983fe98c632d2e8f2db09192921e1c041d9cd1" 83 | integrity sha512-RvwfnsDN8Sn52gsSKSYIOAFT2xCWODcFZ7rP8uAnJx2vY6B+KXfm3lT4Hc0AMVwFTWzrOLtOLTj6StSH+/vw7w== 84 | dependencies: 85 | vscode-html-languageservice "^5.0.2" 86 | vscode-languageserver-protocol "^3.17.2" 87 | vscode-languageserver-textdocument "^1.0.7" 88 | 89 | "@volar-plugins/json@1.0.9": 90 | version "1.0.9" 91 | resolved "https://registry.npmmirror.com/@volar-plugins/json/-/json-1.0.9.tgz#30017647cccbc9d944ebbe78169e1449ef12e50c" 92 | integrity sha512-lroy+6MW2zghzvCGhvB1EIdtjUiZ8NbG1IpARVXV+T1BtSicrqE71iYum2dn7XffkQwOHyReg7aWepWmn0lgLA== 93 | dependencies: 94 | vscode-json-languageservice "^5.1.1" 95 | vscode-languageserver-protocol "^3.17.2" 96 | vscode-languageserver-textdocument "^1.0.7" 97 | 98 | "@volar-plugins/pug-beautify@1.0.9": 99 | version "1.0.9" 100 | resolved "https://registry.npmmirror.com/@volar-plugins/pug-beautify/-/pug-beautify-1.0.9.tgz#53c6a189e9d5b2d61532d613790ee9466cc5010b" 101 | integrity sha512-PbdOY67FUQf4n/vlEfCsFQ1uNqoSdSmOrBCGOAXuQhINcsJNbPXAso4TDVAv3txveDNH10seXDcTrsmWpvp+fQ== 102 | dependencies: 103 | "@johnsoncodehk/pug-beautify" "^0.2.2" 104 | vscode-languageserver-types "^3.17.2" 105 | 106 | "@volar-plugins/pug@1.0.9": 107 | version "1.0.9" 108 | resolved "https://registry.npmmirror.com/@volar-plugins/pug/-/pug-1.0.9.tgz#562b6b086161e76331d61003bbc8ef16f301f624" 109 | integrity sha512-9+K3CnMe+0F9iMDVtK6jCnT0qGDderpIOrwG+s4AlkKLZvJv6GsBEE12Gt5UzvGKg1qEO5iw51Uf2k/3/JHN+A== 110 | dependencies: 111 | "@volar-plugins/html" "1.0.9" 112 | "@volar/pug-language-service" "1.0.9" 113 | vscode-html-languageservice "^5.0.2" 114 | vscode-languageserver-textdocument "^1.0.7" 115 | 116 | "@volar-plugins/typescript@1.0.9": 117 | version "1.0.9" 118 | resolved "https://registry.npmmirror.com/@volar-plugins/typescript/-/typescript-1.0.9.tgz#c55615da1e1b089095d67aa1b733c5cf0be2cad2" 119 | integrity sha512-M/CD2kDwAmPK0pXR5dtg3/kdCdfWANo/DKDg72pm/c2nuo4Wz68DN2Psh1BBH/CDoT3B18f4uJ3PcMLFYjT1tw== 120 | dependencies: 121 | "@volar/shared" "1.0.9" 122 | semver "^7.3.8" 123 | vscode-languageserver-protocol "^3.17.2" 124 | vscode-languageserver-textdocument "^1.0.7" 125 | vscode-nls "^5.2.0" 126 | vscode-uri "^3.0.6" 127 | 128 | "@volar/language-core@1.0.9": 129 | version "1.0.9" 130 | resolved "https://registry.npmmirror.com/@volar/language-core/-/language-core-1.0.9.tgz#d12456b294d1e5b3928b22e5214c8e7141ee2ce1" 131 | integrity sha512-5Fty3slLet6svXiJw2YxhYeo6c7wFdtILrql5bZymYLM+HbiZtJbryW1YnUEKAP7MO9Mbeh+TNH4Z0HFxHgIqw== 132 | dependencies: 133 | "@volar/source-map" "1.0.9" 134 | "@vue/reactivity" "^3.2.40" 135 | muggle-string "^0.1.0" 136 | 137 | "@volar/language-server@1.0.9": 138 | version "1.0.9" 139 | resolved "https://registry.npmmirror.com/@volar/language-server/-/language-server-1.0.9.tgz#b450563ee436050c3e4305a94302052880f62da5" 140 | integrity sha512-nYpEkqMzvsb8TLoFMyQr05H5l322Wh+i3TPwpXdi1EjpC08m/Wg3zyMhlFbHvp570WJUsUQuk6H7k2Uag4Jpqg== 141 | dependencies: 142 | "@volar/language-core" "1.0.9" 143 | "@volar/language-service" "1.0.9" 144 | "@volar/shared" "1.0.9" 145 | request-light "^0.5.8" 146 | typesafe-path "^0.2.2" 147 | vscode-html-languageservice "^5.0.2" 148 | vscode-languageserver "^8.0.2" 149 | vscode-languageserver-protocol "^3.17.2" 150 | vscode-languageserver-textdocument "^1.0.7" 151 | vscode-uri "^3.0.6" 152 | 153 | "@volar/language-service@1.0.9": 154 | version "1.0.9" 155 | resolved "https://registry.npmmirror.com/@volar/language-service/-/language-service-1.0.9.tgz#006efbc143a8878182a9698ff96f309dd03c5d3b" 156 | integrity sha512-5DPUA9VJtWYbWgEFgz9UVFHv/l3S5fd5ck9QNexI4owgajJSTvZRZrDuSfoA+qnDSQXbnqZwYRhDKC/f3/XqQA== 157 | dependencies: 158 | "@volar/language-core" "1.0.9" 159 | "@volar/shared" "1.0.9" 160 | "@volar/source-map" "1.0.9" 161 | "@volar/transforms" "1.0.9" 162 | "@volar/typescript-faster" "1.0.9" 163 | "@vue/reactivity" "^3.2.40" 164 | vscode-html-languageservice "^5.0.2" 165 | vscode-json-languageservice "^5.1.1" 166 | vscode-languageserver-protocol "^3.17.2" 167 | vscode-languageserver-textdocument "^1.0.7" 168 | vscode-uri "^3.0.6" 169 | 170 | "@volar/pug-language-service@1.0.9": 171 | version "1.0.9" 172 | resolved "https://registry.npmmirror.com/@volar/pug-language-service/-/pug-language-service-1.0.9.tgz#df926e3241da9956e0ca5105ae2f12d7c603e5b1" 173 | integrity sha512-485jIlHb/kGf7TGM0KqQPcqXnkj4leBJP2x1tkLb7A8RvQ+gaAbsxF5JeDv8nTFPwG3DJeIwIA12XmdhVz4rOA== 174 | dependencies: 175 | "@volar/language-service" "1.0.9" 176 | "@volar/shared" "1.0.9" 177 | "@volar/source-map" "1.0.9" 178 | "@volar/transforms" "1.0.9" 179 | muggle-string "^0.1.0" 180 | pug-lexer "^5.0.1" 181 | pug-parser "^6.0.0" 182 | vscode-languageserver-textdocument "^1.0.7" 183 | vscode-languageserver-types "^3.17.2" 184 | 185 | "@volar/shared@1.0.9": 186 | version "1.0.9" 187 | resolved "https://registry.npmmirror.com/@volar/shared/-/shared-1.0.9.tgz#a22b6f137c6febd581bf2fa97df4cab2e758fbad" 188 | integrity sha512-Ex16zlrtFSLVnQjm876no9tk6sGCdHKFwgbPRhPML6p0p9CPSiJaxLxAO0Ib6fcVmwtXHzd+ZbbF2OMtK/c/IQ== 189 | dependencies: 190 | typesafe-path "^0.2.2" 191 | vscode-languageserver-protocol "^3.17.2" 192 | vscode-languageserver-textdocument "^1.0.7" 193 | vscode-uri "^3.0.6" 194 | 195 | "@volar/source-map@1.0.9": 196 | version "1.0.9" 197 | resolved "https://registry.npmmirror.com/@volar/source-map/-/source-map-1.0.9.tgz#00aa951d3d7f9b842f84e28ab2a1831ab3b5b95a" 198 | integrity sha512-fazB/vy5ZEJ3yKx4fabJyGNI3CBkdLkfEIRVu6+1P3VixK0Mn+eqyUIkLBrzGYaeFM3GybhCLCvsVdNz0Fu/CQ== 199 | dependencies: 200 | muggle-string "^0.1.0" 201 | 202 | "@volar/transforms@1.0.9": 203 | version "1.0.9" 204 | resolved "https://registry.npmmirror.com/@volar/transforms/-/transforms-1.0.9.tgz#522b2d93b3e9a9753cebea7381ccdd5d912d0f00" 205 | integrity sha512-wDq08V5Rl73mUxdzWnYhm6cfVVBuvln5SG5wxhjeJALDvpM3miG8/VtYOgL22sNs89TM3yzac6HvvR1KpxnTiA== 206 | dependencies: 207 | "@volar/shared" "1.0.9" 208 | vscode-languageserver-types "^3.17.2" 209 | 210 | "@volar/typescript-faster@1.0.9": 211 | version "1.0.9" 212 | resolved "https://registry.npmmirror.com/@volar/typescript-faster/-/typescript-faster-1.0.9.tgz#8e796dc7d72842788da0b8b208b36a2d7774f984" 213 | integrity sha512-VD43CR98+yFvGQ5YPOiy8QMW2VXc1nExkJlWNuCzgQiaFk/uKZC4aE6Tquvowfm8QxnDRz0Bzxd6HeHB2TrBXw== 214 | dependencies: 215 | semver "^7.3.8" 216 | 217 | "@volar/vue-language-core@1.0.9": 218 | version "1.0.9" 219 | resolved "https://registry.npmmirror.com/@volar/vue-language-core/-/vue-language-core-1.0.9.tgz#9eb7c30652c80f210fca071aeeea794873835eda" 220 | integrity sha512-tofNoR8ShPFenHT1YVMuvoXtXWwoQE+fiXVqSmW0dSKZqEDjWQ3YeXSd0a6aqyKaIbvR7kWWGp34WbpQlwf9Ww== 221 | dependencies: 222 | "@volar/language-core" "1.0.9" 223 | "@volar/source-map" "1.0.9" 224 | "@vue/compiler-dom" "^3.2.40" 225 | "@vue/compiler-sfc" "^3.2.40" 226 | "@vue/reactivity" "^3.2.40" 227 | "@vue/shared" "^3.2.40" 228 | minimatch "^5.1.0" 229 | vue-template-compiler "^2.7.10" 230 | 231 | "@volar/vue-language-server@1.0.9": 232 | version "1.0.9" 233 | resolved "https://registry.npmmirror.com/@volar/vue-language-server/-/vue-language-server-1.0.9.tgz#6219dde65032cf081a7bd554fd7146555bb53684" 234 | integrity sha512-cHk4tt8aWrGETHUstGH2Fd5/a4PGK8epCRg27GbokLQsorJYSNulwUu9bD7/XE21qcN5cIKt20lRLfmePTbZ5w== 235 | dependencies: 236 | "@volar/language-core" "1.0.9" 237 | "@volar/language-server" "1.0.9" 238 | "@volar/shared" "1.0.9" 239 | "@volar/vue-language-core" "1.0.9" 240 | "@volar/vue-language-service" "1.0.9" 241 | vscode-languageserver-protocol "^3.17.2" 242 | vue-component-meta "1.0.9" 243 | 244 | "@volar/vue-language-service@1.0.9": 245 | version "1.0.9" 246 | resolved "https://registry.npmmirror.com/@volar/vue-language-service/-/vue-language-service-1.0.9.tgz#a6e03ed80d79947201d3609edc30b0b53b01cc55" 247 | integrity sha512-0ENcsPcn19bA88WeK5sSYcEu78X3teizw2WQsJqKl3x3Lfbmt6uJYLH2SDyorSDCX9owZjDkeh1KeuX2EdLl3A== 248 | dependencies: 249 | "@johnsoncodehk/html2pug" "^1.0.0" 250 | "@volar-plugins/css" "1.0.9" 251 | "@volar-plugins/emmet" "1.0.9" 252 | "@volar-plugins/html" "1.0.9" 253 | "@volar-plugins/json" "1.0.9" 254 | "@volar-plugins/pug" "1.0.9" 255 | "@volar-plugins/pug-beautify" "1.0.9" 256 | "@volar-plugins/typescript" "1.0.9" 257 | "@volar/language-core" "1.0.9" 258 | "@volar/language-service" "1.0.9" 259 | "@volar/shared" "1.0.9" 260 | "@volar/source-map" "1.0.9" 261 | "@volar/transforms" "1.0.9" 262 | "@volar/vue-language-core" "1.0.9" 263 | "@vue/compiler-dom" "^3.2.40" 264 | "@vue/reactivity" "^3.2.40" 265 | "@vue/shared" "^3.2.40" 266 | vscode-html-languageservice "^5.0.2" 267 | vscode-json-languageservice "^5.1.1" 268 | vscode-languageserver-protocol "^3.17.2" 269 | vscode-languageserver-textdocument "^1.0.7" 270 | vscode-uri "^3.0.6" 271 | 272 | "@vscode/emmet-helper@^2.8.4": 273 | version "2.8.4" 274 | resolved "https://registry.yarnpkg.com/@vscode/emmet-helper/-/emmet-helper-2.8.4.tgz#ab937e3ce79b0873c604d1ad50a9eeb7abae2937" 275 | integrity sha512-lUki5QLS47bz/U8IlG9VQ+1lfxMtxMZENmU5nu4Z71eOD5j9FK0SmYGL5NiVJg9WBWeAU0VxRADMY2Qpq7BfVg== 276 | dependencies: 277 | emmet "^2.3.0" 278 | jsonc-parser "^2.3.0" 279 | vscode-languageserver-textdocument "^1.0.1" 280 | vscode-languageserver-types "^3.15.1" 281 | vscode-nls "^5.0.0" 282 | vscode-uri "^2.1.2" 283 | 284 | "@vue/compiler-core@3.2.41": 285 | version "3.2.41" 286 | resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.41.tgz#fb5b25f23817400f44377d878a0cdead808453ef" 287 | integrity sha512-oA4mH6SA78DT+96/nsi4p9DX97PHcNROxs51lYk7gb9Z4BPKQ3Mh+BLn6CQZBw857Iuhu28BfMSRHAlPvD4vlw== 288 | dependencies: 289 | "@babel/parser" "^7.16.4" 290 | "@vue/shared" "3.2.41" 291 | estree-walker "^2.0.2" 292 | source-map "^0.6.1" 293 | 294 | "@vue/compiler-dom@3.2.41", "@vue/compiler-dom@^3.2.40": 295 | version "3.2.41" 296 | resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.2.41.tgz#dc63dcd3ce8ca8a8721f14009d498a7a54380299" 297 | integrity sha512-xe5TbbIsonjENxJsYRbDJvthzqxLNk+tb3d/c47zgREDa/PCp6/Y4gC/skM4H6PIuX5DAxm7fFJdbjjUH2QTMw== 298 | dependencies: 299 | "@vue/compiler-core" "3.2.41" 300 | "@vue/shared" "3.2.41" 301 | 302 | "@vue/compiler-sfc@^3.2.40": 303 | version "3.2.41" 304 | resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.41.tgz#238fb8c48318408c856748f4116aff8cc1dc2a73" 305 | integrity sha512-+1P2m5kxOeaxVmJNXnBskAn3BenbTmbxBxWOtBq3mQTCokIreuMULFantBUclP0+KnzNCMOvcnKinqQZmiOF8w== 306 | dependencies: 307 | "@babel/parser" "^7.16.4" 308 | "@vue/compiler-core" "3.2.41" 309 | "@vue/compiler-dom" "3.2.41" 310 | "@vue/compiler-ssr" "3.2.41" 311 | "@vue/reactivity-transform" "3.2.41" 312 | "@vue/shared" "3.2.41" 313 | estree-walker "^2.0.2" 314 | magic-string "^0.25.7" 315 | postcss "^8.1.10" 316 | source-map "^0.6.1" 317 | 318 | "@vue/compiler-ssr@3.2.41": 319 | version "3.2.41" 320 | resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.2.41.tgz#344f564d68584b33367731c04ffc949784611fcb" 321 | integrity sha512-Y5wPiNIiaMz/sps8+DmhaKfDm1xgj6GrH99z4gq2LQenfVQcYXmHIOBcs5qPwl7jaW3SUQWjkAPKMfQemEQZwQ== 322 | dependencies: 323 | "@vue/compiler-dom" "3.2.41" 324 | "@vue/shared" "3.2.41" 325 | 326 | "@vue/reactivity-transform@3.2.41": 327 | version "3.2.41" 328 | resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.2.41.tgz#9ff938877600c97f646e09ac1959b5150fb11a0c" 329 | integrity sha512-mK5+BNMsL4hHi+IR3Ft/ho6Za+L3FA5j8WvreJ7XzHrqkPq8jtF/SMo7tuc9gHjLDwKZX1nP1JQOKo9IEAn54A== 330 | dependencies: 331 | "@babel/parser" "^7.16.4" 332 | "@vue/compiler-core" "3.2.41" 333 | "@vue/shared" "3.2.41" 334 | estree-walker "^2.0.2" 335 | magic-string "^0.25.7" 336 | 337 | "@vue/reactivity@^3.2.40": 338 | version "3.2.41" 339 | resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.2.41.tgz#0ad3bdf76d76822da1502dc9f394dafd02642963" 340 | integrity sha512-9JvCnlj8uc5xRiQGZ28MKGjuCoPhhTwcoAdv3o31+cfGgonwdPNuvqAXLhlzu4zwqavFEG5tvaoINQEfxz+l6g== 341 | dependencies: 342 | "@vue/shared" "3.2.41" 343 | 344 | "@vue/shared@3.2.41", "@vue/shared@^3.2.40": 345 | version "3.2.41" 346 | resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.41.tgz#fbc95422df654ea64e8428eced96ba6ad555d2bb" 347 | integrity sha512-W9mfWLHmJhkfAmV+7gDjcHeAWALQtgGT3JErxULl0oz6R6+3ug91I7IErs93eCFhPCZPHBs4QJS7YWEV7A3sxw== 348 | 349 | acorn@^7.1.1: 350 | version "7.4.1" 351 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" 352 | integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== 353 | 354 | asap@~2.0.3: 355 | version "2.0.6" 356 | resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" 357 | integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== 358 | 359 | assert-never@^1.2.1: 360 | version "1.2.1" 361 | resolved "https://registry.yarnpkg.com/assert-never/-/assert-never-1.2.1.tgz#11f0e363bf146205fb08193b5c7b90f4d1cf44fe" 362 | integrity sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw== 363 | 364 | babel-walk@3.0.0-canary-5: 365 | version "3.0.0-canary-5" 366 | resolved "https://registry.yarnpkg.com/babel-walk/-/babel-walk-3.0.0-canary-5.tgz#f66ecd7298357aee44955f235a6ef54219104b11" 367 | integrity sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw== 368 | dependencies: 369 | "@babel/types" "^7.9.6" 370 | 371 | balanced-match@^1.0.0: 372 | version "1.0.2" 373 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 374 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 375 | 376 | brace-expansion@^2.0.1: 377 | version "2.0.1" 378 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" 379 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== 380 | dependencies: 381 | balanced-match "^1.0.0" 382 | 383 | call-bind@^1.0.2: 384 | version "1.0.2" 385 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" 386 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 387 | dependencies: 388 | function-bind "^1.1.1" 389 | get-intrinsic "^1.0.2" 390 | 391 | character-parser@^2.2.0: 392 | version "2.2.0" 393 | resolved "https://registry.yarnpkg.com/character-parser/-/character-parser-2.2.0.tgz#c7ce28f36d4bcd9744e5ffc2c5fcde1c73261fc0" 394 | integrity sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw== 395 | dependencies: 396 | is-regex "^1.0.3" 397 | 398 | constantinople@^4.0.1: 399 | version "4.0.1" 400 | resolved "https://registry.yarnpkg.com/constantinople/-/constantinople-4.0.1.tgz#0def113fa0e4dc8de83331a5cf79c8b325213151" 401 | integrity sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw== 402 | dependencies: 403 | "@babel/parser" "^7.6.0" 404 | "@babel/types" "^7.6.1" 405 | 406 | de-indent@^1.0.2: 407 | version "1.0.2" 408 | resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" 409 | integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== 410 | 411 | doctypes@^1.1.0: 412 | version "1.1.0" 413 | resolved "https://registry.yarnpkg.com/doctypes/-/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9" 414 | integrity sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ== 415 | 416 | dom-serializer@^1.0.1: 417 | version "1.4.1" 418 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" 419 | integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== 420 | dependencies: 421 | domelementtype "^2.0.1" 422 | domhandler "^4.2.0" 423 | entities "^2.0.0" 424 | 425 | domelementtype@^2.0.1, domelementtype@^2.2.0: 426 | version "2.3.0" 427 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" 428 | integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== 429 | 430 | domhandler@^4.2.0, domhandler@^4.2.2, domhandler@^4.3.1: 431 | version "4.3.1" 432 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" 433 | integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== 434 | dependencies: 435 | domelementtype "^2.2.0" 436 | 437 | domutils@^2.8.0: 438 | version "2.8.0" 439 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" 440 | integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== 441 | dependencies: 442 | dom-serializer "^1.0.1" 443 | domelementtype "^2.2.0" 444 | domhandler "^4.2.0" 445 | 446 | emmet@^2.3.0: 447 | version "2.3.6" 448 | resolved "https://registry.yarnpkg.com/emmet/-/emmet-2.3.6.tgz#1d93c1ac03164da9ddf74864c1f341ed6ff6c336" 449 | integrity sha512-pLS4PBPDdxuUAmw7Me7+TcHbykTsBKN/S9XJbUOMFQrNv9MoshzyMFK/R57JBm94/6HSL4vHnDeEmxlC82NQ4A== 450 | dependencies: 451 | "@emmetio/abbreviation" "^2.2.3" 452 | "@emmetio/css-abbreviation" "^2.1.4" 453 | 454 | entities@^2.0.0: 455 | version "2.2.0" 456 | resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" 457 | integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== 458 | 459 | entities@^3.0.1: 460 | version "3.0.1" 461 | resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" 462 | integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== 463 | 464 | estree-walker@^2.0.2: 465 | version "2.0.2" 466 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" 467 | integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== 468 | 469 | function-bind@^1.1.1: 470 | version "1.1.1" 471 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 472 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 473 | 474 | get-intrinsic@^1.0.2: 475 | version "1.1.3" 476 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" 477 | integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== 478 | dependencies: 479 | function-bind "^1.1.1" 480 | has "^1.0.3" 481 | has-symbols "^1.0.3" 482 | 483 | has-symbols@^1.0.2, has-symbols@^1.0.3: 484 | version "1.0.3" 485 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" 486 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== 487 | 488 | has-tostringtag@^1.0.0: 489 | version "1.0.0" 490 | resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" 491 | integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== 492 | dependencies: 493 | has-symbols "^1.0.2" 494 | 495 | has@^1.0.3: 496 | version "1.0.3" 497 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 498 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 499 | dependencies: 500 | function-bind "^1.1.1" 501 | 502 | he@^1.2.0: 503 | version "1.2.0" 504 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 505 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 506 | 507 | htmlparser2@^7.2.0: 508 | version "7.2.0" 509 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-7.2.0.tgz#8817cdea38bbc324392a90b1990908e81a65f5a5" 510 | integrity sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog== 511 | dependencies: 512 | domelementtype "^2.0.1" 513 | domhandler "^4.2.2" 514 | domutils "^2.8.0" 515 | entities "^3.0.1" 516 | 517 | is-core-module@^2.9.0: 518 | version "2.11.0" 519 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" 520 | integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== 521 | dependencies: 522 | has "^1.0.3" 523 | 524 | is-expression@^4.0.0: 525 | version "4.0.0" 526 | resolved "https://registry.yarnpkg.com/is-expression/-/is-expression-4.0.0.tgz#c33155962abf21d0afd2552514d67d2ec16fd2ab" 527 | integrity sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A== 528 | dependencies: 529 | acorn "^7.1.1" 530 | object-assign "^4.1.1" 531 | 532 | is-promise@^2.0.0: 533 | version "2.2.2" 534 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" 535 | integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== 536 | 537 | is-regex@^1.0.3: 538 | version "1.1.4" 539 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" 540 | integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== 541 | dependencies: 542 | call-bind "^1.0.2" 543 | has-tostringtag "^1.0.0" 544 | 545 | js-stringify@^1.0.2: 546 | version "1.0.2" 547 | resolved "https://registry.yarnpkg.com/js-stringify/-/js-stringify-1.0.2.tgz#1736fddfd9724f28a3682adc6230ae7e4e9679db" 548 | integrity sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g== 549 | 550 | jsonc-parser@^2.3.0: 551 | version "2.3.1" 552 | resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-2.3.1.tgz#59549150b133f2efacca48fe9ce1ec0659af2342" 553 | integrity sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg== 554 | 555 | jsonc-parser@^3.2.0: 556 | version "3.2.0" 557 | resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" 558 | integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== 559 | 560 | jstransformer@1.0.0: 561 | version "1.0.0" 562 | resolved "https://registry.yarnpkg.com/jstransformer/-/jstransformer-1.0.0.tgz#ed8bf0921e2f3f1ed4d5c1a44f68709ed24722c3" 563 | integrity sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A== 564 | dependencies: 565 | is-promise "^2.0.0" 566 | promise "^7.0.1" 567 | 568 | lru-cache@^6.0.0: 569 | version "6.0.0" 570 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 571 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 572 | dependencies: 573 | yallist "^4.0.0" 574 | 575 | magic-string@^0.25.7: 576 | version "0.25.9" 577 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" 578 | integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== 579 | dependencies: 580 | sourcemap-codec "^1.4.8" 581 | 582 | minimatch@^5.1.0: 583 | version "5.1.0" 584 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" 585 | integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== 586 | dependencies: 587 | brace-expansion "^2.0.1" 588 | 589 | muggle-string@^0.1.0: 590 | version "0.1.0" 591 | resolved "https://registry.yarnpkg.com/muggle-string/-/muggle-string-0.1.0.tgz#1fda8a281c8b27bb8b70466dbc9f27586a8baa6c" 592 | integrity sha512-Tr1knR3d2mKvvWthlk7202rywKbiOm4rVFLsfAaSIhJ6dt9o47W4S+JMtWhd/PW9Wrdew2/S2fSvhz3E2gkfEg== 593 | 594 | nanoid@^3.3.4: 595 | version "3.3.4" 596 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" 597 | integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== 598 | 599 | object-assign@^4.1.1: 600 | version "4.1.1" 601 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 602 | integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== 603 | 604 | path-parse@^1.0.7: 605 | version "1.0.7" 606 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 607 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 608 | 609 | picocolors@^1.0.0: 610 | version "1.0.0" 611 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" 612 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 613 | 614 | postcss@^8.1.10: 615 | version "8.4.18" 616 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.18.tgz#6d50046ea7d3d66a85e0e782074e7203bc7fbca2" 617 | integrity sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA== 618 | dependencies: 619 | nanoid "^3.3.4" 620 | picocolors "^1.0.0" 621 | source-map-js "^1.0.2" 622 | 623 | promise@^7.0.1: 624 | version "7.3.1" 625 | resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" 626 | integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== 627 | dependencies: 628 | asap "~2.0.3" 629 | 630 | pug-attrs@^3.0.0: 631 | version "3.0.0" 632 | resolved "https://registry.yarnpkg.com/pug-attrs/-/pug-attrs-3.0.0.tgz#b10451e0348165e31fad1cc23ebddd9dc7347c41" 633 | integrity sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA== 634 | dependencies: 635 | constantinople "^4.0.1" 636 | js-stringify "^1.0.2" 637 | pug-runtime "^3.0.0" 638 | 639 | pug-code-gen@^3.0.2: 640 | version "3.0.2" 641 | resolved "https://registry.yarnpkg.com/pug-code-gen/-/pug-code-gen-3.0.2.tgz#ad190f4943133bf186b60b80de483100e132e2ce" 642 | integrity sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg== 643 | dependencies: 644 | constantinople "^4.0.1" 645 | doctypes "^1.1.0" 646 | js-stringify "^1.0.2" 647 | pug-attrs "^3.0.0" 648 | pug-error "^2.0.0" 649 | pug-runtime "^3.0.0" 650 | void-elements "^3.1.0" 651 | with "^7.0.0" 652 | 653 | pug-error@^2.0.0: 654 | version "2.0.0" 655 | resolved "https://registry.yarnpkg.com/pug-error/-/pug-error-2.0.0.tgz#5c62173cb09c34de2a2ce04f17b8adfec74d8ca5" 656 | integrity sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ== 657 | 658 | pug-filters@^4.0.0: 659 | version "4.0.0" 660 | resolved "https://registry.yarnpkg.com/pug-filters/-/pug-filters-4.0.0.tgz#d3e49af5ba8472e9b7a66d980e707ce9d2cc9b5e" 661 | integrity sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A== 662 | dependencies: 663 | constantinople "^4.0.1" 664 | jstransformer "1.0.0" 665 | pug-error "^2.0.0" 666 | pug-walk "^2.0.0" 667 | resolve "^1.15.1" 668 | 669 | pug-lexer@^5.0.1: 670 | version "5.0.1" 671 | resolved "https://registry.yarnpkg.com/pug-lexer/-/pug-lexer-5.0.1.tgz#ae44628c5bef9b190b665683b288ca9024b8b0d5" 672 | integrity sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w== 673 | dependencies: 674 | character-parser "^2.2.0" 675 | is-expression "^4.0.0" 676 | pug-error "^2.0.0" 677 | 678 | pug-linker@^4.0.0: 679 | version "4.0.0" 680 | resolved "https://registry.yarnpkg.com/pug-linker/-/pug-linker-4.0.0.tgz#12cbc0594fc5a3e06b9fc59e6f93c146962a7708" 681 | integrity sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw== 682 | dependencies: 683 | pug-error "^2.0.0" 684 | pug-walk "^2.0.0" 685 | 686 | pug-load@^3.0.0: 687 | version "3.0.0" 688 | resolved "https://registry.yarnpkg.com/pug-load/-/pug-load-3.0.0.tgz#9fd9cda52202b08adb11d25681fb9f34bd41b662" 689 | integrity sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ== 690 | dependencies: 691 | object-assign "^4.1.1" 692 | pug-walk "^2.0.0" 693 | 694 | pug-parser@^6.0.0: 695 | version "6.0.0" 696 | resolved "https://registry.yarnpkg.com/pug-parser/-/pug-parser-6.0.0.tgz#a8fdc035863a95b2c1dc5ebf4ecf80b4e76a1260" 697 | integrity sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw== 698 | dependencies: 699 | pug-error "^2.0.0" 700 | token-stream "1.0.0" 701 | 702 | pug-runtime@^3.0.0, pug-runtime@^3.0.1: 703 | version "3.0.1" 704 | resolved "https://registry.yarnpkg.com/pug-runtime/-/pug-runtime-3.0.1.tgz#f636976204723f35a8c5f6fad6acda2a191b83d7" 705 | integrity sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg== 706 | 707 | pug-strip-comments@^2.0.0: 708 | version "2.0.0" 709 | resolved "https://registry.yarnpkg.com/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz#f94b07fd6b495523330f490a7f554b4ff876303e" 710 | integrity sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ== 711 | dependencies: 712 | pug-error "^2.0.0" 713 | 714 | pug-walk@^2.0.0: 715 | version "2.0.0" 716 | resolved "https://registry.yarnpkg.com/pug-walk/-/pug-walk-2.0.0.tgz#417aabc29232bb4499b5b5069a2b2d2a24d5f5fe" 717 | integrity sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ== 718 | 719 | pug@^3.0.2: 720 | version "3.0.2" 721 | resolved "https://registry.yarnpkg.com/pug/-/pug-3.0.2.tgz#f35c7107343454e43bc27ae0ff76c731b78ea535" 722 | integrity sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw== 723 | dependencies: 724 | pug-code-gen "^3.0.2" 725 | pug-filters "^4.0.0" 726 | pug-lexer "^5.0.1" 727 | pug-linker "^4.0.0" 728 | pug-load "^3.0.0" 729 | pug-parser "^6.0.0" 730 | pug-runtime "^3.0.1" 731 | pug-strip-comments "^2.0.0" 732 | 733 | request-light@^0.5.8: 734 | version "0.5.8" 735 | resolved "https://registry.yarnpkg.com/request-light/-/request-light-0.5.8.tgz#8bf73a07242b9e7b601fac2fa5dc22a094abcc27" 736 | integrity sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg== 737 | 738 | resolve@^1.15.1: 739 | version "1.22.1" 740 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" 741 | integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== 742 | dependencies: 743 | is-core-module "^2.9.0" 744 | path-parse "^1.0.7" 745 | supports-preserve-symlinks-flag "^1.0.0" 746 | 747 | semver@^7.3.8: 748 | version "7.3.8" 749 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" 750 | integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== 751 | dependencies: 752 | lru-cache "^6.0.0" 753 | 754 | source-map-js@^1.0.2: 755 | version "1.0.2" 756 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" 757 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== 758 | 759 | source-map@^0.6.1: 760 | version "0.6.1" 761 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 762 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 763 | 764 | sourcemap-codec@^1.4.8: 765 | version "1.4.8" 766 | resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" 767 | integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== 768 | 769 | supports-preserve-symlinks-flag@^1.0.0: 770 | version "1.0.0" 771 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 772 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 773 | 774 | to-fast-properties@^2.0.0: 775 | version "2.0.0" 776 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 777 | integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== 778 | 779 | token-stream@1.0.0: 780 | version "1.0.0" 781 | resolved "https://registry.yarnpkg.com/token-stream/-/token-stream-1.0.0.tgz#cc200eab2613f4166d27ff9afc7ca56d49df6eb4" 782 | integrity sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg== 783 | 784 | typesafe-path@^0.2.2: 785 | version "0.2.2" 786 | resolved "https://registry.yarnpkg.com/typesafe-path/-/typesafe-path-0.2.2.tgz#91a436681b2f514badb114061b6a5e5c2b8943b1" 787 | integrity sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA== 788 | 789 | typescript@^4.8.4: 790 | version "4.8.4" 791 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.4.tgz#c464abca159669597be5f96b8943500b238e60e6" 792 | integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== 793 | 794 | void-elements@^3.1.0: 795 | version "3.1.0" 796 | resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" 797 | integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== 798 | 799 | vscode-css-languageservice@^6.1.1: 800 | version "6.1.1" 801 | resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-6.1.1.tgz#36daefd96e56b7453da16ff8c16f4ee693f32521" 802 | integrity sha512-7d2NCq2plT0njAKmGZ11uof95y2fwbgq8QuToE3kX9uYQfVmejHX2/lFGKbK5AV5+Ja0L80UZoU0QspwqMKMHA== 803 | dependencies: 804 | vscode-languageserver-textdocument "^1.0.7" 805 | vscode-languageserver-types "^3.17.2" 806 | vscode-nls "^5.2.0" 807 | vscode-uri "^3.0.4" 808 | 809 | vscode-html-languageservice@^5.0.2: 810 | version "5.0.2" 811 | resolved "https://registry.yarnpkg.com/vscode-html-languageservice/-/vscode-html-languageservice-5.0.2.tgz#a66cb9d779f3094a8d14dd3a8f7935748435fd2a" 812 | integrity sha512-TQmeyE14Ure/w/S+RV2IItuRWmw/i1QaS+om6t70iHCpamuTTWnACQPMSltVGm/DlbdyMquUePJREjd/h3AVkQ== 813 | dependencies: 814 | vscode-languageserver-textdocument "^1.0.7" 815 | vscode-languageserver-types "^3.17.2" 816 | vscode-nls "^5.2.0" 817 | vscode-uri "^3.0.4" 818 | 819 | vscode-json-languageservice@^5.1.1: 820 | version "5.1.1" 821 | resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-5.1.1.tgz#d7e36351cf54abc1a5456fe29ae04a6a5f801e88" 822 | integrity sha512-EtAcTD6MOfyf8+MokDsAHNM7ttuZvCo077w9aMtJiyps41gkOcoBThAbXDk6Y0Oi6ki5aDs8lgY4KxYiVW/lxA== 823 | dependencies: 824 | jsonc-parser "^3.2.0" 825 | vscode-languageserver-textdocument "^1.0.7" 826 | vscode-languageserver-types "^3.17.2" 827 | vscode-nls "^5.2.0" 828 | vscode-uri "^3.0.6" 829 | 830 | vscode-jsonrpc@8.0.2: 831 | version "8.0.2" 832 | resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-8.0.2.tgz#f239ed2cd6004021b6550af9fd9d3e47eee3cac9" 833 | integrity sha512-RY7HwI/ydoC1Wwg4gJ3y6LpU9FJRZAUnTYMXthqhFXXu77ErDd/xkREpGuk4MyYkk4a+XDWAMqe0S3KkelYQEQ== 834 | 835 | vscode-languageserver-protocol@3.17.2, vscode-languageserver-protocol@^3.17.2: 836 | version "3.17.2" 837 | resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.2.tgz#beaa46aea06ed061576586c5e11368a9afc1d378" 838 | integrity sha512-8kYisQ3z/SQ2kyjlNeQxbkkTNmVFoQCqkmGrzLH6A9ecPlgTbp3wDTnUNqaUxYr4vlAcloxx8zwy7G5WdguYNg== 839 | dependencies: 840 | vscode-jsonrpc "8.0.2" 841 | vscode-languageserver-types "3.17.2" 842 | 843 | vscode-languageserver-textdocument@^1.0.1, vscode-languageserver-textdocument@^1.0.7: 844 | version "1.0.7" 845 | resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.7.tgz#16df468d5c2606103c90554ae05f9f3d335b771b" 846 | integrity sha512-bFJH7UQxlXT8kKeyiyu41r22jCZXG8kuuVVA33OEJn1diWOZK5n8zBSPZFHVBOu8kXZ6h0LIRhf5UnCo61J4Hg== 847 | 848 | vscode-languageserver-types@3.17.2, vscode-languageserver-types@^3.15.1, vscode-languageserver-types@^3.17.2: 849 | version "3.17.2" 850 | resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz#b2c2e7de405ad3d73a883e91989b850170ffc4f2" 851 | integrity sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA== 852 | 853 | vscode-languageserver@^8.0.2: 854 | version "8.0.2" 855 | resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-8.0.2.tgz#cfe2f0996d9dfd40d3854e786b2821604dfec06d" 856 | integrity sha512-bpEt2ggPxKzsAOZlXmCJ50bV7VrxwCS5BI4+egUmure/oI/t4OlFzi/YNtVvY24A2UDOZAgwFGgnZPwqSJubkA== 857 | dependencies: 858 | vscode-languageserver-protocol "3.17.2" 859 | 860 | vscode-nls@^5.0.0, vscode-nls@^5.2.0: 861 | version "5.2.0" 862 | resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.2.0.tgz#3cb6893dd9bd695244d8a024bdf746eea665cc3f" 863 | integrity sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng== 864 | 865 | vscode-uri@^2.1.2: 866 | version "2.1.2" 867 | resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-2.1.2.tgz#c8d40de93eb57af31f3c715dd650e2ca2c096f1c" 868 | integrity sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A== 869 | 870 | vscode-uri@^3.0.4, vscode-uri@^3.0.6: 871 | version "3.0.6" 872 | resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.6.tgz#5e6e2e1a4170543af30151b561a41f71db1d6f91" 873 | integrity sha512-fmL7V1eiDBFRRnu+gfRWTzyPpNIHJTc4mWnFkwBUmO9U3KPgJAmTx7oxi2bl/Rh6HLdU7+4C9wlj0k2E4AdKFQ== 874 | 875 | vue-component-meta@1.0.9: 876 | version "1.0.9" 877 | resolved "https://registry.npmmirror.com/vue-component-meta/-/vue-component-meta-1.0.9.tgz#af46b70e9cc10e75ce288074a5ad0e6a433271cc" 878 | integrity sha512-uJmfospCBGdDKtSIpmtBrw1L960IxQBJADu4SigVA/lbYGhgZXYQjBBTdxzGx2tFlR6bDrj/a3H53lEv5ZxNzQ== 879 | dependencies: 880 | "@volar/language-core" "1.0.9" 881 | "@volar/vue-language-core" "1.0.9" 882 | typesafe-path "^0.2.2" 883 | 884 | vue-template-compiler@^2.7.10: 885 | version "2.7.13" 886 | resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.7.13.tgz#1520a5aa6d1af51dd0622824e79814f6e8cb7058" 887 | integrity sha512-jYM6TClwDS9YqP48gYrtAtaOhRKkbYmbzE+Q51gX5YDr777n7tNI/IZk4QV4l/PjQPNh/FVa/E92sh/RqKMrog== 888 | dependencies: 889 | de-indent "^1.0.2" 890 | he "^1.2.0" 891 | 892 | with@^7.0.0: 893 | version "7.0.2" 894 | resolved "https://registry.yarnpkg.com/with/-/with-7.0.2.tgz#ccee3ad542d25538a7a7a80aad212b9828495bac" 895 | integrity sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w== 896 | dependencies: 897 | "@babel/parser" "^7.9.6" 898 | "@babel/types" "^7.9.6" 899 | assert-never "^1.2.1" 900 | babel-walk "3.0.0-canary-5" 901 | 902 | yallist@^4.0.0: 903 | version "4.0.0" 904 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 905 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 906 | -------------------------------------------------------------------------------- /launch.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | cargo wasi build 4 | 5 | cp -f ./target/wasm32-wasi/debug/lapce-vue.rustc.wasm ~/Library/Application\ Support/dev.lapce.Lapce-Stable/plugins/Lapce.lapce-vue/bin/ 6 | open ~/Library/Application\ Support/dev.lapce.Lapce-Stable/logs/ 7 | cd ~/workspace/fork/lapce/target/release && ./lapce 8 | 9 | -------------------------------------------------------------------------------- /setting.toml: -------------------------------------------------------------------------------- 1 | [lapce-vue] 2 | [lapce-vue.typescript] 3 | # serverPath = "/Users/xiaoxin/Library/pnpm/global/5/.pnpm/typescript@4.7.4/node_modules/typescript/lib/tsserverlibrary.js" 4 | serverPath = "/Users/skymac/node_modules/typescript/lib/tsserverlibrary.js" 5 | [lapce-vue.languageFeatures] 6 | references = true 7 | definition = true 8 | typeDefinition = true 9 | callHierarchy = true 10 | hover = true 11 | rename = true 12 | renameFileRefactoring = true 13 | signatureHelp = true 14 | codeAction = true 15 | workspaceSymbol = true 16 | diagnostics = true 17 | documentHighlight = true 18 | documentLink = true 19 | semanticTokens = false 20 | [lapce-vue.languageFeatures.schemaRequestService] 21 | getDocumentContentRequest = true 22 | [lapce-vue.languageFeatures.codeLens] 23 | showReferencesNotification = true 24 | [lapce-vue.languageFeatures.completion] 25 | defaultTagNameCase = 'both' 26 | defaultAttrNameCase = 'kebabCase' 27 | getDocumentNameCasesRequest = false 28 | getDocumentSelectionRequest = false 29 | [lapce-vue.documentFeatures] 30 | selectionRange = true 31 | foldingRange = true 32 | linkedEditingRange = true 33 | documentSymbol = true 34 | documentColor = true 35 | -------------------------------------------------------------------------------- /src/config.rs: -------------------------------------------------------------------------------- 1 | use lapce_plugin::psp_types::lsp_types::Url; 2 | use serde::{Deserialize, Serialize}; 3 | use serde_json::Value; 4 | 5 | #[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] 6 | #[serde(rename_all = "camelCase")] 7 | struct TypescriptSDK { 8 | tsdk: String, 9 | } 10 | 11 | #[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] 12 | #[serde(rename_all = "camelCase")] 13 | enum ServerMode { 14 | Semantic = 0, 15 | // PartialSemantic = 1, // not support yet 16 | Syntactic = 2, 17 | } 18 | #[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] 19 | #[serde(rename_all = "camelCase")] 20 | enum DiagnosticModel { 21 | None = 0, 22 | Push = 1, 23 | Pull = 2, 24 | } 25 | #[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] 26 | #[serde(rename_all = "camelCase")] 27 | pub struct LanguageServerInitializationOptions { 28 | typescript: TypescriptSDK, 29 | #[serde(skip_serializing_if = "Option::is_none")] 30 | serverMode: Option, 31 | #[serde(skip_serializing_if = "Option::is_none")] 32 | diagnosticModel: Option, 33 | #[serde(skip_serializing_if = "Option::is_none")] 34 | textDocumentSync: Option, 35 | #[serde(skip_serializing_if = "Option::is_none")] 36 | cancellationPipeName: Option, 37 | } 38 | pub fn get_language_server_init_options(root_url: Option) -> Option { 39 | let root_url = root_url.unwrap(); 40 | let tsdk = root_url 41 | .join("node_modules/typescript/lib") 42 | .unwrap() 43 | .to_file_path() 44 | .unwrap() 45 | .to_str() 46 | .unwrap() 47 | .to_string(); 48 | let initialization_options = LanguageServerInitializationOptions { 49 | typescript: TypescriptSDK { tsdk }, 50 | serverMode: None, 51 | diagnosticModel: None, 52 | textDocumentSync: None, 53 | cancellationPipeName: None, 54 | }; 55 | serde_json::to_value(&initialization_options).ok() 56 | } 57 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | pub mod config; 2 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use std::{ 2 | fs::{self, File}, 3 | path::Path, 4 | }; 5 | 6 | use anyhow::Result; 7 | use flate2::read::GzDecoder; 8 | use lapce_plugin::{ 9 | psp_types::{ 10 | lsp_types::{request::Initialize, DocumentFilter, DocumentSelector, InitializeParams, Url}, 11 | Request, 12 | }, 13 | register_plugin, Http, LapcePlugin, PLUGIN_RPC, 14 | }; 15 | use lapce_vue::config::get_language_server_init_options; 16 | use serde::Deserialize; 17 | use serde_json::Value; 18 | use tar_wasi::Archive; 19 | 20 | #[derive(Default)] 21 | struct State {} 22 | 23 | register_plugin!(State); 24 | 25 | fn initialize(params: InitializeParams) -> Result<()> { 26 | let document_selector: DocumentSelector = vec![DocumentFilter { 27 | // lsp language id 28 | language: None, 29 | // glob pattern 30 | pattern: Some(String::from("*.{vue,ts,js,tsx,jsx}")), 31 | // like file: 32 | scheme: None, 33 | }]; 34 | 35 | let server_path = params 36 | .initialization_options 37 | .as_ref() 38 | .and_then(|options| options.get("serverPath")) 39 | .and_then(|server_path| server_path.as_str()) 40 | .and_then(|server_path| { 41 | if !server_path.is_empty() { 42 | Some(server_path) 43 | } else { 44 | None 45 | } 46 | }); 47 | 48 | let language_init_option = get_language_server_init_options(params.root_uri); 49 | 50 | let server_args = vec!["--stdio".to_string()]; 51 | 52 | if let Some(server_path) = server_path { 53 | PLUGIN_RPC.start_lsp( 54 | Url::parse(&format!("urn:{}", server_path))?, 55 | server_args, 56 | document_selector, 57 | language_init_option, 58 | ); 59 | PLUGIN_RPC.stderr("自定义 server_path 启动lapce-vue成功"); 60 | 61 | return Ok(()); 62 | } 63 | 64 | download_volar()?; 65 | 66 | let volt_uri = std::env::var("VOLT_URI")?; 67 | let server_path = Url::parse(&volt_uri) 68 | .unwrap() 69 | .join("vue-language-server") 70 | .unwrap(); 71 | 72 | PLUGIN_RPC.stderr(&format!("server_path:{}", server_path)); 73 | PLUGIN_RPC.start_lsp( 74 | server_path, 75 | server_args.clone(), 76 | document_selector.clone(), 77 | language_init_option, 78 | ); 79 | PLUGIN_RPC.stderr("启动lapce-vue"); 80 | 81 | Ok(()) 82 | } 83 | 84 | impl LapcePlugin for State { 85 | fn handle_request(&mut self, _id: u64, method: String, params: Value) { 86 | #[allow(clippy::single_match)] 87 | match method.as_str() { 88 | Initialize::METHOD => { 89 | let params: InitializeParams = serde_json::from_value(params).unwrap(); 90 | let _ = initialize(params); 91 | } 92 | _ => {} 93 | } 94 | } 95 | } 96 | 97 | #[derive(Deserialize, Debug)] 98 | struct VoltConfig { 99 | version: String, 100 | } 101 | 102 | fn download_volar() -> Result { 103 | let volt_path = Path::new("volt.toml"); 104 | 105 | let volt_str = fs::read_to_string(volt_path)?; 106 | 107 | let volt_toml: VoltConfig = toml::from_str(&volt_str)?; 108 | 109 | let arch = match std::env::var("VOLT_ARCH").as_deref() { 110 | Ok("x86_64") => "x64", 111 | Ok("aarch64") => "arm64", 112 | _ => panic!("unknow arch"), 113 | }; 114 | let os = match std::env::var("VOLT_OS").as_deref() { 115 | Ok("linux") => "linux", 116 | Ok("macos") => "macos", 117 | Ok("windows") => "win", 118 | _ => panic!("unknow os"), 119 | }; 120 | 121 | let lapce_volar_base_name = format!("vue-language-server"); 122 | 123 | let lapce_volar_name = format!("{}-{}-{}", lapce_volar_base_name, os, arch); 124 | let lapce_volar_gz_path_name = format!("{}.tar.gz", &lapce_volar_name.clone()); 125 | let lapce_volar_gz_path = Path::new(&lapce_volar_gz_path_name); 126 | 127 | if !lapce_volar_gz_path.exists() { 128 | let volt_download_url = format!( 129 | "https://github.com/xiaoxin-sky/lapce-vue/releases/download/v{}/{}", 130 | &volt_toml.version, &lapce_volar_gz_path_name, 131 | ); 132 | PLUGIN_RPC.stderr(&format!("下载地址_{}", volt_download_url)); 133 | 134 | let mut resp = Http::get(&volt_download_url)?; 135 | let body = resp.body_read_all()?; 136 | fs::write(&lapce_volar_gz_path, body)?; 137 | } else { 138 | PLUGIN_RPC.stderr("压缩包已存在,跳过下载"); 139 | } 140 | 141 | let tar_gz = File::open(&lapce_volar_gz_path_name); 142 | match tar_gz { 143 | Ok(tar) => { 144 | let tar = GzDecoder::new(tar); 145 | let mut archive = Archive::new(tar); 146 | 147 | let res = archive.unpack("."); 148 | 149 | PLUGIN_RPC.stderr(&format!("{:#?}", res)); 150 | fs::rename(lapce_volar_name, lapce_volar_base_name)?; 151 | } 152 | Err(err) => { 153 | PLUGIN_RPC.stderr(&format!("{}", err)); 154 | } 155 | } 156 | 157 | Ok(true) 158 | } 159 | -------------------------------------------------------------------------------- /volt.toml: -------------------------------------------------------------------------------- 1 | name = "lapce-vue" 2 | version = "0.0.2" 3 | author = "xiaoxin-sky" 4 | display-name = "vue" 5 | description = "vue auto-complete,ts type-check,diagnosis" 6 | wasm = "bin/lapce-vue.rustc.wasm" 7 | icon = "./image/logo.png" 8 | repository = "https://github.com/xiaoxin-sky/lapce-vue" 9 | 10 | [activation] 11 | language = ["vue","javascript","typescript"] 12 | 13 | [config."serverPath"] 14 | default = "" 15 | description = "Path to vue-language-server executable. When empty, it points to the bundled binary." 16 | --------------------------------------------------------------------------------